5.2. Перестановочная важность признаков
Перестановочная важность признаков — это метод анализа модели, который измеряет вклад каждого признака в статистическую эффективность обученной модели на заданном табличном наборе данных. Этот метод особенно полезен для нелинейных или непрозрачных оценивателей: он заключается в случайном перемешивании значений одного признака и наблюдении за последующим снижением оценки модели [1]. Нарушая связь между признаком и целевой переменной, мы определяем, насколько сильно модель опирается на этот конкретный признак.
На следующих рисунках показано влияние перестановки признаков на корреляцию между признаком и целевой переменной и, как следствие, на статистическую эффективность модели.
На верхнем рисунке видно, что перестановка предиктивного признака нарушает корреляцию между признаком и целевой переменной, в результате чего статистическая эффективность модели снижается. На нижнем рисунке видно, что перестановка непредиктивного признака не приводит к значительному снижению статистической эффективности модели.
Одно из ключевых преимуществ перестановочной важности признаков заключается в том, что она не зависит от модели, то есть может применяться к любому обученному оценивателю. Кроме того, её можно вычислять несколько раз с разными перестановками признака, получая дополнительную оценку дисперсии важности признаков для конкретной обученной модели.
На рисунке ниже показана перестановочная важность признаков для RandomForestClassifier, обученного на расширенной версии набора данных «Титаник», содержащей признак 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 с разными оценщиками, поскольку при этом повторно используются предсказания модели.
Пример перестановочной важности признаков с использованием нескольких оценщиков
В примере ниже используется список метрик, однако возможны и другие форматы входных данных, как описано в разделе Использование оценки по нескольким метрикам.
>>> 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
Ранжирование признаков для разных метрик примерно одинаково, даже если шкалы значений важности существенно различаются. Однако это не гарантируется: разные метрики могут приводить к существенно различающимся оценкам важности признаков, особенно для моделей, обученных для задач классификации с несбалансированными классами, где выбор метрики классификации может иметь решающее значение.
5.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}\]
-
5.2.2. Связь с важностью на основе неоднородности в деревьях
Модели на основе деревьев предоставляют альтернативную оценку важности признаков на основе среднего уменьшения неоднородности (MDI). Неоднородность определяется критерием разбиения деревьев решений (Gini, Log Loss или среднеквадратичная ошибка). Однако этот метод может придавать высокую важность признакам, которые не обладают предсказательной способностью на новых данных, если модель переобучена. В свою очередь, важность признаков на основе перестановок позволяет избежать этой проблемы, поскольку её можно вычислять на новых данных.
Кроме того, важность признаков на основе неоднородности для деревьев сильно смещена и отдаёт предпочтение признакам с высокой кардинальностью (обычно числовым признакам) перед признаками с низкой кардинальностью, такими как бинарные признаки или категориальные переменные с небольшим числом возможных категорий.
Важность признаков на основе перестановок не подвержена такому смещению. Кроме того, её можно вычислять с помощью любой метрики эффективности предсказаний модели и использовать для анализа моделей любого класса (не только моделей на основе деревьев).
В следующем примере показаны ограничения важности признаков на основе неоднородности в сравнении с важностью на основе перестановок: Перестановочная важность и важность признаков случайного леса (MDI).
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/permutation_importance.html