Привет, Хабр! На связи команда ad-hoc аналитики X5 Tech.

Основная задача аналитика при проведении А/Б тестирования - оценка эффекта воздействия (тритмента). Примеров задач по оценке эффекта воздействия множество:

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

  2. Удастся ли улучшить самочувствие пациентов, если они начнут принимать новый препарат?

  3. Что произойдёт с оценками школьников, если они начнут посещать репетиторов?

Если вы знаете, как проводятся А/Б тесты, вы понимаете, что во всех трёх случаях нам следовало бы подобрать тестовую и контрольную группы, провести эксперимент, собрать данные и с помощью статистического критерия сделать вывод о том, оказывает ли воздействие значимый эффект на какую-либо метрику.

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

В этой статье мы обсудим, как избежать такого смещения. Сначала мы поговорим о том, что такое идеальный эксперимент и почему он позволяет корректно оценить эффект от воздействия. Затем расскажем, когда идеальный эксперимент невозможен и дадим интуитивное обоснование того, как метод difference-in-difference помогает справиться с оценкой эффекта воздействия в таких ситуациях. В конце мы обсудим формальные предпосылки метода и покажем на примере симуляций последствия их невыполнения.

Идеальный эксперимент

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

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

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

Также введём переменную g_i. Она будет принимать значение 1, если i-ый объект наблюдения входит в тестовую группу, и 0, если i-ый объект наблюдения входит в контрольную группу. Например, представим, что на курсы по математике мы отправили школьников из класса "А", тогда для любого школьника из этого класса g_i=1, а для всех остальных школьников g_i=0.

Введём переменную D_i. Эта переменная будет принимать значение 1, если на i-ый объект наблюдения оказывается воздействие. Напротив, переменная примет значение 0, если воздействие не оказывается. Например, D_i=1, если школьник посещал курсы по математике.

Важно понимать, что переменные D_i и g_i - это разные переменные! D_i=1, если было оказано воздействие, а g_i=1, если i-ый объект наблюдения оказывается в тестовой группе.

В этом контексте имеет смысл поговорить о так называемых потенциальных исходах (potential outcomes). Предположим, что мы отправили на математические курсы класс "А", а остальные классы школы не отправили. Затем мы собрали данные об оценках по математике в тестовой и контрольной группах. Понятно, что в этих собранных данных для класса "А" D_i=1 и g_i=1, а для всех остальных классов D_i=0 и g_i=0. Так получается, потому что мы не способны пронаблюдать, что бы случилось со школьниками из класса "А" (то есть из тестовой группы), если бы мы не провели эксперимент. Однако мы понимаем, что, вероятно, у одного и того же класса могут быть разные оценки в зависимости от того, посещали ли они курсы.

Формализуем то, что мы хотим измерить. Мы хотим узнать, как изменится математическое ожидание случайной переменной Y, если на неё оказывается воздействие, по сравнению с ситуацией, когда это воздействие не оказывается. Например, мы хотим узнать, улучшают ли курсы по математике оценки школьников в среднем. В источниках эта величина называется ATE (average treatment effect) и формально записывается следующим образом:

ATE = \mathbb{E}(Y_i|D_i=1) - \mathbb{E}(Y_i|D_i=0)

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

ATE' = \mathbb{E}(Y_i|D_i=1, g_i=1) - \mathbb{E}(Y_i|D_i=0, g_i=0)

Эту формулу можно представить так:

\begin{align*} ATE' & = \mathbb{E}(Y_i|D_i=1, g_i=1)- \mathbb{E}(Y_i|D_i=0, g_i=1) + \mathbb{E}(Y_i|D_i=0, g_i=1) - \mathbb{E}(Y_i|D_i=0, g_i=0) \end{align*}

