Порог принятия решения
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 17 из 58.
predict говорит «да», когда вероятность превышает 0.5 — порог. Но пропущенная неисправность экрана может обойтись дороже, чем повторная проверка. Сдвинем порог вниз:
Ложное срабатывание — это помеченный чистый экран. Выберите собственный порог с помощью сравнения:
proba = model.predict_proba(X_test)[:, 1]
flag = proba >= 0.3 # True: проверьте этот экранНиже — больше выявленных реальных случаев и больше ложных срабатываний; выше — наоборот. Вероятности не меняются, меняется только порог.
Выбирайте его, исходя из цены каждой ошибки.
Задание
СреднеАвиакомпания перебронирует билеты пассажиров, которые, вероятно, не успеют на стыковочный рейс, ещё до того, как их самолёт приземлится. Стартовый код обучает модель на данных из connections.csv и считывает порог.
- Получите вероятности того, что пассажиры из тестовой выборки не успеют на стыковочный рейс.
- Для значения 0.5, а затем для порога, подсчитайте количество пассажиров, которым перебронировали билеты, количество выявленных случаев опоздания (из всех случаев опоздания) и количество ненужных перебронирований.
- Выведите отдельную строку для каждого порога.
Для другой авиакомпании и 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())
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python