历史版本记录。该方案对应本地提交
41fe49636,保留当时的 64 条标签和 100% 测试结果。 当前已在其基础上落地 v2(61 条标签,新增开机恢复瞬态清理),见文末“八、v2 当前落地结果”。
| 版本 | 压力标签 | 7 号 | 8 号 | 9 号 | 测试 F1 | 测试 PR-AUC |
|---|---|---|---|---|---|---|
| 备份版本 | 72 | 7 | 63 | 2 | 96.59% | 99.61% |
| Stage 1 新标签 | 68 | 4 | 63 | 1 | 93.43% | 99.27% |
| 本版本:去掉 0 点 | 64 | 2 | 62 | 0 | 100% | 100% |
本版本删除的 7 条单小时弱标签:
同时,掉点小时被剔除后,3 条长阶段发生拆分:
最终阶段分布:
oil_avg <= 0 → 该小时不参与周期、趋势、连续下降和阶段划分
新增小时级 0 值统计:
oil_zero_ratio = 0 值运行样本数 / 运行样本数
判定规则:
oil_zero_ratio >= 5%
且相邻小时存在 oil_zero_ratio >= 50% 的小时
→ 该小时判为无效
这样能去掉“均值被 0 值拉低、最大值仍正常”的部分掉点小时,同时避免把孤立少量 0 值误判为掉点。
6 小时斜率只使用连续 1 小时步长的有效小时
跨掉点、缺失、停机缺口不参与斜率
连续下降 >= 6 个有效小时
且 6 小时斜率 < -0.001
且相对周期基线下降不足 5%
→ 该小时判为轻微
若与后面的轻微阶段间隔不超过 6 小时,则合并为同一段,阶段起点前移。
对应提交:41fe49636
models/common/queries.pySUM(CASE WHEN YSJ_41 > 0 AND YSJ_5 = 0 THEN 1 ELSE 0 END) AS oil_zero_count
NUMERIC_HOURLY_FIELDS 增加 oil_zero_count,保证小时 CSV 读取时按数值解析。models/generalized/pressure_algorithm.py新增/修改:
_zero_ratio(row):计算小时 0 值比例。_dropout_invalid_hours(rows):
zero_ratio >= 50% 的整小时;zero_ratio >= 5% 且前后 1 小时存在整小时掉点的小时标为无效。assign_hourly_cycles:
oil_avg <= 0;_dropout_invalid_hours 命中的小时。_contiguous_slope(history, current):
None。classify_oil_hourly_segments:
_contiguous_slope。extend_oil_segments_with_precursor:
run:
extend_oil_segments_with_precursor。models/generalized/build_datasets.py训练样本构建增加同样的无效小时过滤:
scoped = [row for row in scoped if row.get("oil_avg") is not None and row["oil_avg"] > 0]
invalid = pressure_algorithm._dropout_invalid_hours(scoped)
scoped = [row for row in scoped if (row["批次"], row["_dt"]) not in invalid]
目的:0 值和部分掉点小时既不进入标签,也不作为正常样本进入模型训练。
pks_hourly_full.csv 增加两列:
oil_zero_countoil_zero_ratiomodels/common/verify.py压力模型校验基线更新为本版本:
0.8617269992828369| 项目 | 正常 | 异常 | 合计 |
|---|---|---|---|
| 候选窗口 | 12,996 | 956 | 13,952 |
| train | 8,256 | 614 | 8,870 |
| validation | 2,886 | 193 | 3,079 |
| test | 1,854 | 149 | 2,003 |
| 阈值 | 查准率 | 召回率 | F1 | PR-AUC |
|---|---|---|---|---|
| 0.861727 | 99.45% | 93.26% | 96.26% | 99.52% |
| 类别 | 查准率 | 召回率 | F1 | 样本数 |
|---|---|---|---|---|
| 正常 | 100% | 100% | 100% | 1,854 |
| 异常 | 100% | 100% | 100% | 149 |
测试集 100% 不代表真实泛化能力完美,原因是:
因此这个版本更适合作为“掉点过滤和标签清洗”的方案记录,不适合直接作为跨机组泛化结论。
该版本对应提交 41fe49636。在干净工作区中可使用:
# 1. 生成带 0 值统计的小时表(字段:oil_zero_count / oil_zero_ratio)
# 2. 生成压力标签
python3 models/generalized/pressure_algorithm.py \
--device 7# 8# 9# \
--hourly-csv models/datas/hourly/pks_hourly_full_zero.csv \
--output-dir models/datas/staging_v3/pressure
# 3. 重建压力样本、切分、训练、评估
python3 models/generalized/run_pipeline.py --window-hours 3
# 4. 校验
python3 models/common/verify.py
注意:上述命令对应历史 64 条版本,需要恢复到 41fe49636 的代码和数据状态。
v2 在 100% 方案上增加“开机恢复瞬态”清理:候选阶段在开机后 24 小时内出现, 且段后连续 12 个有效小时恢复到周期基线 95% 以上、无低报警,则删除该标签, 并把开机到稳定恢复前的小时排除出正常训练样本。
当前 3h 压力模型结果和限制见 压力模型结果.md。