---
name: demand-research
description: "Исследование спроса и семантики: анализ упущенного спроса, сезонный прогноз бюджета, каннибализация ключевых, верификация интента. Используй при запросах 'исследование спроса', 'найти ключевые', 'упущенный спрос', 'каннибализация', 'сезонность', 'минус-слова из запросов'."
---

# Demand Research — Исследование спроса и семантики

Скилл для исследования поискового спроса, анализа семантики и оптимизации ключевых слов в Яндекс Директе. Сочетает MCP-инструменты Wordstat и Яндекс Директа с локальными Python-скриптами для глубокого анализа.

**MCP-сервер:** `yandex-direct` — Wordstat является частью единого MCP-сервера Яндекс Директа.

### Инструменты `wordstat_*`

| Инструмент | Описание |
|---|---|
| `wordstat_top_requests` | Популярные запросы с точной частотностью + ассоциации (до 128 фраз) |
| `wordstat_dynamics` | Динамика (тренд) числа запросов: по дням/неделям/месяцам (с 2018) |
| `wordstat_regions` | Распределение запросов по регионам с индексом интереса |
| `wordstat_regions_tree` | Справочник регионов Wordstat (ID для фильтрации) |
| `wordstat_user_info` | Квота API: лимиты и остаток дневных запросов |

---

## Доступные скрипты

### `scripts/missed_demand.py` — Анализ упущенного спроса

Парсит CSV-экспорт поисковых запросов из Яндекс Директа и категоризирует их.

```bash
# Базовый запуск
python scripts/missed_demand.py search_queries.csv

# С файлом существующих ключевых слов
python scripts/missed_demand.py search_queries.csv --keywords-file keywords.txt

# С настройкой порогов
python scripts/missed_demand.py search_queries.csv --min-cost 200 --min-conversions 2
```

**Категории результатов:**
- **OPPORTUNITIES** — есть конверсии, но запрос не в текущих ключевых → добавить как ключевое
- **WASTE** — значительный расход, но 0 конверсий → кандидат в минус-слова
- **INFORMATIONAL** — информационный интент (что такое, как, отзывы) → вероятный негатив
- **OK** — есть конверсии, уже покрыто → оставить как есть

**Итог:** оценка экономии от негативов и прироста конверсий от новых ключевых.

### `scripts/seasonal_forecast.py` — Сезонный прогноз бюджета

Анализирует 12-месячные данные частотности и выдает рекомендации по бюджету.

```bash
# Из JSON (вывод MCP wordstat_dynamics)
echo '{"data": [...]}' | python scripts/seasonal_forecast.py

# Из CSV
python scripts/seasonal_forecast.py --csv history.csv

# С указанием текущего бюджета для абсолютных рекомендаций
python scripts/seasonal_forecast.py --csv history.csv --budget 50000
```

**Результат:** таблица с сезонными индексами и множителями бюджета по месяцам.

---

## Workflows (выполняются Claude без скриптов)

### 1. Сбор семантики (через MCP)

Полный цикл сбора и группировки ключевых слов.

**Шаги:**

1. **Быстрая проверка частотности** — вызвать MCP `wordstat_top_requests` для списка базовых фраз. Отсечь фразы с нулевой частотностью.

2. **Расширение семантики** — вызвать MCP `wordstat_top_requests` для каждой базовой фразы. Собрать все связанные запросы и ассоциации.

3. **Фильтрация по интенту** — для каждого запроса определить интент по паттернам из `references/intent_patterns.md`:
   - COMMERCIAL → оставить
   - TRANSACTIONAL → оставить
   - INFORMATIONAL → в минус-слова (если не стратегия контент-маркетинга)
   - NAVIGATIONAL → исключить (чужие бренды в минус)

4. **Группировка по смыслу** — объединить запросы в группы по тематике. Каждая группа = одна группа объявлений. Принцип: 1 группа = 1 посадочная страница = 1 набор объявлений.

**Операторы Wordstat:** см. `references/operators.md` для правильного использования операторов при проверке частотности.

### 2. Анализ упущенного спроса

Поиск ключевых слов, которые приносят конверсии, но не добавлены как ключевые, и запросов, которые тратят бюджет впустую.

**Шаги:**

1. **Получить данные** — вызвать MCP `get_search_queries` за последние 30 дней:
   ```
   get_search_queries(
     campaign_ids: [...],
     date_from: "YYYY-MM-DD",
     date_to: "YYYY-MM-DD",
     field_names: ["Query", "Impressions", "Clicks", "Cost", "Conversions"],
     attribution: "LYDC"
   )
   ```

