Условие
Утром CFO пишет: «Вчера выручка упала на 20% относительно среднего за прошлую неделю». Опишите план расследования. Какие гипотезы рассмотрите в первую очередь? Как декомпозируете метрику?
Решение
Подход: «MECE-декомпозиция»
Выручка = ∑(транзакций × средний чек). Раскладываем:
Revenue = Users × Conversion × AOV
= Users × Sessions/User × CR_session × AOV
И смотрим, какой компонент просел.
План
Шаг 1. Данные ли?
- ETL-падение, дубли, потерянные события — проверить freshness и row counts по источникам.
- Сравнить вчерашнюю партицию с предыдущими по объёму строк.
- Тест: данные обновились = реально ли вчера было меньше заказов.
Если ETL-проблема — фикс и эта задача всё.
Шаг 2. Кто просел? Декомпозиция по сегментам — найти, где «дырка»:
| Срез | Сравнение | Что искать |
|---|---|---|
| Платформа (iOS/Android/Web) | вчера vs avg-7d | падение в одной платформе → багов в релизе |
| Город / гео | то же | проблемы с конкретной площадкой / регионом |
| Канал привлечения | то же | блокировка рекламной кампании |
| Новые vs returning | то же | падение в new → проблема onboarding |
| Cohort by signup_week | то же | старая cohort выгорела |
| Категория товара | то же | проблемы с одной категорией / поставщиком |
| Час дня | hour-of-day pattern | проблема в peak hours (часто = инфра) |
Шаг 3. Что сломалось?
- Релиз? Проверить deploy-таймлайн —
incident timeline overlay. - Платёжный шлюз —
payment_statusраспределение, доля fail. - Сеть / CDN — Sentry alerts, доля
network_errorсобытий. - Внешние факторы: праздники, погода, конкуренты (демпинг), новости.
- Маркетинг: остановили платный канал?
Шаг 4. Конверсия или объём?
- Если трафик упал, CR ок — маркетинг / внешние факторы.
- Если трафик ок, CR упал — продуктовая проблема (баг, UX).
- Если CR ок, AOV упал — скидки/промокоды / cross-sell сломан.
Шаг 5. Подтверждение root cause
- Воспроизвести проблему на staging / в логах.
- Smoke-тест: восстановили ли метрику после fix?
- A/B-сравнение с group, где фикс уже выкачан (если возможно).
SQL для быстрой декомпозиции
WITH yesterday AS (
SELECT segment, COUNT(*) AS sessions, SUM(amount) AS revenue,
SUM(amount) / NULLIF(COUNT(DISTINCT user_id), 0) AS arpu
FROM events e
WHERE dt = CURRENT_DATE - 1
GROUP BY 1
),
baseline AS (
SELECT segment, AVG(revenue) AS avg_rev, STDDEV(revenue) AS sd_rev
FROM (
SELECT dt, segment, SUM(amount) AS revenue
FROM events
WHERE dt BETWEEN CURRENT_DATE - 8 AND CURRENT_DATE - 2
GROUP BY 1, 2
) t
GROUP BY 1
)
SELECT y.segment, y.revenue, b.avg_rev,
(y.revenue - b.avg_rev) / NULLIF(b.avg_rev, 0) * 100 AS pct_change,
(y.revenue - b.avg_rev) / NULLIF(b.sd_rev, 0) AS z_score
FROM yesterday y JOIN baseline b USING (segment)
ORDER BY pct_change;Коммуникация с CFO
«Расследуем. Через 30 мин дам первое чтение: данные ли, какой сегмент просел, версия первой гипотезы. Готовый разбор — к концу дня».
Никогда не отвечать «не знаю, давайте смотреть час». Дать ETA.
Подводные камни
- «Просто посмотреть avg-7d»: если за неделю был спецаль или выходной — baseline смещён. Лучше WoW (тот же день прошлой недели).
- Сезонность (день недели, праздники, погода) — не аномалия, а норма. Проверить календарный эффект.
stddev > 50% от meanделает z-score бесполезным — нужна логнормализация или robust метрики (median + MAD).- Простой
totalбез сегментов скрывает причину: всё в порядке кроме одного канала. Декомпозируйте сразу. - «Виноват релиз» — частое предположение. Проверьте deploy-таймлайн и сравните с минутной разрезкой выручки.
- «Фикс работает» != «инцидент закрыт». Должен быть post-mortem и улучшение мониторинга.
- Не путать correlation с causation: маркетинг отключил кампанию и была погода — что именно сработало?
Эталонный ответ
План: (1) проверить целостность данных (ETL/freshness/row count); (2) декомпозировать по сегментам — платформа, гео, канал, new/return, час дня; (3) проверить релизы, платёжный шлюз, внешние факторы; (4) определить — упал трафик, конверсия или AOV; (5) подтвердить root cause и зафиксировать восстановление.
Коммуникация: дать CFO ETA первого результата (30 мин), потом расширенный разбор (конец дня). Избегать avg-7d с спецалями — использовать WoW сравнения с тем же днём.