实时联合诊断方案.md 4.8 KB

实时联合诊断改造方案(压力,先记录,暂不实现)

注意:本文件是“模型辅助确认”方向的后续方案记录,尚未实现。 规则侧(压力/振动算法)的实时扫描与告警落库已经实现,见 全量与实时运行及告警落库.md(models/realtime_service.py,每 5 分钟写入 compressor_alarm)。两者不要混淆。

本文件记录把泛化模型接入 backend/scan_pks_fault_evolution.py 实时检测的改造方案。当前只做方案记录,代码实现和阈值标定后续再讨论。

1. 目标与职责边界

  • 扫描器继续负责:小时聚合、运行状态与覆盖率、周期/基线更新、小时等级、异常阶段合并,并实时输出 cache/pks_scanner/evolution/润滑油压力小时阶段段.csv(结构不变)。
  • 模型只负责:对“最近 3 个有效运行小时”的窗口给出异常概率和历史相似度,作为二次确认动作。
  • 模型不撤销规则异常,也不提前修改规则阶段起点。

2. 实时流程(每 15 分钟 tick)

1. 读取最新原始采样数据(沿用扫描器的读取口径)
2. 聚合当前自然小时(YSJ_41>0 判运行,运行覆盖率≥0.80)
3. 更新该机组有效运行小时序列、周期与周期基线
4. 执行现有压力小时规则,更新/合并异常阶段
5. 若该运行周期已有 ≥3 个有效小时:
      取最近 3 个有效小时生成窗口(窗口结束小时 = 当前最新有效小时)
      用与训练完全相同的特征函数计算特征
      调用 XGBoost 压力模型 + KNN 压力相似度
6. 按 设备 + 批次 + 窗口结束小时 关联规则小时/阶段
7. 输出规则结果 + 模型确认动作
  • 不足 3 个有效小时:不生成窗口,只输出规则结果并标记“数据不足”,不人为补齐。
  • 重启后首个有效小时:不作为模型样本。
  • 模型窗口只在出现新的完整有效小时时更新;15 分钟内重复 tick 不产生新窗口。

3. 特征一致性(必须)

  • 把 build_datasets.py 的压力特征函数(周期基线、近期 24h 基线、回撤、连续下降小时数等)抽成共享模块,训练与实时共用,避免口径漂移。
  • 机组基准(*_z 的 median/MAD)从 models/datas/artifacts/pressure/pressure_unit_baselines.json 加载。
  • 周期基线按扫描器口径:周期前 3 个自然日每日油压中位数,再取其中位数。

4. 输出

  • 规则输出不变:cache/pks_scanner/evolution/润滑油压力小时阶段段.csv。
  • 模型确认动作:当前阶段先写 CSV(后续再讨论改为数据库字段/通知等形式),建议:
    • 文件:models/results/pressure/压力实时确认.csv
    • 唯一键:机组 + 批次 + 窗口结束小时;15 分钟 tick 内更新同一行,不重复追加。
    • 字段:机组、批次、窗口开始/结束小时、规则小时等级、阶段编号(若已形成)、模型异常概率、最相似历史异常样本、相似度、联合判断、原因。
    • 原因 = 规则触发依据 + 相对周期基线变化/回撤/连续下降小时数 + 模型概率 + 最相似异常样本。

5. 联合状态与阈值

联合判断沿用 PKS润滑油压力与振动算法说明.md 10.5 的状态:

数据不足 / 规则正常 / 模型疑似异常 / 模型辅助确认 / 规则与模型不一致

优先级:

  1. 数据不足 → 输出“数据不足”,不输出正常。
  2. 规则严重异常 → 保留,模型仅辅助。
  3. 规则异常且模型概率/相似度至少一项达确认条件 → “模型辅助确认”。
  4. 规则正常但模型支持较高 → “模型疑似异常”,不写入规则阶段。
  5. 规则异常但模型支持较低 → 保留规则,标记“规则与模型不一致,人工复核”。
  6. 规则正常且模型支持较低 → “正常”。

阈值(概率、相似度)必须在独立验证集上确定,不能凭经验固定;当前离线 3h 压力模型验证阈值约为 0.8626,仅作参考。

6. 阶段增量写入(暂缓实现,仅记录)

  • 以 机组 + 批次 + 阶段开始小时 作稳定主键,每次 tick 对受影响的周期重算阶段后原地 upsert;未结束阶段标“进行中”。
  • 不因半小时数据把阶段切断,不重复写同一阶段。
  • 允许幂等重写整表(对下游最简单);若下游要求 append/update,再改为原地更新。
  • 保持 润滑油压力小时阶段段.csv 现有列结构。

7. 待办

  1. 抽取共享特征模块,验证实时特征与训练特征逐字段一致。
  2. 明确模型确认动作的最终形式(CSV / 数据库 / 通知)。
  3. 在独立验证集上标定概率与相似度阈值。
  4. 设计阶段增量 upsert 与“进行中”状态。
  5. 压力跑通后再复用到振动。