电力市场中的电价波动直接影响着发电企业、电网公司和终端用户的决策。去年参与一个区域电力交易平台项目时,我们团队需要提前72小时预测次日电价,误差每超过1%就会造成数十万元的调度成本。传统均值预测法在价格剧烈波动时段完全失效,这才促使我们深入研究ARIMA模型。
ARIMA(自回归综合移动平均)之所以成为电价预测的经典工具,关键在于它能同时捕捉三类核心规律:
我们采用澳大利亚NEM电力市场2015-2020年的30分钟粒度电价数据(可从AEMO官网获取)。原始数据需处理:
matlab复制% 处理缺失值(暴风雨天气导致的交易中断)
price(isoutlier(price,'gesd')) = nan;
price = fillmissing(price,'linear');
% 对数变换缓解异方差
log_price = log(price);
通过ADF检验和KPSS检验双重验证:
matlab复制[h1,p1] = adftest(log_price); % ADF检验
[h2,p2] = kpsstest(log_price); % KPSS检验
d = 0;
while ~h1 || h2
log_price = diff(log_price);
d = d + 1;
[h1,p1] = adftest(log_price);
[h2,p2] = kpsstest(log_price);
end
实际项目中,电价数据通常需要1-2阶差分才能平稳。曾遇到某省电网数据需3阶差分,后发现是计量系统存在累积误差导致。
通过自相关(ACF)和偏自相关(PACF)图识别p,q值:
matlab复制figure
subplot(2,1,1)
autocorr(log_price,50)
subplot(2,1,2)
parcorr(log_price,50)
电价数据常见模式:
使用极大似然估计:
matlab复制model = arima(p,d,q);
fit = estimate(model, log_price);
[res,~,logL] = infer(fit, log_price);
必须检查残差的白噪声性:
matlab复制lbqtest(res) % Ljung-Box检验
某次项目因忽略残差检验,导致模型在寒潮期间预测完全失效,后来发现残差中存在未捕捉的极端天气模式。
通过重复采样构建预测分布:
matlab复制numPaths = 1000;
[Y,~,~] = simulate(fit, 24, 'NumPaths', numPaths);
Y = exp(Y); % 逆对数变换
ci_lower = prctile(Y,2.5,2);
ci_upper = prctile(Y,97.5,2);
利用预测误差方差:
matlab复制[y,yMSE] = forecast(fit,24,'Y0',log_price);
sigma = sqrt(yMSE);
z = norminv(0.975);
ci_upper = exp(y + z*sigma);
ci_lower = exp(y - z*sigma);
实测显示,在95%置信水平下,蒙特卡洛法与解析法的区间覆盖率分别为94.7%和93.8%。
建立虚拟变量回归:
matlab复制holiday = [zeros(100,1); ones(5,1)]; % 示例假日标记
X = [lagmatrix(log_price,1:3) holiday];
mdl = fitlm(X, log_price);
matlab复制window_size = 672; % 两周数据
for t = window_size+1:length(data)
train = data(t-window_size:t-1);
model = arima(3,1,2);
fit = estimate(model,train);
[y(t),yMSE(t)] = forecast(fit,1,'Y0',train);
end
在某省现货市场实测中,滚动预测比静态建模降低MAE达23%。
除常规的MAE、RMSE外,推荐:
matlab复制% 方向准确性
direction_acc = mean(sign(diff(actual))==sign(diff(predicted)));
% 分位数损失
alpha = 0.05;
QL = mean((actual-predicted).*(alpha-(actual<predicted)));
某项目案例显示,当价格波动率>15%时,方向准确性比绝对误差更能反映模型价值。
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 预测值持续偏高 | 未考虑新增光伏装机容量 | 引入可再生能源出力协变量 |
| 置信区间过宽 | 历史波动率被极端事件拉高 | 使用T分布替代正态分布 |
| 夜间预测失常 | 未区分基荷与峰荷时段 | 分时段建立子模型 |
曾遇到模型在下午茶时段持续低估,后发现是工业用户集体调整生产线导致的需求突变,最终通过添加工业生产指数指标解决。
在某个省级电力交易中心实施时,我们设置了动态权重机制:当实际价格连续超出预测区间时,自动降低模型权重并提高人工修正比例。