现有的很多自动化算法(比如单纯的 $3\sigma$ 原则、箱线图 Isolation Forest 等)非常“死板”,它们只看数值离不离群,而不管背后的物理逻辑。如“某一天用电量突增”,很可能是因为极端天气(如暴热/暴冷)、节假日错位、大型活动或者工厂复工引起的。这些属于强特征触发的正常极端样本,如果直接删掉或平滑掉,模型就学不到这种极端情况,预测准确率反而会大打折扣。

将负荷数据与协变量(如天气、日历等外部特征)深度结合,从“孤立看数据数值”转变为“结合背景看数据逻辑”。

只盯着负荷曲线本身,突增的用电量就是个无法解释的“离群点”;但只要拉入协变量,这个突增就有了合法的“动机”。

为了让你在实际开发中更好落地,我把这个“负荷 + 协变量”的联合异常处理机制为你梳理成两个最主流的实操方案:

方案一:协变量分组回归法

这个方案的核心是:先用协变量把数据分类,让“同类”在自己的圈子里比大小。

  • 第一步(分组): 利用日历和天气协变量,把历史数据切分成不同的子集。例如:

    • 子集 A:酷暑工作日(气温 > 35°C)

    • 子集 B:常温工作日(20°C - 25°C)

    • 子集 C:春节假期

  • 第二步(圈内检测): * 当你要检查某一个酷暑工作日的负荷时,只把它放在“子集 A”里跑异常检测(如拉箱线图)。

    • 此时,因为大家都是酷暑日,用电量都很高,这一天的“突增”在子集 A 里就属于正常水平,成功被识别为正常样本

    • 相反,如果这一天在子集 A 里居然低得离谱,那它才是真正的异常(大概率是停电或设备坏了)。

方案二:基于机器学习的残差动态阈值法

它的逻辑是:用协变量算出“理应达到的负荷”,只对“解释不了的偏差”抓异常。

  1. 训练一个影子模型(Baseline Model): 用历史上的协变量(天气、节日、星期几)作为输入实际负荷作为输出,训练一个极其鲁棒的粗糙模型(比如随机森林或轻量级 LightGBM)。这个模型专门用来学习“天气和节日对负荷的基础大趋势影响”。

  2. 计算期望负荷($\hat{Y}$): 比如某天是 40°C 暴热,影子模型根据协变量会预测出今天负荷会暴增,给出一个很高的期望值 $\hat{Y} = 1500\text{ MW}$。

  3. 计算残差(Residual):

    $$\text{残差} = |\text{实际负荷 } Y - \text{期望负荷 } \hat{Y}|$$

    如果那天实际负荷是 $1550\text{ MW}$,残差只有 $50\text{ MW}$。

  4. 对残差跑检测: 设定一个固定的残差阈值(比如 $\pm 100\text{ MW}$)。因为 $50 < 100$,算法会判定:“虽然今天负荷极高,但完全在天气引起的合理预测范围内,属于正常样本!”

什么时候会报异常? > 比如某天气温 22°C 舒适,影子模型预测负荷应该是 $800\text{ MW}$,但实际负荷莫名其妙冲到了 $1500\text{ MW}$。残差高达 $700\text{ MW}$,远超阈值,算法立刻精准报警——这就是真正的无缘由异常。

避坑指南:协变量质量至关重要

既然你决定引入协变量来做异常处理,就必须注意一个致命细节:协变量本身也是有噪声和异常的!

  • 气象预报数据 vs 实况数据: 在做历史数据清洗时,一定要用实况气象数据(实际观测到的温度),而不要用当年的预报数据。因为预报可能不准(比如预报 32°C 实际 38°C),用错误的协变量去纠偏负荷,反而会制造新的错误。

  • 数据对齐: 电力数据通常是 15 分钟或 1 小时一个点,而气象数据可能是 3 小时或者 1 小时一个点。在结合处理前,一定要用插值法(如线性插值)将天气数据和电力数据在时间轴上完全对齐

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