列車の遅延
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 61/64。
通勤路線のMapleとBirchは、駅を共有しています。24日間、それぞれの路線のラッシュアワーの列車がどれだけ遅れたかを、trains.csvに記録しました。
3件の信号故障により、列車は1時間以上運行を止められました。これは実際に起きたことですが、平均値を大きく左右するほどの規模です。
マネージャーが尋ねます。Mapleは本当に遅いのでしょうか、それともその差は偶然かもしれないのでしょうか?極端な値の影響を抑えたら、あとはシャッフルで判断しましょう。
チャレンジ
難しいプログラムは境界係数 k を読み込みます。1.5 は箱ひげ図のルールです。
Q1 - k * IQRとQ3 + k * IQRで遅延時間の上下限を設定し、外れ値を数えてから、すべての遅延時間をnp.clipで上限・下限内に収めます。- 各路線の上限・下限処理後の遅延時間の平均と、Maple から Birch を引いた差を出力します。
- 2000 回シャッフルします。Maple の上限・下限処理後の遅延時間、次に Birch のものをプールし、各ラウンドで
rng.permutationを 1 回実行して、先頭の 24 個を偽の Maple とします。 - 符号を無視した p 値と判定を出力します。0.05 未満なら
unlikely to be chance、それ以外ならcould be chanceです。
平均は小数第 2 位、p 値は小数第 3 位まで丸めます。k = 2 の場合:
Fences: 0.25 to 26.5 (3 outliers)
Maple mean: 15.27
Birch mean: 12.21
Difference: 3.06
p-value: 0.03
Verdict: unlikely to be chancek をより厳しく、または緩くした場合も、この判定は変わりませんか?
自分で試してみよう
import numpy as np
import pandas as pd
k = float(input())
df = pd.read_csv("trains.csv")
delays = df["delay_min"]
# 以下の行は変更しないでください
rng = np.random.default_rng(5)
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