Четыре цикла, которые действуют одновременно
Сезонность — не только «летом покупают вентиляторы». В e-commerce на любой ряд данных накладываются минимум четыре независимых цикла, и путать их между собой — источник большинства неверных выводов.
| Цикл | Период | Проявление | Что искажает |
|---|---|---|---|
| Годовой | 12 месяцев | Категорийные сезоны: шины, кондиционеры, школьные товары, подарки | Планы продаж, сравнение кварталов, оценку долгих экспериментов |
| Недельный | 7 дней | Будни против выходных, разная структура спроса и среднего чека | Тесты длительностью не кратной неделе, недельные отчёты со сдвигом |
| Суточный | 24 часа | Утренний и вечерний пики трафика, ночной провал | Тесты, запущенные на несколько часов; выводы по частичному дню |
| Событийный | Календарные даты | Распродажи, праздники, дни выплат, начало учебного года | Сравнение соседних недель, экстраполяцию результатов промо на обычные периоды |
Событийный цикл наименее очевиден и при этом самый агрессивный. Дни выплат зарплат создают устойчивую двухпиковую структуру месяца, а недельная распродажа способна дать амплитуду больше, чем весь годовой сезон категории.
Как отделять сезонность от эффекта изменений
Базовая ошибка — сравнение «до и после»: измерили две недели до релиза, две недели после, разницу записали в эффект. В этой разнице сидит всё сразу: изменение, сезон, реклама, изменения ассортимента и погода.
Приёмы по возрастанию надёжности:
- Сравнение год к году. Тот же календарный период прошлого года как база. Работает для планирования, но не для оценки изменений: между годами меняется всё остальное.
- Скользящее среднее по 7 дней. Сглаживает недельный цикл и делает тренд видимым. Не устраняет годовой и событийный циклы.
- Декомпозиция ряда на тренд, сезонную компоненту и остаток. Полезна для прогноза спроса и закупок, но остаток всё равно содержит все внешние факторы, кроме изучаемого.
- Контрольная группа. Обе группы живут в одном и том же сезоне, в одни и те же дни, с одной и той же рекламой. Разница между ними очищена от сезона по построению — не приблизительно, а точно.
Сравнение «до и после» не спасает никакая математика. Если изменение выкатывалось на всех сразу, отделить его эффект от сезонного и рекламного фона нельзя — можно только оценить порядок величины. Единственное надёжное решение принимается заранее: выкатывать через A/B-тест или оставлять holdout-группу.
Влияние на A/B-тесты
Сезонность ломает эксперименты тремя способами, и все три обходятся дисциплиной планирования.
Неполные недельные циклы. Тест на 3, 5 или 10 дней даёт разное число будних и выходных дней в разных участках, а поведение в эти дни различается — от структуры трафика до среднего чека. Правило: длительность теста — целое число полных недель, старт и финиш в один и тот же день недели.
Тест внутри аномального периода. Результат, полученный в чёрную пятницу, описывает поведение аудитории чёрной пятницы. Там другой состав трафика (больше охотников за скидками), другая мотивация и другая чувствительность к срочности. Переносить такой вывод на обычный вторник нельзя.
Правило переноса выводов:
тест в промо-период → вывод применим к промо-периодам
тест в обычный период → вывод применим к обычным периодам
тест на границе периодов → вывод не применим никуда,
результат смешан
Досрочная остановка на сезонном пике. Соблазн остановить тест, когда вариант «уверенно выигрывает», особенно велик в дни высокого трафика — значимость набирается быстро. Но всплеск, совпавший с промо, легко даёт ложноположительный результат. Здесь работают те же правила, что и против подглядывания: заранее зафиксированная длительность и размер выборки.
Отдельно: если тест обязан идти через границу сезона (например, захватывает начало распродажи), результат стоит разложить по периодам и посмотреть, сохраняется ли направление эффекта в каждом. Разное направление — сигнал, что эффект зависит от контекста и единого вывода нет.
Влияние на рекомендации
Рекомендательные алгоритмы учатся на истории, а история по определению относится к прошлому сезону. Без ограничений это приводит к предсказуемым артефактам:
- в мае в топе рекомендаций держатся новогодние подарочные наборы, потому что зимой у них были рекордные показатели;
- в разгар сезона алгоритм медленно поднимает новые товары, у которых ещё нет накопленной статистики — классический холодный старт на сезонном ассортименте;
- после окончания сезона рекомендации ещё несколько недель тянут уходящую категорию.
Что с этим делают:
| Приём | Что даёт |
|---|---|
| Ограничение окна обучения | Модель не видит прошлогодний сезон как актуальный сигнал |
| Повышенный вес свежих взаимодействий | Быстрая реакция на смену спроса внутри недели |
| Ротация стратегий по расписанию | Разные стратегии под сезонный, промо- и обычный период |
| Фильтрация по наличию и сезонной категории | Из выдачи уходят товары, которых нет или которые не ко времени |
| Мерчандайзинговые правила поверх алгоритма | Ручная фиксация сезонного топа без перестройки модели |
Проверять эти настройки нужно так же, как любые другие: сезонная конфигурация против базовой в один и тот же период, на одной и той же аудитории. Иначе «сезонная стратегия сработала» будет означать всего лишь «начался сезон».
Чек-лист
- Для каждой ключевой категории известен её годовой профиль спроса, а не только общий по магазину.
- Недельный и суточный профили посчитаны отдельно — по трафику, конверсии и среднему чеку.
- Календарь событийных пиков (распродажи, праздники, дни выплат) зафиксирован и учитывается при планировании релизов и тестов.
- Ни одно решение об эффекте изменения не принимается по сравнению «до и после».
- Длительность экспериментов — целое число недель, старт и финиш в один день недели.
- Тесты не стартуют за несколько дней до крупной распродажи и не заканчиваются внутри неё.
- Для долгосрочных инструментов оставлена holdout-группа, живущая через несколько сезонов.
- В рекомендациях ограничена глубина истории, настроена ротация стратегий и фильтр по наличию.
- Отчёты по эффекту инструментов сопровождаются указанием периода и его характера (обычный / промо).