基于 MiniRocket 的 NGAFID 维护前后航班二分类:复现与工程化实践
1.问题背景
航空运维场景里,常需要根据飞行记录判断:该架次更接近维护前还是维护后。公开论文 A Large-Scale Annotated Multivariate Time Series Aviation Maintenance Dataset from the NGAFID 提供了带标注的多元时序数据,适合作为二分类基准。
本笔记记录一套可落地的复现方案:用 MiniRocket 在 2days 基准子集上完成 5 折交叉验证,并把原先分散的 notebook 流程收敛为一键脚本、可断点续跑、结果可归档、指标可写报告。侧重工程可复现,而非另起炉灶改模型架构。
- 输入:单次飞行为一条多元时间序列(多通道传感器),长度不一。
- 输出:二分类标签
before_after(实现中与数据表一致:0 = 维护后,1 = 维护前)。 - 难点
- 维度高、序列长,端到端训练成本大;
- 需严格对齐数据里的 fold 划分,保证可复现;
- 研究代码若停留在 notebook,易出现参数难追溯、长跑中断后难接续、结果难对比。
三、解决思路
模型选择:原文分别使用了ConvMHSA Inception MiniRocket 这三个模型进行训练,根据实际情况,本人选择 MiniRocket实现复现。
- 模型:MiniRocket(快速卷积风格特征 + 浅层分类头),通过
tsai与 FastAI 训练流程对接。 - 数据:使用本地 2days 子集(
flight_data.pkl、flight_header.csv、stats.csv),与表头中的fold、before_after对齐。 - 预处理
- 固定最大长度
max_length,取每条序列末尾一段,不足则填充; - 用
stats.csv的 min/max 做归一化,并对极差过小的通道做防除零处理,避免数值不稳。
- 固定最大长度
- 训练与评估
- 5 折交叉验证:每折在「非本折」上训练、本折上验证;
- 默认
sample_ratio=0.5:每折只用训练/验证集的各一半样本,便于个人工作站稳定复跑(与文档中的基准设定一致); - 验证集上除准确率外,额外报告 Balanced Accuracy、F1、ROC-AUC,便于写论文/实验报告。
- 工程化
- 单入口脚本
scripts/run_cv.py; --start-fold/--num-folds支持断点续跑;- 所有折的指标写入
fold_metrics.json,最终汇总写入summary.json,训练曲线导出为minirocket_fold*_history.csv。
- 单入口脚本
四、环境与数据准备
依赖安装(在仓库根目录 / 项目根目录):
pip install -r requirements.txt
数据目录(两种常见结构任选其一,与代码约定一致):
- 扁平:
<数据根>/2days/flight_data.pkl、flight_header.csv、stats.csv - 嵌套(你从归档里常能见到的多一层):
<数据根>/2days/2days/下同样三个文件
--data-dir 的含义:指向上述 <数据根>——即「包含名为 2days 子文件夹的那一层」。
例如你把数据放进仓库里的 data/:
- 文件在
data/2days/*.pkl或data/2days/2days/*.pkl时,运行时写--data-dir data即可。
若数据仍在其他盘符,把data换成你的本机路径,例如--data-dir"D:\datasets\ngafid_subset"(该路径下仍需有子目录2days/,其内为上述两种结构之一)。
五、一键运行与快速验证
不需要设置 PYTHONPATH;请在项目根目录执行下面的命令(Windows / Linux / macOS 相同;Windows 可用 py -3 代替 python)。
完整基准(5 折,50 epoch,子采样 0.5,与 README 报告一致):
python scripts/run_cv.py --data-dir data --dataset-name 2days --sample-ratio 0.5 --epochs 50 --num-folds 5
默认结果目录为 results/benchmark_2days/;若要显式写出,可与下面等价:
python scripts/run_cv.py --data-dir data --dataset-name 2days --sample-ratio 0.5 --epochs 50 --num-folds 5 --output-dir results/benchmark_2days
环境冒烟(少折、少 epoch、小子采样):
python scripts/run_cv.py --data-dir data --dataset-name 2days --sample-ratio 0.1 --epochs 3 --num-folds 1 --output-dir results/smoke
中断后从某一折续跑(示例:从第 4 折开始只跑 1 折,其余参数与完整基准一致):
python scripts/run_cv.py --data-dir data --dataset-name 2days --sample-ratio 0.5 --epochs 50 --start-fold 4 --num-folds 1 --output-dir results/benchmark_2days
训练曲线与 5 折指标图(在对应实验跑完后,默认读取 results/benchmark_2days/):
python scripts/generate_figures.py
图会保存在 results/benchmark_2days/figures/
产物位置(以 results/benchmark_2days/ 为例):
| 路径 | 说明 |
|---|---|
|
|
总体汇总(各指标均值、标准差、每折列表) |
|
|
逐折明细 |
|
|
各折训练过程,可用于画曲线 |
|
|
MiniRocket 等与训练相关的权重/中间产物 |
|
|
运行 |
Windows 可选:仓库根目录的 reproduce.bat 会先执行 pip install -r requirements.txt 再跑 run_cv.py,可在末尾追加与上文相同的参数。
六、关键实现要点(代码层面)
- 样本构造:按
flight_header的Master Index与flight_data对齐;每条样本为[max_length, channels],标签为before_after,并保留fold用于划分。 - 归一化:
x减去mins再除以maxs - mins;若某通道max - min过小,则用安全分母,避免除零。 - MiniRocket 流程:在训练子集上
fit特征变换 → 拼接 train/valid 特征 →MiniRocketHead+fit_one_cycle→ 用get_preds在验证集上算 sklearn 指标,与训练日志互补。 - 指标落盘:每折结束追加写入
fold_metrics.json;5 折结束后写summary.json(含均值与标准差)。
七、实验结果(本次本地复现)
设定:数据集 2days,sample_ratio=0.5,epochs=50,seed=42,5 折交叉验证。指标在各折验证集上由预测结果计算。
7.1 逐折结果
| Fold | Accuracy | Balanced Accuracy | F1 | ROC-AUC |
|---|---|---|---|---|
|
0 |
0.5773 |
0.5774 |
0.5739 |
0.6124 |
|
1 |
0.5997 |
0.6008 |
0.5814 |
0.6309 |
|
2 |
0.5892 |
0.5872 |
0.5591 |
0.6289 |
|
3 |
0.5699 |
0.5685 |
0.5436 |
0.6062 |
|
4 |
0.6110 |
0.6100 |
0.5906 |
0.6444 |
7.2 五折汇总
| 指标 | 均值 | 标准差 |
|---|---|---|
|
Accuracy |
0.5894 |
0.0148 |
|
Balanced Accuracy |
0.5888 |
0.0151 |
|
F1 |
0.5697 |
0.0166 |
|
ROC-AUC |
0.6246 |
0.0137 |
简要解读:准确率略高于随机猜测(0.5),ROC-AUC 约 0.62,说明排序意义上仍有一定区分度;该子任务本身难度较高,与数据集噪声、标签定义及仅使用维护前后二分类设定有关。更细的误差分析可结合混淆矩阵与按机型/故障类别分层(若标签列可用)另文展开。
八、结果可视化建议
- 训练曲线:用 Excel 或 Python 读取
minirocket_fold0_history.csv,绘制 train_loss / valid_loss / accuracy 随 epoch 变化。
- 柱状图:5 折 Accuracy 或 ROC-AUC 柱状图,误差线用表中标准差或各折单值展示离散程度。

九、小结
| 项目 | 内容 |
|---|---|
|
任务 |
NGAFID 场景下维护前/后航班二分类 |
|
方法 |
MiniRocket + 浅层头,5 折 CV |
|
数据 |
2days 基准子集, |
|
工程 |
一键脚本、续跑、JSON/CSV 归档、多指标评估 |
|
本次结果 |
Acc 0.5894±0.0148,ROC-AUC 0.6246±0.0137 |
完整代码与配置文件见:0221lele/ngafid-minirocket
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)