← Назад к вопросам

Какие знаешь сезонности?

1.3 Junior🔥 121 комментариев
#Метрики продукта#Статистика и математика

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сезонности: типы, анализ и применение

Определение

Сезонность — это регулярные, предсказуемые колебания метрик в зависимости от времени. Это может быть день недели, время года, праздники или даже часы дня. Для Product Analyst понимание сезонностей критично для:

  • Прогнозирования на будущее
  • Планирования инфраструктуры
  • Выявления настоящих тредов vs. шума
  • Справедливого сравнения периодов

Типы сезонностей

1. Дневная сезонность (Intraday Seasonality)

Определение: Колебания метрик в течение дня.

Примеры:

  • Telegram: Пик активности 19:00-22:00 (после работы), спад 2:00-6:00 (ночь)
  • LinkedIn: Пик 9:00-11:00 (утро в офисе), пик 18:00-20:00 (конец рабочего дня)
  • Instagram: Пик 12:00-13:00 (обед), пик 20:00-23:00 (вечер дома)

Паттерн:

АКТИВНОСТЬ
    |
    |      ╱╲        ╱╲
    |     ╱  ╲      ╱  ╲
    |    ╱    ╲    ╱    ╲
    |___╱      ╲__╱      ╲___
    0:00  12:00  18:00  24:00
    
    Минимум: 2:00-6:00
    Максимум: 19:00-22:00

Как использовал: При планировании maintenance. Никогда не проводим деплойменты в 19:00-22:00 — будет лагать для большинства пользователей.

2. Еженедельная сезонность (Weekly Seasonality)

Определение: Различия в активности по дням недели.

Типичный паттерн для мессенджеров:

АКТИВНОСТЬ
Пт  ████████████  (максимум — выходные начинаются)
Сб  ███████████   (высокая)
Вс  ███████████   (высокая, но немного ниже Сб)
Пн  ██████████    (средняя — начало рабочей недели)
Вт  ██████████    (средняя)
Ср  ██████████    (средняя)
Чт  ██████████    (средняя, немного выше)

Почему так:

  • Выходные: люди дома, больше времени на соцсети
  • Будни: люди на работе, общение через мессенджер, но меньше открывают приложение (пишут коллегам)

Аномалия — праздники:

Пт (в день Рождества)  █████░░░░░░░░
                        (СПАД, все пьют)

Пн (День независимости)  █████░░░░░░░░
                         (СПАД, выходной)

Как использовал: При анализе A/B теста заметил, что воскресенье имеет на 10% выше конверсию. Сначала подумал, это баг. Потом понял — это паттерн. Разделил тест на выходные и будни, чтобы результаты были чистыми.

3. Месячная сезонность (Monthly Seasonality)

Определение: Колебания в зависимости от дня месяца.

Паттерны:

Начало месяца (1-7 дни):

  • Зарплата → люди имеют деньги → выше конверсия Premium
  • DAU обычно на пике

Середина месяца (8-21 дни):

  • Нормальная активность
  • Деньги с зарплаты тратятся

Конец месяца (22-30 дни):

  • Спад активности (заканчиваются деньги)
  • Меньше покупок
  • Но может быть пик за день-два до конца месяца (последний шанс потратить)
КОНВЕРСИЯ PREMIUM
   |
3% |  ╱╲           ╱╲
   | ╱  ╲_        ╱  ╲
2% |╱     ╲╲     ╱    ╲_
   |       ╲╲___╱      ╲╲
1% |               ╱╱╲ ╲╲
   |_____|___|____|____|__| (месяц)
      1    10   20   30
      начало      конец

Как использовал: Планировал запуск Premium фичи на начало месяца (5-7 число), когда у людей есть деньги.

4. Квартальная и годовая сезонность (Seasonal Patterns)

Определение: Большие сдвиги в течение года.

Примеры:

Q1 (Январь-Март):

  • New Year's Resolution — люди начинают использовать приложения для саморазвития
  • Back-to-school (в конце февраля/марте в разных странах)
  • Зима в северном полушарии → больше времени дома

