4.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
Ранжирование признаков примерно одинаково для различных метрик, даже если масштабы значений важности сильно различаются. Однако это не гарантировано, и разные метрики могут привести к существенно разным значениям важности признаков, особенно для моделей, обученных на не сбалансированных наборах данных классификации, для которых выбор метрики классификации может быть критическим.
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. Связь с важностью признаков, основанной на неоднородности, в деревьях
Модели, основанные на деревьях, предоставляют альтернативный способ измерения важности признаков, основанной на среднем уменьшении неоднородности (MDI). Неоднородность измеряется критерием разделения в деревьях решений (Джини, Логарифмическая потеря или Средняя квадратическая ошибка). Однако этот метод может придавать высокую важность признакам, которые могут не быть предсказуемыми на новых данных, когда модель переобучается. Важность признаков методом перестановки, с другой стороны, избегает этой проблемы, так как ее можно вычислять на новых данных.
Кроме того, важность признаков, основанная на неоднородности для деревьев, сильно смещена и предпочитает признаки с высокой кардинальностью (обычно числовые признаки) перед признаками с низкой кардинальностью, такими как бинарные признаки или категориальные переменные с малым количеством возможных категорий.
Важность признаков методом перестановки не имеет такой предвзятости. Кроме того, важность признаков методом перестановки может быть вычислена с любой метрикой эффективности предсказаний модели и может использоваться для анализа любого класса моделей (не только моделей, основанных на деревьях).
Следующий пример демонстрирует ограничения важности признаков, основанной на неоднородности, по сравнению с важностью признаков методом перестановки: Важность признаков методом перестановки против важности признаков случайного леса (MDI).
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/modules/permutation_importance.html