3. 特征工程基础:风速与功率的关系、风向、温度、气压等特征分析
各位同学,咱们今天聊聊特征工程。说白了,就是怎么从原始数据里挖出真正有用的东西。我做了这么多年风电预测,发现很多人一上来就堆模型,结果效果很差。为什么?因为特征没选对。你想想看,垃圾进垃圾出,模型再牛也白搭。
3.1 风速与功率:最核心的关系
风速和功率的关系,是风电预测里最基础、也最重要的特征。我刚开始做这个项目时,以为风速越大功率就越大,线性关系嘛。结果一看实际数据,完全不是那么回事。
实际上,风速和功率呈现典型的 S 型曲线。我习惯叫它“三段式”:
- 切入风速以下:风速太低,风机不转,功率为零。一般在 3 m/s 左右。
- 额定风速区间:风速从切入点到额定点,功率近似三次方增长。这是最敏感的区域。
- 切出风速以上:为了保护风机,功率被限制,甚至停机。
嗯,这里要注意:不同型号的风机,这三个关键点不一样。我在项目中遇到过,同一个风场两种风机,切入风速差了 0.5 m/s,结果模型预测偏差很大。所以,一定要先看风机的功率曲线手册。
核心要点:风速与功率不是线性关系,而是分段非线性。建模时,可以考虑对风速做分段处理,或者加入风速的平方项、立方项。
咱们来看一段代码,怎么提取风速特征:
import pandas as pd
import numpy as np
# 假设 df 包含 'wind_speed' 和 'power' 两列
df['ws_squared'] = df['wind_speed'] ** 2
df['ws_cubed'] = df['wind_speed'] ** 3
# 分段特征:判断风速处于哪个区间
def wind_zone(ws):
if ws < 3:
return 0 # 切入前
elif ws < 12:
return 1 # 上升段
elif ws < 25:
return 2 # 额定段
else:
return 3 # 切出段
df['wind_zone'] = df['wind_speed'].apply(wind_zone)
我的小技巧:除了风速本身,还可以计算过去 10 分钟的平均风速和风速变化率。风的变化趋势,往往比瞬时值更有预测价值。
3.2 风向:别小看这个角度
风向这个特征,很多人觉得不重要。我曾经也这么想,直到有一次模型在某个方向的风来时,预测误差突然变大。查了半天,才发现是风向的问题。
风向是 360 度的循环变量。0 度和 360 度其实是一个方向,但如果你直接拿数值去建模,模型会认为它们差 360 度,这就出问题了。
我建议的处理方式:
- 拆成 sin 和 cos 分量:这是最常用的方法。风向 0° 对应 (sin=0, cos=1),90° 对应 (sin=1, cos=0),完美解决循环问题。
- 考虑风向与主风向的偏差:每个风场都有主风向,比如西北风居多。计算当前风向与主风向的夹角,有时比原始风向更有用。
举个例子:
import numpy as np
# 风向角度转弧度
df['wind_dir_rad'] = np.radians(df['wind_direction'])
df['wind_dir_sin'] = np.sin(df['wind_dir_rad'])
df['wind_dir_cos'] = np.cos(df['wind_dir_rad'])
# 主风向(假设是 300 度)
main_dir = 300
df['dir_deviation'] = np.abs(df['wind_direction'] - main_dir)
# 处理循环:偏差不能超过 180
df['dir_deviation'] = df['dir_deviation'].apply(lambda x: min(x, 360 - x))
避坑指南:我曾经直接把风向角度作为特征输入模型,结果模型在 0° 和 360° 附近预测完全混乱。后来改用 sin/cos 编码,问题立刻解决了。记住,循环变量不能直接当数值用。
3.3 温度与气压:空气密度的幕后推手
温度和气压,这两个特征看起来跟功率没关系,其实影响很大。为什么?因为它们决定了 空气密度。
功率公式里,空气密度 ρ 是直接乘在风速三次方前面的。温度高了,空气密度变小,同样的风速,功率会下降。气压低了,密度也变小。我见过一个案例,夏天高温时,功率比理论值低了 10% 以上。
我个人习惯,直接计算空气密度作为特征:
# 温度:摄氏度,气压:hPa
R = 287.058 # 气体常数
df['air_density'] = df['pressure'] * 100 / (R * (df['temperature'] + 273.15))
当然,你也可以直接用温度和气压的原始值。但要注意,温度和气压之间可能存在共线性。比如冷锋过境时,温度下降、气压上升,两者高度相关。这时候可以考虑只保留一个,或者用 PCA 降维。
| 特征 | 对功率的影响 | 建议处理方式 |
|---|---|---|
| 温度 | 温度↑ → 密度↓ → 功率↓ | 直接使用,或计算空气密度 |
| 气压 | 气压↑ → 密度↑ → 功率↑ | 直接使用,或计算空气密度 |
| 湿度 | 湿度↑ → 密度↓ → 功率↓ | 可选,影响较小 |
一句话总结:风速是主角,风向是配角,温度和气压是幕后推手。三者结合,才能准确预测功率。
3.4 特征工程的整体流程
说了这么多,咱们来画个图,把整个特征工程的逻辑串起来。我习惯用一张图来理清思路:
你看,整个流程就是从原始数据出发,分别处理风速、风向、温压三类特征,最后汇聚成最终特征集。每一步都有坑,但踩过之后,你就知道该怎么走了。
最后说一句:特征工程没有标准答案。每个风场、每台风机都有自己的脾气。我的建议是,先做基础特征,然后根据模型表现,逐步添加或删减特征。别一上来就搞几十个特征,容易过拟合。
公众号:蓝海资料掘金营,微信deep3321