Практика

Для каждой задачи выберите подходящий квази-экспериментальный метод, сформулируйте допущения и продумайте проверки, которые защитят вас от ложных выводов.

Задача 1. Запуск в одном городе (DiD)

Сервис доставки запускает услугу «доставка в тот же день» только в Новосибирске. В остальных городах ничего не меняют.

У вас есть 8 недель данных по выручке на пользователя для всех городов до запуска и несколько недель после.

Бизнес хочет оценить, насколько услуга увеличила выручку именно в Новосибирске.

Ответ

Рекомендуемый метод: Difference-in-Differences (DiD) с treated-группой «Новосибирск» и набором похожих городов в контроле.

Ключевое допущение: без запуска услуги тренды выручки в Новосибирске и контрольных городах шли бы параллельно.

Sanity checks:

  • Нарисовать pre-period тренды по городам и проверить визуально параллельность.
  • Сделать placebo DiD с ложной датой запуска (например, на 4 недели раньше) — эффект должен быть близок к нулю.
  • Проверить, не было ли в Новосибирске локальных акций или PR-кампаний, которых нет в контроле.

Главный риск: специфический шок в Новосибирске (локальная промоакция, конкуренты, погода), который ломает параллельные тренды и «подмешивается» в оценку эффекта.

Задача 2. Premium для «активных» пользователей (Matching)

Продуктовая команда вручную включила премиум-функции пользователям, у которых было > 50 заказов за всё время.

Теперь вы хотите оценить влияние премиума на удержание через 3 месяца. Рандомизации не было, эксперимент задним числом.

Есть полная история заказов, регистраций, устройств и регионов по всем пользователям.

Ответ

Рекомендуемый метод: matching / reweighting (propensity score matching или IPW) с treated-группой «получили премиум» и контролем «похожий профиль, но без премиума».

Ключевое допущение: selection on observables — все факторы, влияющие на выдачу премиума и удержание, наблюдаемы (например, активность, стаж, тип устройства).

Sanity checks:

  • Построить модель пропенсити и проверить баланс признаков после matching (standardized differences < 0.1).
  • Убедиться, что используете только pre-treatment признаки (до выдачи премиума), а не метрики периода измерения эффекта.
  • Сравнить результаты разных спецификаций matching (nearest neighbor, caliper, разные наборы ковариат).

Главный риск: немеряемая мотивация или лояльность: пользователи, которым дали премиум, могут отличаться по «внутренним» характеристикам даже при совпадающих наблюдаемых признаках, что приведёт к завышению эффекта.

Задача 3. Feature launch в одной стране (Synthetic control)

Новый алгоритм рекомендаций запустили только в Германии. Ещё 12 европейских стран работают по старой схеме.

У вас есть 6 месяцев помесячных данных по выручке и DAU до запуска и несколько месяцев после.

Цель — понять, насколько именно алгоритм изменил метрики в Германии, учитывая общерыночные тренды.

Ответ

Рекомендуемый метод: synthetic control: построить «синтетическую Германию» из контрольных стран (Франция, Испания, Италия и др.).

Ключевое допущение: существует такая комбинация контрольных стран, которая хорошо воспроизводит тренд Германии до запуска; без алгоритма Германия продолжила бы вести себя как эта комбинация.

Sanity checks:

  • Проверить качество подгона в pre-period (RMSE, визуальное совпадение кривых treated и synthetic).
  • Запустить placebo-анализы: применить synthetic control к другим странам, где не было запуска, и убедиться, что там эффект ≈ 0.
  • Проверить устойчивость эффекта к исключению отдельных доноров и изменению набора ковариат.

Главный риск: Германия имела свой уникальный тренд, плохо воспроизводимый донорским пулом, либо в Германии были специфические события (регуляция, кризис), которых нет в донорах — тогда контрфактуал ненадёжен.

Задача 4. Промо-порог (RDD)

Пользователи, которые тратят > 10 000 ₽ в месяц, автоматически получают 5% cashback на следующий месяц.

Нужно оценить, увеличивает ли cashback траты в следующем месяце. Чёткого A/B нет: правило действует для всех.

Доступны точные помесячные траты по пользователям за несколько месяцев.

Ответ

Рекомендуемый метод: Regression Discontinuity Design (RDD) вокруг порога 10 000 ₽.

Ключевое допущение: пользователи не могут точно манипулировать месячными тратами относительно порога, и пользователи с тратами чуть выше и чуть ниже 10 000 ₽ сравнимы по всем прочим факторам.

