基于 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_ratio0.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-dirD:\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/为例路径说明summary.json总体汇总各指标均值、标准差、每折列表fold_metrics.json逐折明细minirocket_fold*_history.csv各折训练过程可用于画曲线models/MiniRocket 等与训练相关的权重/中间产物figures/*.png运行generate_figures.py后生成的图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 特征 →MiniRocketHeadfit_one_cycle→ 用get_preds在验证集上算 sklearn 指标与训练日志互补。指标落盘每折结束追加写入fold_metrics.json5 折结束后写summary.json含均值与标准差。七、实验结果本次本地复现设定数据集2dayssample_ratio0.5epochs50seed425 折交叉验证。指标在各折验证集上由预测结果计算。7.1 逐折结果FoldAccuracyBalanced AccuracyF1ROC-AUC00.57730.57740.57390.612410.59970.60080.58140.630920.58920.58720.55910.628930.56990.56850.54360.606240.61100.61000.59060.64447.2 五折汇总指标均值标准差Accuracy0.58940.0148Balanced Accuracy0.58880.0151F10.56970.0166ROC-AUC0.62460.0137简要解读准确率略高于随机猜测0.5ROC-AUC 约 0.62说明排序意义上仍有一定区分度该子任务本身难度较高与数据集噪声、标签定义及仅使用维护前后二分类设定有关。更细的误差分析可结合混淆矩阵与按机型/故障类别分层若标签列可用另文展开。八、结果可视化建议训练曲线用 Excel 或 Python 读取minirocket_fold0_history.csv绘制 train_loss / valid_loss / accuracy 随 epoch 变化。柱状图5 折 Accuracy 或 ROC-AUC 柱状图误差线用表中标准差或各折单值展示离散程度。九、小结项目内容任务NGAFID 场景下维护前/后航班二分类方法MiniRocket 浅层头5 折 CV数据2days 基准子集sample_ratio0.5工程一键脚本、续跑、JSON/CSV 归档、多指标评估本次结果Acc 0.5894±0.0148ROC-AUC 0.6246±0.0137完整代码与配置文件见0221lele/ngafid-minirocket