Что такое feature importance в линейной регрессии?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое feature importance в линейной регрессии?
Feature importance в контексте линейной регрессии — это мера, которая показывает, насколько каждый признак (feature) влияет на прогноз целевой переменной. Это один из наиболее интерпретируемых аспектов линейных моделей, что делает их ценными инструментами в тех областях, где важна понимаемость решения.
Основные методы оценки Feature Importance
1. Коэффициенты модели (Coefficients)
Самый прямой способ — посмотреть на коэффициенты β в уравнении регрессии:
y = β₀ + β₁·x₁ + β₂·x₂ + ... + βₙ·xₙ
Коэффициент βᵢ показывает, на сколько единиц изменится целевая переменная при изменении i-го признака на одну единицу (при прочих равных). Коэффициент с большим абсолютным значением указывает на более важный признак.
from sklearn.linear_model import LinearRegression
import numpy as np
model = LinearRegression()
model.fit(X, y)
# Получить коэффициенты
importances = np.abs(model.coef_)
for feature, importance in zip(feature_names, importances):
print(f\"{feature}: {importance:.4f}\")
2. Нормализованные коэффициенты (Standardized Coefficients)
Проблема прямых коэффициентов в том, что они зависят от масштаба признаков. Если x₁ измеряется в миллионах, а x₂ в единицах, коэффициент при x₂ будет намного больше, но это не означает его большую важность.
Решение — стандартизировать признаки перед обучением:
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
pipeline = Pipeline([
('scaler', StandardScaler()),
('model', LinearRegression())
])
pipeline.fit(X, y)
importances = np.abs(pipeline.named_steps['model'].coef_)
3. Permutation Importance
Этот метод измеряет, насколько ухудшится качество модели, если случайным образом перемешать значения конкретного признака. Большее ухудшение = больше важность:
from sklearn.inspection import permutation_importance
result = permutation_importance(
model, X_test, y_test,
n_repeats=10,
random_state=42
)
importances = result.importances_mean
for feature, importance in zip(feature_names, importances):
print(f\"{feature}: {importance:.4f}\")
4. Коэффициент детерминации (R²) по признакам
Можно оценить вклад каждого признака в R² модели, вычислив изменение R² при добавлении/удалении признака.
Практические примеры
# Полный пример с интерпретацией
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
import pandas as pd
X, y = load_diabetes(return_X_y=True)
feature_names = load_diabetes().feature_names
# Стандартизация
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Обучение
model = LinearRegression()
model.fit(X_scaled, y)
# Feature importance
importance_df = pd.DataFrame({
'feature': feature_names,
'coefficient': model.coef_,
'abs_coefficient': np.abs(model.coef_)
}).sort_values('abs_coefficient', ascending=False)
print(importance_df)
Важные замечания
- Корреляция vs Причинность: Большой коэффициент не означает, что признак причинно влияет на результат
- Мультиколлинеарность: Если признаки коррелируют между собой, интерпретация коэффициентов затрудняется
- Нелинейные зависимости: Линейная регрессия не уловит нелинейные взаимодействия
- Интерпретируемость vs Производительность: Линейные модели интерпретируемы, но могут уступать по точности