Sanity checks:

  • Построить гистограмму трат около 10 000 ₽ и проверить отсутствие явного бучинга или провалов.
  • Проверить баланс основных ковариат (стаж, страна, устройство) слева и справа от порога в узком окне.
  • Протестировать устойчивость оценки эффекта к разным bandwidth и спецификациям регрессии.

Главный риск: пользователи специально «добивают» покупки до порога, а также малая плотность наблюдений в окрестности 10 000 ₽, из-за чего оценка становится шумной.

Задача 5. Компания целиком перешла на новый дизайн (ITS)

Мобильное приложение полностью обновило дизайн и навигацию для всех пользователей в один день. Holdout-группы нет.

У вас есть 12 недель данных по DAU, конверсии и выручке до редизайна и 8 недель после.

Команда хочет понять, не «убили» ли редизайном основные продуктовые метрики.

Ответ

Рекомендуемый метод: Interrupted Time Series (ITS) / CausalImpact с моделированием временного ряда по pre-period и оценкой отклонения постпериода от прогноза.

Ключевое допущение: модель временного ряда хорошо описывает метрику без редизайна; других крупных изменений в момент запуска нет.

Sanity checks:

  • Проверить остатки модели на pre-period (нет ли систематических паттернов, сезонность хорошо отловлена).
  • Проанализировать календарь: не запускались ли одновременно крупные маркетинговые кампании, промо, изменения цен.
  • Построить альтернативные модели (с/без контрольных рядов, разные структуры сезонности) и сравнить устойчивость оценок эффекта.

Главный риск: наложение нескольких событий (кампания, новый тариф, PR-кризис), которые модель интерпретирует как эффект редизайна.

Задача 6. DiD с нарушенными parallel trends ⚠

Вы построили DiD: Москва — treatment (запуск новой логистики), Санкт-Петербург — контроль.

Эффект получился +7% к выручке. Но при проверке выяснилось, что в pre-period Москва росла на 3 п.п. в неделю быстрее, чем СПб.

Графики явно расходятся ещё до запуска.

Ответ

Рекомендуемый вывод: ключевое допущение DiD (параллельные тренды) нарушено, оценка эффекта смещена. Интерпретировать +7% как эффект логистики нельзя.

Ключевое допущение: без логистики gap между Москвой и СПб оставался бы примерно постоянным или предсказуемым; наблюдаемый разъезд трендов показывает, что это не так.

Sanity checks и возможные фиксы:

  • Поиск другой контрольной группы: набор городов с трендом, более похожим на Москву до запуска.
  • Попробовать synthetic control для Москвы, используя несколько городов-доноров вместо одного СПб.
  • Сделать placebo DiD на pre-period с ложной датой запуска и убедиться, что «эффект» там тоже заметен — это аргумент против текущего дизайна.

Главный риск: бизнес может принять решение на основе смещённой оценки, переоценив эффект логистики и недооценив другие факторы роста Москвы.

Задача 7. Matching по post-treatment переменной ⚠

Аналитик оценивал эффект новой программы лояльности. Он матчил пользователей по «числу покупок за период эксперимента» и другим признакам.

После matching среднее число покупок почти совпало между treated и control, и эффект по выручке оказался близок к нулю.

Руководитель радуется: «Программа лояльности ничего не даёт, можно не масштабировать».

Ответ

Проблема: использован post-treatment признак (число покупок во время эксперимента) в процедуре matching. Эта переменная сама зависит от treatment, и matching на ней «выравнивает» именно эффект.

Ключевое допущение (которое нарушено): matching должен использовать только pre-treatment ковариаты, которые не изменяются под действием treatment.

Sanity checks:

  • Проверить список признаков matching и убедиться, что все они измерены до запуска программы.
  • Перестроить matching, исключив post-treatment переменные, и сравнить оценку эффекта.
  • Проанализировать распределение числа покупок в treated и control до matching: именно там ожидается разница.

Главный риск: недооценка эффекта программы лояльности и ошибочное решение свернуть её, хотя при корректном анализе эффект может быть существенным.

Задача 8. Synthetic control — плохой fit ⚠

Вы построили synthetic Germany из других европейских стран. В pre-period среднеквадратичная ошибка (RMSE) между Германией и synthetic Germany составляет ~15% от среднего уровня выручки.

