Что такое Difference in differences?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Difference-in-Differences (DiD): полное объяснение
Difference-in-Differences — это квазиэкспериментальный метод для оценки причинного эффекта вмешательства (treatment effect), когда классический рандомизированный эксперимент невозможен.
Суть метода
ДиД сравнивает динамику изменений в контрольной и опытной группах:
- Опытная группа: получила вмешательство
- Контрольная группа: не получила вмешательство
- До и после: метрику измеряют до и после вмешательства
Эффект = (Y_after - Y_before)_treated - (Y_after - Y_before)_control
Формула
Treatment Effect = (Y_t,after - Y_t,before) - (Y_c,after - Y_c,before)
Где:
- Y_t — метрика в опытной группе (treated)
- Y_c — метрика в контрольной группе (control)
Пример из product analytics
Предположим, вы запустили новую фишку в приложении для 50% пользователей:
| Группа | До вмешательства | После вмешательства | Изменение |
|---|---|---|---|
| Опытная | 100 MAU | 130 MAU | +30 |
| Контрольная | 100 MAU | 110 MAU | +10 |
| DiD эффект | +20 |
Интерпретация: +20 MAU — это чистый эффект новой фишки, очищенный от общих факторов (сезонность, маркетинг и т.д.)
Ключевые предположения (assumptions)
- Parallel trends — без вмешательства обе группы менялись бы одинаково
- No spillover — нет влияния опытной группы на контрольную
- No anticipation — нет предварительных действий перед вмешательством
- Consistency — вмешательство было применено одинаково всем в опытной группе
Когда использовать
✅ Используй DiD если:
- Нельзя рандомизировать (регуляторные ограничения, технические сложности)
- Есть исторические данные до вмешательства
- Можно найти подходящую контрольную группу
- Вмешательство резко началось в конкретный момент
❌ Не используй если:
- Нарушен parallel trends (группы развивались по-разному до вмешательства)
- Есть сильные spillover эффекты
- Вмешательство накатывалось постепенно
SQL пример для product analytics
WITH metrics AS (
SELECT
CASE WHEN cohort = "treatment" THEN "treatment" ELSE "control" END as group_type,
CASE WHEN DATE(event_date) < "2024-03-01" THEN "before" ELSE "after" END as period,
COUNT(DISTINCT user_id) as active_users,
SUM(revenue) as total_revenue
FROM events
WHERE event_date BETWEEN "2024-02-01" AND "2024-03-31"
GROUP BY group_type, period
),
differ AS (
SELECT
MAX(CASE WHEN period = "after" THEN active_users ELSE 0 END) -
MAX(CASE WHEN period = "before" THEN active_users ELSE 0 END) as change
FROM metrics
GROUP BY group_type
)
SELECT
MAX(CASE WHEN group_type = "treatment" THEN change END) -
MAX(CASE WHEN group_type = "control" THEN change END) as did_effect
FROM differ;
Когда в real life встречается
- 🎯 A/B-тесты в странах, где шарим признак по географии
- 🎯 Запуск фичи сначала на одну платформу (iOS → Android)
- 🎯 Изменения цен в одних странах, но не в других
- 🎯 Уход с маркетплейса (как при паузе рекламы)
Роль Product Analyst
Основная задача — верно подобрать контрольную группу и проверить parallel trends предположение перед выводами. Часто требуется коррекция по confounding переменным (возраст, регион, активность).