第一课:课程导论与数据准备

各位同学好,我是老张。在电力系统干了十五年,从变电站值班员一路做到调度中心的负荷预测专责。今天咱们开始这门《负荷预测实战工具速成》的第一课。

说实话,我刚入行那会儿,负荷预测全靠老师傅的经验。拿个计算器,看看天气,再翻翻历史记录,拍脑袋估个数。现在不一样了,数据多了,工具强了,但核心的东西没变——你得先搞清楚预测什么、用什么数据、数据怎么处理。

这一课,咱们就把地基打牢。

1.1 什么是负荷预测?

负荷预测,说白了就是猜未来要用多少电。

你可能会说,这有什么难的?看看去年同一天不就知道了?嗯,我刚开始也这么想。直到有一次,我按去年同期的数据做了个预测,结果那天突然降温,空调全开,实际负荷比预测高了15%。调度中心那边差点跳闸,我被领导叫去谈了半小时话。

从那以后我明白了——负荷预测不是简单的复制粘贴,它是一门科学。

核心定义:负荷预测是利用历史数据、气象信息、社会活动等因素,通过数学模型预测未来某个时间段的电力负荷值。

1.2 预测类型:时间尺度决定一切

不同类型的预测,用的方法、数据、精度要求都不一样。我习惯按时间尺度来分:

类型 时间范围 典型用途 精度要求
超短期 未来几分钟~1小时 AGC自动发电控制、实时调度 极高(<1%)
短期 未来1小时~1周 日前计划、机组组合 较高(<3%)
中期 未来1周~1年 检修计划、燃料采购 中等(<5%)
长期 未来1年~10年 电网规划、电源建设 较低(<10%)

你想想看,超短期预测要是错了,可能几分钟后电网就不稳了。但长期预测差个5%,其实问题不大,因为规划本身就有弹性。

我的经验:做短期预测时,千万别只看负荷数据。我曾在某省电网做过一个项目,发现周五下午的负荷曲线总是异常。后来一查,原来是当地有个大型批发市场,周五搞促销活动。这种社会活动信息,比任何算法都管用。

1.3 数据来源:巧妇难为无米之炊

数据是预测的命根子。没有好数据,再牛的算法也是白搭。

主要数据来源有三个:

  • SCADA系统:实时采集变电站、发电厂的电气量。采样频率高(秒级),但覆盖范围有限。
  • AMI系统:智能电表数据。用户侧数据,采样频率低(15分钟~1小时),但覆盖面广。
  • 气象数据:温度、湿度、风速、光照等。我特别强调一下——温度是负荷预测最重要的外部变量,没有之一。

记得有一次,我接手一个项目,客户说他们有完整的历史数据。结果我一查,SCADA数据缺了30%,AMI数据时间戳对不上,气象数据还是隔壁城市的。嗯,这种情况我见得太多了。

避坑指南:我曾经因为用了未校准的SCADA数据,导致预测模型训练了三天,结果误差大得离谱。后来发现是CT变比设置错了,数据整体偏大了20%。所以,拿到数据后第一件事——做数据质量检查。

1.4 数据清洗与异常值处理实战

好,现在咱们来点干货。数据清洗,我一般分三步走:

第一步:缺失值处理

缺失值很常见。SCADA通信中断、电表故障、人为误操作,都会导致数据缺失。

处理方法:

  • 删除法:缺失比例小于5%时,直接删掉。
  • 插值法:线性插值、样条插值。我个人习惯用线性插值,简单有效。
  • 填充法:用前后时刻的平均值填充。注意,别用全局均值,那会破坏时序特性。
# Python示例:线性插值处理缺失值
import pandas as pd
import numpy as np

# 假设df是包含负荷数据的DataFrame,'load'是负荷列
df['load_interpolated'] = df['load'].interpolate(method='linear')

# 检查处理效果
print(f"原始缺失值数量:{df['load'].isnull().sum()}")
print(f"处理后缺失值数量:{df['load_interpolated'].isnull().sum()}")

第二步:异常值检测

异常值比缺失值更隐蔽。我常用的方法:

  • 3σ原则:超出均值±3倍标准差的数据,视为异常。
  • 箱线图法:超出Q1-1.5IQR或Q3+1.5IQR的数据,视为异常。
  • 业务规则:比如负荷不可能为负,或者短时间内突变超过20%。

实战技巧:别一上来就用算法。先画个时序图,肉眼扫一遍。我见过太多人用3σ原则把春节期间的正常低负荷给剔除了——因为春节工厂停工,负荷确实低,但那不是异常。

第三步:异常值修正

发现异常值后,别急着删。先判断原因:

  • 明显错误:比如负荷为负值,直接替换为NaN,然后走缺失值处理流程。
  • 可疑值:比如某天负荷突然飙升,但气象数据正常。这时候要查日志,看是不是有特殊事件。
  • 真实异常:比如台风导致负荷骤降。这种数据要保留,因为模型需要学习这种极端情况。
# Python示例:基于3σ原则的异常值检测
def detect_outliers_3sigma(data, column, n_std=3):
    mean = data[column].mean()
    std = data[column].std()
    lower_bound = mean - n_std * std
    upper_bound = mean + n_std * std
    outliers = data[(data[column] < lower_bound) | (data[column] > upper_bound)]
    return outliers

# 使用示例
outliers = detect_outliers_3sigma(df, 'load')
print(f"检测到 {len(outliers)} 个异常值")

我的习惯:数据清洗完成后,我会生成一份数据质量报告。包括缺失率、异常率、处理方式等。这样后续模型出了问题,可以快速回溯。说白了,就是给自己留个底。

知识体系总览

这一课的内容比较多,我画了张图帮你理清思路:

负荷预测实战工具速成 · 第一章知识体系 负荷预测基础 基本概念 预测类型 数据来源 数据清洗与异常处理 超短期 短期 中期 长期 SCADA AMI 气象数据 缺失值处理 异常值检测 异常值修正 核心原则:数据质量决定预测上限,算法只是逼近这个上限 © 负荷预测实战工具速成 · 第一章

好了,第一课就到这里。数据准备是预测工作的基石,这块做扎实了,后面的模型训练才能事半功倍。下一课咱们开始讲特征工程——怎么从原始数据里挖出有用的信息。


专注资料整理