本实验重构于 models/vibration/(振动算法与振动模型)+ models/common/(公共层),与压力模型完全独立。
3 小时模型已用新代码完整复现,指标与本文件完全一致(见 models/results/verification/verification_report.json)。
振动算法输出位于 models/results/vibration/振动异常段.csv,训练样本位于 models/datas/vibration/,模型位于 models/datas/artifacts/vibration/。
目标:把 7/8/9 号机振动数据全部纳入,用机组相对(泛化)特征训练一个共享振动模型,解决原振动模型“绝对振动值导致跨机组误报、召回不稳”的问题。
振动规则的核心信号是“相对本机近期稳健基线(前 7×24 = 168 个有效小时)的偏离”。因此特征以近期基线相对量为主,机组编号只用于选基准、不进模型输入。
删除的绝对特征:各侧 *_avg_mean/max/range、*_peak_mean/max/range、*_slope。
使用的特征(每侧 coupling、chain):
{side}_avg_dev、{side}_peak_dev{side}_avg_rel_last、{side}_peak_rel_last、{side}_avg_rel_mean、{side}_peak_rel_max{side}_avg_z、{side}_peak_z、{side}_avg_slope_z(train 正常窗口 median/MAD){side}_high_ratio_mean、{side}_high_high_ratio_meanboth_sides_rising、running_coverage_mean/min特征重要度(3h)显示“相对比例 + 偏离”主导:chain_peak_rel_max 32.9%、chain_peak_dev 19.1%、coupling_peak_rel_max 8.1%、coupling_avg_dev 7.8%。
振动基线用机组完整有效历史在窗口前 7×24 小时内的稳健基线,跨停机周期取历史、排除重启后首个有效小时,与 scan_pks_fault_evolution.py 完全一致。
models/datas/hourly/pks_hourly_full.csv(--hourly-csv,不查库);阶段来源 models/results/vibration/振动异常段.csv。--positive-basis groups(每个事件等权),避免个别长事件整组落入同一划分。| 版本 | train | validation | test |
|---|---|---|---|
| 3h | 9,302(正常 9,112/异常 190,16 事件) | 2,657(2,637/20,5 事件) | 2,180(2,159/21,4 事件) |
| 6h | 8,951(8,731/220,16 事件) | 2,625(2,599/26,5 事件) | 2,332(2,299/33,4 事件) |
跨集合事件组泄漏:0。
| 版本 | 采样 | 轮数 | 早停 | 最佳轮次 | 最佳验证 logloss |
|---|---|---|---:|---|---:|---:|
| 3h | --all-normal | 请求 800 | 359 轮 | 309 | 0.02262 |
| 6h | --all-normal | 请求 800 | 382 轮 | 332 | 0.03350 |
| 版本 | 阈值 | 查准率 | 召回率 | F1 | PR-AUC |
|---|---|---|---|---|---|
| 3h | 0.916630 | 70.00% | 70.00% | 70.00% | 70.40% |
| 6h | 0.864419 | 72.41% | 80.77% | 76.36% | 77.21% |
测试集 2,180 窗口(正常 2,159、异常 21)。
| 类别 | 查准率 | 召回率 | F1 | 样本数 |
|---|---|---|---|---|
| 正常 | 99.72% | 99.72%(特异度) | 99.72% | 2,159 |
| 异常 | 71.43% | 71.43% | 71.43% | 21 |
综合:准确率 99.45%、平衡准确率 85.58%、PR-AUC 82.70%;事件召回 4/4。
分机组:
| 机组 | 正常窗口 | 正常误报率 | 异常窗口 | 异常召回 | 异常查准 |
|---|---|---|---|---|---|
| 7 号机 | 676 | 0.00% | 9 | 77.78% | 100.00% |
| 8 号机 | 702 | 0.71% | 12 | 66.67% | 61.54% |
| 9 号机 | 781 | 0.13% | 0 | — | — |
测试集 2,332 窗口(正常 2,299、异常 33)。
| 类别 | 查准率 | 召回率 | F1 | 样本数 |
|---|---|---|---|---|
| 正常 | 99.14% | 99.91%(特异度) | 99.52% | 2,299 |
| 异常 | 86.67% | 39.39% | 54.17% | 33 |
综合:准确率 99.06%、平衡准确率 69.65%、PR-AUC 86.40%;事件召回 4/4。
分机组:7 号机误报率 0.00%、召回 60.00%;8 号机误报率 0.00%、召回 22.22%;9 号机误报率 0.22%。
| 版本 | 测试查准率 | 测试召回率 | F1 | PR-AUC | 事件召回 |
|---|---|---|---|---|---|
| 旧振动模型(6h,绝对特征) | 24.15% | 100.00% | 38.91% | 75.66% | 1/1 |
| 振动泛化 3h | 71.43% | 71.43% | 71.43% | 82.70% | 4/4 |
| 振动泛化 6h | 86.67% | 39.39% | 54.17% | 86.40% | 4/4 |
结论:泛化特征显著改善了振动模型的查准率(旧模型 24% → 3h 71%)。3h 的 F1 与召回更均衡(71/71),6h 查准率更高但召回只有 39%。振动故障确认以“不漏”优先,推荐 3h。
models/results/vibration/振动模型辅助确认.csv,14,139 行
models/vibration/run_pipeline.py 保留 --window-hours 6 参数化路径)