КАУЗАЛЬНАЯ НАУКА ДАННЫХ

Понимание мета-обучающихся

Как использовать машинное обучение для оценки разнородных эффектов лечения

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

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

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

Пример

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

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

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

Мы генерируем смоделированные данные, используя процесс генерации данных dgp_premium() из src.dgp. Я также импортирую некоторые графические функции и библиотеки из src.utils.

from src.utils import *
from src.dgp import dgp_premium
dgp = dgp_premium()
df = dgp.generate_data(seed=5)
df.head()

У нас есть данные о 300 пользователях, для которых мы наблюдаем revenue, которые они генерируют, и была ли им дана функция premium. Кроме того, мы также записываем age пользователей.

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

from causalml.match import create_table_one

create_table_one(df, 'premium', ['age', 'revenue'])

Большинство пользователей находятся в контрольной группе, и только 31 пользователь получил премиум-функцию. Среднее значение age сопоставимо по группам (стандартизированная средняя разница, SMD‹0,1), в то время как премиум-функция увеличивает revenue на 2,59 доллара в среднем на пользователя.

Эффект функции premium отличается от пользователейage?

Одним из простых подходов может быть регрессия revenue на полное взаимодействие premium и возраста.

linear_model = smf.ols('revenue ~ premium * age', data=df).fit()
linear_model.summary().tables[1]

Коэффициент взаимодействия близок к нулю и незначителен. Кажется, что разницы между premium и age нет. Но так ли это? Коэффициент взаимодействия фиксирует только линейные отношения. Что делать, если связь нелинейная?

Мы можем проверить это, напрямую построив необработанные данные. Мы наносим revenue на age, разделяя данные между premium пользователями и пользователями без премиум-аккаунта.

sns.scatterplot(data=df, x='age', y='revenue', hue='premium', s=40);

Из необработанных данных видно, что revenue обычно выше для людей в возрасте от 30 до 50 лет, а premium особенно сильно влияет на людей в возрасте от 35 до 45 лет.

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

Сначала мы вычисляем прогнозируемый доход с (μ̂₁) и без функции premium (μ̂₀) и наносим их вместе с необработанными данными.

df['mu0_hat'] = linear_model.predict(df.assign(premium=0))
df['mu1_hat'] = linear_model.predict(df.assign(premium=1))
plot_TE(df)

Как мы видим, оранжевая линия выше синей, что свидетельствует о положительном влиянии premium на revenue. Однако две линии по существу параллельны, что свидетельствует об отсутствии разнородности эффектов лечения.

Можем ли мы быть более точными? Есть ли способ оценить эту неоднородность лечения гибким способом, не принимая функциональных форм?

Ответ да! Мы можем использовать методы машинного обучения для гибкой оценки разнородных эффектов лечения. В частности, мы рассмотрим три популярных метода, которые были представлены Künzel, Sekhon, Bickel, Yu, (2019):

  • S-учащийся
  • T-учащийся
  • X-ученик

Параметр

Мы предполагаем, что для набора предметов i=1, …, n мы наблюдали набор (Xᵢ, Dᵢ, Yᵢ), состоящий из

  • лечебное задание Dᵢ∈{0,1} (premium)
  • ответ Yᵢ∈ℝ (revenue)
  • вектор признаков Xᵢ∈ℝⁿ (age)

Нас интересует оценка среднего эффекта лечения.

Где Yᵢ⁽ᵈ⁾указывает на потенциальный результат индивидуального лечения i со статусом лечения d. Мы также делаем следующие предположения.

Предположение 1: несмешанность (или игнорирование, или выбор на наблюдаемых)

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

Допущение 2: стабильная стоимость единицы лечения (SUTVA)

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

S-учащийся

Самый простой метаалгоритм — это один учащийся или S-учащийся. Чтобы построить оценщик S-учащегося, мы подобрали одну модель μ для всех наблюдений.

оценка определяется разницей между прогнозируемыми значениями, оцененными с обработкой и без нее, d=1 и d=0 соответственно.

Давайте воспользуемся моделью регрессии дерева решений для построения S-leaner, используя функцию DecisionTreeRegressor из пакета sklearn. Я не буду здесь вдаваться в подробности о деревьях решений, а просто скажу, что это непараметрическая оценка, которая использует обучающие данные для разделения пространства состояний (premium и age в нашем случае) на блоки и предсказывает результат (revenue в нашем случае) как его среднее значение в каждом блоке.

from sklearn.tree import DecisionTreeRegressor

model = DecisionTreeRegressor(min_impurity_decrease=0.001)
S_learner(dgp, model, y="revenue", D="premium", X=["age"])

На графике представлены данные вместе с функциями отклика μ̂(x,1) и μ̂(x,0). Я также выделил серым цветом область между истинными функциями отклика: истинные эффекты лечения.

Как мы видим, S-обучающийся достаточно гибок, чтобы понять, что существует разница в уровнях между экспериментальной и контрольной группой (у нас есть две отдельные линии). Он также хорошо отражает функцию отклика для контрольной группы, μ̂(x,1), но не так хорошо описывает контрольную функцию для экспериментальной группы,μ̂(x,1).