Разберём получившуюся формулу.

  1. \mathbb{E}(Y_i|D_i=1,g_i=1)- \mathbb{E}(Y_i|D_i=0,g_i=1) - это то, что в среднем произойдёт с переменной Y_i в результате воздействия, если i-ое наблюдение относится к тестовой группе. В литературе это выражение называется ATET (average treatment effect on treatment). Можно думать об этом так: первое слагаемое - это средние оценки класса "А" в нашей вселенной, в которой мы отправили класс на курсы. Второе слагаемое - это средние оценки класса "А" в параллельной вселенной, в которой на курсы этот класс отправлен не был. Второе слагаемое ещё называют контрфактическим (counterfactual), потому что это то, что могло бы произойти со средним значением оценок школьников, если бы мы не оказали на них войздействие.

  2. \mathbb{E}(Y_i|D_i=0,g_i=1)- \mathbb{E}(Y_i|D_i=0,g_i=0) - это то, что в литературе называется selection bias. Первое слагаемое в ней - это среднее значение Y_i при условии, что i-ое наблюдение будет отнесено к тестовой группе, но воздействие на него оказано не будет. Второе слагаемое - среднее значение Y_i при условии, что i-ое наблюдение будет отнесено к контрольной группе, и, аналогично, воздействие на него оказано будет.

    Предположим, класс "А", который вы определили как тестовую группу - это физико-математический класс, а остальные классы имеют гуманитарную специализацию. Понятно, что после эксперимента вы получите завышенные результаты: совершенно ясно, что физико-математический класс и без того силён в математике. Более формально это означает, что:

\mathbb{E}(Y_i|D_i=0, g_i=1)>\mathbb{E}(Y_i|D_i=0, g_i=0)

И, соответственно, selection bias \neq0.

Перепишем теперь формулу для ATE':

ATE' = ATET + selection\_bias

Теперь пусть p_g - доля наблюдений, относящихся к тестовой группе. В нашем случае - доля школьников, относящихся к классу "А".

Введём ещё одно обозначение: ATEU (average treatment effect on untreatment). ATEU=\mathbb{E}(Y_i|D_i=1,g_i=0)- \mathbb{E}(Y_i|D_i=0,g_i=0) - это полный аналог ATET для контрольной группы, то есть эта величина описывает, что в среднем произойдёт с переменной Y_i в результате воздействия, если i-ое наблюдение относится к контрольной группе.

Выполним ещё несколько преобразований:

ATE' = ATET + selection\_bias + ATE - ATE

Заметим, что ATE = p_gATET+(1-p_g)ATEU.

ATE' = ATET + selection\_bias + ATE - p_gATET-(1-p_g)ATEU

Окончательно сгруппировав слагаемые, можем записать выражение для ATE' так:

ATE' = ATE + selection\_bias+(1-p_g)(ATET-ATEU)

Последнее слагаемое в литературе называется heterogeneous treatment effect bias и описывает, насколько отличается эффект для контрольной и тестовой групп. В нашем примере это означает, что, в общем говоря, школьник из "А" класса может получить больший (или меньший) эффект от посещения курсов, чем все прочие школьники. Однако для упрощения здесь и далее мы будем считать, что эффект от воздействия будет одинаковым и для тестовой, и для контрольной групп, так что формула примет следующий вид:

ATE' = ATE + selection\_bias

Теперь мы готовы к обсуждению идеального эсперимента. При проведении идеального эксперимента мы оказываем воздействие на случайные объекты в популяции, иными словами, в качестве тестовой группы мы выбираем не физико-математический класс, мы просто случайно выбираем некоторое количество школьников, которые должны пойти на курсы. Поскольку этот выбор мы осуществим абсолютно случайно, тестовая и контрольная группы в среднем будут одинаковыми, так как в тестовую и контрольную группу попадут как сильные, так и слабые в математике ребята.

Формально это означает, что случайная величина Y_i|(D=0) и Y_i|(D=1) независимы от случайной величины g_i. Таким образом, условные распределения случайных величин будут одинаковыми независимо от того, говорим мы о тестовой или о контрольной группе, а значит и математические ожидания этих случайных величин будут одинаковыми:

