ЛР3
Почему клиент уходит

Задание 2.2 · 1 балл

Почему клиент уходит

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

Интерпретируемость
Можно ли объяснить человеку, почему модель так решила.
MDI
Mean Decrease in Impurity: сколько в сумме уменьшился индекс Джини во всех узлах, где делили по признаку, среднее по деревьям.
Перестановочная важность
Перемешиваем один столбец в test и смотрим, насколько упал ROC-AUC.
SHAP
Ещё один способ, раскладывает каждый прогноз на вклады признаков. Здесь не понадобился: два способа выше уже согласны.
На пальцах, перестановка. Хочешь понять, насколько повару важна соль, подмени соль случайной специей. Если блюдо стало сильно хуже, соль важна. Если никто не заметил, не важна.

Поиграй: перемешай признак

Игрушечная модель: «уйдёт, если возраст больше 45 или продуктов 3 и больше». Перемешай столбец и посмотри, сколько ответов осталось верными.

Код: перестановочная важность

def permutation_importance(model, X, y, score, n_repeats=5, seed=42):
    rng = np.random.default_rng(seed)
    base = score(y, model, X)
    drops = {}
    for column in X.columns:
        losses_ = []
        for _ in range(n_repeats):
            X_shuffled = X.copy()
            X_shuffled[column] = rng.permutation(X_shuffled[column].to_numpy())
            losses_.append(base - score(y, model, X_shuffled))
        drops[column] = np.mean(losses_)
    return pd.Series(drops)
  1. base качество без порчи (ROC-AUC 0.859).
  2. for column in X.columns портим по очереди каждый признак.
  3. rng.permutation(...) перемешиваем значения столбца: связь признака с ответом рвётся, а распределение значений остаётся тем же.
  4. n_repeats=5 перемешиваем 5 раз и усредняем, чтобы не зависеть от одного случайного перемешивания.
  5. score передаётся снаружи: для оттока ROC-AUC, для продолжительности жизни R² (та же функция в задании 2.3).
Две столбчатые диаграммы важности признаков
Слева MDI, справа падение ROC-AUC при перемешивании. В обоих лидеры: число продуктов, возраст, баланс, активность.
ПризнакMDIПадение ROC-AUC
NumOfProducts0.2070.138
Age0.3000.118
Balance0.1290.041
IsActiveMember0.0770.031
Geography_Germany0.0370.024
EstimatedSalary0.0850.001
CreditScore0.084около 0
Ловушка: MDI любит «многозначные» признаки. Зарплата и кредитный рейтинг имеют тысячи разных значений, деревьям легко найти по ним деление, подходящее к случайностям train. Поэтому MDI даёт им 0.085, а перестановка на test показывает почти 0: на новых клиентах они не помогают.

В какую сторону

Доля ушедших по возрасту, числу продуктов, активности и стране
Красная линия: в среднем уходит 20%.

После перемешивания признака качество не изменилось. Что это значит?

Вопросы на защите

Чем MDI отличается от перестановки?

MDI считается на train из устройства деревьев и завышает признаки с большим числом значений. Перестановка считается на test по реальному падению качества и показывает, чем модель пользуется на новых данных.

Почему у некоторых признаков важность отрицательная?

После перемешивания ROC-AUC случайно стал чуть выше (на тысячные). Значит, признак не важен, это шум.

Что посоветуешь банку?

Особое внимание клиентам 45-60 лет, неактивным, из Германии и с одним или 3-4 продуктами.

Одна фразаВажность смотрел через MDI и перестановку на test: главное число продуктов, возраст, баланс, активность и Германия; зарплата и кредитный рейтинг почти не влияют.