18922397810 d85194959b 模型预测参考写入 alarm_info_json(alarm_des 不再追加);3d 故障详情/弹窗新增「模型预测」字段并去掉冗余前缀;同步文档 2 settimane fa
..
common d85194959b 模型预测参考写入 alarm_info_json(alarm_des 不再追加);3d 故障详情/弹窗新增「模型预测」字段并去掉冗余前缀;同步文档 2 settimane fa
datas 011b6bd9bd 重构压力/振动算法与模型:拆分 models 目录,公共层抽取,扫描与3h模型结果复现校验通过 2 settimane fa
generalized f42983c881 新增故障段模型预测参考(3h滑动聚合概率),全量/实时可用 --with-model,结果与DB含预测字段 2 settimane fa
markdown d85194959b 模型预测参考写入 alarm_info_json(alarm_des 不再追加);3d 故障详情/弹窗新增「模型预测」字段并去掉冗余前缀;同步文档 2 settimane fa
migrations b15402186c PKS:设备号输入、全量/实时运行与 compressor_alarm 落库,含定时服务脚本 2 settimane fa
results f42983c881 新增故障段模型预测参考(3h滑动聚合概率),全量/实时可用 --with-model,结果与DB含预测字段 2 settimane fa
service b15402186c PKS:设备号输入、全量/实时运行与 compressor_alarm 落库,含定时服务脚本 2 settimane fa
vibration f42983c881 新增故障段模型预测参考(3h滑动聚合概率),全量/实时可用 --with-model,结果与DB含预测字段 2 settimane fa
README.md d85194959b 模型预测参考写入 alarm_info_json(alarm_des 不再追加);3d 故障详情/弹窗新增「模型预测」字段并去掉冗余前缀;同步文档 2 settimane fa
__init__.py 011b6bd9bd 重构压力/振动算法与模型:拆分 models 目录,公共层抽取,扫描与3h模型结果复现校验通过 2 settimane fa
realtime_service.py f42983c881 新增故障段模型预测参考(3h滑动聚合概率),全量/实时可用 --with-model,结果与DB含预测字段 2 settimane fa
scan_all.py f42983c881 新增故障段模型预测参考(3h滑动聚合概率),全量/实时可用 --with-model,结果与DB含预测字段 2 settimane fa

README.md

PKS models —— 压力/振动算法与模型重构

本目录把原先合并在一起的 PKS 故障算法与泛化模型拆开、规范化重排,是本项目 压力/振动算法与模型的唯一实现。原 backend/model_assistant_generalized/ 已删除, 其逻辑与文档已全部迁入本目录;backend/scan_pks_fault_evolution.py(合并版扫描器) 保留作为历史参照。

目录

目录 内容
common/ 公共层:数据库连接、报警阈值、小时聚合、数据查询、稳健统计、CSV 输出、窗口切分、训练/评估/推理、自动校验
generalized/ 压力算法 + 压力模型:pressure_algorithm.py、features_pressure.py、build_datasets.py、split_datasets.py、train_model.py、evaluate_model.py、infer_and_combine.py、run_pipeline.py
vibration/ 振动算法 + 振动模型:与 generalized/ 对称
datas/ 中间数据与训练数据:hourly/(小时中间表)、pressure/、vibration/(窗口样本)、artifacts/(训练产物)、reference/(golden 基准)
results/ 算法扫描结果与模型测试结果:common/、pressure/、vibration/、verification/
markdown/ 文档:压力算法、压力模型、振动算法、振动模型、模型辅助确认方案
service/ 实时服务定时脚本:mac/(launchd)、linux/(systemd)、windows/(schtasks)
migrations/ 数据库结构变更 SQL(如 alarm_des 扩到 4000)
scan_all.py 全量扫描(压力+振动),按设备号输入,结果可存本地或数据库
realtime_service.py 实时扫描(--once / --loop / --simulate),结果合并写入 compressor_alarm

设备号输入

算法与扫描统一使用 --device 7# 8# 9#(默认 7# 8# 9#),设备通过 compressor_data_import.directory_path 解析到 PKS 导入批次。4#/5#/6# 暂不纳入。 算法内部仍按 批次 分组,因此本地全量结果与历史 CSV 逐字节一致。

