Какие метрики оценки uplift-моделей (Qini, uplift curve)?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Для uplift-моделей важна не просто точность предсказания, а способность правильно ранжировать пользователей по приросту от воздействия. Обычно ожидают упоминания uplift curve, Qini curve и Qini coefficient как основных метрик. Хороший ответ должен показать понимание, что сравнение идет с базовой линией случайного назначения и что метрики оценивают прирост, а не абсолютный отклик.
Определение:
Uplift-метрики измеряют, насколько хорошо модель находит пользователей, для которых воздействие действительно меняет вероятность целевого действия.
Uplift curve показывает накопленный прирост эффекта при последовательном выборе пользователей в порядке убывания предсказанного uplift.
Qini curve — это частный и более популярный вариант uplift curve, где сравнивается накопленный отклик в treatment-группе с ожидаемым откликом по контрольной группе.
Qini coefficient — площадь между Qini curve и базовой линией; чем она больше, тем лучше модель отделяет “согласных” на влияние от тех, кто и так бы совершил действие или не реагирует вовсе.
Пример использования:
Например, у банка есть модель, которая оценивает, кому отправить предложение о кредите. Модель сортирует клиентов по предсказанному uplift, и маркетинг сначала отправляет оффер верхним 10% клиентов. Если uplift curve быстро растет в начале, значит модель хорошо находит сегмент, где предложение реально увеличивает конверсию.
# Упрощенный пример вычисления uplift curve по бинам
# y: факт целевого действия (0/1)
# t: treatment (1 - получил воздействие, 0 - контроль)
# uplift_score: предсказанный uplift
import pandas as pd
df = pd.DataFrame({
"y": [1, 0, 1, 0, 1, 0, 0, 1],
"t": [1, 1, 0, 0, 1, 0, 1, 0],
"uplift_score": [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2]
})
df = df.sort_values("uplift_score", ascending=False)
df["bin"] = pd.qcut(range(len(df)), 4, labels=False)
stats = df.groupby("bin").apply(
lambda g: pd.Series({
"t_rate": g.loc[g.t == 1, "y"].mean() if (g.t == 1).any() else 0,
"c_rate": g.loc[g.t == 0, "y"].mean() if (g.t == 0).any() else 0,
"uplift": (g.loc[g.t == 1, "y"].mean() if (g.t == 1).any() else 0) -
(g.loc[g.t == 0, "y"].mean() if (g.t == 0).any() else 0)
})
)
print(stats)
Пояснение кода:
Код не является обязательным для понимания метрик, но пример показывает идею на практике. Сначала объекты сортируются по uplift_score от самых перспективных к менее перспективным. Затем выборка делится на бины, и для каждого бина считается доля целевого действия в treatment и control. Разница этих долей дает локальный uplift, а его накопление по бинам используется для построения uplift curve или Qini curve.
Ключевые моменты:
- Uplift-модель оценивают не по ROC-AUC, а по качеству ранжирования инкрементального эффекта.
- Uplift curve показывает накопленный прирост эффекта по мере охвата аудитории.
- Qini curve — один из стандартов оценки uplift, особенно в маркетинге и таргетинге.
- Qini coefficient — площадь между Qini curve и baseline; чем выше, тем лучше.
- Важна корректная экспериментальная схема: нужны treatment и control группы, желательно рандомизированные.
- Если данные смещены, uplift-метрики могут быть искажены, поэтому качество эксперимента критично.