3. 报警优先级分布审计与偏差识别
审计对象与判定基准
报警优先级分布审计的核心不是“数一数各优先级有多少条”,而是判断优先级结构是否与风险结构匹配。ISA 18.2 给出的参考分布是:紧急(P1)约 5%、高(P2)约 15%、低/提示(P3)约 80%。这个比例是设计目标而非硬性验收线,审计时应把它作为“偏差方向”的参照,重点识别两类问题:
- 高优先级泛滥:P1+P2 合计显著超过 20%,通常意味着大量报警被“就高不就低”地配置,操作员对高优先级产生钝化。
- 低优先级缺失:P3 占比过低、P1/P2 挤占空间,说明分级粒度不足,缺少“提示类”报警的缓冲层。
海洋平台的特殊性在于系统间风险差异极大:工艺系统(分离器、压缩机、外输泵)报警量大但多数属可延迟处理;火气(F&G)与安全仪表(ESD)报警量小但单条权重高。因此审计必须按系统分组统计,再与全平台总体分布对照,否则总量比例会被工艺系统的大基数稀释,掩盖 F&G 系统的分级异常。
统计口径与数据准备
审计输入沿用标准化报警数据集,至少需要四个字段:system(所属系统)、priority(优先级,统一映射为 P1/P2/P3)、tag(位号)、event_time(事件时间)。统计前需固定三条口径,避免不同人算出不同结果:
- 按报警事件计数,而非按位号计数——同一高位号反复触发会放大其权重,这正是泛滥的真实表现。
- 优先级缺失值单列:
priority为空或为“未定义”的记录不并入 P3,单独作为“未分级”统计,它本身就是审计发现。 - 统计窗口一致:所有系统使用同一时间窗(如连续 30 天),窗口内无报警的系统标注为“无数据”,不与“零报警”混淆。
分布计算与偏差量化
对每个系统计算三个量:各优先级事件数、各优先级占比、与 ISA 18.2 参考值的偏差。偏差用百分点(pp)表示,便于跨系统比较。下面是一段可直接运行的统计脚本,输入为 CSV,输出按系统分组的分布表与偏差标记。
import pandas as pd
# 参考比例(ISA 18.2 建议)
REF = {"P1": 0.05, "P2": 0.15, "P3": 0.80}
# 偏差判定阈值(百分点)
HIGH_FLOOD_PP = 10.0 # P1+P2 超出参考合计 20% 的容忍度
LOW_MISSING_PP = 15.0 # P3 低于参考 80% 的容忍度
df = pd.read_csv("alarm_std.csv", parse_dates=["event_time"])
df["priority"] = df["priority"].fillna("未分级").str.upper().str.strip()
# 按系统 × 优先级计数
cnt = (df.groupby(["system", "priority"]).size()
.unstack(fill_value=0))
for p in ["P1", "P2", "P3", "未分级"]:
if p not in cnt.columns:
cnt[p] = 0
cnt["总事件"] = cnt[["P1", "P2", "P3", "未分级"]].sum(axis=1)
cnt = cnt[cnt["总事件"] > 0]
# 占比(%)
for p in ["P1", "P2", "P3", "未分级"]:
cnt[f"{p}占比"] = (cnt[p] / cnt["总事件"] * 100).round(1)
cnt["高优先级合计占比"] = (cnt["P1占比"] + cnt["P2占比"]).round(1)
cnt["高优先级偏差pp"] = (cnt["高优先级合计占比"] - 20.0).round(1)
cnt["P3偏差pp"] = (cnt["P3占比"] - 80.0).round(1)
# 偏差标记
def flag(row):
tags = []
if row["高优先级偏差pp"] >= HIGH_FLOOD_PP:
tags.append("高优先级泛滥")
if row["P3偏差pp"] <= -LOW_MISSING_PP:
tags.append("低优先级缺失")
if row["未分级"] > 0:
tags.append("存在未分级")
return ";".join(tags) if tags else "基本符合"
cnt["审计结论"] = cnt.apply(flag, axis=1)
print(cnt[["总事件", "P1占比", "P2占比", "P3占比",
"高优先级偏差pp", "P3偏差pp", "审计结论"]]
.sort_values("高优先级偏差pp", ascending=False))
脚本输出的是“系统级”结论。实际审计中还需要一步下钻:对标记为“高优先级泛滥”的系统,按位号统计 P1/P2 事件数排名,找出贡献最大的前若干位号。这些位号往往集中在少数几个测点(如液位高高、压力高高),是后续降级或抑制的直接对象。
分布结构与偏差识别
下图把审计逻辑压缩为一张结构图:左侧是各系统的事件基数,中间是分级占比与参考带的对照,右侧是偏差判定与下钻方向。注意 F&G 系统事件量小但 P1 占比高,属于“合理的高优先级集中”,不应与工艺系统的泛滥混为一谈——这正是按系统分组审计的价值。
审计结果判读与下钻
拿到分布表后,按以下顺序判读,避免被总量数字误导:
- 先看未分级:任一系统存在未分级记录,先补分级,该系统的比例结论暂缓使用。
- 再看高优先级偏差:按“高优先级偏差pp”降序排列,排在前面的系统即为高优先级泛滥候选。对每个候选系统,按位号统计 P1/P2 事件数,取累计占比达到该系统高优先级事件 50% 的位号集合,作为降级审查清单。
- 最后看低优先级缺失:P3 占比明显偏低的系统,检查是否存在“所有报警都至少设为 P2”的配置习惯,或提示类报警被整体关闭。
需要强调的是,偏差识别只回答“哪里可能有问题”,不直接给出“应该改成什么级别”。降级动作必须结合该位号的工艺后果、联锁关系和操作规程逐条确认,这部分工作属于后续的报警合理化审查,不在本次审计范围内。
可复用的审计输出表
审计结论应落成一张可直接交给仪表与工艺专业复核的表,字段如下(示例数据为教学假设,非实测):
| 系统 | 总事件 | P1占比 | P2占比 | P3占比 | 高优先级偏差(pp) | P3偏差(pp) | 审计结论 | 下钻重点 |
|---|---|---|---|---|---|---|---|---|
| 工艺系统 | 12400 | 20.0% | 35.0% | 45.0% | +35.0 | -35.0 | 高优先级泛滥;低优先级缺失 | 液位高高、压力高高类位号 |
| 火气 F&G | 860 | 15.0% | 20.0% | 65.0% | +15.0 | -15.0 | 高优先级集中(需结合后果确认) | 探测器故障类报警 |
| 安全 ESD | 310 | 6.0% | 16.0% | 78.0% | +2.0 | -2.0 | 基本符合 | — |
| 公用工程 | 5200 | 3.0% | 12.0% | 85.0% | -5.0 | +5.0 | 基本符合 | — |
表中“下钻重点”一列是审计与后续治理的衔接点:它把系统级偏差转化为可核查的位号范围,使降级或抑制工作有明确起点,而不是在全平台范围内盲目筛查。