Каузальный анализ: квазиэксперименты
Жизнь регулярно запрещает 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, остальные разбираются в тренажёре.
- Какое допущение обязательно для валидности difference-in-differences?A)Параллельные тренды: без вмешательства группы менялись бы одинаковоB)Обе сравниваемые группы обязаны иметь одинаковый исходный уровень метрики до вмешательстваC)Размер тест-группы должен строго вдвое превышать размер контрольной группыD)Метрика обязана быть нормально распределена в обеих сравниваемых группах
показать ответ и разбор
+A)Параллельные тренды: без вмешательства группы менялись бы одинаково// разбор: DiD верен, если в отсутствие вмешательства тест- и контрольная группы менялись бы параллельно (parallel trends) — тогда контроль корректно моделирует контрфакт «что было бы». Одинаковый исходный уровень не требуется, важен именно одинаковый тренд. Допущение частично проверяют, сравнивая динамику групп в нескольких периодах до вмешательства.
- Зачем в причинном анализе нужна инструментальная переменная (instrument)?A)Чтобы напрямую измерить сам конечный исход без всякой модели и допущенийB)Влияет на воздействие, но на исход — лишь через него; обходит скрытый конфаундерC)Чтобы увеличить размер выборки за счёт добавления новых наблюденийD)Чтобы заменить контрольную группу в рандомизированном тесте
показать ответ и разбор
+B)Влияет на воздействие, но на исход — лишь через него; обходит скрытый конфаундер// разбор: Инструмент — переменная, которая случайно «толкает» воздействие, но на исход влияет только через него и не связана с конфаундерами. Тогда, используя лишь вариацию воздействия, вызванную инструментом, можно оценить причинный эффект даже при скрытом конфаундинге. Классика — использовать лотерейное распределение или географию как источник экзогенной вариации.
- Регион ввёл политику, идеального контрольного региона нет. Что делает метод синтетического контроля?A)Просто сравнивает регион до и после политики, приписывая всю наблюдаемую разницу именно эффекту этой политикиB)Берёт первый попавшийся соседний регион как контроль, вообще не проверяя его схожесть с целевым до вмешательстваC)Строит «синтетический» контроль как взвешенную комбинацию других регионов, повторяющую динамику целевого до вмешательстваD)Случайно назначает политику половине регионов задним числом, чтобы искусственно получить нужную рандомизацию
показать ответ и разбор
+C)Строит «синтетический» контроль как взвешенную комбинацию других регионов, повторяющую динамику целевого до вмешательства// разбор: Синтетический контроль конструирует «двойника» обработанного региона как взвешенную комбинацию непострадавших регионов-доноров, подобранную так, чтобы ДО вмешательства она повторяла траекторию целевого (по исходу и предикторам). После вмешательства расхождение реального региона и его синтетического двойника трактуется как эффект. Это строже «до/после» (учитывает общие тренды) и произвольного соседа. Задним числом рандомизировать нельзя.
- В difference-in-differences ключевое допущение — параллельные тренды. Как его хотя бы частично проверяют?A)Смотрят на уровень метрики в момент вмешательства: если он совпал у групп, допущение выполненоB)Проверяют, что уже ПОСЛЕ вмешательства тренды групп стали параллельны — именно это и подтверждает валидностьC)Никак: допущение непроверяемо, поэтому DiD применяют вообще без всякой предварительной диагностикиD)Смотрят на ДО-периоды: если до вмешательства тренды групп шли параллельно, допущение выглядит правдоподобнее
показать ответ и разбор
+D)Смотрят на ДО-периоды: если до вмешательства тренды групп шли параллельно, допущение выглядит правдоподобнее// разбор: DiD предполагает, что БЕЗ вмешательства тест- и контроль-группы менялись бы параллельно. Проверить это прямо нельзя (контрфакт ненаблюдаем), но косвенный аргумент — параллельность трендов в ДО-периоде (pre-trends): если несколько периодов до вмешательства группы двигались синхронно, допущение правдоподобнее. Совпадение уровней не нужно — важна параллельность динамики. После-периоды не годятся: там уже есть эффект.
- В разрывном дизайне (RDD) эффект оценивают по скачку у порога. Что критично проверить для валидности?A)Что обе группы по разные стороны порога имеют строго одинаковый размер выборки, иначе оценка невалиднаB)Что порог нельзя «подкрутить»: нет манипуляции бегущей переменной (проверяют плотность у порога, McCrary-тест)C)Что бегущая переменная случайна на всём своём диапазоне значений, а не в окрестности порогаD)Что эффект воздействия одинаков для всех объектов выборки и далеко за пределами окрестности порога тоже
показать ответ и разбор
+B)Что порог нельзя «подкрутить»: нет манипуляции бегущей переменной (проверяют плотность у порога, McCrary-тест)// разбор: RDD опирается на то, что рядом с порогом объекты по обе стороны почти сопоставимы (попадание «выше/ниже» квази-случайно). Это рушится, если участники манипулируют бегущей переменной, подгоняя себя под нужную сторону, — группы у границы становятся несопоставимы. Диагностика — тест на скачок плотности у порога (McCrary): аномальное скопление с одной стороны выдаёт манипуляцию. Равенство размеров и глобальная случайность не нужны; эффект локален у порога.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.