Привет, Хабр! Меня зовут Дмитрий Тихомиров, я работаю в блоке «Финансы» в команде разработки HypEx (Hypotheses and Experiments) — open source-библиотеки для Python. Наша команда хотела придумать ёмкое название для фреймворка, чтобы оно отражало суть происходящего и помогало раскрыть наш инструмент, который буквально помогает работать с гипотезами и проводить эксперименты.

В интернете уже очень много статей и инструментов про А/B-тестирование: как его правильно проводить, какие метрики использовать и всё-всё-всё. Однако что делать, когда забыли провести дизайн пилот необходимо протестировать гипотезу, но применение А/B-тестов невозможно из-за юридических, этических или практических ограничений? Допустим, как узнать, в каких категориях клиенты начинают тратить больше после получения кредита? Провести классическое А/B-тестирование здесь невозможно: мы не можем заставить одних людей брать кредит, а других — нет.

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

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

Теоретические основы мэтчинга

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

Мэтчинг — это статистическая методика уравновешивания или устранения различий в наблюдениях между контрольной и целевой группами. Это достигается подбором «близнецов» из контрольной группы для каждого участника целевой группы на основе ряда ключевых переменных. Цель — гарантировать, что любые различия между группами обусловлены исключительно интересующим нас воздействием или вмешательством, а не другими факторами.

Как работает метод мэтчинга?

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

Далее, для каждого участника экспериментальной группы стремимся найти наиболее подходящего «близнеца» из контрольной группы. Мы ищем с помощью различных алгоритмов, включая nearest-neighbor matching, propensity score matching и другие методы.

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

В чём отличие мэтчинга от A/B-тестирования?

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

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

Примеры применения мэтчинга в различных областях

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

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

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

Почему мэтчинг непросто?

Мэтчинг — это мощный инструмент в анализе данных, но его эффективное применение требует учёта ряда сложностей и нюансов:

  • Подбор соответствующих пар. Одна из ключевых задач сопоставления — это поиск подходящих пар из контрольной группы для каждого участника экспериментальной группы. Несмотря на большие объёмы данных, найти «идеальное совпадение» для каждого индивида может быть крайне сложно, особенно в условиях высокой уникальности характеристик.

  • Высокая размерность данных. С увеличением количества переменных, которые необходимо учитывать, пространство для сравнения становится значительно сложнее. Это может привести к снижению точности сопоставления, или даже сделать его невозможным из‑за «проклятия размерности».

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

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

Почему мэтчинг хорош?

Он позволяет моделировать уникальные ситуации, в которых два различных объекта рассматриваются как «один и тот же» в разных условиях. Это достигается с помощью поиска объектов в целевой группе, максимально схожих с объектами из контрольной группы. Сравнивая эти «сопоставленные» объекты, мы можем анализировать разницу в их показателях и оценивать эффект нашего воздействия.

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

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

А как считать-то?

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

Эксперимент: влияние новой банковской программы на клиентов

Цель: оценить влияние новой банковской программы, направленной на увеличение лояльности клиентов, на две ключевые метрики: удовлетворённость клиентов (target_1) и их финансовую активность (target_2).

Первым делом установите библиотеку HypEx и импортируйте необходимые модули. Это базовый шаг для начала работы.

!pip install hypex
import pandas as pd
import numpy as np
from hypex import Matcher

Затем загрузите набор данных или создайте его с помощью специального класса в HypEx.

data = DataGenerator(na_columns=[‘feature_3’, ‘feature_2’],
    num_features=2,
    num_targets=2)
data.df

Набор данных:

  • info_1, info_2: идентификаторы и дополнительные метаданные клиентов (например, тип клиентского счёта).

  • feature_1... feature_4: различные характеристики клиентов, включая демографические данные (пол, возраст), типы вкладов, историю транзакций и т. д.

  • treatment: индикатор участия клиента в новой программе (1 — участвовал, 0 — не участвовал).

  • target_1, target_2: целевые переменные, отражающие удовлетворённость клиентов и их финансовую активность соответственно.

