📈 Скользящее среднее (Moving Average): как увидеть реальный тренд сквозь шум данных
Представьте ситуацию: вы строите бизнесу график дневной выручки, а там — настоящая «кардиограмма». В выходные пик, в понедельник провал, в праздник аномальный выброс. Смотришь на эти качели и не понимаешь: мы глобально растем или летим в пропасть?
Данные часто содержат «шум». Чтобы увидеть реальный тренд, используется Скользящее среднее (Moving Average). Если коротко: мы берем каждую дату и считаем среднее значение не только за этот день, но и за N предыдущих. График выравнивается, и скрытое становится явным.
Разберем на практике: 👨💻
Допустим, нам нужно сгладить дневную выручку (revenue) за 7 дней. В SQL это элегантно решается через оконные функции:
SELECT
dt,
revenue,
AVG(revenue) OVER (
ORDER BY dt
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) as ma_7d
FROM daily_revenue;
Здесь магия кроется в ROWS BETWEEN 6 PRECEDING AND CURRENT ROW. Мы буквально говорим базе: «для каждой даты возьми текущую строку и 6 строк до неё, а потом усредни».
🛑 Главная ловушка — проблема «Холодного старта»:
Частый вопрос на собесах:
«А что будет с первой строкой в таблице? У неё же нет истории за 6 дней!»
SQL не упадет с ошибкой. Для 1-го дня он посчитает среднее только по 1 дню. Для 2-го — по 2-м. Окно будет постепенно «накапливаться», пока не достигнет 7 дней.
Как с этим жить: Если вам нужна идеальная математическая точность для аналитики, первые дни периода (пока окно не наполнилось) на итоговом графике просто отрезают, чтобы они не искажали картину.
🟢 Как выбрать правильный интервал (окно):
Выбор зависит от того, какие циклы есть в вашем бизнесе:
1️⃣ 7 дней (МА-7) — Золотой стандарт для ритейла и e-commerce. Такое окно захватывает ровно одни выходные и пять будней. Недельная сезонность полностью исчезает с графика.
2️⃣ 28-30 дней — Отлично показывает глобальный тренд месяца. Помогает сгладить эффект от разовых промо-акций или зарплатных дней у клиентов.
3️⃣ 3 дня — Используют для метрик, где критически важно быстро заметить падение (например, конверсия в оплату после релиза новой фичи), но нужно сгладить совсем уж случайные колебания.
Итог: 🤩
🍸 Сохраняйте пост, чтобы информация была всегда под рукой.
❓ А вы использовали скользящее среднее в своих задачах? Какие интервалы обычно берете? Пишите в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
🚬 Готовлю вас к собесам и пишу резюме здесь: mentor.dima-sqlit.ru