判定しきい値
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 17/58。
predict は、確率がしきい値である 0.5 を超えると「はい」と判定します。しかし、不良画面を見逃すと、もう一度確認するよりも大きな損失になることがあります。しきい値を下げてみましょう:
誤警報とは、問題のない画面にフラグが付けられることです。比較演算子を使って、しきい値を自分で選びましょう。
proba = model.predict_proba(X_test)[:, 1]
flag = proba >= 0.3 # True: この画面を確認するしきい値を低くすると、より多くの実際のケースを検出し、誤警報も増えます。高くすると、その逆になります。確率は変わらず、変わるのはしきい値だけです。
それぞれの間違いによるコストを基準に選びましょう。
チャレンジ
中級航空会社は、乗客が乗り継ぎに間に合わない可能性が高い場合、乗客が着陸する前に予約を変更します。スターターコードはconnections.csvでモデルを学習させ、閾値を読み込みます。
- テスト対象の乗客が乗り継ぎに失敗する確率を取得します。
- 0.5、次に閾値について、予約を変更する乗客数、実際に乗り継ぎに失敗した乗客のうち検出できた人数(失敗した全員のうち)、不要な予約変更の数を数えます。
- 閾値ごとに1行を出力します。
別の航空会社で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人につき1行:乗り継ぎ時間と到着便の遅延時間は分単位、ターミナル変更の有無(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())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