Menu
CoddyTech

火车晚点

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 61 课,共 64 课。

两条通勤线路 Maple 和 Birch 共用一个车站。连续 24 天,车站记录了每条线路高峰时段列车的晚点时间,并保存在 trains.csv 中:

两条线路晚点时间的箱线图:Maple 的箱体位于 15 分钟左右,有一个标记为信号故障的 91 分钟数据点和一个较低的 4 分钟数据点;Birch 的箱体较低,位于 11 分钟左右,另有两个分别位于 63 分钟和 74 分钟、标记为信号故障的数据点

三次信号故障导致列车延误一小时或更久:这是真实情况,但影响太大,足以让任何平均值失去意义。

经理问:Maple 真的比较晚吗,还是这个差距可能只是偶然?先控制极端值,再让随机打乱来决定。

challenge icon

挑战

困难

程序会读取围栏系数 k;箱线图使用的规则是 1.5。

  1. 将所有延误限制在 Q1 - k * IQR 和 Q3 + k * IQR 之间,统计离群值的数量,然后用 np.clip 限制每个延误值。
  2. 输出每条线路限制后的平均延误,以及 Maple 减去 Birch 的差值。
  3. 随机打乱 2000 次:先放入 Maple 限制后的延误值,再放入 Birch 的延误值,每轮调用一次 rng.permutation,并将前 24 个值作为模拟的 Maple 延误值。
  4. 输出 p 值,不考虑正负号;如果 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 在线编译器