\mathbb{E}(Y_i|D_i=0,g_i=1)- \mathbb{E}(Y_i|D_i=0,g_i=0) = \mathbb{E}(Y_i|D_i=0)- \mathbb{E}(Y_i|D_i=0) = 0

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

В этом случае selection bias будет равен нулю, а значит формула ATE' существенно упрощается:

ATE'= ATE

То есть в той ситуации, когда мы можем осуществить воздействие на случайные объекты в популяции, проблема оценки эффекта сводится к простой оценке различия средних в контрольной и тестовой группе, и тогда ATE может быть оценен следующим образом:

\overline{ATE} = \overline{Y}_{test} - \overline{Y}_{control}

Или как это показано в нашей статье, ATE может быть оценён как коэффициент \beta_1 в регрессии следующего вида:

Y_i=\beta_0+\beta_1*D_i+\epsilon_i

Тем не менее, случайный эксперимент не всегда оказывается возможным. Может быть, это аморально. Может быть, это попросту дорого. А может быть, воздействие за аналитика осуществляют другие люди, которые могут быть заинтересованы в завышении или занижении результатов эксперимента.

В результате всегда, когда мы не можем быть уверены в том, что объекты наблюдения оказались в тестовой группе абсолютно случайно, мы не можем использовать простое сравнение средних и нам нужен более изящный инструмент для чистой оценки эффекта. Таким инструментом может выступать diff-in-diff.

Diff-in-diff: интуиция метода

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

Эта картинка наглядно показывает, что в ситуации, когда мы способны провести идеальный эксперимент, величину эффекта можно оценить как разницу средних в тестовой и контрольной группе, причём средний балл контрольной группы как бы показывает нам, что могло бы произойти, если бы на тестовую группу мы не повлияли, отправив её на курсы. То есть при таком дизайне средние оценки контрольной группы выступают контрфактическими (counterfactual) предсказаниями для такого потенциального исхода, когда тестовая группа не была подвержена воздействию (g_i=1, D_i=0).

Теперь немного усложним нашу модель. Для упрощения будем полагать, что в период эксперимента на успеваемость школьников не влияют никакие другие факторы, кроме посещения курсов. Допустим, что руководство школы не готово случайно выбирать школьников для участия в эксперименте, зато нам готовы выделить физико-математический класс для посещения курсов. Логично ожидать, что в этой ситуации мы не можем гарантировать независимость оценок школьника от того, относится ли он к тестовой группе, ведь успеваемость по математике в физико-математическом классе выше, чем во всех прочих классах. Значит сравнение средних как способ оценивания эффекта нам не подходит, потому что возникает selection bias, как это изображено на рисунке ниже:

На этой картинке можно увидеть, что при простом сравнении средних мы завысим эффект от курсов: разница средних в этом случае раскладывается на ATE и selection bias. Однако, если бы мы сумели измерить selection bias и прибавить его к оценками школьников из контрольной группы, полученная величина могла бы также служить контрфактическим предсказанием для тестовой группы. Если бы мы могли выполнить это преобразование, для оценки эффекта нам было бы достаточно сравнить средний балл в тестовой группе и в контрольной группе, преобразованной на величину selection bias. Обратите внимание на изображение выше: мы могли бы оценить selection bias, если бы нашли разницу в оценках по математике до эксперимента, а значит, измерив средние баллы после эксперимента, мы могли бы использовать эту оценку selection bias, полученную до эксперимента, для правильной оценки ATE.

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

Теперь, чтобы правильно измерить ATE, нам недостаточно оценить selection bias, нам также нужно знать тренд (то есть эффект от того, что учебные темы стали проще).

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

Также, как и в предыдущем случае, мы можем оценить selection bias как разницу между средним баллом в тестовой группе и средним баллом в контрольной группе до эксперимента.

В результате, взяв две разности, мы сумеем оценить и selection bias, и тренд. Всё, что нам останется - вычесть их из среднего балла для тех, кто посещает курсы после начала эксперимента, и окончательно получить ATE.

