Appearance
预测性维护:30 天故障窗口预测
- 来源:
noai-train/联合训练/Day4/T1 预测性维护 李奕翰 - 类型:Tabular ML / time-aware prediction
- 原始资料:
README.md、baseline.py、prepare_data.py、metrics.py、Day4 ref/T1... - 题面完整性:完整
- 解法资料完整性:完整,有两个参考解法
题面大意
给定 100 台工业机器在 2015 年的运行历史、维护、错误和故障记录。对于任意查询 (machine_id, pred_date) 和部件 comp1..comp4,提交一个预测窗口 [t_start, t_end],宣称该部件会在该窗口内故障。若窗口覆盖真实故障日期且预测日期早于故障日期,则得分;窗口越窄越好,提前预警越早越好。最终分数综合预测质量、提前量、运行时间和内存。
数据特点
数据是多表时间序列:机器静态属性、日粒度遥测统计、错误日志、维护记录、训练/验证/测试故障标签和查询表。题目人为注入少量故障后的 post_compX 泄漏 token,用来考察 as-of 时间过滤。任何 pred_date >= D 的预测对该故障无效,过早超过 30 天也无效。
考点
核心考点是时间泄漏防控和窗口预测。特征必须只使用 datetime <= pred_date 的历史,否则会学到事后日志。评分机制鼓励每个查询都输出预测以争取提前量,但也要求窄窗口命中真实故障,因此模型要估计“未来 30 天内各部件故障风险”和大致日期。
涉及知识点
- As-of feature engineering。
- 时间序列滚动窗口统计。
- 生存/故障预测思想。
- 逻辑回归、随机森林、树模型、SVM 等经典 ML。
- 数据泄漏检测与禁用库约束。
解法思路
baseline 始终输出 [pred_date, pred_date + 30d],可获得高提前量但窗口宽,预测质量固定。参考解法一基于错误计数启发式:统计各机器/部件近期错误、维护、遥测异常,缩窄高风险部件的窗口。参考解法二对每个部件训练逻辑回归,使用 as-of 历史特征预测未来 30 天内故障概率,再按风险和估计延迟输出窗口。
特征可包括:最近 7/14/30 天错误次数、各 error_id 计数、距离上次维护天数、遥测均值/标准差/趋势、机器型号与年龄、历史故障间隔等。训练标签可按 (machine, pred_date, comp) 构造:未来 30 天是否发生对应部件故障,或故障距离天数。窗口宽度可根据模型置信度调整,高置信度窄窗口,低置信度保留宽窗口。
可选/多种解法
启发式风险窗口:实现快,利用错误/维护近因。
二分类风险模型:预测未来 30 天是否故障,再固定窗口或概率加权窗口。
两阶段模型:先分类是否会故障,再回归故障日期偏移,输出中心化窄窗口。
特殊技巧
输出多行不会直接受惩罚,评分器对每个故障保留最佳合法覆盖行,因此可以对多个查询日都输出。提前量 L 鼓励尽早预测,预测窗口不应只在接近故障时输出。使用 baseline.Dataset.events_as_of 可避免吸收 post_compX 泄漏行。
调参优化
预测性维护应按时间窗口评估,调参不能随机打散。关键可调项包括历史窗口长度、聚合统计种类、故障前预警窗口、负样本下采样比例、类别权重、阈值、GBDT 深度/叶子数/学习率和 early stopping。若评分重视提前发现故障,应在验证集上扫描概率阈值和报警冷却时间,平衡漏报与误报。特征工程参数如滚动均值窗口、趋势斜率窗口和异常值裁剪分位数通常比模型小幅调参更重要。
注意事项
源码扫描禁用深度学习、boosting 和 AutoML 库;xgboost/lightgbm/catboost 都会 0 分。不能使用 failures_test.csv。特征聚合必须以 pred_date 为截止。运行时间和内存会扣分,过重的特征循环要向量化或缓存。
推广意义
这题是工业预测性维护的高质量缩影:真实业务里最危险的问题往往不是模型不够强,而是时间泄漏、标签定义和评分目标不一致。其方法可推广到信贷逾期、设备故障、用户流失和医疗风险预警。