第3章:风速预测入门

各位同学,欢迎来到风速预测的第一课。

说实话,风电行业里最让人头疼的就是风速的不确定性。你想想看,风一会儿大一会儿小,电网那边又要求稳定供电,怎么办?唯一的出路就是——预测。今天我们就从最基础的时间序列概念讲起,一步步带你用ARIMA模型做风速预测。

3.1 时间序列的基本概念

什么是时间序列?说白了,就是按时间顺序排列的数据点。比如你每10分钟记录一次风速,把这些数据按时间排好,就是一个时间序列。

我个人习惯把时间序列拆成三个部分来看:

  • 趋势(Trend):长期上升或下降的走向。比如某个季节风速整体偏高。
  • 季节性(Seasonality):固定周期内的波动。比如每天下午风速较大。
  • 残差(Residual):去掉趋势和季节后剩下的随机波动。

我在项目中遇到过一件事:有次做风速预测,模型效果一直不好,后来发现是数据里有个明显的日周期模式没处理。嗯,这里要注意——识别季节性是时间序列分析的第一步。

核心要点:时间序列分析的目标,就是从历史数据中提取出规律,然后用这些规律去预测未来。

3.2 ARIMA模型原理

ARIMA,全称是自回归积分滑动平均模型。名字挺长,但别怕,我们拆开看。

ARIMA模型由三个部分组成:

参数 含义 通俗理解
AR(p) 自回归项 用过去p个时刻的值预测当前值
I(d) 差分阶数 让非平稳数据变得平稳
MA(q) 滑动平均项 用过去q个时刻的预测误差来修正当前预测

为什么会用到差分?因为很多风速数据是非平稳的——均值在变、方差在变。差分就是让数据“老实”下来。我曾经遇到一个案例,原始风速数据波动剧烈,差分一次后,数据就平稳多了,模型效果直接提升30%。

避坑指南:我曾经在项目里直接拿原始数据跑ARIMA,结果预测值全是直线。后来才发现,数据不平稳时,模型根本学不到有效信息。记住:先平稳,再建模

3.3 Python实现风速预测

好了,理论讲完了,我们直接上代码。下面是一个完整的ARIMA风速预测流程。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.stattools import adfuller

# 1. 加载数据(假设风速数据每10分钟一条)
data = pd.read_csv('wind_speed.csv', parse_dates=['timestamp'], index_col='timestamp')
wind_speed = data['speed']

# 2. 平稳性检验(ADF检验)
result = adfuller(wind_speed)
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
if result[1] > 0.05:
    print('数据非平稳,需要进行差分')
    wind_speed_diff = wind_speed.diff().dropna()
else:
    print('数据平稳,可以直接建模')

# 3. 确定p和q(看ACF和PACF图)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6))
plot_acf(wind_speed_diff, ax=ax1, lags=20)
plot_pacf(wind_speed_diff, ax=ax2, lags=20)
plt.show()

# 4. 训练ARIMA模型(这里p=2, d=1, q=2是示例)
model = ARIMA(wind_speed, order=(2, 1, 2))
model_fit = model.fit()
print(model_fit.summary())

# 5. 预测未来24小时(144个10分钟)
forecast = model_fit.forecast(steps=144)
print('预测结果(前10个):', forecast[:10].values)

这段代码我建议你亲手跑一遍。我个人习惯是先看ACF和PACF图,初步判断p和q的范围,然后再用AIC/BIC准则去选最优参数。别一上来就瞎猜参数,那样容易翻车。

注意:ARIMA模型对异常值非常敏感。如果数据里有传感器故障导致的异常风速(比如突然跳到100m/s),一定要先做数据清洗。我曾经因为一个异常点没处理,模型预测直接崩了三天。

3.4 模型评估指标

模型建好了,怎么知道它好不好?我们需要一些量化指标。常用的有这几个:

指标 公式 说明
MAE 平均绝对误差 预测值与真实值的绝对差值的平均值
RMSE 均方根误差 对大误差惩罚更重,适合风速这种波动大的场景
MAPE 平均绝对百分比误差 用百分比表示误差,直观易懂

我个人最常用的是RMSE。为什么?因为风速预测里,一个大的预测偏差可能导致电网调度失误,RMSE对大误差更敏感,能逼着模型把极端情况也预测好。

下面是一个计算评估指标的代码示例:

from sklearn.metrics import mean_absolute_error, mean_squared_error
import numpy as np

# 假设y_true是真实风速,y_pred是预测风速
y_true = [5.2, 6.1, 7.3, 8.0, 6.5]
y_pred = [5.0, 6.3, 7.0, 8.2, 6.8]

mae = mean_absolute_error(y_true, y_pred)
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
mape = np.mean(np.abs((np.array(y_true) - np.array(y_pred)) / np.array(y_true))) * 100

print(f'MAE: {mae:.2f} m/s')
print(f'RMSE: {rmse:.2f} m/s')
print(f'MAPE: {mape:.2f}%')

经验之谈:风速预测的RMSE如果能控制在1.5m/s以内,对于大多数风电场来说已经算不错了。如果超过2.5m/s,建议回头检查数据质量或者模型参数。

3.5 本章知识体系

下面这张图帮你梳理了本章的核心逻辑,从数据到模型再到评估,一条线走下来:

风速预测入门:知识体系 时间序列概念 趋势 · 季节性 · 残差 ARIMA模型原理 AR(p) · I(d) · MA(q) Python实现 平稳性检验 · 建模 · 预测 模型评估指标 MAE · RMSE · MAPE 反馈优化 目标:构建准确、稳定的风速预测模型

这张图把本章的四个核心模块串起来了。你从时间序列概念出发,理解数据特性;然后学习ARIMA原理,知道模型怎么工作;接着用Python实现,把理论变成代码;最后用评估指标检验效果。如果效果不好,就回到前面调整参数或清洗数据——这就是一个完整的闭环。

好了,风速预测入门就讲到这里。记住:模型不是越复杂越好,ARIMA虽然经典,但用好了照样能解决实际问题。下一章我们会讲更高级的预测方法,但今天的内容是基础中的基础,建议你多练几遍。


专注资料整理