Как ИИ помогает в продуктовых исследованиях?

Как ИИ помогает в продуктовых исследованиях?
Изображение AI
Не каждый продукт можно проверить A/B-тестом. Иногда сервис уже работает, отключать его для части пользователей нельзя, а понять реальный эффект нужно здесь и сейчас. В таких случаях ИИ помогает найти «двойников» среди пользователей и оценить результат так, будто эксперимент все-таки состоялся.

В продуктовой аналитике A/B-тестирование остается золотым стандартом проверки гипотез: строгая рандомизация, чистые группы, понятная интерпретация. Но на практике провести корректный эксперимент получается не всегда. Иногда проведение A/B-теста невозможно по техническим или бизнес-причинам, иногда группы формируются естественным путем, без нашего участия. Бывает, что результат нужен быстро и ждать полноценного теста просто нет возможности. А иногда изменение уже случилось, и нужно оценить его эффект ретроспективно, по историческим данным. При этом бизнес не перестает ждать ответов. Гипотезы нужно проверять вне зависимости от того, позволяет ли ситуация поставить эксперимент.

Именно с таким случаем я столкнулся в своей практике. Я занимаюсь аналитикой продукта внутри более крупной экосистемы, и перед командой встал вопрос: какую реальную ценность наш продукт приносит экосистеме в целом? Казалось бы, задача понятная, но рандомизированный эксперимент тут не провести. Продукт уже давно существует, выключить его для части аудитории невозможно. А просто сравнить пользователей «с продуктом» и «без» тоже не корректно: те, кто его открыл, изначально более лояльны к экосистеме. Факт самого решения подключиться уже говорит об отличии этой аудитории от остальных. Сравнивать их напрямую, значит измерять не эффект продукта, а изначальные различия между аудиториями.

Для решения этой задачи мы применили метод Propensity Score Matching (PSM). Это метод на основе машинного обучения для подбора сопоставимых групп. О том, как он работает, как мы его реализовывали, с какими проблемами столкнулись я расскажу в этой статье.

Какую задачу решали?

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

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

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

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

Для решения этой задачи мы выбрали Propensity Score Matching, это статистический метод на базе двух моделей машинного обучения, который набирает популярность в продуктовых исследованиях. Метод формирует псевдо-контрольную группу, статистически сходную с тестовой по исходным признакам, и позволяет оценить эффект воздействия даже там, где провести честный эксперимент невозможно.

Как работает PSM?

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

Для решения этой задачи обучается propensity модель — первый этап метода. Результатам работы этой модели является propensity score — вероятность того, что конкретный пользователь попал бы в тестовую группу, исходя из его характеристик. Грубо говоря, это оценка того, насколько пользователь был «склонен» оказаться в тесте.

Получить ее можно так: берем всех пользователей, тестовых и контрольных, и обучаем модель классификации, которая по характеристикам пользователя предсказывает, попал ли он в тест. В качестве признаков используем все, что описывает пользователя до воздействия в продукте: демографию, историю активности, поведенческие метрики, продуктовые характеристики. Для обучения модели мы использовали градиентный бустинг — один из самых сильных методов для решения таких задач. На выходе каждый пользователь получает одно число от 0 до 1 — его propensity score.

Качество модели классификации здесь имеет диагностический смысл. Если ROC-AUC выше 0.6, модель различает тест и контроль, а значит, группы действительно отличаются и PSM нужен. Другими словами, у модели получилось найти паттерны, по которым она может различать пользователей теста и контроля, что доказывает отсутствие случайного разделения. Если ROC-AUC близок к 0.5, группы и так похожи, и можно обойтись обычным сравнением без PSM.

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

Как мы строили PSM?

Важное отличие от A/B-теста: все исследование проводится на уже имеющихся данных. Нет никакой рандомизации, нет запуска эксперимента. Есть исторические логи и задача получить из них честное сравнение. Я опишу пять шагов решения этой задачи, которые мы прошли.

Шаг 1. Определили дату воздействия

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

Контроль мы намеренно взяли значительно больше, чем пользователей в тесте — примерно десять к одному. Это требование самого метода: при маленькой контрольной группе алгоритму просто не из кого выбирать подходящие пары.

Шаг 2. Собрали признаки

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

Шаг 3. Построили модель propensity score

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

Шаг 4. Выполнили matching

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

Шаг 5. Проверили качество

Построить группы недостаточно, нужно доказать, что они действительно сопоставимы. Мы проверили несколько вещей. Во-первых, ROC-AUC модели propensity score был выше 0.6, а значит группы действительно отличались до matching и PSM был оправдан. Во-вторых, после matching распределения propensity score в тесте и псевдо-контроле стали неразличимы, как и распределения ключевых признаков, это говорит о том, что пользователи в полученных группах действительно похожи. И главное мы провели AA-тест: убедились, что целевые метрики в обеих группах не отличаются до даты воздействия.

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

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

Практические рекомендации и выводы

Закончу несколькими советами, которые сложились по итогам работы с методом.

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

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

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

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

Опубликовано 19.06.2026

Похожие статьи