Создайте список с наименованиями признаков для удаления: Питание включено, Наличие wifi и Покупка билета онлайн. Удалите признаки с высокой корреляцией из датасета. Посчитайте метрику при кросс-валидации.
# импортируем библиотеки и объявляем константы
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
)
# считаем метрику при кросс-валидации
score = cross_val_score(
model,
X_train,
y_train,
scoring='roc_auc',
n_jobs=-1).mean()
# выводим метрику при кросс-валидации
print('На всех признаках', score)
# создайте список признаков с высокой корреляцией
columns_to_drop = ['Питание включено',
'Наличие wifi',
'Покупка билета онлайн'
]
# удалите признаки с высокой корреляцией
X_train = X_train.drop(columns_to_drop, axis=1)
X_test = X_test.drop(columns_to_drop, axis=1)
# посчитайте метрику при кросс-валидации
score = cross_val_score(
model,
X_train,
y_train,
scoring='roc_auc',
n_jobs=-1).mean()
# выводим метрику при кросс-валидации
print('После удаления признаков с высокой корреляцией', score)
# обучаем модель
model.fit(X_train, y_train)
# формируем таблицу важности признаков
feature_importances = pd.DataFrame(
{
'Feature': X_train.columns,
'Importance': model.feature_importances_
})
# сортируем таблицу по важности — от большей к меньшей
print(feature_importances.sort_values('Importance', ascending=False))
Результат
На всех признаках 0.9148717462642197
После удаления признаков с высокой корреляцией 0.916758766857235
Feature Importance
3 Оценка качества уборки 0.401343
7 Оценка комфортности времени отправления/прибытия 0.157569
2 Оценка комфортности места 0.106722
14 Оценка качества питания_плохо 0.078694
4 Оценка качества обслуживания в пути 0.074666
6 Оценка качества wifi 0.069322
5 Оценка комфортности покупки билета онлайн 0.032713
1 Расстояние 0.021542
13 Оценка качества питания_отсутствует 0.021529
10 Путешествует по работе_нет 0.020439
0 Возраст 0.012417
8 Пол_муж 0.001671
9 Путешествует с детьми_нет 0.001373
11 Тип_плацкарт 0.000000
12 Тип_св 0.000000
15 Оценка качества питания_хорошо 0.000000