Напишите свою функцию для подсчёта FPR. Проверьте, действительно ли так много ложноположительных ответов даёт модель. Чтобы это сделать, примените функцию к тестовой выборке из датасета о пассажирских перевозках. Напомним, как высчитывается FPR:

FPR= FP / (FP+TN)

В функции для расчёта FPR используйте матрицу ошибок из sklearn.

Напомним, как выглядит функция для подготовки данных.

Как устроена функция prepare_data()

# импортируем библиотеки и объявляем константы
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder

RANDOM_STATE = 42
TEST_SIZE = 0.25

def prepare_data(filename):
    # считываем данные из CSV-файла и задаём id в качестве индексов
    df = pd.read_csv(filename)
    df = df.set_index('id')

    # делим данные на входные и целевые
    X = df.drop(['Удовлетворён предоставленной услугой'], axis=1)
    y = df['Удовлетворён предоставленной услугой']

    # делим данные на тренировочные и тестовые

# импортируем библиотеки и объявляем константы
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import confusion_matrix
from sklearn.tree import DecisionTreeClassifier

RANDOM_STATE = 42

# подготавливаем данные заранее созданной функцией
X_train, X_test, y_train, y_test = prepare_data('train_satisfaction.csv')

# инициализируем модель с лучшими значениями гиперпараметров
model = DecisionTreeClassifier(
    max_depth=4,
    min_samples_leaf=1,
    min_samples_split=2,
    random_state=RANDOM_STATE
)

# обучаем модель дерева решений на тренировочной выборке
model.fit(X_train, y_train)

# получите предсказания на тестовой выборке
y_pred = model.predict(X_test)

# напишите функцию для подсчёта метрики FPR
def get_false_positive_rate(y_true, y_pred):
    conf_matrix = confusion_matrix(y_test, y_pred)
    fpr = conf_matrix[0][1] /(conf_matrix[0][1] + conf_matrix[0][0])
    return fpr

# посчитайте метрику FPR на тестовых данных и выведите результат
print (get_false_positive_rate(y_test, y_pred))

    X_train, X_test, y_train, y_test = train_test_split(
        X,
        y,
        test_size=TEST_SIZE,
        random_state=RANDOM_STATE,
        stratify=y)

    # создаём список со строковыми категориями для кодирования
    cols_ohe = X_train.select_dtypes(include='object').columns.tolist()

    # создаём экземпляр класса OneHotEncoder для кодирования
    oh_encoder = OneHotEncoder(drop='first', sparse=False)

    # обучаем OneHotEncoder на категориальных признаках из тренировочной выборки
    oh_encoder.fit(X_train[cols_ohe])

    # сохраняем в переменной encoder_col_names список названий новых столбцов
    encoder_col_names = oh_encoder.get_feature_names_out()

    # преобразовываем категориальные переменные в тренировочной и тестовой выборках
    X_train[encoder_col_names] = oh_encoder.transform(X_train[cols_ohe])
    X_test[encoder_col_names] = oh_encoder.transform(X_test[cols_ohe])

    # удаляем преобразованные признаки
    X_train = X_train.drop(cols_ohe, axis=1)
    X_test = X_test.drop(cols_ohe, axis=1)

    return X_train, X_test, y_train, y_test

Результат
0.6893617021276596