Первая часть утверждала, что ИИ в FMCG-аналитике — это не что-то одно, и давала лестницу из десяти ступеней, чтобы называть, чем именно вы заняты. Эта часть строит машину.

Машина — это не модель. Это три рабочих процесса, у которых общая таблица фактов и общая очередь, и вся интересная инженерия почти целиком в этой общности.

Гранулярность решает всё

Прежде всех трёх процессов: магазин × SKU × неделя, с продажами, ценой, промо, выкладкой, доступностью, дистрибуцией, регионом, сетью и — где до неё дотянуться — промо конкурентов. Плюс база и разрыв в продажах, определённый относительно неё.

Звучит как водопровод, а это решение с самым большим рычагом во всей программе. Ошибитесь с гранулярностью — и каждая следующая модель будет учиться не тому с безупречной технической корректностью. Считайте на уровне «сеть — месяц», и модель с высокой уверенностью обнаружит, что крупные сети продают больше мелких. Это не находка. Это говорит гранулярность.

База — вторая половина того же решения. Почти каждый вопрос ниже на самом деле вопрос про остаток: факт минус ожидание. А «ожидание» — это модельный выбор, который вы делаете, признаёте вы это или нет. Команды, пропустившие базу, в итоге сравнивают с прошлым годом, молча предполагая, что прошлый год был нормальным.

Процесс первый: поиск проблем

Сверху вниз. Что-то случилось, и вы сужаете.

  1. Наблюдать — отклонение от базы или цели, выявление аномалий → событие
  2. Локализовать — дерево вкладов, топ-сегменты → сконцентрированные срезы
  3. Связать — ключевые влияющие факторы, регрессия, SHAP, проверки со сдвигом → вероятные факторы
  4. Оценить размер — остаток по продажам, недополученные продажи → порядок величины
  5. Рекомендовать по-лёгкому — правила плюс оценка плюс выполнимость → очередь действий
  6. Проверить или эскалировать — холдаут, разность разностей, BSTS, «тестируй и учись» → проверенное действие или причинная оценка

Обратите внимание на форму: пять дешёвых шагов и один дорогой, причём дорогой необязателен и стоит последним. Большинство организаций начинает с шестого шага, на самом крупном вопросе, какой у них есть, и через восемь недель выясняет, что эффект в наблюдательных данных не идентифицируется. Гонять 1–5 по всему, а 6 — по трём самым дорогим решениям в году, гораздо лучшее распределение тех же денег.

Процесс второй: поиск возможностей

Снизу вверх. Ничего не сломано, и вы обходите поле.

  1. Задать вселенную — магазин × SKU, клиент × SKU, сеть × сегмент
  2. Сопоставить — похожие магазины, справедливая доля, присутствие конкурента, лучший внутренний аналог
  3. Найти разрыв — белые пятна, разрыв в ассортименте, разрыв к справедливой доле → кандидаты
  4. Добавить контекст — дистрибуция, доступность, ценовой индекс, конкурент, соответствие покупателю → коды причин
  5. Оценить размер — ожидаемая скорость × разрыв × маржа × выполнимость → потенциал в деньгах
  6. Оценить и поставить в очередь — ценность × уверенность × выполнимость × стратегический приоритет → бэклог

Именно этого процесса в большинстве компаний нет, и именно он больше всего оправдывает автоматизацию. Разбор проблем случается и так: кто-то замечает число и спрашивает. А нереализованную возможность не замечает никто — ровно поэтому искать её должна машина. Отсутствие жалобы не есть свидетельство здоровья.

Шаг сопоставления — то место, где всё получается или не получается. «Похожие магазины» должны означать что-то защитимое: формат, зона охвата, диапазон трафика, сеть. Иначе разрыв к справедливой доле — это просто шум со значком валюты впереди.

Процесс третий: поиск недополученных продаж

Спрос был. Его не обслужили.

  1. Обнаружить проблему с доступностью — флаги доступности или отсутствия на полке, нулевой остаток, потерянная дистрибуция, отсутствие чеков там, где они ожидались
  2. Ожидаемые продажи — базовая скорость, похожие магазины, сезонность → ожидание
  3. Потерянные продажи — ожидание минус факт, с подрезкой крайних значений → оценка недополученного
  4. Связать с коренной причиной — запас, листинг, пополнение, промо, задержка отчётности → код причины
  5. Приоритизировать — потерянные продажи × маржа × чинимость × стратегический вес → очередь действий
  6. Обратная связь — до и после, в идеале против контрольной группы → свидетельство восстановления

Недополученные продажи — это не возвратимые продажи. Это стоит говорить громко и в начале любой презентации, потому что число большое, привлекательное и его начинают воспринимать как обещание. Покупатель мог взять пачку конкурента, мог не взять ничего и не расстроиться, а сезон мог закрыться. Недополученные продажи оценивают размер проблемы. Они не оценивают размер приза, и разрыв между этими двумя — то место, где умирает доверие к аналитике.

Где именно проходит предел BI-инструмента

