Menu
CoddyTech

Ngưỡng quyết định

Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 17 trên 58.

predict trả lời có khi xác suất vượt quá 0.5, ngưỡng threshold. Nhưng bỏ sót một màn hình lỗi có thể gây tốn kém hơn việc xem xét lại. Hạ ngưỡng xuống:

Mười bốn màn hình điện thoại trên một đường biểu diễn xác suất bị lỗi: sáu ô vuông bị lỗi, tám chấm bình thường. Ở ngưỡng 0.5, phát hiện được 4 trong số 6 lỗi với 1 báo động giả; ở ngưỡng 0.3, phát hiện được cả 6 lỗi với 4 báo động giả

Cảnh báo giả (false alarm) là một màn hình bình thường bị đánh dấu. Hãy chọn ngưỡng riêng bằng một phép so sánh:

proba = model.predict_proba(X_test)[:, 1]
flag = proba >= 0.3  # True: kiểm tra màn hình này

Ngưỡng thấp hơn giúp phát hiện nhiều trường hợp thực tế hơn và tạo ra nhiều cảnh báo nhầm hơn; ngưỡng cao hơn thì ngược lại. Các xác suất không bao giờ thay đổi, chỉ có ngưỡng là khác.

Hãy chọn dựa trên cái giá phải trả cho mỗi sai lầm.

challenge icon

Thử thách

Trung bình

Một hãng hàng không đặt lại vé cho những hành khách có khả năng lỡ chuyến nối chuyến trước khi họ hạ cánh. Phần code có sẵn huấn luyện một mô hình trên connections.csv và đọc một ngưỡng.

  1. Lấy xác suất lỡ chuyến nối chuyến của các hành khách trong tập kiểm tra.
  2. Với 0.5, rồi đến ngưỡng, hãy đếm số hành khách được đặt lại vé, số trường hợp lỡ chuyến thực sự được phát hiện (trong tổng số trường hợp lỡ chuyến) và số lần đặt lại vé không cần thiết.
  3. In một dòng cho mỗi ngưỡng.

Với một hãng hàng không khác và 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

Tự làm thử

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

# Mỗi hành khách một hàng: thời gian nối chuyến và thời gian chuyến bay đến bị trễ tính bằng phút, đổi terminal (1 hoặc 0), số hành lý ký gửi; missed là 1 hoặc 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())

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Học có giám sát

Tự luyện tập: Trình biên dịch Python online