TL;DR

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

Введение

Модели машинного обучения (ML) позволяют делать прогнозы. Но в целом они не используются широко для восстановления причинно-следственной связи. Мне всегда было интересно, могут ли они принести нам пользу для причинного вывода. Я исследую эту самую тему, запустив несколько симуляций, и сообщу сообществу серию статей.

В этой серии я планирую рассмотреть следующие случаи:

  1. (Эта статья) Лечение назначается полностью случайным образом (т. Е. В эксперименте A / B).
  2. У нас есть данные наблюдений, и предположение о незнании остается в силе.
  3. У нас есть данные наблюдений, и ограничение на исключение сохраняется.

Обратите внимание, что я планирую работать с бинарными методами лечения на протяжении всей серии. Если вы никогда не видели терминов «игнорирование» или «ограничение исключения», не беспокойтесь о них сейчас. Я объясню их, когда напишу о них.

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

Далее я рассмотрю несколько примеров моделирования, от простых до сложных для модели в качестве доказательства.

Однородный лечебный эффект

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

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

В этом наборе данных treatment независимо взят из распределения Бернулли с p=0.5. У нас есть 6 функций, кроме лечения. Характеристики a, b и c влияют на результат сложным и нелинейным образом. Характеристики e и f никак не влияют на результат. Эффект лечения 0.1 по всей доске. Наша задача восстановить этот 0.1.

Давайте посмотрим на распределение результатов, сгруппированных по лечению.

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

Давайте создадим модель машинного обучения, которая использует все, что у нас есть (функции от a до f и лечение) для прогнозирования outcome.

Чтобы оценить эффект от лечения, нам нужно выполнить прогноз дважды. Мы устанавливаем treatment на 0 и 1 для всех выборок и прогнозируем результаты соответственно. Затем мы берем разницу двух наборов прогнозов и берем среднее значение разностей. Если модель может восстановить средний эффект лечения, то мы должны получить число, близкое к 0,1.

Мы получили:

Predicted Average Treatment Effect: 0.1028

0,1028, что не равно 0,1, но довольно близко к нему. Значит ли это, что мы проиграем? Или это просто шум? Чтобы ответить на этот вопрос, нам нужна стандартная ошибка и / или доверительный интервал оцениваемого эффекта. Но, к сожалению, у нас нет красивой формулы для стандартной ошибки, потому что модель представляет собой черный ящик. Мы должны найти стандартную ошибку и доверительный интервал с помощью непараметрического бутстрапа.

Результат начальной загрузки выглядит следующим образом:

Мы видим, что предполагаемый эффект действительно очень близок к 0,1, а 95% доверительный интервал покрывает истинное значение. Давайте также нанесем на график результаты всех запусков начальной загрузки, чтобы проверить, выглядит ли распределение разумным.

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

Но вы, вероятно, захотите возразить, что это всего лишь стандартный A / B-тест, и нам не нужен LightGBM для восстановления причинного эффекта. Ты прав. Давайте посмотрим, как работают другие подходы по сравнению с подходом на основе машинного обучения. Давайте сначала проведем стандартный t-тест. Поскольку он настолько стандартен, я опущу код и покажу вам результат здесь:

Очевидно, что ванильный t-тест также восстанавливает эффект. Однако наиболее разительной разницей является стандартная ошибка и доверительный интервал. Здесь стандартная ошибка составляет 280% от ошибки начальной загрузки LightGBM.

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

Первый подход - это линейная регрессия с индикатором лечения и всеми линейными членами признаков (т.е. treatment + a + b + c + d + e + f + constant). Коэффициент при treatment - это предполагаемый эффект, такие пакеты, как statsmodels, дадут нам соответствующую стандартную ошибку и доверительный интервал. Результат выглядит следующим образом.

Расчетный эффект по-прежнему верен, а стандартная ошибка меньше, чем у t-критерия.

Прежде чем я объясню почему, давайте рассмотрим другой подход. Мы по-прежнему будем придерживаться линейной регрессии, но на этот раз давайте добавим несколько полиномиальных членов, чтобы лучше отразить нелинейные эффекты, которые мы использовали ранее. Я добавлю квадратичные и интерактивные термины поверх существующих линейных терминов (то есть мы добавим a**2 + b**2 + … + f**2 + a*b + a*c + … + e*f). И вот результат:

Стандартная ошибка снижается, но все еще далеко от ошибки, основанной на ML.

Что здесь происходит? Почему у нас разные стандартные ошибки и почему одна из моделей машинного обучения самая низкая?

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

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

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

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

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

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

Модели машинного обучения хорошо подходят для неизвестных и сложных функций. С помощью достаточно гибкой модели мы можем максимально подогнать истинную взаимосвязь между функциями (например, от a до f) и результатом. Таким образом, мы можем оставить мало шума для лечения. Вот почему стандартная ошибка на основе ML намного ниже.

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

Опять же, это не 100% научный подход, но вы можете рассматривать эти стандартные отклонения как уровни шума, с которыми колонна обработки должна бороться. Ясно, что модель LightGBM является самой низкой.

Гетерогенные причинные эффекты

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

Я рассмотрю два случая. Первый случай немного проще математически: эффект обработки каждого образца зависит только от свойства c. Во втором случае характеристики a, b и c по-разному влияют на лечебный эффект. Если подход, основанный на ML, может позаботиться об обоих, то я чувствую себя комфортно, полагаясь на модели ML (в данном случае LightGBM) на практике.

Следующий блок - это код, который генерирует результат для двух случаев.

Истинный средний причинный эффект для случая 1 составляет примерно -0.4432, а истинный средний причинный эффект для случая 2 составляет примерно -2.9390 (они вычисляются путем численного интегрирования).

Для случая 1 вот сравнение результатов всех четырех подходов:

И вот результат для случая 2:

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

Что мы узнали из этого упражнения?

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

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

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

На этапе анализа вы можете использовать либо линейную регрессию, либо модели машинного обучения для снижения шума. Я предлагаю вам реализовать оба варианта. Линейная регрессия, хотя и не так эффективна, вычисляется гораздо быстрее. Когда вы используете подход, основанный на машинном обучении, вам необходимо выполнять начальную загрузку, и вам нужно обучать новую модель при каждом запуске начальной загрузки. В этом фиктивном примере всего с 20 тыс. Точек данных подход на основе машинного обучения в бесплатной версии Google Colab занимает около 30 минут, в то время как линейная регрессия происходит почти мгновенно.