Уберите неважные признаки из датасета и проверьте качество модели:
- Из тренировочного датасета удалите столбцы с важностью меньше 0.02.
- Посчитайте метрику при кросс-валидации на изменённом датасете.
# импортируем библиотеки и объявляем константы
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
RANDOM_STATE = 42
# подготавливаем данные заранее созданной функцией
# в код добавили кодирование ранговых и неранговых переменных,
# удаление признаков с утечкой данных и высокой корреляцией
X_train, X_test, y_train, y_test = prepare_data('railway_full.csv')
# инициализируем и обучаем модель дерева решений с лучшими гиперпараметрами
model = DecisionTreeClassifier(
max_depth=7,
min_samples_leaf=10,
min_samples_split=9,
random_state=RANDOM_STATE
).fit(X_train, y_train)
# считаем метрику при кросс-валидации
score = cross_val_score(
model,
X_train,
y_train,
scoring='roc_auc',
n_jobs=-1).mean()
# выводим метрику при кросс-валидации
print('На всех признаках', score)
# формируем таблицу важности признаков
feature_importances = pd.DataFrame(
{
'Feature': X_train.columns,
'Importance': model.feature_importances_
})
# формируем список признаков с важностью менее 0.02
features_to_drop = feature_importances[
feature_importances['Importance'] < 0.02
]['Feature'].to_list()
# удалите признаки с важностью меньше 0.02 из датасета
X_train_less_features = X_train.drop(features_to_drop, axis=1)
X_test_less_features = X_test.drop(features_to_drop, axis=1)
# инициализируем модель дерева решений с лучшими гиперпараметрами
model = DecisionTreeClassifier(
max_depth=7,
min_samples_leaf=10,
min_samples_split=9,
random_state=RANDOM_STATE
)
# посчитайте метрику при кросс-валидации
score = cross_val_score(
model,
X_train_less_features,
y_train,
scoring='roc_auc',
n_jobs=-1).mean()
# выводим метрику при кросс-валидации
print('На признаках с важностью более 0.02', score)
Результат
На всех признаках 0.916758766857235
На признаках с важностью более 0.02 0.9188241358271905