Q2 (Апрель-Июнь):

  • Весна → люди выходят на улицу → меньше активности в приложении
  • Летние каникулы начинаются → туризм

Q3 (Июль-Сентябрь):

  • Лето → отпуска, путешествия → спад
  • Back-to-school (август/сентябрь) → пик для образовательных приложений

Q4 (Октябрь-Декабрь):

  • Чёрная пятница (ноябрь) → всплеск
  • Рождество (декабрь) → люди покупают подарки → online активность
  • Новый год → пиковая активность (Декабрь 28-31)
DAU ПО КВАРТАЛАМ
   |
   | ╱╲     ╱╲        ╱╲
   |╱  ╲   ╱  ╲      ╱  ╲     ╱╲
   |    ╲_╱    ╲____╱    ╲___╱  ╲___
   |────────────────────────────────────
   Q1   Q2     Q3      Q4

Боль моего опыта: Запустили большую фичу в августе. DAU упал на 15% в сентябре. Сначала думал, это баг. Потом понял — это сезонность back-to-school. Все в школе, нет времени. Правильнее было бы запустить в январе.

5. Событийная сезонность (Event-based Seasonality)

Определение: Скачки активности в связи с конкретными событиями.

Примеры:

Глобальные события:

  • Чёрная пятница → +300% трафика, +200% конверсии
  • Киберпонедельник → +250% трафика
  • Рождество → +180% трафика (декабрь 20-26)
  • Новый год → +150% трафика (декабрь 28 - январь 3)

Локальные праздники:

  • День независимости США (4 июля) → спад (выходной, люди на природе)
  • День благодарения (Thanksgiving) → спад
  • Пасха → спад в христианских странах
  • Рамадан → спад (в мусульманских странах, люди постятся, меньше активности)

Региональные спорт события:

  • Чемпионат мира по футболу (июнь-июль) → спад активности, люди смотрят матчи
  • Олимпиада → спад
  • Суперкубок (февраль) → спад в США

Технологические события:

  • Apple WWDC (июнь) → всплеск интереса к iOS
  • Google I/O (май) → всплеск интереса к Android
  • Release день нового iOS/Android → спад (люди обновляют, приложение может сломаться)

Как использовал: Перед Black Friday подготовил инфраструктуру на 3х обычную нагрузку. В день события всё работало smoothly, конкуренты упали. Результат: +50% нового трафика.

6. Корпоративные события

Определение: События внутри компании, которые влияют на метрики.

Примеры:

  • Деплойменты новой фичи → может быть скачок или спад DAU
  • Ценовые изменения → сразу видна реакция (конверсия вверх/вниз)
  • Реклама и маркетинг → всплеск новых пользователей
  • Bug fixes → улучшение метрик (retention, DAU)
  • Breaking changes → спад (пользователи уходят из-за баги)

Как использовал: После деплоя новой версии DAU упал на 8%. Это не сезонность, это баг. Откатили версию, DAU вернулись в норму. Вывод: всегда смотрю timeline деплойментов при анализе аномалий.

Как анализировать сезонности

Метод 1: Visual Inspection (глазом)

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('daily_metrics.csv', parse_dates=['date'])

plt.figure(figsize=(15, 4))
plt.plot(df['date'], df['dau'], linewidth=2)
plt.title('DAU Trend')
plt.xlabel('Date')
plt.ylabel('Daily Active Users')
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Преимущество: Быстро видишь паттерны.

Метод 2: Seasonal Decomposition

from statsmodels.tsa.seasonal import seasonal_decompose

df.set_index('date', inplace=True)

# Разложить на компоненты: Trend + Seasonality + Residuals
decomposition = seasonal_decompose(df['dau'], model='additive', period=7)  # 7 дней

fig, axes = plt.subplots(4, 1, figsize=(15, 8))

df['dau'].plot(ax=axes[0], title='Original')
decomposition.trend.plot(ax=axes[1], title='Trend')
decomposition.seasonal.plot(ax=axes[2], title='Seasonal (7-day)')
decomposition.resid.plot(ax=axes[3], title='Residual (noise)')

plt.tight_layout()
plt.show()

Результат:

