Удалите признак с утечкой из тренировочной и тестовой выборок.
# импортируем библиотеки и объявляем константы
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import RandomizedSearchCV
RANDOM_STATE = 42
# подготавливаем данные заранее созданной функцией
# в код добавили кодирование ранговых и неранговых переменных
X_train, X_test, y_train, y_test = prepare_data('railway_full.csv')
# удалите признак с утечкой данных
leak_column = 'Общая оценка качества предоставленной услуги'
X_train_no_leak = X_train.drop(leak_column, axis=1)
X_test_no_leak = X_test.drop(leak_column, axis=1)
# инициализируем модель дерева решений
model = DecisionTreeClassifier(random_state=RANDOM_STATE)
# создаём словарь с гиперпараметрами
parameters = {
'min_samples_split': range(2, 11),
'min_samples_leaf': range(1, 11),
'max_depth': range(2, 11),
}
# создаём экземпляр объекта для случайного поиска гиперпараметров
rs_no_leak = RandomizedSearchCV(
model,
parameters,
n_jobs=-1,
scoring='roc_auc',
random_state=RANDOM_STATE
)
# запускаем поиск гиперпараметров
rs_no_leak.fit(X_train_no_leak, y_train)
# выводим лучшую метрику и гиперпараметры
print(f'Best score: {rs_no_leak.best_score_}, best params: {rs_no_leak.best_params_}')
Результат
Best score: 0.9148717462642197, best params: {'min_samples_split': 9, 'min_samples_leaf': 10, 'ma