Проблема с S-обучающимся заключается в том, что он изучает одну модель, поэтому мы должны надеяться, что модель выявит неоднородность в обработке D , но может быть и не так. Более того, если модель сильно регуляризована из-за высокой размерности X, она может не восстановить никакого эффекта обработки. Например, с деревьями решений мы можем не разделить переменную обработки D.

T-учащийся

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

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

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

T_learner(dgp, model, y="revenue", D="premium", X=["age"])

Как мы видим, T-обучающийся намного более гибок, чем S-обучающийся, потому что он соответствует двум отдельным моделям. Функция отклика для контрольной группы μ̂⁽⁰⁾(x) по-прежнему очень точна, а функция отклика для экспериментальной группы μ̂⁽¹⁾(x) стал более гибким, чем раньше.

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

X-ученик

Метод оценки перекрестного или X-учащегося является расширением метода оценки T-learner. Он строится следующим образом:

  1. Что касается T-learner, вычислитеотдельные модели для μ̂⁽¹⁾(x) и μ̂⁽⁰ ⁾(x) с использованием обработанных и контрольных единиц соответственно
  2. Вычислите промежуточную дельта-функцию как

3. Прогнозирование Δ по X, вычисление τ̂⁽¹⁾(x) по обработанным единицам и τ̂⁽⁰ ⁾(x) от блоков управления

4. Оцените показатель склонности, т. е. вероятность лечения

5. Рассчитайте эффект лечения

Чтобы лучше понять, как работает X-learner, мы хотели бы, как и раньше, отобразить функции отклика. Однако метод не опирается напрямую на функции отклика. Можем ли мы восстановить функции псевдоответа? Да!

Во-первых, мы можем переписать эффекты лечения как

Таким образом, функции псевдоответа, оцененные X-learner, равны

Как мы видим, X-learner объединяет истинные значения Yᵢ⁽ᵈ⁾ с оценочными значениями μ̂ᵢ⁽ᵈ⁾(x) взвешивания по показателям склонности eᵢ(x), т. е. предполагаемым вероятностям лечения.

Что это значит? Это означает, что если для некоторых наблюдаемых мы можем четко разделить экспериментальную и контрольную группы, то контрольная функция отклика μ̂ᵢ⁽ᵈ⁾ получит большую часть веса. Вместо этого, если две группы неразличимы, наибольший вес получат фактические результаты Yᵢ⁽ᵈ⁾.

Чтобы проиллюстрировать этот метод, я собираюсь построить псевдо-функции отклика, аппроксимируя Yᵢ⁽ᵈ⁾ с помощью ближайшего наблюдения, используя функцию KNeighborsRegressor. Я оцениваю показатели склонности с помощью логистической регрессии, используя функцию LogisticRegressionCV.

X_learner(df, model, y="revenue", D="premium", X=["age"])

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

Заключение

В этом посте мы видели различные оценщики, представленные Künzel, Sekhon, Bickel, Yu, (2019), которые используют гибкие алгоритмы машинного обучения для оценки гетерогенных эффектов лечения. Оценки различаются по степени сложности: S-обучаемый подходит к одной оценке, включающей показатель лечения в качестве ковариаты. T-learnner подходит для двух отдельных оценщиков для экспериментальной и контрольной групп. Наконец, X-learner является расширением T-learner, которое обеспечивает разную степень гибкости в зависимости от количества данных, доступных в экспериментальной и контрольной группах.

Оценка эффекта разнородного лечения необходима для целевого лечения, что особенно актуально в отрасли. Действительно, эта литература в настоящее время быстро растет и привлекает большое внимание. Среди множества других работ важно упомянуть процедуру R-learner из Nie and Wager (2021) и каузальные деревья и леса из Athey and Wager (2018). Возможно, я напишу больше об этих процедурах в будущем, так что следите за обновлениями ☺️

Рекомендации

[1] С. Кюнцель, Дж. Сехон, П. Бикель, Б. Ю, Metalearners для оценки гетерогенных эффектов лечения с использованием машинного обучения (2019), PNAS.

[2] X. Ни, С. Вагер, Квазиоракульная оценка эффектов разнородного лечения (2021), Биометрика.

[3] С. Ати, С. Вейджер, Оценка и вывод эффектов гетерогенного лечения с использованием случайных лесов (2018 г.), Журнал Американской статистической ассоциации.

Статьи по Теме

Код

Вы можете найти оригинальный блокнот Jupyter здесь:



Спасибо за чтение!

Я очень ценю это! 🤗Если вам понравился пост и вы хотели бы увидеть больше, рассмотрите возможность подписаться на меня. Я публикую сообщения раз в неделю на темы, связанные с причинно-следственными выводами и анализом данных. Я стараюсь, чтобы мои сообщения были простыми, но точными, всегда предоставляя код, примеры и симуляции.

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