# 7/8/9 号机振动泛化模型结果(机组相对特征) 本实验重构于 `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 号机振动数据全部纳入,用**机组相对(泛化)特征**训练一个共享振动模型,解决原振动模型“绝对振动值导致跨机组误报、召回不稳”的问题。 ## 一、方法 ### 1. 泛化特征(去掉绝对振动值) 振动规则的核心信号是“相对本机**近期稳健基线**(前 7×24 = 168 个有效小时)的偏离”。因此特征以近期基线相对量为主,机组编号只用于选基准、不进模型输入。 删除的绝对特征:各侧 `*_avg_mean/max/range`、`*_peak_mean/max/range`、`*_slope`。 使用的特征(每侧 coupling、chain): - 近期基线偏离(z 分数):`{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_mean` - 共享:`both_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%。 ### 2. 基线口径(与扫描器一致) 振动基线用机组**完整有效历史**在窗口前 **7×24 小时**内的稳健基线,**跨停机周期**取历史、排除重启后首个有效小时,与 `scan_pks_fault_evolution.py` 完全一致。 ### 3. 数据与切分 - 窗口:3 小时与 6 小时各一套;标签:重叠即异常(含 1~2 小时短阶段,用前后小时补足);重启后首个有效小时不作样本。 - 数据来源:复用 `data/hourly.csv`(`--hourly-csv`,不查库)。 - 切分:6.5 / 2 / 1.5,seed 20260921,事件组不拆,按(机组、标签)分层,保证每机组 train 有正常事件组。 - 异常事件分配用 `--positive-basis groups`(每个事件等权),避免个别长事件整组落入同一划分。 ## 二、数据范围 - 候选窗口:14,139(正常 13,908、异常 231)。 - 异常事件 25 个:7 号机 8、8 号机 8、9 号机 9(三台机组都有异常)。 | 版本 | 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% | ## 五、封存测试集 ### 3 小时窗口 测试集 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 | — | — | ### 6 小时窗口 测试集 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**。 ## 七、规则联合辅助输出 - 3h:`models/results/vibration/振动模型辅助确认.csv`,14,139 行 - 模型辅助确认异常 219、保留规则异常人工复核 12、继续观察 13、正常 13,895 - 6h:本轮未重新生成(`models/vibration/run_pipeline.py` 保留 `--window-hours 6` 参数化路径) ## 八、限制 - 振动异常阶段短(多为 1~2 小时),测试异常窗口仅 21~33 个、4 个事件,指标波动较大。 - 9 号机测试集没有异常事件,其正常误报率可评估,但异常召回不作结论。 - 标签来自扫描器规则阶段,未经维修记录或人工确认,指标代表对规则标签的泛化。 - 模型定位为规则辅助确认,不替代扫描器的阶段划分。