В этом и заключается идея метода diff-in-diff. Теперь, сформировав у читателя достаточную интуицию, мы можем перейти к формальному изложению diff-in-diff.

Diff-in-diff: формальное изложение

Итак, мы провели эксперимент и собрали данные по интересующей нас метрике Y_{i,t}. Индексы у метрики показывают, что в наших данных для каждого объекта наблюдения i мы измерили метрику до эксперимента и после эксперимента. Теперь мы хотим оценить ATE, используя метод diff-in-diff.

Имеет место следующая теорема (эта теорема для более полной модели изложена, например, в Hansen, Econometrics, 657 c.):

Дадим интепретацию всем перечисленным выше предпосылкам.

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

Во-вторых, в предпосылке 1 утверждается, что эффект от курсов будет одинаковым и для тестовой, и для контрольной групп: мы упоминали об этом в самом начале статьи, когда говорили, что ATET=ATEU.

В-третьих, в предпосылке 2 утверждается, что переменная D_{i,t} не должна быть скоррелирована с какой-либо ненаблюдаемой (то есть не включённой в модель) переменной, которая оказывает влияние на Y.

Вспомним наш пример со школьниками. Давайте снова представим, что на математические курсы ребята отправляются добровольно. Обратим внимание на то, что слагаемое \epsilon_{i,t} - это случайная величина, которая является индивидуальной для каждого школьника. Можно понимать это так, что она включает в себя множество разных факторов, которые влияют на оценки школьника, но которые мы не можем наблюдать (во всяком случае в том смысле, что мы не включаем их в уравнение регрессии).

Понятно, что на индивидуальном уровне на оценки школьника влияют всяческие личные особенности, например мотивация: более мотивированный школьник будет иметь лучшие оценки. С другой стороны, эта же мотивация могла быть важна, когда школьник принимал решение о том, идти ли ему на курсы. В итоге оказывается, что \epsilon_{i,t} связана и с Y, и с  D_{i,t}, а значит, предпосылку можно считать невыполненной.

Хочется отметить, что, на самом деле, в любом исследовании подобных ненаблюдаемых факторов можно найти много, причём некоторые из них пронаблюдать и измерить вообще невозможно. Например, сложно измерить мотивацию или талант. Такие переменные, которые влияют и на изучаемый фактор, и на изучаемую метрику, называются спутывающими (confounder). Для борьбы с этой проблемой можно либо включать спутывающую переменную в уравнение регрессии, либо использовать метод инструментальных переменных, однако вопросы, связанные с проблемой пропущенных переменных, выходят за рамки данной статьи.

Формально важность выполнения этой предпосылки можно легко показать на упрощённом примере. Пусть \beta_t=0 и \beta_g=0, то есть нет тренда и selection bias.

Тогда переменная Y_{i,t} описывается следующим уравнением:

Y_{i,t}=\beta_0+\beta_DD_{i,t}+\epsilon_{i,t}

Оценим коэффициент \beta_D:

\hat{\beta_D}=\frac{\hat{cov}(Y_{i,t},D_{i,t})}{\hat{\sigma_D}}=\frac{\hat{cov}(\beta_0+\beta_DD_{i,t}+\epsilon_{i,t},D_{i,t})}{\hat{\sigma_D}} = \beta_D + \frac{\hat{cov}(\epsilon_{i,t},D_{i,t})}{\hat{\sigma_D}}\xrightarrow{p} \beta_D + \frac{cov(\epsilon_{i,t},D_{i,t})}{\sigma_D}

Уравнение выше наглядно показывает, что наличие ненаблюдаемых факторов, выражающееся в том, что cov(\epsilon_{i,t},D_{i,t}) \neq 0 приводит к тому, что оценка параметра \beta_D становится смещённой и несостоятельной.

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

Сначала сравним средние в тестовой группе до и после эксперимента:

