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

Для нашей цели нужны квази эксперименты – это исследования ситуаций, когда выборка разделилась на группы по естественным (не обязательно случайным) причинам. В этой статье не будем детально разбирать математику и новейшие достижения методов, но посмотрим на идеи, кейсы и специфические предпосылки. Будет полезно тем, кто на вопросы вида “мы год назад запускали фичу, стало лучше?” не задумываясь говорит, что сказать нельзя.

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

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

Difference in Differences (DiD)

Идея метода

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

В таком случае оценка эффекта от воздействия будет равна: 

\text{ATE} = \left[ E(Y(1) \,|\, T=1) - E(Y(1) \,|\, T=0) \right] - \left[ E(Y(0) \,|\, T=1) - E(Y(0) \,|\, T=0) \right]

Где Y(1), Y(0) – значение метрики на пост- и пре-периоде, T=0, T=1 – индикатор отсутствия или наличия воздействия. 

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

Предпосылки метода

  • Параллельность трендов. Если бы мы не воздействовали на группу B, то разница средних значений между группами A и B была бы одинаковой в периоды t0 и t1.

  • Несмещенность КГ. Ни на кого из контрольной группы не было воздействия. 

  • Постоянство воздействия. Эффект от воздействия остается постоянным на протяжении всего исследуемого периода.

Типичные примеры:

  • Продаем товары в нескольких регионах, в одном запустили оффлайн рекламу, хотим оценить эффективность.

  • Без A/B-теста выпустили фичу только на ios, надо проверить, улучшились ли метрики.

  • На одной из версий приложения что-то сломалось, надо оценить ущерб. 

Рассуждения из практики

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

Regression discontinuity design (RDD)

Идея метода

В природе все изменения достаточно плавные, поэтому, когда мы находим разрывы значений, можно предполагать искусственное воздействие. Тогда, если есть какая-то точка, которая разделяет выборку на 2 группы, где одной доступно воздействие, а другой – нет, можно посмотреть на значение метрики в окрестности этой точки. Разница между оценкой слева и справа и будет оценкой эффекта, более формально она выражается так:

E(\text{ATE}|X=c) = \lim_{x \to c^+} E(Y_{\text{ti}}|X_i=x) - \lim_{x \to c^-} E(Y_{\text{ti}}|X_i=x)

Где с – это пороговое значение. 

Картинка помощи: 

Предпосылки метода: 

  • Существование порогового значения. Самая частая ошибка с RDD – манипуляции с пороговым значением, поэтому нужно точно определить из контекста задачи, что считать порогом. 

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

  • Локальность воздействия интервенции. Предполагается, что эффект от воздействия локален и измеряется только вблизи порога, а не на всей выборке.

Типичные примеры:

  • После 18 лет пользователю доступен больший ассортимент, хотим исследовать, как меняется его поведение. 

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

  • При релизе фичи полезно посмотреть изменение поведения пользователя при первом контакте с ней. 

  • При использовании ML моделей важно смотреть различия между пользователями в окрестности порога классов. 

  • Если расположение пользователя влияет на условия доставки, то полезно изучить, как ведут себя пользователи на границе зон. 

Рассуждения из практики

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

  • Соблазн “подобрать” его - избитая история, помним, что каждая наша оценка параметров это ошибки 1 и 2 рода с заданной вероятностью, следовательно если хотим их на этом уровне сохранять на весь эксперимент надо четко ставить гипотезы, считать их число и использовать поправки. 

  • Поиск не “точки” перехода, а “полосы”. Такое чаще всего случается, когда по задаче недостаточно данных и есть мысли в духе “на графике слева метрика низкая, справа высокая, значит посередине что-то есть”. Для RDD критически важна оценка плотности данных вокруг предполагаемой точки перехода, например тестом маккрари, в случае нарушения этой предпосылки стоит изучать природу явления другими методами.  

Instrumental variables 

Идея метода:

Мы хотим оценить влияние какого-то фактора X на нашу метрику Y, но у нас нет данных по другим факторам, которые почти наверняка тоже влияют на метрику. Тогда можно постараться найти такой фактор (инструментальную переменную), который будет влиять только на X и не будет влиять напрямую на Y.

То есть мы хотим добиться такого вида связей в данных:

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

Формулами выражается так:

Регрессия инструментальной переменной (Z) на X

\hat{X} = \pi_0 + \pi_1 Z + \epsilon

Регрессия X с крышкой на Y:

Y = \beta_0 + \beta_1 \hat{X} + u

Предпосылки метода: 

  • Релевантность инструментальной переменной (IV). Переменная Z, которая служит инструментом, должна сильно коррелировать с эндогенной переменной X. 

  • Экзогенность инструментальной переменной. Инструментальная переменная Z не должна коррелировать с ошибками модели.

Типичные примеры:

  • Хотим исследовать воздействие скорости загрузки приложения на отток, возможный инструмент – параметры хостинга и инфраструктуры. 

  • Оцениваем влияние отзывов в сторах на установки приложения, варианты инструментов – параметры ранжирования отзывов, цикл деловой активности основной аудитории. 

  • Изучаем связь активности в приложении и перехода на новые версии, варианты инструмента – версия ОС, модель устройства, тип интернета. 

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

Рассуждения из практики

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

Matching

Идея метода:

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

Формально мы хотим получить следующую оценку: 

ATE = \frac{1}{N} \sum_{i=1}^{N} (Y_{i}^{T} - Y_{i}^{C})

Где Y c верхним индексом T – значение из целевой группы, а Y с верхним индексом C – сопоставленное значение из контрольной.

То есть мы хотим найти среднее разниц ближайших объектов из разных групп. 

Картинка помощи: 

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

Предпосылки метода: 

  • Перекрытие. Для каждого наблюдения из экспериментальной группы есть похожее из контрольной. 

  • Возможность сопоставления. Мы можем надежно и адекватно для контекста задачи определять похожесть наблюдений.

  • Сбалансированность. Распределение наблюдаемых характеристик среди участников с воздействием и без должно быть схожим после процедуры сопоставления.

Рассуждения из практики

В общем виде, matching это не конкретный метод оценки разницы среднего, а подход к выравниванию перекосов в выборке. Т.е. Простыми словами matching позволяет не сопоставимые группы сделать сопоставимыми. Идея метода сопоставления может использоваться много где, даже в A/B-тестах. Поэтому типичных примеров для метода нет, т.к. он может использоваться практически со всеми остальными. 

Итоги:

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

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

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

Ну и самое главное -а как вы отвечаете на вопрос “сколько принесла фича из 2020 года”?)

Материалы, где можно ознакомиться с методами до наших статей о каждом: 

  1. https://nc233.com/2020/04/causal-inference-cheat-sheet-for-data-scientists/ 

  2. https://mixtape.scunning.com/

  3. https://matheusfacure.github.io/python-causality-handbook/


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


  1. Ananiev_Genrih
    18.09.2024 12:44

    Недавно прочитал эту статью про то как оценивать эффект A/B теста через бинарную классификацию и ROC/AUC. Этот подход укладывается в перечисленные способы нестандартной оценки или это совершенно про разное?


    1. pbaboshkin Автор
      18.09.2024 12:44

      Если я правильно понял посыл статьи, то кажется, что основная идея все-таки о разном:

      • В статье описана идея смены постановки задачи, чтобы проверять некоторые свойства данных.

      • Я привожу конкретные подходы решения уже определенной задачи.

      В примере в статье методом подмены задачи проверяют проверяют однородность разбиение при AB, а не оценивают uplift.