Original:   ╱╲╱╲╱╲╱╲ (волны)
Trend:      ╱╱╱╱╱╱╱╱ (долгосрочный тренд)
Seasonal:   ╱╲╱╲╱╲╱╲ (еженедельная волна)
Residual:   ╱ ╲ ╱ ╲ ╱ (шум)

Метод 3: Year-over-Year (YoY) Comparison

# Сравнить неделю 1 этого года с неделей 1 прошлого года
this_year = df[df['date'].dt.year == 2024]
last_year = df[df['date'].dt.year == 2023]

# Выровнять по дню недели
this_year['day_of_week'] = this_year['date'].dt.dayofweek
last_year['day_of_week'] = last_year['date'].dt.dayofweek

comparison = this_year.merge(
    last_year[['day_of_week', 'dau']],
    on='day_of_week',
    suffixes=('_2024', '_2023')
)

comparison['yoy_growth'] = (comparison['dau_2024'] - comparison['dau_2023']) / comparison['dau_2023'] * 100

print("YoY comparison by day of week:")
print(comparison[['day_of_week', 'dau_2023', 'dau_2024', 'yoy_growth']])

Преимущество: Видишь истинный рост, убрав шум сезонности.

Метод 4: Индексация (Indexing)

# Нормализовать все значения к базовому периоду (среднее)
baseline = df['dau'].mean()
df['dau_index'] = df['dau'] / baseline * 100

# Теперь видишь "+10%" или "-5%" вместо абсолютных чисел

Как использовать сезонности в работе

Прогнозирование

# ARIMA с сезонностью
from statsmodels.tsa.arima.model import ARIMA

model = ARIMA(df['dau'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 7))
fitted = model.fit()
forecast = fitted.get_forecast(steps=14)  # На 2 недели

print("Прогноз DAU на следующие 14 дней:")
print(forecast.predicted_mean.round(0))

Справедливое сравнение

# Не сравнивай среду в неделю 1 с вторником в неделю 2!
# Вместо этого:

week1_wednesday = df[(df['date'] > '2024-04-01') & (df['date'] < '2024-04-08') & (df['date'].dt.day_name() == 'Wednesday')]['dau'].mean()
week2_wednesday = df[(df['date'] > '2024-04-08') & (df['date'] < '2024-04-15') & (df['date'].dt.day_name() == 'Wednesday')]['dau'].mean()

print(f"Сравнение сред: {week2_wednesday / week1_wednesday - 1:.1%} рост")

Планирование

# Когда запускать новую фичу?

# ✓ Запуск в начало месяца (люди имеют деньги) + в будни (дневная активность выше)
# ✗ Не запускать в август (спад), Рождество (шум), при Рамадане в мусульманских странах

# Когда проводить maintenance?
# ✓ 3:00-5:00 утра (минимум активности) + вторник (меньше всего трафика среди будней)

Сезонности в разных индустриях

ИндустрияГлавная сезонностьПикСпад
E-commerceКвартальная + событияBlack Friday, РождествоАвгуст, Май
МессенджерыЕженедельная + дневнаяВечер, выходныеНочь, будни
ОбразованиеКвартальнаяАвгуст-сентябрь (back-to-school)Июль (каникулы)
ФинансыЕжемесячнаяНачало месяца (зарплата)Конец месяца
Видео-сервисыЕженедельнаяВечер, выходные, зимаДень, лето
ФитнесКвартальнаяЯнварь (New Year)Август (отпуска)

Итоговый чеклист

Когда вижу изменение в метриках:

  • Проверить дневную сезонность (какое время дня?)
  • Проверить еженедельную сезонность (какой день недели?)
  • Проверить месячную сезонность (день месяца?)
  • Проверить квартальную/годовую (какой месяц/квартал?)
  • Есть ли глобальные события? (праздники, события)
  • Есть ли корпоративные события? (деплойменты, маркетинг)
  • Это сезонность или тренд?
  • Сравнить YoY для чистого результата

Главное: Не путай сезонность с багом. Всегда проверяй исторические данные перед паникой!

Какие знаешь сезонности? | PrepBro