Привет, Хабр!
Uplift-моделирование — это метод оценки эффекта от воздействия, который использует алгоритмы ML для предсказания изменения вероятности интересуемого события под влиянием этого воздействия. Зачастую цель Uplift заключается в выявление тех клиентов, которые с наибольшей вероятностью изменят своё поведение в желаемую сторону в ответ на предложение.
Uplift-модели считают разницу между вероятностями наступления события в обработанной и контрольной группах. С ними можно предсказать результат и определить, был ли он действительно вызван проведенной кампанией.
Основные подходы к Uplift-моделированию
T-Learner
T-Learner, или Two-model learner метод включает в себя обучение двух отдельных моделей ML: одна для обработанной группы и одна для контрольной группы. Затем разница в прогнозах этих двух моделей используется для оценки from lightgbm import LGBMClassifier from sklearn.model_selection import train_test_split # загрузим данные X_train, X_test, y_train, y_test, treatment_train, treatment_test = load_your_data() # определим и обучим модель для обработанной группы treatment_model = LGBMClassifier().fit(X_train[treatment_train == 1], y_train[treatment_train == 1]) # определим и обучим модели для контрольной группы control_model = LGBMClassifier().fit(X_train[treatment_train == 0], y_train[treatment_train == 0]) # прогнозирование treatment_preds = treatment_model.predict_proba(X_test)[:, 1] control_preds = control_model.predict_proba(X_test)[:, 1] # расчет uplift uplift = treatment_preds - control_preds
Основная идея X-Learner заключается в двухэтапном процессе, где сначала обучаются две модели: одна на контрольной группе, другая на обработанной группе. Затем вычисляются «импутированные» эффекты лечения, которые используются для обучения второго ряда моделей для оценки CATE. Представим, что компания проводит маркетинговую кампанию и хочет оценить, как различные виды воздействия влияют на вероятность покупки у разных клиентов. Используя X-Learner, можно было бы оценить, какой тип сообщения наиболее лучше для различных сегментов клиентов на основе их характеристик. Можно реализовать в Питоне с помощью библиотеки CausalML: S-learner представляет собой подход, в котором используется единая модель ML для оценки воздействия на основе всех доступных данных, включая информацию о том, подвергался ли объект воздействию или нет. Это достигается путем добавления переменной воздействия как доп. признака в данные. В scikit-uplift есть Параметр Метод преобразования классов представляет собой подход, при котором целевая переменная трансформируется таким образом, чтобы упростить задачу моделирования и применить стандартные методы ML для классификации. Фича метода заключается в том, что он переопределяет целевую переменную, позволяя модели предсказать изменённую цель, которая отражает воздействие интервенции. Метод основан на создании новой целевой переменной Z, которая определяется следующим образом: где: Yi — исходный ответ (например, совершил ли юзер покупку), Wi — бинарный индикатор воздействия (например, получил ли юзер рекламное сообщение). Значение Zi равно 1, если юзер отреагировал на воздействие так же, как и ожидалось, и 0 в противном случае. Можно реализовать с К слову, метод преобразования классов предполагает, что обработанные и контрольные группы сбалансированы. Среди наиболее юзабельных метрик: Uplift@k — измеряет эффективность модели по достижению улучшения в верхней части списка ранжирования, которое часто используют для оценки кампаний с ограниченным бюджетом. AUUC — это общая мера качества модели, которая показывает, насколько хорошо модель отделяет «леченные» и «не леченные» объекты по всей выборке. AUQC — аналогична AUUC, но применяется для оценки качества модели в контексте конкретной рекламной кампании, показывая, как модель способствует увеличению конверсии. Пример вычисления метрик на T-learner с использованием Рассчитали AUUC и Uplift@k, которые показывают общую эффективность модели и ее способность улучшать результаты на «верхнем срезе» данных. Все актуальные методы и инструменты DS и ML можно освоить на онлайн-курсах OTUS: в каталоге можно посмотреть список всех программ, а в календаре — записаться на открытые уроки.X-Learner
from causalml.inference.meta import BaseXRegressor from xgboost import XGBRegressor from sklearn.model_selection import train_test_split import pandas as pd # данные df = pd.read_csv('path_to_data.csv') X = df.drop(['outcome', 'treatment_indicator'], axis=1) y = df['outcome'] treatment = df['treatment_indicator'] # разбиение данных на обучающую и тестовую выборки X_train, X_test, y_train, y_test, treatment_train, treatment_test = train_test_split(X, y, treatment, test_size=0.2, random_state=42) # инициализация и обучение X-Learner x_learner = BaseXRegressor(learner=XGBRegressor(max_depth=4, learning_rate=0.1, n_estimators=100)) x_learner.fit(X=X_train, treatment=treatment_train, y=y_train) # оценка CATE cate_estimates = x_learner.predict(X_test)S-learner
SoloModel и с ним можно легко интегрировать этот подход. В качестве оценщика может использоваться любой классификатор CatBoostClassifier, который поддерживает параметры verbose и random_state.from sklift.models import SoloModel from catboost import CatBoostClassifier model = SoloModel(CatBoostClassifier(verbose=100, random_state=777)) model.fit(X_train, y_train, treatment_train, estimator_fit_params={'plot': True}) uplift = model.predict(X_val)X_train, y_train, treatment_train и X_val представляют собой тренировочные и валидационные наборы данных.plot=True в estimator_fit_params позволяет визуализировать процесс обучения.Методы, основанные на преобразовании классов
scikit-uplift и классификатором CatBoostClassifier:from sklift.models import ClassTransformation from catboost import CatBoostClassifier import pandas as pd import numpy as np # предполагаем, что X_train, y_train, treat_train и X_val уже загружены # создадим и настроим модельку ct_model = ClassTransformation(CatBoostClassifier(verbose=100, random_state=42)) # обучим модельку ct_model.fit(X_train, y_train, treat_train) # предскажим uplift uplift_predictions = ct_model.predict(X_val)Метрики
scikit-uplift:from sklift.metrics import qini_auc_score, uplift_at_k from sklift.models import TwoModels from catboost import CatBoostClassifier # подготовка данных: X_train, y_train, treat_train, X_test, y_test model_treat = CatBoostClassifier(iterations=100, learning_rate=0.1, random_state=42) model_control = CatBoostClassifier(iterations=100, learning_rate=0.1, random_state=42) # инициализация T-Learner tm = TwoModels(estimator_trmnt=model_treat, estimator_ctrl=model_control, method='vanilla') # обучение модели tm = tm.fit(X_train, y_train, treat_train) # предсказание uplift_tm = tm.predict(X_test) # вычисление метрик uplift_auc_score = qini_auc_score(y_test, uplift_tm, treat_test) uplift_score_at_30 = uplift_at_k(y_test, uplift_tm, treat_test, strategy='by_group', k=0.3) print(f"Qini AUC score: {uplift_auc_score}") print(f"Uplift at 30%: {uplift_score_at_30}")
ссылка на оригинал статьи https://habr.com/ru/articles/811185/
Добавить комментарий