Четыре цикла, которые действуют одновременно

Сезонность — не только «летом покупают вентиляторы». В e-commerce на любой ряд данных накладываются минимум четыре независимых цикла, и путать их между собой — источник большинства неверных выводов.

Цикл Период Проявление Что искажает
Годовой 12 месяцев Категорийные сезоны: шины, кондиционеры, школьные товары, подарки Планы продаж, сравнение кварталов, оценку долгих экспериментов
Недельный 7 дней Будни против выходных, разная структура спроса и среднего чека Тесты длительностью не кратной неделе, недельные отчёты со сдвигом
Суточный 24 часа Утренний и вечерний пики трафика, ночной провал Тесты, запущенные на несколько часов; выводы по частичному дню
Событийный Календарные даты Распродажи, праздники, дни выплат, начало учебного года Сравнение соседних недель, экстраполяцию результатов промо на обычные периоды

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

Как отделять сезонность от эффекта изменений

Базовая ошибка — сравнение «до и после»: измерили две недели до релиза, две недели после, разницу записали в эффект. В этой разнице сидит всё сразу: изменение, сезон, реклама, изменения ассортимента и погода.

Приёмы по возрастанию надёжности:

  1. Сравнение год к году. Тот же календарный период прошлого года как база. Работает для планирования, но не для оценки изменений: между годами меняется всё остальное.
  2. Скользящее среднее по 7 дней. Сглаживает недельный цикл и делает тренд видимым. Не устраняет годовой и событийный циклы.
  3. Декомпозиция ряда на тренд, сезонную компоненту и остаток. Полезна для прогноза спроса и закупок, но остаток всё равно содержит все внешние факторы, кроме изучаемого.
  4. Контрольная группа. Обе группы живут в одном и том же сезоне, в одни и те же дни, с одной и той же рекламой. Разница между ними очищена от сезона по построению — не приблизительно, а точно.

Сравнение «до и после» не спасает никакая математика. Если изменение выкатывалось на всех сразу, отделить его эффект от сезонного и рекламного фона нельзя — можно только оценить порядок величины. Единственное надёжное решение принимается заранее: выкатывать через A/B-тест или оставлять holdout-группу.

Влияние на A/B-тесты

Сезонность ломает эксперименты тремя способами, и все три обходятся дисциплиной планирования.

Неполные недельные циклы. Тест на 3, 5 или 10 дней даёт разное число будних и выходных дней в разных участках, а поведение в эти дни различается — от структуры трафика до среднего чека. Правило: длительность теста — целое число полных недель, старт и финиш в один и тот же день недели.

Тест внутри аномального периода. Результат, полученный в чёрную пятницу, описывает поведение аудитории чёрной пятницы. Там другой состав трафика (больше охотников за скидками), другая мотивация и другая чувствительность к срочности. Переносить такой вывод на обычный вторник нельзя.

Правило переноса выводов:
  тест в промо-период      → вывод применим к промо-периодам
  тест в обычный период    → вывод применим к обычным периодам
  тест на границе периодов → вывод не применим никуда,
                             результат смешан

Досрочная остановка на сезонном пике. Соблазн остановить тест, когда вариант «уверенно выигрывает», особенно велик в дни высокого трафика — значимость набирается быстро. Но всплеск, совпавший с промо, легко даёт ложноположительный результат. Здесь работают те же правила, что и против подглядывания: заранее зафиксированная длительность и размер выборки.

Отдельно: если тест обязан идти через границу сезона (например, захватывает начало распродажи), результат стоит разложить по периодам и посмотреть, сохраняется ли направление эффекта в каждом. Разное направление — сигнал, что эффект зависит от контекста и единого вывода нет.

Влияние на рекомендации

Рекомендательные алгоритмы учатся на истории, а история по определению относится к прошлому сезону. Без ограничений это приводит к предсказуемым артефактам:

  • в мае в топе рекомендаций держатся новогодние подарочные наборы, потому что зимой у них были рекордные показатели;
  • в разгар сезона алгоритм медленно поднимает новые товары, у которых ещё нет накопленной статистики — классический холодный старт на сезонном ассортименте;
  • после окончания сезона рекомендации ещё несколько недель тянут уходящую категорию.

Что с этим делают:

Приём Что даёт
Ограничение окна обучения Модель не видит прошлогодний сезон как актуальный сигнал
Повышенный вес свежих взаимодействий Быстрая реакция на смену спроса внутри недели
Ротация стратегий по расписанию Разные стратегии под сезонный, промо- и обычный период
Фильтрация по наличию и сезонной категории Из выдачи уходят товары, которых нет или которые не ко времени
Мерчандайзинговые правила поверх алгоритма Ручная фиксация сезонного топа без перестройки модели

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

Чек-лист

  • Для каждой ключевой категории известен её годовой профиль спроса, а не только общий по магазину.
  • Недельный и суточный профили посчитаны отдельно — по трафику, конверсии и среднему чеку.
  • Календарь событийных пиков (распродажи, праздники, дни выплат) зафиксирован и учитывается при планировании релизов и тестов.
  • Ни одно решение об эффекте изменения не принимается по сравнению «до и после».
  • Длительность экспериментов — целое число недель, старт и финиш в один день недели.
  • Тесты не стартуют за несколько дней до крупной распродажи и не заканчиваются внутри неё.
  • Для долгосрочных инструментов оставлена holdout-группа, живущая через несколько сезонов.
  • В рекомендациях ограничена глубина истории, настроена ротация стратегий и фильтр по наличию.
  • Отчёты по эффекту инструментов сопровождаются указанием периода и его характера (обычный / промо).