сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Каузальный вывод

Каузальный анализ: квазиэксперименты

Зачем это спрашивают

Жизнь регулярно запрещает A/B: цена меняется на весь регион сразу, фича уже раскатана на всех, закон вступил в силу одномоментно. Квазиэксперименты - способ честно оценить эффект без рандомизации, и это сеньорская часть продуктовой аналитики.

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

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

Разность разностей: считаем руками

Ввели новый тариф в Казани, в Самаре не вводили. Сравнить «после запуска Казань лучше Самары» нельзя: города различались и раньше. Сравнить «в Казани стало лучше, чем было» тоже нельзя: за это время сменился сезон, курс, конкуренты.

Разность разностей (difference in differences) вычитает одно из другого. Казань: было 100, стало 130, прирост 30. Самара: было 80, стало 95, прирост 15. Эффект = 30 − 15 = 15. Первое вычитание убрало постоянное различие городов, второе - общий тренд времени, который затронул оба.

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

// Когда затронут один объект - одна страна, один город, - контроль собирают синтетически. Берут взвешенную комбинацию незатронутых регионов, подобранную так, чтобы она повторяла траекторию цели до воздействия, и продлевают её вперёд. Это и есть искусственное «что было бы без».

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

Разрыв на пороге и инструментальные переменные

RDD (regression discontinuity design) работает там, где воздействие назначается по порогу: скидка от 3000 рублей в корзине, грант от 80 баллов, льгота с 60 лет.

Идея красивая. Человек с корзиной 2990 и человек с корзиной 3010 практически одинаковы - по доходу, привычкам, мотивации, всему. Различает их только скидка, а по какую сторону порога кто оказался, почти случайно. Сравнив исходы прямо у порога, получаешь причинный эффект почти как в эксперименте.

Ломается это, если порог можно подогнать. Люди добивают корзину до трёх тысяч ради скидки - и тогда чуть выше порога стоят не «такие же», а «те, кто считает и хочет скидку». Диагностика простая: посмотри плотность значений вокруг порога. Провал слева и горб справа означают манипуляцию, метод неприменим. Вторая честная оговорка: RDD измеряет эффект только у порога, для людей с корзиной около трёх тысяч, и ничего не говорит про тех, у кого она 500 или 20 000.

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

Switchback: когда юзеров не разделить

Есть класс продуктов, где пользователей вообще нельзя разложить по группам: такси, маркетплейс, доставка. Водители, курьеры и товары общие, поэтому вариант, показанный одному человеку, меняет условия для другого.

Switchback переключает режим целиком для всех, но по времени или по зонам: час работает алгоритм A, час алгоритм B, и так неделю. Единицей наблюдения становится окно, а не пользователь, и число этих единиц заметно меньше - отсюда требования к длительности.

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

// Полезная фраза на собесе - иерархия доверия к дизайнам. Рандомизированный эксперимент, дальше хороший квазидизайн с проверенными допущениями, дальше регрессия «с контролями». Каждый спуск на ступень оплачивается допущениями, которые придётся защищать словами, а не данными.

буферное окно
отрезок сразу после переключения, который не считают. Нужен, чтобы система успела прийти в равновесие и не тащила хвост прошлого режима

Как отвечать: «Фичу раскатили сразу на всех. Как оценить эффект?»

Рандомизации нет, значит собираю квазидизайн под то, что есть в данных. Если найдётся незатронутая группа - регион без раскатки, сегмент без фичи - беру разность разностей и первым делом проверяю параллельность претрендов, потому что без неё метод ловит чужой тренд, а не эффект. Если затронут один объект целиком, строю синтетический контроль из похожих незатронутых. Если фича назначалась по порогу, сравниваю вокруг порога. Обязательно гоняю плацебо-тест: сдвигаю дату воздействия в прошлое, и «эффект» должен исчезнуть. И репортую с явно названными допущениями - это не A/B, доверие к результату ровно такое, какова прочность допущений.

Выбор дизайна привязан к тому, какие данные вообще доступны, каждый метод идёт со своей проверкой, а подача честная. Это полный маршрут аналитика, которому запретили эксперимент.

