← Назад к вопросам

Что такое uplift моделирование?

3.0 Senior🔥 91 комментариев
#Машинное обучение#Статистика и A/B тестирование

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

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое uplift моделирование?

Uplift моделирование (CATE — Conditional Average Treatment Effect) — это набор методов машинного обучения для предсказания индивидуального эффекта воздействия (treatment effect) для каждого конкретного объекта. В отличие от классических моделей, которые предсказывают результат, uplift модели предсказывают разницу в результатах при наличии и отсутствии вмешательства.

Практическое применение

Uplift моделирование критически важно в маркетинге и бизнесе:

  • Маркетинг: Какой клиент воспользуется скидкой, а какой купит даже без неё?
  • Здравоохранение: Какому пациенту действительно поможет новое лечение?
  • Политика: На кого повлияет политическая реклама?
  • Рекомендательные системы: Какому пользователю нужна рекомендация для увеличения покупок?

Основное отличие от классической классификации/регрессии

Классическая модель: P(conversion | features) = 0.3
Uplift модель: P(conversion|treatment) - P(conversion|control) = 0.15
                (т.е. вероятность увеличится на 15% благодаря воздействию)

Методы реализации

1. Two-Model Approach (T-Learner)

Обучить две отдельные модели — одну на тестовой группе, другую на контрольной:

from sklearn.ensemble import RandomForestRegressor
import numpy as np

# Разделить данные на treatment и control группы
treatment_data = X[y_treatment == 1]
control_data = X[y_control == 0]

# Обучить две модели
model_treatment = RandomForestRegressor()
model_control = RandomForestRegressor()

model_treatment.fit(treatment_data, y[y_treatment == 1])
model_control.fit(control_data, y[y_control == 0])

# Uplift = разница прогнозов
uplift = model_treatment.predict(X) - model_control.predict(X)

2. Single-Model Approach (S-Learner)

Обучить одну модель со специальной фичей, указывающей группу (treatment vs control):

X_augmented = np.column_stack([X, treatment_indicator])
model = RandomForestRegressor()
model.fit(X_augmented, y)

# Предсказать для обеих групп и вычислить разницу
X_with_treatment = np.column_stack([X, np.ones(len(X))])
X_without_treatment = np.column_stack([X, np.zeros(len(X))])

uplift = model.predict(X_with_treatment) - model.predict(X_without_treatment)

3. X-Learner (Cross-fitting)

Более продвинутый метод, рекомендуется для реальных приложений:

from sklearn.model_selection import cross_val_predict

# Шаг 1: Обучить модели на исходных данных
model_t = RandomForestRegressor()
model_c = RandomForestRegressor()

# Шаг 2: Вычислить residuals для каждой группы
residuals_t = y[treatment == 1] - model_t.predict(X[treatment == 1])
residuals_c = y[treatment == 0] - model_c.predict(X[treatment == 0])

# Шаг 3: Обучить финальные модели на остатках
final_model_t = RandomForestRegressor()
final_model_c = RandomForestRegressor()

final_model_t.fit(X[treatment == 1], residuals_t)
final_model_c.fit(X[treatment == 0], residuals_c)

# Uplift = взвешенная комбинация
uplift = final_model_t.predict(X) + final_model_c.predict(X)

Как использовать результаты

# Сортировать клиентов по uplift и выбрать топ для кампании
top_uplift_indices = np.argsort(uplift)[::-1][:1000]

# Оценить ROI кампании
# Отправить письмо топ-1000 клиентам и мерить конверсию
# Ожидаемый доход = средний uplift × количество клиентов × цена
expected_revenue = uplift[top_uplift_indices].mean() * 1000 * price

Важные замечания

  • Требуется рандомизированный A/B тест: Нужны реальные данные о treatment и control группах, иначе результаты будут смещены
  • Данные должны быть чистыми: Любая систематическая ошибка в распределении лечения испортит результаты
  • Интерпретация: Нужно различать положительный, нулевой и отрицательный uplift (некоторые клиенты могут отреагировать противоположно)
  • Гетерогенность эффекта: Разные подгруппы могут по-разному реагировать на одно и то же воздействие