Ответ
Uplift-моделирование (моделирование прироста) — это подход в машинном обучении, который оценивает причинно-следственный эффект какого-либо воздействия (например, маркетинговой рассылки, скидки) на конкретного пользователя. Вместо предсказания вероятности отклика (P(отклик | воздействие)), uplift-модель предсказывает прирост этой вероятности из-за воздействия: Uplift = P(отклик | воздействие) - P(отклик | отсутствие воздействия).
Основные методы:
- Мета-алгоритмы (Meta-learners):
- S-Learner: Одна модель, куда воздействие включено как дополнительный признак.
- T-Learner: Две отдельные модели для контрольной и тестовой групп.
- X-Learner: Более сложный метод, особенно эффективный при несбалансированных группах.
- Деревья uplift: Специализированные алгоритмы, такие как Causal Forest, которые непосредственно оптимизируют разницу в исходах.
Пример применения в Python с библиотекой causalml:
from causalml.inference.meta import BaseXRegressor
from sklearn.model_selection import train_test_split
import pandas as pd
# Предположим, у нас есть данные эксперимента
# treatment - бинарный флаг воздействия (1/0)
# y - бинарный или непрерывный исход (например, конверсия)
data = pd.read_csv('experiment_data.csv')
X = data.drop(['treatment', 'y'], axis=1)
treatment = data['treatment']
y = data['y']
X_train, X_val, t_train, t_val, y_train, y_val = train_test_split(X, treatment, y, test_size=0.2)
# Обучение uplift-модели (X-Learner)
uplift_model = BaseXRegressor()
uplift_model.fit(X_train, t_train, y_train)
# Предсказание uplift-скоров для валидационной выборки
uplift_scores = uplift_model.predict(X_val)
# Сортировка пользователей по ожидаемому uplift
val_data = X_val.copy()
val_data['uplift'] = uplift_scores
val_data_sorted = val_data.sort_values('uplift', ascending=False)
Практическое применение: Таргетирование рекламных кампаний на пользователей, которые с наибольшей вероятностью отреагируют именно на воздействие (т.н. «убеждаемые»), что позволяет оптимизировать маркетинговый бюджет.
Ответ 18+ 🔞
Да ты посмотри, что люди придумали, ёпта! Сидят такие, чешут репу, и думают: "А как бы нам не просто в лоб рекламу лупить, а чтоб с умом, по науке?" И родилась эта штука — uplift-моделирование, ядрёна вошь.
Короче, суть проще пареной репы, если не закапываться. Раньше было: кидаем всем спам на почту, смотрим, кто купил. Кто купил — молодец, кто нет — иди на хуй. Но тут же подвох, чувак! А если бы этот, который не купил, и без нашей рассылки бы не купил? А если тот, который купил, и так бы купил, а мы ему просто письмо лишнее отправили? Получается, бюджет на ветер, волнение ебать.
Так вот, uplift — это как раз про то, чтобы найти тех, на кого наше воздействие действительно повлияет. Не тех, кто и так купит (это "лояльные"), и не тех, кого хоть убей, не купят ("безнадёжные"). А найти святых грешников — "убеждаемых". Тех, кто купит только если получит нашу скидку или письмо. Формула проще некуда, бля: берёшь вероятность отклика, если приставали, вычитаешь вероятность отклика, если не приставали. Эта разница и есть uplift, наш священный Грааль.
Как это делают, эти умники?
-
Мета-алгоритмы. Звучит сложно, а на деле — обычные модели, но с фокусом.
- S-Learner: Одна модель-универсал. Засовываешь в неё все признаки пользователя и, внимание, флаг "получил он воздействие или нет". Она тебе и выплюнет результат. Просто, но иногда тупит, как баран на новые ворота.
- T-Learner: Тут уже две отдельные модели. Одна учится на тех, кого трогали (тестовая группа), вторая — на тех, кого не трогали (контрольная). Потом для нового клиента запускаешь обе и смотришь разницу. Уже веселее.
- X-Learner: Это уже для продвинутых, когда группы разного размера. Он там такие финты выкручивает, что мама не горюй. Берёт предсказания от T-Learner, потом на их основе строит ещё модели для ошибок... Короче, хитрая жопа, но зато мощная.
-
Деревья uplift. Это вообще отдельная песня. Это не просто "разделим по зарплате". Эти деревья специально обучены искать такие разбиения в данных, где разница между тестовой и контрольной группой (тот самый uplift) максимальна. Causal Forest, например. Работает, говорят, как швейцарские часы.
Ну и куда это всё приткнуть?
А самое вкусное — применение. Вместо того чтобы дохуя денег тратить на всех подряд, ты с помощью этой модели ранжируешь клиентов. Тех, у кого uplift-скор высокий (настоящие "убеждаемые") — бомбишь рекламой. Остальных — либо не трогаешь, либо кидаешь копеечную рассылку для галочки. Бюджет цел, начальство довольно, все счастливы. Красота!
Вот, смотри, как это в коде выглядит, на примере библиотеки causalml. Код не трогаю, как велено, он и так красивый.
from causalml.inference.meta import BaseXRegressor
from sklearn.model_selection import train_test_split
import pandas as pd
# Допустим, у нас есть данные с эксперимента: кого трогали, кого нет, и что в итоге
data = pd.read_csv('experiment_data.csv')
X = data.drop(['treatment', 'y'], axis=1) # Признаки клиентов
treatment = data['treatment'] # Флаг: 1 - попали под воздействие, 0 - нет
y = data['y'] # Исход: купил (1) или нет (0)
# Делим данные, как полагается
X_train, X_val, t_train, t_val, y_train, y_val = train_test_split(X, treatment, y, test_size=0.2)
# Тренируем модель, возьмём X-Learner, он крутой
uplift_model = BaseXRegressor()
uplift_model.fit(X_train, t_train, y_train)
# Предсказываем uplift-скор: насколько вероятно, что человек купит ИМЕННО из-за нашей акции
uplift_scores = uplift_model.predict(X_val)
# И теперь сортируем этих товарищей по убыванию скоров. Те, кто наверху — наши золотые рыбки!
val_data = X_val.copy()
val_data['uplift'] = uplift_scores
val_data_sorted = val_data.sort_values('uplift', ascending=False)
Вот и вся магия. Сидишь теперь такой, смотришь на отсортированный список и думаешь: "Эх, сейчас бы вам всем, ребята с высоким uplift, персональное предложение сделать...". И делаешь. И прибыль растёт. А доверия ебать ноль было к этой заумной фигне вначале-то!