2. **Сохранить как CSV** — сохранить результат в файл (например, `search_queries_export.csv`).

3. **Запустить анализ:**
   ```bash
   python scripts/missed_demand.py search_queries_export.csv --keywords-file current_keywords.txt
   ```

4. **Действия по результатам:**
   - **OPPORTUNITIES** → добавить как ключевые слова в соответствующие группы через MCP
   - **WASTE** → добавить в минус-слова на уровне кампании или группы через MCP
   - **INFORMATIONAL** → добавить в минус-слова на уровне кампании

5. **Обновить файл кампании** — записать результаты в `campaigns/<utm>.md`.

### 3. Каннибализация ключевых

Поиск пересечений ключевых слов между кампаниями — когда одна и та же фраза есть в нескольких кампаниях и они конкурируют друг с другом.

**Шаги:**

1. **Получить список кампаний:**
   ```
   get_campaigns(states: ["ON"], field_names: ["Id", "Name"])
   ```

2. **Для каждой кампании получить ключевые слова:**
   ```
   get_keywords(campaign_id: <id>)
   ```

3. **Сравнить ключевые между кампаниями.** Для каждой фразы (нормализованной: нижний регистр, без операторов) проверить, есть ли она в нескольких кампаниях.

4. **Сформировать отчёт:**

   | Фраза | Кампании | Рекомендация |
   |-------|----------|-------------|
   | купить X | Кампания А, Кампания Б | Оставить в Кампании А (больше конверсий), удалить из Кампании Б |

5. **Критерии решения:**
   - Оставить фразу в кампании с лучшей конверсией
   - Если конверсий нет — оставить в кампании с лучшим CTR
   - Если данных нет — оставить в кампании, чей лендинг релевантнее

6. **Действия:** удалить дубли из проигравших кампаний, при необходимости добавить минус-слова для разграничения.

### 4. Верификация интента

Проверка, соответствует ли поисковый запрос коммерческому интенту, через анализ реальной выдачи.

**Шаги:**

1. **Первичная классификация** — проверить запрос по паттернам из `references/intent_patterns.md`. Это даст предварительный вердикт.

2. **Проверка через выдачу** — вызвать WebSearch с запросом в Яндексе.

3. **Анализ ТОП-10 результатов.** Для каждого результата определить тип страницы:
   - Лендинг, интернет-магазин, карточка товара → COMMERCIAL
   - Статья, Википедия, форум, блог → INFORMATIONAL
   - Сайт бренда, личный кабинет → NAVIGATIONAL
   - Калькулятор, сервис, форма заявки → TRANSACTIONAL

4. **Вердикт:**
   - 7+ из 10 коммерческих → **COMMERCIAL** — подходит для рекламы
   - 7+ из 10 информационных → **INFORMATIONAL** — в минус-слова
   - Иначе → **MIXED** — использовать с осторожностью, следить за CTR

5. **Записать результат** — сохранить вердикт для использования при фильтрации семантики.

### 5. Сезонный прогноз бюджета

Анализ сезонности спроса и рекомендации по распределению бюджета.

**Шаги:**

1. **Получить исторические данные** — вызвать MCP `wordstat_dynamics` для основных ключевых слов кампании. Для гео-анализа использовать `wordstat_regions`.

2. **Запустить прогноз:**
   ```bash
   echo '<json_output>' | python scripts/seasonal_forecast.py --budget 50000
   ```

3. **Интерпретация результатов:**
   - Месяцы с индексом > 1.2 → повысить бюджет (максимальный охват в пик спроса)
   - Месяцы с индексом 0.8–1.2 → стандартный бюджет
   - Месяцы с индексом < 0.8 → снизить бюджет (перенести на пиковые месяцы)

4. **Обновить кампанию** — скорректировать недельный бюджет через MCP в соответствии с прогнозом.

---

## Cross-references

- **Высокий CPA** (из аналитики Метрики) → запустить анализ упущенного спроса (workflow 2). Часто причина — нерелевантные запросы, тратящие бюджет.
- **После добавления ключевых** → создать/обновить кампанию через MCP Яндекс Директ. Следовать правилам из `METRIKA-ADS-RULES.md`.
- **Результаты всех исследований** → сохранять в `campaigns/<utm>.md` с датой и выводами.
- **Юридическая проверка** → при формировании текстов объявлений для новых ключевых сверяться с `LEGAL.md`.

---

## Справочные материалы

- `references/operators.md` — операторы Wordstat для точной проверки частотности
- `references/intent_patterns.md` — паттерны определения интента поисковых запросов
- `config/README.md` — информация о настройке и зависимостях
