Menu
CoddyTech

判定しきい値

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 17/58。

predict は、確率がしきい値である 0.5 を超えると「はい」と判定します。しかし、不良画面を見逃すと、もう一度確認するよりも大きな損失になることがあります。しきい値を下げてみましょう:

不良である確率に沿って並んだ14台のスマートフォン画面:不良を示す四角形が6個、正常を示す点が8個。しきい値が0.5の場合、6件中4件の不良を検出し、誤警報は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. 閾値ごとに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())

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