Изрядная часть описанного выше работает внутри Power BI, и это удивляет обе стороны спора. «Дерево декомпозиции» делает локализацию, «Ключевые факторы влияния» — связывание, «Топ-сегменты» — поиск срезов, «Прогноз» — предсказание, «Аномалии» — диагностическую подсветку, «Что если» — сценарии, правила на DAX — предписание по-лёгкому. Это ступени с первой по седьмую из лестницы первой части, в инструменте, который у бизнеса уже есть.

Тем важнее точно назвать, где это заканчивается.

Ключевые факторы влияния ранжируют факторы, связанные с целевой переменной: логистическая регрессия для категориальной цели, линейная — для числовой. Топ-сегменты — совсем другое, на второй вкладке: они ищут сочетания условий, где цель необычно высока или низка, используя дерево решений FastTree, и это ближайшая по духу к поиску срезов. Непрерывные факторы автоматически режутся не более чем на пять управляемых корзин, а анализ идёт по выборке до 10 000 наблюдений.

Можно ли сравнить продажи и доступность? Да, тремя разными способами, и это три разных вопроса:

  • Связь уровней — анализируем Продажи, объясняем через Доступность, на уровне магазин × SKU × неделя: «высокая доступность обычно соседствует с высокими продажами».
  • Изменение против изменения — заранее считаем РазрывПродаж и РазрывДоступности и анализируем разрывы: «падение продаж совпало с падением доступности».
  • Опережение и запаздывание — у «Ключевых факторов» нет понятия порядка во времени. Вам придётся заранее посчитать Доступность(t−1), Доступность(t−2), скользящие окна. И даже тогда у вас будет предсказательная информация, а не причинность.

Три ловушки, в том порядке, в каком они ловят людей на самом деле:

  • Гранулярность. Не та гранулярность — и модель учит размер сети или структуру продаж, а докладывает это как инсайт.
  • Утечка целевой переменной. Нельзя объяснять продажи показателем, выведенным из этих же продаж. Случается постоянно и незаметно: обычные виновники — метрики покрытия запасом и скорости продаж.
  • Мультиколлинеарность. Флаг промо, глубина скидки, временное снижение цены и выкладка будут делить важность между собой по-разному от запуска к запуску. Соберите их в группы факторов, прежде чем что-либо интерпретировать.

И вопрос, который в итоге задают все: вернут ли разные алгоритмы один и тот же список влияющих факторов? Почти наверняка нет, и это не дефект. Линейные и логистические модели ищут средние условные связи; деревья находят нелинейные пороги; SHAP объясняет одну конкретную предсказательную модель; поиск срезов охотится за необычно плохими подгруппами; дерево декомпозиции прослеживает путь вклада. Честное сравнение — пересечение по Жаккару, ранговая корреляция Спирмена, устойчивость на бутстрэпе, проверка на отложенной выборке — проводится не для того, чтобы короновать победителя. Оно отделяет устойчивые находки от артефактов конкретного метода, а это другой и куда более полезный результат.

Когда причинный дизайн действительно нужен

Назвать факторы недостаточно. Нарисовать граф зависимостей тоже недостаточно, если граф — картинка, а не обязательство. Достаточно становится только тогда, когда существуют одиннадцать вещей:

  1. Воздействие — что именно меняет бизнес?
  2. Исход — что мы измеряем?
  3. Единица — магазин × SKU × неделя, клиент × SKU, регион × неделя
  4. Тайминг — что до, что после
  5. Граф зависимостей — кто на кого влияет
  6. Смешивающие факторы — что влияет и на воздействие, и на исход
  7. Медиаторы — через что проходит эффект
  8. Коллайдеры и утечки — на что нельзя контролировать
  9. Стратегия идентификации — почему это сравнение допустимо
  10. Оценщик — что считает число
  11. Проверка — плацебо, предтренды, чувствительность, холдаут

Хрестоматийный пример из FMCG — доступность, и он поучителен тем, что может занимать три разные позиции на одной и той же схеме. Она может быть причиной (доступность упала → продажи упали). Может быть медиатором (промо → спрос вырос → товар кончился → продажи упали). А может быть артефактом задним числом (продажи выросли → сработало пополнение → запас измерили после того, как продажи случились). Эти три требуют разных контролей и дают разные числа. Ничто в данных не подскажет, в каком из трёх вы находитесь. Подсказывает только бизнес-процесс.

Поэтому «я назову факторы» — сырьё для семинара по графу зависимостей, а не причинный дизайн. И поэтому последний отрезок этой работы нельзя отдать инструменту. ИИ не проверит за вас ваш причинный дизайн. Языковая модель может предложить граф, вытащить пропущенные смешивающие факторы и сгенерировать заготовку на DoWhy или EconML. Она не знает настоящий процесс порождения данных, не может сделать непроверяемое допущение истинным и нарисует неверные стрелки с полной уверенностью.

Что даёт вторая часть

Три рабочих процесса, одна гранулярность и защитимая граница между тем, на что ответит BI-инструмент, и тем, где нужен дизайн. Это год работы для небольшой команды и бо́льшая часть достижимой в этой области ценности.

Третья часть — неудобная: кто всё это делает, во что обходится и почему ответ меньше и дешевле, чем предложение поставщика, лежащее у вас на столе.


← ИИ в FMCG-аналитике, часть первая — рамка · ИИ в FMCG-аналитике, часть третья — способность →