|
|
@@ -451,3 +451,501 @@ python backend/scan_pks_fault_evolution.py \
|
|
|
5. 当前振动结果重点是异常段识别,不等同于严格的三小时连续确认。
|
|
|
6. 报警阈值来自数据库的点位配置,应定期检查配置是否正确。
|
|
|
7. 建议结合 `运行样本数 / 720` 一起查看,避免低覆盖率小时造成误判。
|
|
|
+
|
|
|
+## 9. 模型辅助确认方案(后续实施)
|
|
|
+
|
|
|
+本方案用于对现有规则结果进行相似性判断和辅助确认,不预测未来,也不替代 `backend/scan_pks_fault_evolution.py` 的阶段划分和异常规则。
|
|
|
+
|
|
|
+### 9.1 总体结构
|
|
|
+
|
|
|
+```text
|
|
|
+原始采样数据
|
|
|
+→ 沿用现有脚本按自然小时聚合
|
|
|
+→ 沿用运行覆盖率、开停机和有效小时判断
|
|
|
+→ 分别形成油压窗口和振动窗口
|
|
|
+→ XGBoost 分类 + K 近邻相似性匹配
|
|
|
+→ 与现有规则结果联合展示和辅助确认
|
|
|
+```
|
|
|
+
|
|
|
+润滑油压力和振动分别建立模型,不混合训练。模型输入、标签和实时输入必须使用与现有脚本相同的小时边界及基础特征。
|
|
|
+
|
|
|
+### 9.2 时间窗口和有效数据
|
|
|
+
|
|
|
+1. 一个模型样本为同一台压缩机连续 **6 个有效运行小时**,不是单点数据,也不是直接使用 5 秒级原始点。
|
|
|
+2. 每小时仍按现有脚本聚合;`YSJ_41 > 0` 用于判断运行状态,运行覆盖率低于 80% 的小时不进入模型窗口。
|
|
|
+3. 窗口按有效运行小时滑动,每新增一个有效小时形成一个新窗口。
|
|
|
+4. 相邻有效运行小时之间间隔超过 12 小时时,视为新的运行周期,窗口不得跨越该边界。
|
|
|
+5. 振动模型沿用现有规则:停机超过 12 小时后,重启后的第一个有效运行小时不作为振动判断样本。为避免把过渡状态标记为正常,正常样本采集时压力模型也排除重启后的第一个有效运行小时。
|
|
|
+6. 正常样本同时排除停机前 1~2 个有效运行小时,以及已知异常阶段前后各 12 小时,避免把开停机过渡或异常演化过程标记为正常。
|
|
|
+
|
|
|
+### 9.3 数据读取和统一中间数据
|
|
|
+
|
|
|
+后续实现时,模型数据准备应直接复用 `backend/scan_pks_fault_evolution.py` 的数据读取和小时聚合逻辑,不要为模型另外编写一套时间处理方式。推荐先形成一张“小时级中间表”,再从中间表生成压力窗口和振动窗口。
|
|
|
+
|
|
|
+#### 9.3.1 原始数据读取
|
|
|
+
|
|
|
+1. 从与现有扫描器相同的数据表读取原始采样数据,至少读取:
|
|
|
+ - `sample_time`:原始采样时间;
|
|
|
+ - `machine` 或现有设备标识字段;
|
|
|
+ - `batch` 或现有批次字段;
|
|
|
+ - `YSJ_41`:运行状态判断点;
|
|
|
+ - `YSJ_10`:联轴器端振动;
|
|
|
+ - `YSJ_11`:链轮端振动;
|
|
|
+ - 润滑油压力点及其高、低报警阈值相关字段。
|
|
|
+2. 时间解析、设备排序、批次划分和分块读取方式沿用现有脚本。
|
|
|
+3. 不应先把原始 5 秒数据随机拆分为训练集和测试集。原始数据必须先按自然小时聚合,再按设备和时间生成窗口。
|
|
|
+
|
|
|
+#### 9.3.2 小时级聚合
|
|
|
+
|
|
|
+每个原始采样点先按以下方式归入小时:
|
|
|
+
|
|
|
+```text
|
|
|
+hour = sample_time 向下取整到整点
|
|
|
+```
|
|
|
+
|
|
|
+每个“设备 + 批次 + 小时”生成一行小时数据,至少包括:
|
|
|
+
|
|
|
+```text
|
|
|
+机组/设备
|
|
|
+批次
|
|
|
+小时
|
|
|
+总采样数
|
|
|
+运行样本数
|
|
|
+运行覆盖率 = 运行样本数 / 720
|
|
|
+油压均值、最小值、最大值
|
|
|
+YSJ_10 均值、最大值
|
|
|
+YSJ_11 均值、最大值
|
|
|
+油压低报警样本数、低低报警样本数
|
|
|
+振动高报警样本数、高高报警样本数
|
|
|
+```
|
|
|
+
|
|
|
+其中运行样本的定义必须保持一致:
|
|
|
+
|
|
|
+```text
|
|
|
+YSJ_41 > 0
|
|
|
+```
|
|
|
+
|
|
|
+只有以下小时才可进入有效运行小时序列:
|
|
|
+
|
|
|
+```text
|
|
|
+运行覆盖率 >= 0.80
|
|
|
+且所需的压力或振动特征不为空
|
|
|
+```
|
|
|
+
|
|
|
+压力模型只要求油压特征有效;振动模型只要求 `YSJ_10`、`YSJ_11` 至少有可用特征。不能因为某一类特征缺失,就把另一类模型的有效小时强行删除。
|
|
|
+
|
|
|
+#### 9.3.3 状态边界表
|
|
|
+
|
|
|
+在生成窗口前,先为每台设备建立运行状态边界信息。对相邻有效运行小时计算时间间隔:
|
|
|
+
|
|
|
+```text
|
|
|
+间隔 > 12 小时:新的运行周期
|
|
|
+间隔 <= 12 小时:仍属于同一运行序列
|
|
|
+```
|
|
|
+
|
|
|
+同时标记以下小时:
|
|
|
+
|
|
|
+```text
|
|
|
+首次有效运行小时
|
|
|
+长停机后的重启首个有效运行小时
|
|
|
+停机前最后 1~2 个有效运行小时
|
|
|
+```
|
|
|
+
|
|
|
+这些标记不应丢失,后续既用于生成正常标签,也用于解释模型结果。窗口生成时不得跨越新的运行周期。
|
|
|
+
|
|
|
+### 9.4 六小时窗口生成
|
|
|
+
|
|
|
+每个窗口必须属于同一台设备、同一批次和同一运行周期,并包含连续 6 个有效运行小时。窗口按有效运行小时序列滑动,而不是按数据库行号或简单自然小时滑动。
|
|
|
+
|
|
|
+假设某个运行周期的有效小时序列为:
|
|
|
+
|
|
|
+```text
|
|
|
+h1, h2, h3, h4, h5, h6, h7, h8
|
|
|
+```
|
|
|
+
|
|
|
+则生成:
|
|
|
+
|
|
|
+```text
|
|
|
+窗口1:h1~h6
|
|
|
+窗口2:h2~h7
|
|
|
+窗口3:h3~h8
|
|
|
+```
|
|
|
+
|
|
|
+每个窗口保存以下索引字段:
|
|
|
+
|
|
|
+```text
|
|
|
+window_id
|
|
|
+机组/设备
|
|
|
+批次
|
|
|
+运行周期编号
|
|
|
+窗口开始小时
|
|
|
+窗口结束小时
|
|
|
+窗口内有效运行小时数 = 6
|
|
|
+窗口内自然持续小时数
|
|
|
+```
|
|
|
+
|
|
|
+如果某个窗口中出现以下情况,则不生成该窗口:
|
|
|
+
|
|
|
+- 有效小时数少于 6;
|
|
|
+- 跨越超过 12 小时的停机边界;
|
|
|
+- 跨越批次边界;
|
|
|
+- 必要的压力或振动特征缺失;
|
|
|
+- 包含无法确认运行状态的小时。
|
|
|
+
|
|
|
+窗口结束时间是模型当前可以看到的最后一个小时。实时运行时,只使用截至该窗口结束小时已经产生的数据,不能使用后续小时的数据。
|
|
|
+
|
|
|
+### 9.5 窗口特征
|
|
|
+
|
|
|
+每个 6 小时窗口提取统计、趋势和基线偏离特征,不直接把阶段最终结果作为输入,避免使用未来信息。
|
|
|
+
|
|
|
+压力模型主要特征:
|
|
|
+
|
|
|
+- 6 小时油压均值、最小值、最大值和变化幅度;
|
|
|
+- 当前油压与现有周期基线的偏离;
|
|
|
+- 最近 6 个有效小时的下降斜率和连续下降小时数;
|
|
|
+- 低压、低低压报警样本比例;
|
|
|
+- 运行覆盖率和有效小时数量。
|
|
|
+
|
|
|
+振动模型主要特征:
|
|
|
+
|
|
|
+- `YSJ_10`、`YSJ_11` 的 6 小时均值、最大值和变化幅度;
|
|
|
+- 两个点位相对前 336 个有效运行小时稳健基线的偏离;
|
|
|
+- 峰值稳健偏离、均值偏离、高报警和高高报警比例;
|
|
|
+- 最近 6 个有效小时的趋势;
|
|
|
+- 两个振动点是否同步升高;
|
|
|
+- 运行覆盖率和有效小时数量。
|
|
|
+
|
|
|
+### 9.6 标签划分
|
|
|
+
|
|
|
+两个结果 CSV 分别作为两个模型的阶段标签来源:
|
|
|
+
|
|
|
+- `润滑油压力小时阶段段.csv` → 压力异常窗口标签;
|
|
|
+- `振动异常段.csv` → 振动异常窗口标签。
|
|
|
+
|
|
|
+第一阶段只划分二分类:
|
|
|
+
|
|
|
+```text
|
|
|
+正常窗口 / 压力异常窗口
|
|
|
+正常窗口 / 振动异常窗口
|
|
|
+```
|
|
|
+
|
|
|
+暂不把轻微、异常、严重异常分别训练成多分类,原因是当前独立故障过程和严重异常样本较少。一个 6 小时窗口如果落在对应异常阶段内,可标记为异常窗口;跨越异常边界或处于异常前后 12 小时隔离区的窗口暂不作为正常标签。
|
|
|
+
|
|
|
+同一完整故障过程切出的多个窗口属于同一组,训练集和测试集不得拆散到两边,避免因窗口高度重叠造成结果虚高。
|
|
|
+
|
|
|
+### 9.7 正常样本采集
|
|
|
+
|
|
|
+正常样本应从已确认稳定运行的连续数据中均匀抽取,按压缩机、月份或运行周期进行分层,避免正常样本集中在某一台设备或某一段时间。采集前必须确认:
|
|
|
+
|
|
|
+- 6 个小时均为有效运行小时;
|
|
|
+- 不跨越超过 12 小时的停机边界;
|
|
|
+- 不包含开机后的过渡小时;
|
|
|
+- 不包含停机前 1~2 个有效运行小时;
|
|
|
+- 不位于已知异常阶段前后 12 小时隔离区;
|
|
|
+- 数据没有明显缺失或异常覆盖率。
|
|
|
+
|
|
|
+正常样本数量不需要无限增加,应尽量与异常窗口保持合理比例,并保证不同设备和时间段都有代表性。
|
|
|
+
|
|
|
+### 9.8 模型及输出
|
|
|
+
|
|
|
+每个方向使用一个 XGBoost 二分类模型,并同时保留 K 近邻相似性匹配:
|
|
|
+
|
|
|
+- XGBoost:输出当前 6 小时窗口属于异常的概率;
|
|
|
+- K 近邻:返回最相似的历史正常或异常窗口及相似度;
|
|
|
+- 现有规则:继续负责小时异常、阶段合并和最终阶段输出。
|
|
|
+
|
|
|
+示例输出:
|
|
|
+
|
|
|
+```text
|
|
|
+压力规则:正常
|
|
|
+压力模型异常概率:0.68
|
|
|
+最相似历史压力异常窗口:0.79
|
|
|
+辅助判断:存在压力异常相似性,继续观察
|
|
|
+```
|
|
|
+
|
|
|
+模型不能单独推翻现有规则的严重异常结果。实际判断建议分为:
|
|
|
+
|
|
|
+- 规则异常且模型概率/相似度较高:辅助确认异常;
|
|
|
+- 规则正常但模型概率/相似度较高:标记为疑似异常,不直接报警;
|
|
|
+- 规则异常但模型支持较弱:保留规则结果,提示需要人工复核;
|
|
|
+- 规则正常且模型支持较弱:正常。
|
|
|
+
|
|
|
+### 9.9 当前方案边界
|
|
|
+
|
|
|
+当前样本量较少,模型定位为历史故障相似性匹配和规则辅助确认,不作为独立故障诊断器。压力和振动应分别评估,不能把滑动窗口数量当成独立故障数量。后续只有在积累更多独立故障过程,并结合维修记录或人工确认校验标签后,才考虑进一步训练多等级模型。
|
|
|
+
|
|
|
+## 10. 与现有扫描器联合判断的最终数据流
|
|
|
+
|
|
|
+模型不是另起一套故障检测程序,而是接在 `backend/scan_pks_fault_evolution.py` 之后,使用扫描器已经生成的小时数据、运行状态和规则结果。联合判断的原则是:
|
|
|
+
|
|
|
+```text
|
|
|
+现有扫描器负责发现和划分异常阶段
|
|
|
+模型负责判断当前窗口是否像历史异常
|
|
|
+联合层负责给出辅助确认结果
|
|
|
+```
|
|
|
+
|
|
|
+### 10.1 实时处理流程
|
|
|
+
|
|
|
+每当新的完整小时数据到达后,按以下顺序执行:
|
|
|
+
|
|
|
+```text
|
|
|
+1. 读取最新原始采样数据
|
|
|
+2. 按现有规则聚合为自然小时数据
|
|
|
+3. 判断运行状态和运行覆盖率
|
|
|
+4. 更新该设备的有效运行小时序列
|
|
|
+5. 更新压力周期和压力基线
|
|
|
+6. 更新振动近期稳健基线
|
|
|
+7. 执行现有压力、振动规则
|
|
|
+8. 判断是否已经形成或更新异常阶段
|
|
|
+9. 如果已有最近6个有效运行小时,则生成模型窗口
|
|
|
+10. 提取与训练时完全相同的窗口特征
|
|
|
+11. 分别调用压力模型和振动模型
|
|
|
+12. 查询最相似的历史窗口
|
|
|
+13. 将规则结果、模型概率和相似度合并输出
|
|
|
+```
|
|
|
+
|
|
|
+在第 9 步之前不能调用模型。少于 6 个有效运行小时,窗口不完整,只能输出现有规则结果,不能人为补齐窗口。
|
|
|
+
|
|
|
+### 10.2 压力联合判断流程
|
|
|
+
|
|
|
+压力方向使用独立的压力模型,处理顺序如下:
|
|
|
+
|
|
|
+```text
|
|
|
+最新有效压力小时
|
|
|
+ ↓
|
|
|
+加入当前压力周期
|
|
|
+ ↓
|
|
|
+更新周期基线和最近趋势
|
|
|
+ ↓
|
|
|
+执行现有压力小时规则
|
|
|
+ ↓
|
|
|
+生成最近6个有效运行小时的压力窗口
|
|
|
+ ↓
|
|
|
+计算窗口特征
|
|
|
+ ↓
|
|
|
+XGBoost压力模型 + K近邻压力相似度
|
|
|
+ ↓
|
|
|
+与压力规则结果合并
|
|
|
+```
|
|
|
+
|
|
|
+压力规则仍然负责:
|
|
|
+
|
|
|
+- 判断当前小时是否达到轻微、异常或严重异常条件;
|
|
|
+- 判断压力异常是否满足连续有效小时确认;
|
|
|
+- 合并相邻的压力异常阶段;
|
|
|
+- 写入 `润滑油压力小时等级.csv` 和 `润滑油压力小时阶段段.csv`。
|
|
|
+
|
|
|
+压力模型只负责回答:
|
|
|
+
|
|
|
+```text
|
|
|
+最近6个有效运行小时的压力变化,是否像历史压力异常窗口?
|
|
|
+```
|
|
|
+
|
|
|
+建议压力联合输出至少包含:
|
|
|
+
|
|
|
+```text
|
|
|
+设备
|
|
|
+窗口开始小时
|
|
|
+窗口结束小时
|
|
|
+现有压力小时等级
|
|
|
+现有压力阶段编号(如果已经形成)
|
|
|
+压力模型异常概率
|
|
|
+最相似历史压力窗口
|
|
|
+压力相似度
|
|
|
+压力联合判断
|
|
|
+```
|
|
|
+
|
|
|
+压力联合判断建议使用以下逻辑:
|
|
|
+
|
|
|
+| 现有规则 | 模型结果 | 联合输出 |
|
|
|
+|---|---|---|
|
|
|
+| 正常 | 概率和相似度都低 | 正常 |
|
|
|
+| 正常 | 概率或相似度较高 | 压力疑似异常,继续观察,不直接升级阶段 |
|
|
|
+| 轻微 | 模型支持较高 | 压力异常倾向,辅助确认 |
|
|
|
+| 异常/严重异常 | 模型支持较高 | 模型辅助确认压力异常 |
|
|
|
+| 异常/严重异常 | 模型支持较低 | 保留规则结果,标记模型意见不一致,人工复核 |
|
|
|
+
|
|
|
+模型不能因为概率较低就取消现有规则已经确认的压力异常,也不能因为概率较高就绕过现有规则直接生成严重异常阶段。
|
|
|
+
|
|
|
+### 10.3 振动联合判断流程
|
|
|
+
|
|
|
+振动方向使用独立的振动模型,处理顺序如下:
|
|
|
+
|
|
|
+```text
|
|
|
+最新有效振动小时
|
|
|
+ ↓
|
|
|
+判断是否为重启后的首个有效运行小时
|
|
|
+ ↓
|
|
|
+更新前336个有效运行小时的振动基线
|
|
|
+ ↓
|
|
|
+执行YSJ_10、YSJ_11小时级振动规则
|
|
|
+ ↓
|
|
|
+按6小时间隔合并振动信号
|
|
|
+ ↓
|
|
|
+生成最近6个有效运行小时的振动窗口
|
|
|
+ ↓
|
|
|
+计算YSJ_10、YSJ_11窗口特征
|
|
|
+ ↓
|
|
|
+XGBoost振动模型 + K近邻振动相似度
|
|
|
+ ↓
|
|
|
+与振动规则结果合并
|
|
|
+```
|
|
|
+
|
|
|
+振动规则仍然负责:
|
|
|
+
|
|
|
+- 判断 `YSJ_10` 和 `YSJ_11` 是否触发振动信号;
|
|
|
+- 确定振动异常侧;
|
|
|
+- 判断单小时信号等级;
|
|
|
+- 按不超过 6 小时的间隔合并异常段;
|
|
|
+- 写入 `振动异常段.csv`。
|
|
|
+
|
|
|
+振动模型只负责回答:
|
|
|
+
|
|
|
+```text
|
|
|
+最近6个有效运行小时的振动变化,是否像历史振动异常窗口?
|
|
|
+```
|
|
|
+
|
|
|
+重启后的首个有效运行小时不生成振动模型窗口,也不作为振动正常样本。必须等到后续累计满 6 个合格有效运行小时后,才可以进行模型判断。
|
|
|
+
|
|
|
+建议振动联合输出至少包含:
|
|
|
+
|
|
|
+```text
|
|
|
+设备
|
|
|
+窗口开始小时
|
|
|
+窗口结束小时
|
|
|
+现有振动规则等级
|
|
|
+异常侧:YSJ_10 / YSJ_11 / 两侧
|
|
|
+现有振动阶段编号(如果已经形成)
|
|
|
+振动模型异常概率
|
|
|
+最相似历史振动窗口
|
|
|
+振动相似度
|
|
|
+振动联合判断
|
|
|
+```
|
|
|
+
|
|
|
+### 10.4 模型与规则的职责边界
|
|
|
+
|
|
|
+联合系统中,两个部分的职责必须固定,不能在实现过程中互相覆盖:
|
|
|
+
|
|
|
+| 功能 | 现有扫描器 | 模型辅助层 |
|
|
|
+|---|---|---|
|
|
|
+| 小时聚合 | 负责 | 不重复实现 |
|
|
|
+| 运行状态判断 | 负责 | 使用结果 |
|
|
|
+| 有效小时判断 | 负责 | 使用结果 |
|
|
|
+| 开停机边界 | 负责 | 使用结果并过滤窗口 |
|
|
|
+| 压力/振动基线 | 负责更新 | 使用同口径特征 |
|
|
|
+| 单小时异常识别 | 负责 | 不直接替代 |
|
|
|
+| 异常阶段合并 | 负责 | 不直接替代 |
|
|
|
+| 历史相似性判断 | 不负责 | 负责 |
|
|
|
+| 异常概率输出 | 不负责 | 负责 |
|
|
|
+| 最终规则结果 | 负责 | 提供辅助意见 |
|
|
|
+
|
|
|
+因此,模型输出不应直接改写两个现有结果 CSV。第一阶段建议单独输出模型辅助结果,例如:
|
|
|
+
|
|
|
+```text
|
|
|
+压力模型辅助确认.csv
|
|
|
+振动模型辅助确认.csv
|
|
|
+```
|
|
|
+
|
|
|
+这样可以在不影响现有规则结果的情况下,对比模型与规则的一致性。
|
|
|
+
|
|
|
+### 10.5 联合判断的推荐状态
|
|
|
+
|
|
|
+为了避免只输出一个难以解释的布尔值,联合层建议使用以下状态:
|
|
|
+
|
|
|
+```text
|
|
|
+规则正常
|
|
|
+规则轻微异常
|
|
|
+规则异常
|
|
|
+规则严重异常
|
|
|
+模型疑似异常
|
|
|
+模型辅助确认
|
|
|
+规则与模型不一致
|
|
|
+数据不足
|
|
|
+```
|
|
|
+
|
|
|
+具体判断优先级如下:
|
|
|
+
|
|
|
+1. 数据不足时,不输出正常,输出“数据不足”。
|
|
|
+2. 规则已经判定严重异常时,保留“规则严重异常”,模型只作为辅助证据。
|
|
|
+3. 规则判定异常且模型概率、相似度至少有一项达到确认条件时,输出“模型辅助确认”。
|
|
|
+4. 规则正常但模型支持较高时,输出“模型疑似异常”,不直接写入规则异常阶段。
|
|
|
+5. 规则异常但模型支持较低时,保留规则结果,并输出“规则与模型不一致”。
|
|
|
+6. 规则正常且模型支持较低时,输出“规则正常”。
|
|
|
+
|
|
|
+概率和相似度的具体阈值不能直接凭经验固定。应在独立验证数据上确定,例如分别评估不同阈值下的误报数量、异常召回情况和规则一致率。阈值确定前,模型结果只能作为参考,不应自动升级报警。
|
|
|
+
|
|
|
+### 10.6 窗口与阶段的对应关系
|
|
|
+
|
|
|
+模型窗口和规则阶段不是一一对应关系:
|
|
|
+
|
|
|
+- 一个异常阶段可以包含多个重叠的 6 小时模型窗口;
|
|
|
+- 一个 6 小时模型窗口可能只覆盖异常阶段的一部分;
|
|
|
+- 一个窗口也可能跨越异常开始或恢复边界;
|
|
|
+- 规则阶段以异常信号和阶段合并逻辑为准,模型窗口只表示当前时刻的局部证据。
|
|
|
+
|
|
|
+因此,模型结果应通过 `设备 + 批次 + 窗口结束小时` 与规则小时结果关联,再根据窗口时间范围判断它是否落在规则阶段内,而不能简单按行号或阶段编号直接关联。
|
|
|
+
|
|
|
+推荐关联方式:
|
|
|
+
|
|
|
+```text
|
|
|
+规则小时记录:设备、批次、小时
|
|
|
+模型窗口记录:设备、批次、窗口开始小时、窗口结束小时
|
|
|
+阶段记录:设备、批次、开始小时、结束小时
|
|
|
+```
|
|
|
+
|
|
|
+实时判断时,以模型窗口的 `窗口结束小时` 作为当前判断时刻:
|
|
|
+
|
|
|
+```text
|
|
|
+模型窗口结束小时 = 当前最新有效小时
|
|
|
+```
|
|
|
+
|
|
|
+如果模型窗口结束小时已经落入规则异常阶段,模型结果用于确认;如果尚未落入规则阶段但模型支持较高,只能标记为疑似异常,不能提前修改规则阶段起点。
|
|
|
+
|
|
|
+### 10.7 最终推荐的数据流
|
|
|
+
|
|
|
+```text
|
|
|
+pks_long_sample 原始采样数据
|
|
|
+ ↓
|
|
|
+scan_pks_fault_evolution.py:按自然小时聚合
|
|
|
+ ↓
|
|
|
+小时级中间表
|
|
|
+ ├─ 运行样本数、运行覆盖率
|
|
|
+ ├─ 油压小时特征
|
|
|
+ ├─ YSJ_10 小时特征
|
|
|
+ ├─ YSJ_11 小时特征
|
|
|
+ └─ 报警比例和状态边界
|
|
|
+ ↓
|
|
|
+现有规则分支
|
|
|
+ ├─ 压力小时等级
|
|
|
+ ├─ 压力异常阶段
|
|
|
+ └─ 振动异常阶段
|
|
|
+ ↓
|
|
|
+模型窗口分支
|
|
|
+ ├─ 最近6个有效运行小时压力窗口
|
|
|
+ │ ├─ 压力窗口特征
|
|
|
+ │ ├─ XGBoost压力异常概率
|
|
|
+ │ └─ K近邻压力相似度
|
|
|
+ └─ 最近6个有效运行小时振动窗口
|
|
|
+ ├─ 振动窗口特征
|
|
|
+ ├─ XGBoost振动异常概率
|
|
|
+ └─ K近邻振动相似度
|
|
|
+ ↓
|
|
|
+联合判断层
|
|
|
+ ├─ 按设备、批次、窗口结束小时关联规则结果
|
|
|
+ ├─ 保留规则阶段和等级
|
|
|
+ ├─ 增加模型概率和历史相似案例
|
|
|
+ └─ 输出模型辅助确认结果
|
|
|
+```
|
|
|
+
|
|
|
+第一阶段的实现顺序建议为:
|
|
|
+
|
|
|
+```text
|
|
|
+1. 先输出小时级中间表
|
|
|
+2. 验证模型窗口与现有规则的时间完全对齐
|
|
|
+3. 生成压力和振动6小时窗口
|
|
|
+4. 生成正常/异常标签
|
|
|
+5. 先离线训练和评估XGBoost、K近邻
|
|
|
+6. 输出独立模型辅助结果,不修改现有规则CSV
|
|
|
+7. 对比规则与模型结果
|
|
|
+8. 确认阈值后,再考虑接入实时联合判断
|
|
|
+```
|