Menu
CoddyTech

列車の遅延

CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 61/64。

通勤路線のMapleとBirchは、駅を共有しています。24日間、それぞれの路線のラッシュアワーの列車がどれだけ遅れたかを、trains.csvに記録しました。

2路線の遅延の箱ひげ図:Mapleの箱は約15分の位置にあり、信号障害を示す91分の点と、低い位置に4分の点がある。Birchの箱は約11分の位置にあり、信号障害を示す63分と74分の点がある

3件の信号故障により、列車は1時間以上運行を止められました。これは実際に起きたことですが、平均値を大きく左右するほどの規模です。

マネージャーが尋ねます。Mapleは本当に遅いのでしょうか、それともその差は偶然かもしれないのでしょうか?極端な値の影響を抑えたら、あとはシャッフルで判断しましょう。

challenge icon

チャレンジ

難しい

プログラムは境界係数 k を読み込みます。1.5 は箱ひげ図のルールです。

  1. Q1 - k * IQR と Q3 + k * IQR で遅延時間の上下限を設定し、外れ値を数えてから、すべての遅延時間を np.clip で上限・下限内に収めます。
  2. 各路線の上限・下限処理後の遅延時間の平均と、Maple から Birch を引いた差を出力します。
  3. 2000 回シャッフルします。Maple の上限・下限処理後の遅延時間、次に Birch のものをプールし、各ラウンドで rng.permutation を 1 回実行して、先頭の 24 個を偽の Maple とします。
  4. 符号を無視した 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 chance

k をより厳しく、または緩くした場合も、この判定は変わりませんか?

自分で試してみよう

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)

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

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

機械学習のための統計のすべてのレッスン

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