Важно определить целевые переменные и маркер воздействия на пользователя (treatment). Для удобства анализа и сравнения результатов эксперимента в HypEx предусмотрен параметр info_col, куда можно поместить второстепенные колонки, такие как user_id, которые не участвуют в мэтчинге.

info_col = [data.info_col_names[0]]
out_come = data.target_names
treatment = data.teratment_name

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

Получив набор данных с размеченным параметрами, остаётся это всё положить в Matcher и вызвать метод для подсчёта всех результатов:

model = Matcher(input_data=data.df, outcome=outcome, treatment=treatment, info_col=info_col)
results, quality_results, df_matched = model.estimate()

Закидываем всё это в модель, и-и-и-и (тут все пользователи Causal Inference напряглись, потому что приготовились ждать долго, но...) сразу же смотрим результаты по каждой целевой переменной.

В данном случае для первой целевой переменной мы получили статистически значимый результат по всем метрикам. В то же время по второй переменной такого не произошло.

Просмотр пар. Хотите визуально сравнить сопоставленные пары? HypEx позволяет просматривать и сравнивать характеристики сопоставленных объектов.

Оценка качества мэтчинга. Для проверки качества сопоставления в HypEx доступны различные тесты и метрики, включая PSI, тест Колмогорова-Смирнова, анализ разницы средних и количество повторов. Эти результаты представлены в переменной quality_results.

И что, всё?

В рамках повышения точности и надёжности нашего подхода мы внедрили в HypEx три ключевых метода проверки результатов:

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

  2. Использование случайных характеристик. При этом методе в анализ включаются случайные характеристики. Если результаты анализа не меняются существенно, это свидетельствует о стабильности и надёжности модели. Можно исключить вероятность того, что обнаруженные эффекты являются результатом случайных колебаний в данных.

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

Многие специалисты, знакомые с анализом причинно-следственных связей, могут заметить: «Подожди, но библиотека Causal Inference делает то же самое». И, в определённом смысле, они будут правы. Однако наша библиотека предлагает целый ряд уникальных преимуществ:

  • Скорость работы. HypEx оптимизирована для быстрой обработки больших объёмов данных, значительно ускоряя время анализа.

  • Обработка больших объемов данных. Наш инструмент эффективно работает как с малыми, так и с крупными наборами данных, обеспечивая качественное сравнение.

  • Множество метрик. В дополнение к стандартным метрикам HypEx предлагает PSI‑test, тест Колмогорова‑Смирнова, SMD‑тест, и учитывает количество повторов.

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

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

  • Возможность задать веса характеристикам. HypEx позволяет придать дополнительное значение определённым характеристикам в вашем исследовании.

  • Автоматический Feature Selection. Если вы не уверены, какие характеристики необходимы для вашего исследования, наша библиотека предлагает решения для автоматического отбора наиболее релевантных характеристик. На практике, в ряде экспериментов это помогало увидеть, что множество характеристик, которые мы изначально считали важными, — избыточны.

  • Мультитаргет. Оценка воздействия на несколько переменных одновременно без необходимости повторного запуска эксперимента для каждой целевой переменной.

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

Сравнение скорости сопоставления в Сausal Inference и HypEx (на основе Google Colab):

Causal Inference

HypEx

(100 000, 5)

300 секунд

30 секунд

(500 000, 5)

4 часа

2 минуты

(1 000 000, 5)

Не считает

20 минут

(5 000 000, 5)

Не считает

1 час 10 минут

Что-то тут не так. В чём секрет?

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

Как выглядит конвейер под капотом HypEx?

  1. Базовая предобработка данных. Очистка и подготовка данных для анализа.

  2. Автоматический подбор характеристик. При желании пользователя применяется LAMA для оптимального отбора характеристик.

  3. Поворот пространства характеристик. Используется разложение Холецкого для преобразования L2-расстояния в расстояние Махаланобиса.

  4. Поиск «близнецов» через Faiss. Поиск аналогов в контрольной группе для целевой и наоборот.

  5. Коррекция смещения. Расчет bias для учёта возможного смещения в данных.

  6. Расчет ключевых метрик. Включая ATE, ATT и ATC.

  7. Статистический анализ. Детальное изучение полученных данных.

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

Что в планах

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

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

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

Выводы

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

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

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