压力_去掉0点_100版本说明.md 7.3 KB

压力模型“去掉 0 点、测试 100%”版本说明

历史版本记录。该方案对应本地提交 41fe49636,保留当时的 64 条标签和 100% 测试结果。 当前已在其基础上落地 v2(61 条标签,新增开机恢复瞬态清理),见文末“八、v2 当前落地结果”。

一、版本定位

  • 类型:润滑油压力标签 + 深度学习/树模型辅助确认
  • 标签:64 条
  • 模型:3 小时窗口,XGBoost
  • 测试结果:查准率 100%、召回率 100%、F1 100%、PR-AUC 100%
  • 事件召回:7/7
  • 特点:在 Stage 1 新标签基础上,进一步把“部分掉点小时”按无效处理

二、和前后版本的区别

版本 压力标签 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 条单小时弱标签:

  • 7号机-P02 2025-04-30 19:00
  • 7号机-P10 2025-10-05 12:00
  • 8号机-P07 2025-07-09 12:00
  • 8号机-P16 2026-04-26 05:00
  • 8号机-P03 2026-07-27 05:00
  • 8号机-P03 2026-07-31 19:00
  • 9号机-P17 2026-01-30 05:00

同时,掉点小时被剔除后,3 条长阶段发生拆分:

  • 8号机-P05 2025-02-10/11
  • 8号机-P09 2025-10-27/28
  • 8号机-P02 2026-06-14/15

最终阶段分布:

  • 轻微:59
  • 异常:4
  • 严重异常:1

三、标签规则

1. 0 MPa 整小时无效

oil_avg <= 0 → 该小时不参与周期、趋势、连续下降和阶段划分

2. 部分掉点小时无效

新增小时级 0 值统计:

oil_zero_ratio = 0 值运行样本数 / 运行样本数

判定规则:

oil_zero_ratio >= 5%
且相邻小时存在 oil_zero_ratio >= 50% 的小时
→ 该小时判为无效

这样能去掉“均值被 0 值拉低、最大值仍正常”的部分掉点小时,同时避免把孤立少量 0 值误判为掉点。

3. 斜率只用连续有效小时

6 小时斜率只使用连续 1 小时步长的有效小时
跨掉点、缺失、停机缺口不参与斜率

4. 前置下降并入轻微

连续下降 >= 6 个有效小时
且 6 小时斜率 < -0.001
且相对周期基线下降不足 5%
→ 该小时判为轻微

若与后面的轻微阶段间隔不超过 6 小时,则合并为同一段,阶段起点前移。

5. 分级阈值

  • 轻微:相对周期基线下降 >= 5%,且处于下降趋势
  • 异常:相对周期基线下降 >= 10%,或低报警
  • 严重异常:相对周期基线下降 >= 20%,或低低报警

四、程序改动

对应提交:41fe49636

1. models/common/queries.py

  • 小时聚合 SQL 增加:
SUM(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 读取时按数值解析。

2. 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):
    • 只使用连续 1 小时步长的有效小时计算斜率;
    • 少于 3 个连续点返回 None。
  • classify_oil_hourly_segments:
    • 趋势判断改用 _contiguous_slope。
  • extend_oil_segments_with_precursor:
    • 对轻微阶段向前扩展;
    • 条件:正常小时、相对基线下降 0%–5%、连续下降 >= 6、斜率 < -0.001;
    • 重算阶段开始时间、有效小时数和触发依据。
  • run:
    • 在阶段合并后调用 extend_oil_segments_with_precursor。

3. 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 值和部分掉点小时既不进入标签,也不作为正常样本进入模型训练。

4. 小时中间表

  • pks_hourly_full.csv 增加两列:
    • oil_zero_count
    • oil_zero_ratio
  • 压力标签和训练样本都基于这份带 0 值统计的小时表生成。

5. models/common/verify.py

压力模型校验基线更新为本版本:

  • 候选:12,996 正常 / 956 异常
  • train:8,256 / 614
  • validation:2,886 / 193
  • test:1,854 / 149
  • 阈值:0.8617269992828369
  • 测试异常:查准率/召回率/F1 = 1.0
  • 事件召回:7/7

五、训练与评估

数据范围

项目 正常 异常 合计
候选窗口 12,996 956 13,952
train 8,256 614 8,870
validation 2,886 193 3,079
test 1,854 149 2,003
  • 7 号机异常窗口:9 个
  • 9 号机异常窗口:0 个

验证集

阈值 查准率 召回率 F1 PR-AUC
0.861727 99.45% 93.26% 96.26% 99.52%

封存测试集

类别 查准率 召回率 F1 样本数
正常 100% 100% 100% 1,854
异常 100% 100% 100% 149
  • 事件召回:7/7
  • 正常事件误报:0

六、必须说明的局限

测试集 100% 不代表真实泛化能力完美,原因是:

  1. 149 个测试异常窗口全部来自 8 号机;
  2. 7 号机、9 号机测试集没有异常窗口;
  3. 7 号机只有 2 条压力标签、9 个异常窗口;
  4. 9 号机压力标签为 0;
  5. 标签仍来自规则演化阶段,不是人工确认的物理故障标签。

因此这个版本更适合作为“掉点过滤和标签清洗”的方案记录,不适合直接作为跨机组泛化结论。

七、复现命令

该版本对应提交 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 当前落地结果

v2 在 100% 方案上增加“开机恢复瞬态”清理:候选阶段在开机后 24 小时内出现, 且段后连续 12 个有效小时恢复到周期基线 95% 以上、无低报警,则删除该标签, 并把开机到稳定恢复前的小时排除出正常训练样本。

  • 压力标签:61 条(轻微 56、异常 4、严重异常 1)
  • 7号机 0、8号机 61、9号机 0
  • 删除 3 条开机恢复瞬态:7号机-P08、7号机-P10、8号机-P05 首条
  • 剔除小时:14 个
  • 样本:13,974(正常 13,029 / 异常 945)
  • 验证集:P 100%、R 91.62%、F1 95.63%、PR-AUC 98.62%
  • 测试集:P 90.24%、R 100%、F1 94.87%、PR-AUC 100%,事件 10/10

当前 3h 压力模型结果和限制见 压力模型结果.md。