В постпериод визуально есть небольшое отставание synthetic Germany от фактической Германии на уровне ~5%.

Руководитель спрашивает: «Можно ли считать, что эффект алгоритма +5%?».

Ответ

Проблема: качество fit в pre-period слишком плохое. Ошибка 15% от среднего уровня метрики — это шум гораздо большего масштаба, чем наблюдаемый «эффект» 5%.

Ключевое допущение: synthetic control должен хорошо воспроизводить treated-единицу до вмешательства; тогда отклонения после можно интерпретировать как эффект.

Sanity checks:

  • Пересчитать RMSE и относительную ошибку в pre-period, сравнить их с оцененным эффектом в постпериод.
  • Попробовать другие наборы доноров и ковариат, чтобы улучшить fit, либо честно зафиксировать, что это не удаётся.
  • Провести placebo-аналоги на других странах и посмотреть, не возникают ли такие же «эффекты» размера 5% там, где ничего не запускали.

Главный риск: неверная каузальная интерпретация артефактов модели: при таком уровне шума 5% могут быть просто случайным отклонением, а не эффектом фичи.

Задача 9. RDD — манипуляция порогом ⚠

Компания присваивает VIP-статус пользователям с числом покупок >= 100. Вы хотите использовать RDD, чтобы оценить влияние VIP-статуса на выручку.

Гистограмма числа покупок показывает резкий всплеск в интервале 99–101: пользователей с 99 и 100 покупками заметно больше, чем ожидается по тренду.

Также часть менеджеров может вручную «доначислять» покупки важным клиентам.

Ответ

Проблема: явная манипуляция running variable около порога. Пользователи и/или система подталкивают счетчик покупок к 100, чтобы получить VIP-статус.

Ключевое допущение (которое рушится): пользователи не могут точно контролировать положение относительно порога, а распределение running variable гладкое около cutoff-а.

Sanity checks:

  • Формально провести тесты на бучинг (например, McCrary test) и визуально оценить распределение около 100.
  • Проверить, какие пользователи попали в зону 99–101 и не связаны ли они с особыми кампаниями или ручными действиями.
  • Рассмотреть альтернативные дизайны (matching, DiD с временной динамикой статуса), не опирающиеся на строгую RDD.

Главный риск: RDD даёт сильно смещённую оценку эффекта, потому что выборка около порога уже не квазислучайная — там собраны «особые» пользователи, которых система или люди подталкивали к VIP.

Задача 10. Множественные интервенции (ITS)

Компания в течение двух недель запустила сразу три изменения:

1 марта — редизайн приложения, 5 марта — большую маркетинговую кампанию, 10 марта — повышение цен.

У вас есть поминутные и подневные данные по DAU и выручке. Руководство просит «оценить эффект именно редизайна».

Ответ

Проблема: множественные интервенции, происходящие почти одновременно. ITS/ CausalImpact с одним «переломом» не сможет чисто отделить эффект редизайна от кампании и изменения цен.

Ключевое допущение ITS: в момент интервенции происходит одно основное изменение, а остальные факторы фиксированы или учтены в модели.

Sanity checks и варианты решения:

  • Проверить, нет ли контрольных групп/регионов, где, например, запускалась только кампания без редизайна или наоборот.
  • Если таких групп нет, честно признать, что чисто идентифицировать отдельный эффект редизайна невозможно.
  • В отчёте явно разделить «эффект пакета изменений» и невозможность декомпозиции на компоненты.

Главный риск: приписать весь наблюдаемый uplift или падение редизайну, хотя он может быть в основном вызван маркетинговой кампанией или увеличением цен.

Задача 11. Placebo тест для DiD

Ваш DiD-анализ даёт +8% к выручке после запуска новой программы лояльности в Москве относительно контрольных городов.

Результат выглядит красиво, но вы хотите убедиться, что он не артефакт модели и выбора контрольной группы.

У вас есть данные ещё за полгода до реального запуска программы.

Ответ

Рекомендуемые проверки (placebo-тесты):

  • Поставить ложную дату «запуска» на несколько месяцев раньше и посчитать DiD только на pre-period. Эффект должен быть близок к 0.
  • Поменять местами роли городов: считать, как будто в СПб запускали программу, а Москва — контроль. Эффект должен быть близок к 0.
  • Подобрать альтернативный набор контрольных городов с похожими трендами и проверить, сохраняется ли оценка эффекта по порядка величины.

