Как оценивал важность признаков в модели машинного обучения?

«Как оценивал важность признаков в модели машинного обучения?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для оценки важности признаков я использовал несколько методов, в зависимости от типа модели и требований к интерпретируемости.

1. Встроенная важность признаков (для ансамблей на деревьях)

# Для RandomForest, XGBoost, LightGBM
import pandas as pd
import matplotlib.pyplot as plt

# Получение важности
feature_importance = pd.Series(
    model.feature_importances_,
    index=X_train.columns
).sort_values(ascending=False)

# Визуализация
plt.figure(figsize=(10, 6))
feature_importance.head(15).plot.barh()
plt.title('Top 15 Feature Importances')
plt.xlabel('Importance Score')
plt.tight_layout()
plt.show()

2. Permutation Importance (универсальный метод)

Этот метод показывает, насколько упадет качество модели, если «испортить» конкретный признак, перемешав его значения. Он работает для любых моделей.

from sklearn.inspection import permutation_importance

result = permutation_importance(
    model, X_test, y_test,
    n_repeats=10,  # Количество перестановок для стабильности
    random_state=42,
    n_jobs=-1
)

# Сортировка и вывод
sorted_idx = result.importances_mean.argsort()[::-1]
for idx in sorted_idx[:10]:
    print(f"{X_test.columns[idx]:<30} {result.importances_mean[idx]:.4f} ± {result.importances_std[idx]:.4f}")

3. SHAP (SHapley Additive exPlanations) для детальной интерпретации

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

import shap

# Для tree-based моделей
shap_explainer = shap.TreeExplainer(model)
shap_values = shap_explainer.shap_values(X_test)

# Summary plot для глобальной важности
shap.summary_plot(shap_values, X_test, plot_type="bar")

# Beeswarm plot для распределения влияний
shap.summary_plot(shap_values, X_test)

Ключевые моменты при выборе метода:

  • feature_importances_ — быстрый, но может завышать вес признаков с большим количеством уникальных значений.
  • Permutation Importance — более надежный, но требует больше вычислений. Хорош для сравнения важности между разными типами моделей.
  • SHAP — самый ресурсоемкий, но дает наиболее полную картину, включая направление влияния (положительное/отрицательное) и анализ отдельных наблюдений.

На практике я часто начинаю с Permutation Importance для отбора ключевых признаков, а затем использую SHAP для глубокого анализа и объяснения бизнесу, почему модель принимает те или иные решения.