4.2. Вычисление важности признаков с помощью перестановки¶
Вычисление важности признаков (Permutation feature importance) - это метод проверки модели, который измеряет вклад каждого признака в статистические характеристики подобранной модели в заданном наборе табличных данных. Этот метод особенно полезен для нелинейных или непрозрачных моделей и включает в себя случайное перемешивание значений одного признака и наблюдение за результирующим ухудшением оценки модели [1]. Разрывая связь между признаками и целью, мы определяем, насколько модель полагается на этот конкретный признак.
На следующих рисунках мы наблюдаем влияние перестановки признаков на корреляцию между признаком и целью и, следовательно, на статистические характеристики модели.
На верхнем рисунке мы видим, что перестановка прогнозируемого признака нарушает корреляцию между признаком и целью, и, следовательно, статистическая эффективность модели снижается. На нижнем рисунке мы видим, что перестановка непрогнозируемого признака не приводит к значительному ухудшению статистических характеристик модели.
Одним из ключевых преимуществ важности признака при перестановке является то, что он не зависит от модели, т.е. его можно применять к любому подобранному средству оценки. Более того, его можно рассчитывать несколько раз с различными перестановками признака, что дополнительно обеспечивает измерение дисперсии предполагаемой важности признака для конкретной обученной модели.
На рисунке ниже показана важность признаков перестановки RandomForestClassifier
, обученной на расширенной версии набора данных Titanic, который содержит признаки random_cat
и random_num
, т.е. категориальный и числовой признак, который никак не коррелирует с целевой переменной:
Предупреждение
Признаки, которые считаются низко важными для плохой модели (низкая оценка кросс-валидации), могут быть очень важными для хорошей модели. Поэтому всегда важно оценить предсказательную силу модели, используя удерживаемый набор (или, лучше, с кросс-валидацией), прежде чем вычислять значимость. Важность перестановки отражает не внутреннюю прогностическую ценность признака как такового, а насколько важен этот признак для конкретной модели.
Функция permutation_importance
вычисляет важность признаков модели для данного набора данных. Параметр n_repeats
устанавливает количество случайных перетасовок объекта и возвращает выборку важности объекта.
Давайте рассмотрим следующую обученную регрессионную модель:
>>> from sklearn.datasets import load_diabetes
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.linear_model import Ridge
>>> diabetes = load_diabetes()
>>> X_train, X_val, y_train, y_val = train_test_split(
... diabetes.data, diabetes.target, random_state=0)
...
>>> model = Ridge(alpha=1e-2).fit(X_train, y_train)
>>> model.score(X_val, y_val)
0.356...
Эффективность валидации, измеренная с помощью показателя \(R^2\), значительно превышает уровень вероятности.
Это позволяет использовать функцию permutation_importance
для определения того, какие признаки являются наиболее прогнозируемыми:
>>> from sklearn.inspection import permutation_importance
>>> r = permutation_importance(model, X_val, y_val,
... n_repeats=30,
... random_state=0)
...
>>> for i in r.importances_mean.argsort()[::-1]:
... if r.importances_mean[i] - 2 * r.importances_std[i] > 0:
... print(f"{diabetes.feature_names[i]:<8}"
... f"{r.importances_mean[i]:.3f}"
... f" +/- {r.importances_std[i]:.3f}")
...
s5 0.204 +/- 0.050
bmi 0.176 +/- 0.048
bp 0.088 +/- 0.033
sex 0.056 +/- 0.023
Обратите внимание, что значения важности для основных признаков составляют значительную часть эталонного балла 0.356.
Значимость перестановок может быть вычислена либо на обучающем наборе, либо на отложенном наборе тестирования или проверки. Использование расширенного набора позволяет выделить, какие признаки в наибольшей степени способствуют обобщению проверяемой модели. Признаки, которые важны для обучающего набора, но не для валидационного набора, могут привести к переобучению модели.
Важность признаков перестановки зависит от функции оценки, указанной в аргументе scoring
.
Этот аргумент принимает несколько моделей, что более эффективно в вычислительном отношении, чем последовательный вызов permutation_importance
несколько раз с разными оценками, поскольку он повторно использует предсказания модели.
В примере ниже мы используем список метрик для оценок, но возможны и другие форматы ввода, как описано в Использование множественной метрической оценки. Ранжирование признаков примерно одинаково для разных метрик, даже если шкалы значений важности сильно различаются.
Однако это не гарантируется, и разные метрики могут привести к существенно разной важности признаков, особенно для моделей, обученных для несбалансированных задач классификации, для которых выбор метрики классификации может иметь решающее значение.
Пример важности признаков по перестановкам с использованием нескольких показателей
Click for more details
¶
>>> scoring = ['r2', 'neg_mean_absolute_percentage_error', 'neg_mean_squared_error']
>>> r_multi = permutation_importance(
... model, X_val, y_val, n_repeats=30, random_state=0, scoring=scoring)
...
>>> for metric in r_multi:
... print(f"{metric}")
... r = r_multi[metric]
... for i in r.importances_mean.argsort()[::-1]:
... if r.importances_mean[i] - 2 * r.importances_std[i] > 0:
... print(f" {diabetes.feature_names[i]:<8}"
... f"{r.importances_mean[i]:.3f}"
... f" +/- {r.importances_std[i]:.3f}")
...
r2
s5 0.204 +/- 0.050
bmi 0.176 +/- 0.048
bp 0.088 +/- 0.033
sex 0.056 +/- 0.023
neg_mean_absolute_percentage_error
s5 0.081 +/- 0.020
bmi 0.064 +/- 0.015
bp 0.029 +/- 0.010
neg_mean_squared_error
s5 1013.866 +/- 246.445
bmi 872.726 +/- 240.298
bp 438.663 +/- 163.022
sex 277.376 +/- 115.123
4.2.1. Краткое описание алгоритма важности признаков при перестановки¶
Входные данные: подобранная прогнозирующая модель \(m\), табличный набор данных (для обучения или валидации) \(D\).
Вычислить эталонную оценку \(s\) модели \(m\) по данным \(D\) (например, точность для классификатора или \(R^2\) для регрессор).
Для каждого признака \(j\) (из колонки \(D\)):
За каждое повторение \(k\) в \({1, ..., K}\):
Случайным образом перетасовать столбец \(j\) набора данных \(D\) для создания поврежденной версии данных с именем \(\tilde{D}_{k,j}\).
Вычислить оценку \(s_{k,j}\) модели \(m\) по поврежденным данным \(\tilde{D}_{k,j}\).
Вычислить важность \(i_j\) для признака \(f_j\) определяется как:
\[i_j = s - \frac{1}{K} \sum_{k=1}^{K} s_{k,j}\]
4.2.2. Связь с важностью примесей в деревьях¶
Древовидные модели обеспечивают альтернативную меру важности признаков, основанную на среднем уменьшении примесей (Mean Decrease in Impurity - MDI). Примеси количественно оцениваются по критерию разделения деревьев решений (Джини, логарифмические потери или среднеквадратическая ошибка). Однако этот метод может придавать большое значение признакам, которые могут быть непрогнозируемыми для новых данных, когда модель переобучается. С другой стороны, важность признаков на основе перестановок позволяет избежать этой проблемы, поскольку ее можно вычислить на новых данных.
Кроме того, важность признаков, основанная на примесях, для деревьев сильно смещена и отдает предпочтение признакам с высокой мощностью (обычно числовым признакам) по сравнению с признаками с низкой мощностью, такими как бинарные признаки или категориальные переменные с небольшим количеством возможных категорий.
Значимость признаков на основе перестановок не демонстрирует такой предвзятости. Кроме того, важность признаков при перестановки может быть рассчитана с использованием любой метрики производительности прогнозов модели и может использоваться для анализа любого класса модели (а не только моделей на основе дерева).
Следующий пример подчеркивает ограничения важности признаков на основе примесей в отличие от важности признаков на основе перестановок: Permutation Importance vs Random Forest Feature Importance (MDI).
4.2.3. Вводящие в заблуждение значения сильно коррелирующих признаков¶
Когда два признака коррелируют и один из признаков переставляется, модель по-прежнему имеет доступ к последнему через коррелированный признак. Это приводит к более низкому сообщаемому значению важности для обоих признаков, хотя они на самом деле могут быть важными.
На рисунке ниже показана важность признаков при перестановки RandomForestClassifier
, обученного с использованием Breast cancer wisconsin (diagnostic) dataset, который содержит сильно коррелированные признаки. Наивная интерпретация предполагает, что все признаки не важны:
Один из способов решения этой проблемы - кластеризовать коррелированные признаки и сохранить только один признак из каждого кластера.
Более подробную информацию о такой стратегии см. в примере. Permutation Importance with Multicollinear or Correlated Features.