Ключевая идея: если метод систематически выдаёт значимые эффекты в местах, где их заведомо нет, доверять оценке +8% нельзя.

Главный риск: «выученная» модель трендов, которая при любом сдвиге даёт красивый uplift, не отражающий реальный эффект программы лояльности.

Задача 12. Selection on unobservables ⚠

Компания выдала персональные скидки пользователям, которые пожаловались в поддержку на качество сервиса.

Вы собрали matching по tenure, прошлой выручке, устройству, региону и посчитали uplift по удержанию: +20% в treated-группе.

Продуктовая команда хочет использовать этот результат, чтобы оправдать масштабирование скидок.

Ответ

Проблема: сильная селекция по немеряемым факторам. Пользователи, которые жалуются, могут одновременно быть более вовлечёнными (заботятся о сервисе) и более фрустрированными. Matching по наблюдаемым признакам этого не устраняет.

Ключевое допущение matching (selection on observables): все факторы, влияющие на попадание в treatment и на исход, измерены и учтены в модели. Здесь это явным образом нарушено.

Sanity checks:

  • Сравнить динамику поведения жалующихся и не жалующихся пользователей в долгую до скидки.
  • Попробовать найти «квази-контроль» среди пользователей, обращавшихся в поддержку по другим поводам, но не получивших скидку.
  • Оценить, насколько реалистично, что весь uplift 20% объясняется именно скидкой, а не разными типами пользователей.

Главный риск: серьёзное завышение эффекта скидок и дорогостоящее масштабирование неэффективной механики. В таких кейсах лучше стремиться к RCT (A/B среди жалующихся) или использовать инструменты (IV) вместо чистого matching.

Задача 13. Diff-in-Diff с несколькими treatment периодами

Фича rollout-ится по городам волнами: 3 города в январе, ещё 3 в марте, ещё 3 в мае. Ещё 6 городов остаются на старой версии весь год.

У вас есть помесячные данные по метрикам по всем городам за 2 года.

Нужно оценить общий эффект фичи и понять, нет ли сдвига эффекта между волнами.

Ответ

Рекомендуемый метод: DiD с разными timing-ами treatment (staggered adoption). На практике — двухфакторная регрессия с fixed effects по городам и времени или более аккуратные методы типа Callaway–Sant’Anna / Sun–Abraham.

Ключевые допущения: параллельные тренды для каждой волны относительно её контролей; отсутствие сильных carryover-эффектов между волнами, неучтённых в модели.

Sanity checks:

  • Проверить pre-тренды по каждому набору городов, которые входят в конкретную волну.
  • Сравнить результаты разных спецификаций (простая 2×FE vs современные методы для staggered DiD).
  • Посмотреть event-study графики: динамика эффекта по месяцам от момента включения для каждой волны.

Главный риск: использование наивной двухфакторной модели при разном timing-е может приводить к смещённым оценкам, особенно если эффект со временем меняется; важно использовать корректные методы для staggered DiD.

Задача 14. Когда квази-эксперимент лучше не делать

Год назад компания полностью мигрировала платформу на новую архитектуру. Миграция заняла несколько месяцев, выкатывалась по кускам.

Сейчас CEO просит «доказать», что миграция улучшила бизнес-метрики. Однако до миграции метрики практически не трекались: есть только очень агрегированные ежеквартальные отчёты.

Вы пытаетесь придумать DiD, ITS или synthetic control, но понимаете, что данных до изменений почти нет.

Ответ

Честный вывод: при отсутствии нормальных pre-period данных полноценный квази-эксперимент провести нельзя. ITS требует истории ряда до интервенции, DiD — сравнения трендов до и после, synthetic control — качественного pre-period fit.

Ключевое допущение большинства методов: наличие информативного периода до изменения, который позволяет построить контрфактуал. Здесь оно не выполняется.

Sanity checks:

  • Проверить, нет ли хотя бы грубых исторических данных (по регионам, каналам), которые можно было бы использовать для очень приблизительного анализа.
  • Попробовать оценить только операционные метрики «после» (например, стабильность, скорость релизов), но не каузальный эффект на выручку.
  • Сразу заложить правильный сбор метрик для будущих крупных изменений, чтобы такая ситуация не повторилась.

Главный риск: попытаться «натянуть» квази-эксперимент на несуществующие данные и выдать псевдокаузальный вывод. Важно суметь сказать «мы не можем честно оценить эффект миграции» и предложить альтернативные метрики успеха.