# PKS 泛化模型(7/8/9 号机,机组相对特征) 本目录是 7/8/9 号机**压力**与**振动**的泛化模型,两者**互相独立**:分别建特征、分别训练、分别评估,互不影响。 核心思路:绝对油压/振动值各机组不同,直接混合训练会把一台机组的正常水平当成另一台机组的异常。因此去掉绝对特征,改用机组相对(泛化)特征: - **压力**:窗口内相对 + 相对本机周期基线(周期前 3 天)+ 相对近期 24h 基线 + 回撤/连续下降 + 机组 z 分数。 - **振动**:相对本机近期 7×24 小时稳健基线(与扫描器口径一致,跨停机周期取历史)的偏离与比例 + 机组 z 分数 + 报警比例。 - 机组基准(`*_z` 的 median/MAD)只用 train 划分的正常窗口计算,存 `models/*_unit_baselines.json`;每台机组在 train 中必须有正常事件组,否则报错。 详见 `RESULTS_789_GENERALIZED.md`(压力)、`RESULTS_789_VIBRATION.md`(振动)、`跨机组泛化与样本扩充方案.md`(方案)、`实时联合诊断方案.md`(实时接入)。 ## 目录 - `build_datasets.py`:样本构建,支持 `--window-hours`、`--model-types`、`--units`、`--hourly-csv`(复用中间表不查库)。 - `split_datasets.py`:按事件组切分,支持 `--split-ratios`、`--seed`、`--positive-basis`。 - `generalized_features.py`:压力泛化特征。 - `generalized_features_vibration.py`:振动泛化特征。 - `train_model.py`:训练并保存机组基准(按 `model_type` 选择特征模块)。 - `evaluate_model.py`:留出测试,输出两类指标与分机组误报率。 - `infer_and_combine.py`:规则联合辅助输出。 - `data/hourly.csv`:7/8/9 小时级中间表(含油压与振动列),供 `--hourly-csv` 复用。 - `datasets_789/`、`models_789/`:压力 3h;`datasets_789_6h/`、`models_789_6h/`:压力 6h 对照。 - `datasets_vibration_789/`、`models_vibration_789/`:振动 3h;`datasets_vibration_789_6h/`、`models_vibration_789_6h/`:振动 6h 对照。 ## 压力复现 ```bash # 1. 重建 3h 样本(重叠即异常,复用中间表不查库) python backend/model_assistant_generalized/build_datasets.py \ --window-hours 3 --model-types pressure \ --hourly-csv backend/model_assistant_generalized/data/hourly.csv \ --output-dir backend/model_assistant_generalized/datasets_789 # 2. 按事件组切分(6.5/2/1.5,固定种子) python backend/model_assistant_generalized/split_datasets.py \ --datasets-dir backend/model_assistant_generalized/datasets_789 \ --model-types pressure --split-ratios 6.5 2 1.5 --seed 20260921 # 3. 训练 python backend/model_assistant_generalized/train_model.py pressure \ --datasets-dir backend/model_assistant_generalized/datasets_789 \ --models-dir backend/model_assistant_generalized/models_789 \ --all-normal --rounds 800 --early-stopping-rounds 50 # 4. 封存测试 python backend/model_assistant_generalized/evaluate_model.py pressure \ --datasets-dir backend/model_assistant_generalized/datasets_789 \ --models-dir backend/model_assistant_generalized/models_789 \ --output-dir cache/pks_scanner/model_assistant_generalized_789 # 5. 规则联合辅助输出 python backend/model_assistant_generalized/infer_and_combine.py pressure \ --datasets-dir backend/model_assistant_generalized/datasets_789 \ --models-dir backend/model_assistant_generalized/models_789 \ --output-dir cache/pks_scanner/model_assistant_generalized_789 ``` ## 振动复现 振动与压力流程相同,把 `--model-types pressure` 换成 `vibration`,目录换成 `datasets_vibration_789` / `models_vibration_789`,输出目录换成 `cache/pks_scanner/model_assistant_generalized_vibration_789`。切分时振动建议加 `--positive-basis groups`(每个异常事件等权,避免个别长事件整组落入同一划分)。 ## 6 小时窗口对照 把上面的 `datasets_*`、`models_*` 换成 `_6h` 版本,并在 `build_datasets.py` 传 `--window-hours 6` 即可。 ## 压力结果摘要(3h) 测试 2,253 窗口:异常查准率 95.12%、召回率 98.11%、F1 96.59%、PR-AUC 99.61%;正常类 F1 99.74%;事件召回 10/10。分机组正常误报率:7 号机 0.32%、8 号机 1.13%、9 号机 0.00%。 ## 振动结果摘要(3h) 测试 2,180 窗口:异常查准率 71.43%、召回率 71.43%、F1 71.43%、PR-AUC 82.70%;正常类 F1 99.72%;事件召回 4/4。分机组正常误报率:7 号机 0.00%、8 号机 0.71%、9 号机 0.13%。