\Delta_{g=1} = \mathbb{E}(Y|t=1,g=1)-\mathbb{E}(Y|t=0,g=1) = \beta_0+\beta_t+\beta_g+\beta_D-\beta_0-\beta_g=\beta_t+\beta_D

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

\Delta_{g=0} = \mathbb{E}(Y|t=1,g=0)-\mathbb{E}(Y|t=0,g=0) = \beta_0+\beta_t-\beta_0=\beta_t

Теперь, чтобы очистить \Delta_{g=1} от тренда, просто найдём разность разностей (собственно, difference-in-difference):

\Delta_{g=1}-\Delta_{g=0}=\beta_t+\beta_D-\beta_t=\beta_D

Таким образом, заменяя истинные математические ожидания средними арифметическими, сможем оценить и \beta_D.

Diff-in-diff: посмотрим на симуляции

Посмотрим на последствия нарушения предпосылок на примере симуляций.

Разберём несколько случаев:

Базовый случай, когда истинная модель совпадает с оцениваемой:

Y_{i,t}=\beta_0+\beta_tt+\beta_gg_{i}+\beta_DD_{i,t}+\epsilon_{i,t}

Здесь следует остановиться и ещё раз напомнить себе о том, что, в общем говоря, переменные D_{i,t} и g_{i}t - это разные переменные. D_{i,\tau} принимает значение 1, если было оказано воздействие, в то время как g_{i}t примет значение 1 в том случае, когда наступил момент времени 1 и когда i-ый объект наблюдения относится к тестовой группе. Другое дело, что мы не можем наблюдать тестовую группу в момент времени 1 в ситуации, когда воздействие отсутствует - этот исход для нас является контрфактическим, так что в наших данных g_{i}t=D_{i,t} и мы оцениваем модель следующего вида:

Y_{i,t}=\beta_0+\beta_tt+\beta_gg_{i}+\beta_Dtg_{i}+\epsilon_{i,t}

Следующий случай: истинная модель совпадает с моделью в предыдущем случае, но мы будем оценивать модель наивно, то есть так, как будто мы считаем, что воздействие оказывается абсолютно случайно, selection bias и тренд отсутствуют:

Y_i=\beta_0+\beta_D*tg_{i}+\epsilon_i

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

Последний случай: в истинной модели не выполняется гипотеза параллельных трендов. Тогда модель имеет следующий вид:

Y_{i,\tau}=\beta_0+\beta_tt+\beta_tg_{i}t+\beta_gg_{i}+\beta_DD_{i,t}+\epsilon_{i,t}

Обратите внимание на то, что в истинной модели тренд для контрольной группы - это \beta_t, а для тестовой группы - 2\beta_t. Это можно наглядно увидеть, если сгруппировать слагаемые следующим образом:

Y_{i,\tau}=\beta_0+(\beta_t+\beta_tg_{i})t+\beta_gg_{i}+\beta_DD_{i,t}+\epsilon_{i,t}

Понятно, что если g_{i}=1, то влияние тренда окажется в 2 раза больше. С другой стороны, если снова учесть, что в наших данных g_{i}t=D_{i,t}, можно сгруппировать слагаемые по другому:

