Propensity Score Matching (Causal Inference ч. 2). Сегодня обсудим то, что такое, рассмотрим какие-то кейсы и то, как можно интерпретировать то, что получается с помощью этого метода

Итак, представьте, вы раскатили фичу на всех, оценить эффект может быть очень тяжело, либо невозможно по причинам, указанным выше. Например, запустили какой-то функционал, хотите понять эффект спустя какое-то время на срезе тех пользователей, кто пользуется фичой. Но тут у вас возникает вопрос (скорее всего), а с кем сравнивать вообще, как оценить влияние на бизнес? Должно быть понятно, что если мы раскатили фичу на срез пользователей в >=50%, то матчить будет не из кого.

Наверное, вы или ваш менеджер продукта определяет различные сроки проектов, т.е. с этим у нас проблем нет (treatment date, предположим, у нас есть). Это означает, что мы знаем фактическую дату раскатку фичи, формата и так далее, но нам важно честно замерить эффект. Ранее я прикреплял видео по PSM, где аналитик из Маркета рассказывал то, как оценивать эффект.

Как это реализуется? У нас есть срез пользователей, кто является для нас таргетом. Для них нужно подобрать репрезентативный контроль таким образом, чтобы в предпериоде (так же, как и при рандомной семплировании при A/B тестировании) целевые метрики / ковариаты не расходились. В общем случае в различных сегментах наши пользователи могут различаться (например, нашей фичой пользуется сегмент богатых, а мы сравниваем их со всеми, нечестно, получается). На данном этапе мы хотим подобрать максимально похожих пользователей на основе некого значения Propensity Score (прикрепил статейку от X5, тут очень интересно можно прочитать про это) и тут Алгоритм: 1. Собираем признаковое пространство на сущность, которую мы хотим тестировать с таргетом - отнесение к определенному срезу пользователей (бинарная случайная величина). 2. Определяем вероятность отнесения к определенной группе, можно воспользоваться predict_proba для любого классификатора, в качестве бейзлайна 3. На выходе нам нужно подобрать наиболее подходящие группы по Propensity Score (можно использовать Nearest Neighbors, предварительно обученной на тритменте, поскольку мы предполагаем, что тритмента меньше, чем контроля + нам нужно замерить именно ATT, Average Treatment Effect of the Treated), таким образом получить наложенные друг на друга плотности вероятности ковариат (признаки) и таргета (целевой метрики, например, количество заказов).

На выходе получаем группу пользователей (не всегда 1:1, в зависимости от того, какое можно задать правило, у этого есть свои приколы). Вопрос того, насколько сильный дисбаланс и насколько маленькая группа (среди тех, кого надо матчить). Статейка со с цитатой ниже Classical 1:1 matching without replacement may not be the most suitable approach when the number of individuals enrolled in a study is small, and when an imbalance in terms of treated and untreated subjects is present. Moreover, the initial sample size of the study, which is generally small, can be further reduced, increasing the sampling variability associated with the treatment effect estimate and reducing the accuracy of the findings

Далее можно построить временные ряды на предпериоде, получить то, что мы могли бы сделать при рандомной семплировании в A/B тестировании (метрики не должны разъезжаться на предпериоде). Далее, мы можем отобразить эффект как ступеньку, которую можно будет увидеть графически, либо применить статистический тест.

У метода могут быть проблемы, если сравнивать с классическим A/B тестом (в т. ч. сложность интерпретации, много условий, определенные искажения и смещения

🍪🍪 Если вам было интересно, ставьте реакции, пересылайте друзьям / коллегам, пишите комментарии, а я в следующих постах разберу более подробно другие вариации или разберу статейки по Propensity Scores, различные подходы и др.