"""5 号机缸体振动实验配置。 本目录与 _tmp_temperature 一样是临时实验区,不进入 models/。 温度只作为事后参考,不参与特征、阈值、标签生成。 """ from __future__ import annotations from pathlib import Path UNIT = 5 UNIT_PREFIX = "5号机组" POINT_SUFFIX = "缸体振动" BASE_DIR = Path(__file__).resolve().parent OUTPUT_DIR = BASE_DIR / "out" PLOT_DIR = OUTPUT_DIR / "plots" TEMPERATURE_LABELS = BASE_DIR.parent / "_tmp_temperature" / "out" / "温度异常段.csv" CYLINDERS = { "一缸": {"stage": "一级", "stage_cylinder": "一级1#", "point": "5号机组一缸缸体振动"}, "二缸": {"stage": "一级", "stage_cylinder": "一级2#", "point": "5号机组二缸缸体振动"}, "三缸": {"stage": "一级", "stage_cylinder": "一级3#", "point": "5号机组三缸缸体振动"}, "四缸": {"stage": "二级", "stage_cylinder": "二级1#", "point": "5号机组四缸缸体振动"}, "五缸": {"stage": "二级", "stage_cylinder": "二级2#", "point": "5号机组五缸缸体振动"}, "六缸": {"stage": "二级", "stage_cylinder": "二级3#", "point": "5号机组六缸缸体振动"}, } POINT_TO_CYLINDER = {meta["point"]: name for name, meta in CYLINDERS.items()} CYLINDER_TO_INDEX = {name: index for index, name in enumerate(CYLINDERS, start=1)} STAGE_PEERS = { "一级": ["一缸", "二缸", "三缸"], "二级": ["四缸", "五缸", "六缸"], } # 5#/6# 温度点位使用“级内编号”;温度点位的 2# 缸对应同级的二缸。 STAGE_CYLINDER_TO_GLOBAL = { ("一级", "1#"): "一缸", ("一级", "2#"): "二缸", ("一级", "3#"): "三缸", ("二级", "1#"): "四缸", ("二级", "2#"): "五缸", ("二级", "3#"): "六缸", } # 只用于事后验证,不参与振动标签生成。 EVENTS = [ { "event_id": "2026-06-12", "date": "2026-06-12", "cylinder": "二缸", "description": "5#压缩机一级2#缸温度异常", "fault_category": "气阀故障", }, { "event_id": "2026-06-21", "date": "2026-06-21", "cylinder": "五缸", "description": "5#压缩机二级2#缸温度异常", "fault_category": "气阀故障", }, { "event_id": "2026-07-11", "date": "2026-07-11", "cylinder": "二缸", "description": "一级二缸排温高停机", "fault_category": "气阀故障", }, ] # 只用跨缸残差评分:抵消全厂工况/启停造成的共同抬升,突出单缸异常。 SCORE_FEATURES: list[str] = [] RESIDUAL_FEATURES = ["rms_log", "kurt", "hf_ratio", "env_1x_log", "env_2x_log"] PLOT_FEATURES = ["rms_log", "kurt", "hf_ratio", "env_1x_log", "env_2x_log"] # 基线剔除:事件日前后各 7 天/1 天不参与正常基线。 BASELINE_EXCLUDE_BEFORE_DAYS = 7 BASELINE_EXCLUDE_AFTER_DAYS = 1 # 事件验证窗口:事件前 7 天 ~ 事件后 1 天。 VALIDATION_BEFORE_DAYS = 7 VALIDATION_AFTER_DAYS = 1 MIN_SCORE_Z = 4.5 SCORE_QUANTILE = 0.99 MIN_CONTRAST = 2.5 MIN_CONSECUTIVE_HITS = 2 STRONG_SINGLE_SCORE = 4.5 STRONG_SINGLE_CONTRAST = 3.0 STRONG_SINGLE_SPECIFICITY = 1.2 MERGE_GAP_POINTS = 8 ROLLING_WINDOW_HOURS = 168 ROLLING_MIN_HOURS = 24 CONTRAST_WINDOW_HOURS = 24 ONSET_LOOKBACK_DAYS = 7 ONSET_FACTOR = 0.7 FEATURE_VERSION = "v1"