Y_{i,t}=\beta_0+\beta_tt+\beta_gg_{i}+(\beta_t+\beta_D)tg_{i}+\epsilon_{i,t}=\beta_0+\beta_tt+\beta_gg_{i}+\mathbf{\beta_D'}tg_{i}+\epsilon_{i,t}

Обратите внимание, здесь мы как будто подменяем истинный ATE=\beta_D на \mathbf{\beta_D'}, который, как можно видеть, отличен от \beta_D, так что попытка оценки такой модели приведёт к тому, что мы завысим (занизим) ATE на ту величину, на которую влияние тренда отличается для тестовой и контрольной групп. Таким образом, мы будем пытаться оценивать следующую модель:

Y_{i,t}=\beta_0+\beta_tt+\beta_gg_{i}+\beta_Dtg_{i}+\epsilon_{i,t}

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

def sample_estimations(
    beta_0,
    beta_t,
    beta_g,
    beta_d,
    std_epsilon=1,
    obs=1000,
    samples=1000,
    non_parallel=False,
    factors=None,
    covariance_default=True
):

if factors is None:
    factors = ["const", "t", "g", "d"]
    
estimations = {"pvalue": [], "params": []}

for i in tqdm(range(samples)):
    np.random.seed(123 + i)
    data = pd.DataFrame()
    data["id"] = np.repeat(np.arange(0, obs), 2)
    data["const"] = 1
    data["t"] = [0, 1] * obs
    data["g"] = np.repeat(np.random.binomial(1, 0.5, obs), 2)
    data["d"] = data["t"] * data["g"]

    data["y"] = (
        beta_0 * data["const"]
        + beta_t * data["t"]
        + beta_g * data["g"]
        + beta_d * data["d"]
        + non_parallel * beta_t * data["g"] * data["t"]
        + np.random.multivariate_normal(
        [0, 0], 
        [[1, 0.5],
        [0.5, 1]], obs).flatten()
    )

    y_metric = data["y"]
    x_factors = data[factors]
    model = sm.OLS(y_metric, x_factors)
    if covariance_default:
        results = model.fit()
    else:
        results = model.fit(cov_type='cluster', cov_kwds={'groups': data["id"]})

    estimations["pvalue"].append(results.pvalues["d"])
    estimations["params"].append(results.params["d"])

return estimations

Каждую модель будем оценивать по данным 1000 наблюдений, проведём 20.000 таких оценок. Параметры экспериментов зададим следующим образом:

  1. \beta_0=1 - описывает среднее значение метрики в контрольной группе,

  2. \beta_t=0.25 - характеризует эффект от тренда,

  3. \beta_g = 0.25 - представляет собой selection\_bias

  4. \beta_D=1 - представляет собой ATE

Результаты экспериментов изобразим на гистограмме ниже:

Закономерно мы наблюдаем, что только полная модель даёт несмещённые оценки. При этом можно заметить, что при непараллельном тренде оценка оказывается смещена на величину различия тренда в тесте и контроле. При этом сильнее всего оказывается смещена оценка, полученная простым сравнением средних, однако, вообще говоря, величина этого смещения может варьироваться в зависимости от параметров модели.

В контексте А/Б тестирования также важно контролировать вероятность ошибки первого рода. В нашем случае речь идет о вероятности ошибки первого рода, которая возникает при проверке на значимость коэффициента регрессии \beta_D. Известно, что при справделивости нулевой гипотезы p-value распределен равномерно, почитать об этом можно в этой статье. Покажем, что будет происходить с распределнием p-value во всех приведённых выше случаях. Смоделируем эксперименты с такими же параметрами, за тем исключением, что теперь \beta_D=0, то есть эффект от воздействия отсутствует, а значит верна нулевая гипотеза о равенстве нулю коэффициента регресии. Изобразим результаты с помощью QQ-plot и гистограмм распределения:

Ожидаемо, получили, что p-value будет распределен равномерно для тех же случаев, когда мы получаем несмещенные оценки параметров.

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

Diff-in-diff: к вопросу о стандартных ошибках

Вспомним, что в знаменателе t-статистики, которую мы используем для проверки значимости коэффициента регрессии, находится стандартная ошибка оценки коэффициента регресии. Известно, что фактическая вероятность ошибки первого рода зависит не только от правильной спецификации модели (как мы показали это выше), но и от корректной оценки стандартных ошибок. Дадим необходимый комментарий по этому вопросу.

Можно заметить, что, вообще говоря, наши наблюдения зависимы: Y_{i,0} и Y_{i,1} нельзя считать независимыми случайными величинами, поскольку они относятся к одному и тому же i-му объекту наблюдения. В нашем примере с математическими курсами это означает, что мы наблюдаем одного и того же школьника два раза: до эксперимента и после. В данном случае статистические методы, которые, как правило, предполагают независимость рассматриваемых наблюдений, работать не будут - как минимум в том смысле, что мы потеряем контроль над ошибкой 1 рода.

Дело в том, что по-умолчанию стандартные ошибки коэффициентов регрессии рассчитываются в предпосылке так называемой гомоскедастичности ошибок регресии \epsilon_{i,t}. Гомоскедастичность означает, что ковариационная матрица для \epsilon_{i,t} диагональная: то есть дисперсия ошибки не зависит от i и t, а для любых двух ошибок, относящихся к разным школьникам или разным моментам времени, ковариация ошибок равна нулю.

Тем не менее, это не вполне реалистично: мы уже отмечали ранее, что \epsilon_{i,t} описывает какие-то факторы, которые исследователь наблюдать не может. В нашем примере это может быть талант отдельно взятого школьника. Талант вообще вещь фундаментальная, он не может меняться во время эксперимента, так что вполне естественно счиатать, что \epsilon_{i,0} и \epsilon_{i,1} - зависимые случайные величины. С другой стороны, талант одного школьника не дает никаких преимуществ другому школьнику (во всяком случае если нормы контроля, используемые при выставлении оценок, не допускают списывания), так что \epsilon_{i,0} и \epsilon_{j,0} вполне можно считать независимыми. Иными словами, ковариационная матрица ошибок не будет диагональной, предпосылка о гомоскедастичности не выполняется. Такая ситуация называется гетероскедастичностью и для борьбы с ней используют робастные к гетероскедастичности стандартные ошибки.

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

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

Если мы снова повторим симуляции, используя сначала гомоскедастичные стандартные ошибки, а потом кластеризованные стандартные ошибки, результат будет выглядеть таким образом:

Можно видеть, что распределние p-value перестает быть равномерным, когда мы не используем кластеризованные стандартные ошибки. Вообще, при применении diff-in-diff использование кластеризованных стандартных ошибок - это золотой стнадарт. Его следует придерживаться и использовать их, чтобы получать достоверные доверительные интервалы и делать корректные выводы о влиянии воздействия на интересующую исследователя метрику.

Итоги

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

Именно в таких ситуация аналитику следует прибегать к эконометрическим методам, например, к diff-in-diff. В статье мы показали, что diff-in-diff позволяет бороться с selection bias, при этом требует выполнения достаточно правдоподобных предпосылок. Тем не менее, их невыполнение также приведёт к смещению оценок ATE.

В заключение хочется сказать, что модель diff-in-diff, изложенная в статье, не является самой продвинутой. Как мы уже упоминали выше, её можно дополнять ковариатами, которые позволят повысить чувствительность А/Б теста, а также спутывающими переменными, которые позволят бороться с проблемой пропущенных переменных. К тому же, модель diff-in-diff может быть расширена на тот случай, когда мы наблюдаем контрольную и тестовую группу более чем два периода времени.

Источники

В существенной степени эта статья вдохновлена изложением идеального эксперимента из учебника "Дружелюбная эконометрика" Ф.С. Картаева. Это один из лучших источников на русском языке для начинающих и продолжающих изучение эконометрики - все базовые модели и методы в ней изложены доступно, при этом учебник содержит все необходимые для начинающего исследователя строгие выкладки и теоремы.

Другой важный источник - "Causal Inference for The Brave and True" авторства Matheus Facure Alves. Замечательный учебник, большим преимуществом которого является фокус на модели причинности. Может служить как альтернативой "Дружелюбной эконометрике", так и её дополнением.

Наконец, нельзя не упомянуть "Econometrics" автора Bruce E. Hansen. В отличие от двух предыдущих источников, "Econometrics" подойдет самым продвинутым эконометристам или тем, кто хорошо знает теорию вероятностей и хочет сразу начать изучать эконометрику более основательно.

Над статьей работали члены команды Ad‑Hoc X5 Tech: Виктор Антоненко и Денис Лавров.

Комментарии (0)