На чём валят

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

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 15, остальные разбираются в тренажёре.

  1. #quasi_experiments1 / 5
    Какое допущение обязательно для валидности difference-in-differences?
    A)Параллельные тренды: без вмешательства группы менялись бы одинаково
    B)Обе сравниваемые группы обязаны иметь одинаковый исходный уровень метрики до вмешательства
    C)Размер тест-группы должен строго вдвое превышать размер контрольной группы
    D)Метрика обязана быть нормально распределена в обеих сравниваемых группах
    показать ответ и разбор
    +A)Параллельные тренды: без вмешательства группы менялись бы одинаково

    // разбор: DiD верен, если в отсутствие вмешательства тест- и контрольная группы менялись бы параллельно (parallel trends) — тогда контроль корректно моделирует контрфакт «что было бы». Одинаковый исходный уровень не требуется, важен именно одинаковый тренд. Допущение частично проверяют, сравнивая динамику групп в нескольких периодах до вмешательства.

  2. #quasi_experiments2 / 5
    Зачем в причинном анализе нужна инструментальная переменная (instrument)?
    A)Чтобы напрямую измерить сам конечный исход без всякой модели и допущений
    B)Влияет на воздействие, но на исход — лишь через него; обходит скрытый конфаундер
    C)Чтобы увеличить размер выборки за счёт добавления новых наблюдений
    D)Чтобы заменить контрольную группу в рандомизированном тесте
    показать ответ и разбор
    +B)Влияет на воздействие, но на исход — лишь через него; обходит скрытый конфаундер

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

  3. #quasi_experiments3 / 5
    Регион ввёл политику, идеального контрольного региона нет. Что делает метод синтетического контроля?
    A)Просто сравнивает регион до и после политики, приписывая всю наблюдаемую разницу именно эффекту этой политики
    B)Берёт первый попавшийся соседний регион как контроль, вообще не проверяя его схожесть с целевым до вмешательства
    C)Строит «синтетический» контроль как взвешенную комбинацию других регионов, повторяющую динамику целевого до вмешательства
    D)Случайно назначает политику половине регионов задним числом, чтобы искусственно получить нужную рандомизацию
    показать ответ и разбор
    +C)Строит «синтетический» контроль как взвешенную комбинацию других регионов, повторяющую динамику целевого до вмешательства

    // разбор: Синтетический контроль конструирует «двойника» обработанного региона как взвешенную комбинацию непострадавших регионов-доноров, подобранную так, чтобы ДО вмешательства она повторяла траекторию целевого (по исходу и предикторам). После вмешательства расхождение реального региона и его синтетического двойника трактуется как эффект. Это строже «до/после» (учитывает общие тренды) и произвольного соседа. Задним числом рандомизировать нельзя.

  4. #quasi_experiments4 / 5
    В difference-in-differences ключевое допущение — параллельные тренды. Как его хотя бы частично проверяют?
    A)Смотрят на уровень метрики в момент вмешательства: если он совпал у групп, допущение выполнено
    B)Проверяют, что уже ПОСЛЕ вмешательства тренды групп стали параллельны — именно это и подтверждает валидность
    C)Никак: допущение непроверяемо, поэтому DiD применяют вообще без всякой предварительной диагностики
    D)Смотрят на ДО-периоды: если до вмешательства тренды групп шли параллельно, допущение выглядит правдоподобнее
    показать ответ и разбор
    +D)Смотрят на ДО-периоды: если до вмешательства тренды групп шли параллельно, допущение выглядит правдоподобнее

    // разбор: DiD предполагает, что БЕЗ вмешательства тест- и контроль-группы менялись бы параллельно. Проверить это прямо нельзя (контрфакт ненаблюдаем), но косвенный аргумент — параллельность трендов в ДО-периоде (pre-trends): если несколько периодов до вмешательства группы двигались синхронно, допущение правдоподобнее. Совпадение уровней не нужно — важна параллельность динамики. После-периоды не годятся: там уже есть эффект.

  5. #quasi_experiments5 / 5
    В разрывном дизайне (RDD) эффект оценивают по скачку у порога. Что критично проверить для валидности?
    A)Что обе группы по разные стороны порога имеют строго одинаковый размер выборки, иначе оценка невалидна
    B)Что порог нельзя «подкрутить»: нет манипуляции бегущей переменной (проверяют плотность у порога, McCrary-тест)
    C)Что бегущая переменная случайна на всём своём диапазоне значений, а не в окрестности порога
    D)Что эффект воздействия одинаков для всех объектов выборки и далеко за пределами окрестности порога тоже
    показать ответ и разбор
    +B)Что порог нельзя «подкрутить»: нет манипуляции бегущей переменной (проверяют плотность у порога, McCrary-тест)

    // разбор: RDD опирается на то, что рядом с порогом объекты по обе стороны почти сопоставимы (попадание «выше/ниже» квази-случайно). Это рушится, если участники манипулируют бегущей переменной, подгоняя себя под нужную сторону, — группы у границы становятся несопоставимы. Диагностика — тест на скачок плотности у порога (McCrary): аномальное скопление с одной стороны выдаёт манипуляцию. Равенство размеров и глобальная случайность не нужны; эффект локален у порога.

дальше

Теорию прочитали. Навык ставится повторением

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