Menu
CoddyTech

Порог принятия решения

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 17 из 58.

predict говорит «да», когда вероятность превышает 0.5 — порог. Но пропущенная неисправность экрана может обойтись дороже, чем повторная проверка. Сдвинем порог вниз:

Четырнадцать экранов телефонов на линии, показывающей вероятность неисправности: шесть неисправных квадратов, восемь исправных точек. При пороге 0.5 обнаруживаются 4 из 6 неисправностей с 1 ложным срабатыванием; при 0.3 — все 6 с 4 ложными срабатываниями

Ложное срабатывание — это помеченный чистый экран. Выберите собственный порог с помощью сравнения:

proba = model.predict_proba(X_test)[:, 1]
flag = proba >= 0.3  # True: проверьте этот экран

Ниже — больше выявленных реальных случаев и больше ложных срабатываний; выше — наоборот. Вероятности не меняются, меняется только порог.

Выбирайте его, исходя из цены каждой ошибки.

challenge icon

Задание

Средне

Авиакомпания перебронирует билеты пассажиров, которые, вероятно, не успеют на стыковочный рейс, ещё до того, как их самолёт приземлится. Стартовый код обучает модель на данных из connections.csv и считывает порог.

  1. Получите вероятности того, что пассажиры из тестовой выборки не успеют на стыковочный рейс.
  2. Для значения 0.5, а затем для порога, подсчитайте количество пассажиров, которым перебронировали билеты, количество выявленных случаев опоздания (из всех случаев опоздания) и количество ненужных перебронирований.
  3. Выведите отдельную строку для каждого порога.

Для другой авиакомпании и 0.25:

Threshold 0.5: 9 rebooked, 7 of 15 misses caught, 2 needless rebookings
Threshold 0.25: 21 rebooked, 13 of 15 misses caught, 8 needless rebookings

Попробуйте сами

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Одна строка на каждого пассажира: время пересадки и задержка прибывающего рейса в минутах, смена терминала (1 или 0), зарегистрированный багаж; missed принимает значение 1 или 0
trips = pd.read_csv("connections.csv")
features = ["layover_min", "delay_min", "terminal_change", "checked_bags"]
X_train, X_test, y_train, y_test = train_test_split(trips[features], trips["missed"], test_size=0.25, random_state=0)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
threshold = float(input())

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python