全量运行

# 本地:自动查询起止时间(floor(最小)..floor(最大)+1h),先清理旧中间/结果再生成
python models/scan_all.py --device 7# 8# 9# --store local

# 数据库:本地结果与中间文件照常生成,并额外把最终段写入 compressor_alarm
python models/scan_all.py --device 7# 8# 9# --store db

# 开启模型预测参考:对每个故障段做 3 小时滑动预测,写入概率均值/最大/最小
python models/scan_all.py --device 7# 8# 9# --store db --with-model

# 也可显式指定时间,或复用已缓存小时中间表
python models/scan_all.py --start "2025-01-01 00:00:00" --end "2026-09-01 00:00:00"
python models/scan_all.py --hourly-csv models/datas/hourly/pks_hourly_full.csv

数据库存储映射(表 compressor_alarm):

结果 device_code device_part device_point alarm_type alarm_level
压力段 7# 润滑油压力 YSJ_5 润滑油压力故障 压力阶段
振动段 7# 按 最强异常侧 取 联轴器端振动 / 链轮端振动 对应 YSJ_10 / YSJ_11 振动故障 振动阶段

alarm_des=阶段触发依据(≤4000)、alarm_info_json=对应 CSV 行 JSON、status=1。 全量写库会先删除所选设备的历史压力/振动告警再插入。

模型预测参考(--with-model,默认关闭)

  • 定位:只做参考数值,不做任何异常判定,不参与阶段划分。
  • 方式:对故障段内每个有效运行小时取以它为结尾的 3 小时窗口滑动预测(段不足 3h 时向前补有效小时), 汇总为 模型异常概率均值 / 最大值 / 最小值。
  • 输出:alarm_info_json 增加上述 3 个字段及 模型预测参考 (模型预测参考:3小时窗口异常概率 均值x/最大y/最小z(n次));alarm_des 只保留 阶段触发依据;本地 CSV 同步增加这 4 列。
  • 训练链路不受影响;开启时若 models/datas/artifacts/* 缺失会直接报错(先跑对应 run_pipeline.py)。

实时运行

python models/realtime_service.py --once                 # 单次
python models/realtime_service.py --loop --interval 300  # 每 5 分钟(命令行定时)
python models/realtime_service.py --once --with-model    # 同时写入模型预测参考
  • 窗口:end = min(floor(now), floor(最新数据)+1h),start = end - 45 天。
  • 合并:同 (设备, 类型, 等级) 且时间重叠或间隔 ≤6h 的段合并为一条, 同一等级连续段不会因跨小时或“最强侧”切换被拆开;等级变化保留为不同行, 合并时 device_part/device_point 更新为最新 最强异常侧。
  • 定时服务安装/卸载见 models/service/README.md。
  • 冒烟测试:python models/realtime_service.py --simulate "2026-02-03 20:00:00,2026-02-04 00:00:00"(默认结束后回滚)。

复现(3 小时)

# 1) 算法扫描结果
python models/scan_all.py --device 7# 8# 9# --store local

# 2) 压力模型 3h:build -> split -> train -> evaluate -> infer
python models/generalized/run_pipeline.py --window-hours 3

# 3) 振动模型 3h
python models/vibration/run_pipeline.py --window-hours 3

# 4) 自动校验(含 compressor_alarm 对应关系)
python models/common/verify.py --with-db

--window-hours 6 的参数化代码路径保留,但本轮不重新生成 6h 产物。

校验基线

python models/common/verify.py --with-db 会比对:

  • 5 个扫描结果 CSV 与 models/datas/reference/ 逐字节一致;
  • 数据库全量重跑与缓存一致;
  • 压力/振动 3h 模型指标与文档一致(阈值 0.862553/0.916630,异常 F1 96.59%/71.43%,事件召回 10/10、4/4);
  • compressor_alarm 行数与参考 CSV 对应(压力 72、振动 25,共 97)。

报告写入 models/results/verification/verification_report.json。

标签来源

模型标签来自算法扫描结果(润滑油压力小时阶段段.csv / 振动异常段.csv), 指标衡量的是对规则标签的泛化一致性,不等同于物理故障诊断。