Pārlūkot izejas kodu

模型预测参考写入 alarm_info_json(alarm_des 不再追加);3d 故障详情/弹窗新增「模型预测」字段并去掉冗余前缀;同步文档

18922397810 2 nedēļas atpakaļ
vecāks
revīzija
d85194959b

+ 5 - 1
3d/frontend/src/components/AlarmDetailCard.vue

@@ -52,6 +52,10 @@ const consecutive = computed(() =>
   num2(isVibration.value ? pick('阶段最大连续异常有效小时数') : pick('阶段最大连续下降有效小时数')),
 )
 const basis = computed(() => pick('阶段触发依据'))
+const modelPrediction = computed(() => {
+  const raw = pick('模型预测参考')
+  return raw === '—' ? raw : raw.replace(/^模型预测参考:?/, '')
+})
 
 const smallChart = computed(() => {
   if (!charts.loaded || !store.selected) return null
@@ -86,7 +90,7 @@ const smallChart = computed(() => {
         <div class="cell"><span class="label">最大连续:</span><span class="value">{{ consecutive }}</span></div>
       </div>
       <div class="dline"><span class="label">触发依据:</span><span class="value wrap">{{ basis }}</span></div>
-      <div class="dline"><span class="label">模型预测:</span><span class="value">—</span></div>
+      <div class="dline"><span class="label">模型预测:</span><span class="value wrap">{{ modelPrediction }}</span></div>
     </div>
 
     <div class="chart-block">

+ 3 - 1
3d/frontend/src/components/FaultChartModal.vue

@@ -79,6 +79,7 @@ const LABELS: Record<string, string> = {
   模型异常概率均值: '概率均值',
   模型异常概率最大值: '概率最大',
   模型异常概率最小值: '概率最小',
+  模型预测参考: '模型预测',
 }
 
 const infoItems = computed<{ key: string; label: string; value: string; span: number }[]>(() =>
@@ -86,11 +87,12 @@ const infoItems = computed<{ key: string; label: string; value: string; span: nu
     const empty = value === null || value === undefined || value === ''
     let text = empty ? '—' : String(value)
     if (!empty && HOUR_KEYS.has(key)) text = `${text} 小时`
+    if (!empty && key === '模型预测参考') text = text.replace(/^模型预测参考:?/, '')
     return {
       key,
       label: LABELS[key] ?? key,
       value: text,
-      span: key === '阶段触发依据' ? 3 : 1,
+      span: key === '阶段触发依据' || key === '模型预测参考' ? 3 : 1,
     }
   }),
 )

+ 2 - 2
models/README.md

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

+ 2 - 5
models/common/alarm_store.py

@@ -47,8 +47,8 @@ def _as_dt(value) -> datetime:
 
 
 def _json(row: dict) -> str:
-    # The explanatory note goes to alarm_des, not to alarm_info_json.
-    data = {key: value for key, value in row.items() if not key.startswith("_") and key != "模型预测参考"}
+    # The model-reference note is stored inside alarm_info_json (not alarm_des).
+    data = {key: value for key, value in row.items() if not key.startswith("_")}
     return json.dumps(data, ensure_ascii=False, separators=(",", ":"), default=str)
 
 
@@ -56,9 +56,6 @@ def _targets(device_code: str, kind: str, row: dict) -> list[dict]:
     level = row.get("压力阶段") if kind == "pressure" else row.get("振动阶段")
     start, end = row.get("开始小时"), row.get("结束小时")
     des = str(row.get("阶段触发依据") or "")
-    note = row.get("模型预测参考")
-    if note:
-        des = f"{des};{note}"
     des = des[:DES_MAX]
     info = _json(row)
     if kind == "pressure":

+ 3 - 2
models/markdown/全量与实时运行及告警落库.md

@@ -70,8 +70,9 @@ python models/scan_all.py --hourly-csv models/datas/hourly/pks_hourly_full.csv
   (段不足 3 小时时窗口向前补有效小时);整段无法组成窗口则记“数据不足”。
 - 汇总:`模型异常概率均值`、`模型异常概率最大值`、`模型异常概率最小值`。
 - 输出:
-  - `alarm_info_json` 只增加上述 3 个概率字段;
-  - `alarm_des` 追加 `模型预测参考:3小时窗口异常概率 均值x/最大y/最小z(n次)`;
+  - `alarm_info_json` 增加上述 3 个概率字段及 `模型预测参考`
+    (`模型预测参考:3小时窗口异常概率 均值x/最大y/最小z(n次)`);
+  - `alarm_des` 只保留 `阶段触发依据`,不再追加模型预测参考;
   - 本地 `润滑油压力小时阶段段.csv` / `振动异常段.csv` 同步增加这 3 列 + `模型预测参考` 列。
 - 训练链路(`build_datasets` / `split` / `train`)完全不受影响;预测复用同一窗口与特征函数。
 - 开启时若 `models/datas/artifacts/*` 缺失会直接报错,需先运行对应 `run_pipeline.py`。