看懂數據
比賽數據說明:
文檔(報名之后可以下載) | 大小 | 操作 |
---|---|---|
初賽測試集.zip | 94MB | 下載 |
初賽訓練集.zip | 632MB | 下載 |
output.zip | 145KB | 下載 |
任務和主題
AI新能源功率預報:根據歷史發電功率數據和對應時段多類別氣象預測數據,實現次日零時起到未來24小時逐15分鐘級新能源場站發電功率預測。
比賽數據
1.氣象數據
比賽輸入數據來自三個不同的氣象預報數據,數據格式為nc,共8個變量,需要注意氣象源NWP_2的變量與另外兩個稍有不同。氣象變量說明見下文。每個文件是第二天北京時間0點開始的未來24小時氣象預報,時間間隔1小時,文件名的日期表示預報發布日期,如20240101.nc是2024年1月1日發布的,對1月2日的預報。每個輸入文件有5個維度,time,channel,hour,lat,lon。
time表示數據第一個時刻,為世界時;channel為變量,共8維;hour為從起始時間到預報時間的時間間隔,數值為0~23;lat為緯度,數值從小到大為從北向南排列;lon為經度,數值從小到大為從西向東排列。這里經緯度數值僅代表相對關系,中心點為離場站最近的點。
參賽隊伍可以不使用全部氣象源的全部變量做為輸入。
2.場站實發功率
比賽目標數據來自10個新能源場站的歸一化處理后的實發功率,其中包含5個風電場站和5個光伏場站。編號1-5為風電場,6-10為光伏電場。數據時間為北京時間,數據時間間隔為15分鐘。需要注意數據中偶有空值、死值等異常值。
氣象變量說明:
氣象源1(NWP_1)、氣象源3(NWP_3): [u100
,?v100
,?t2m
,?tp
,?tcc
,?sp
,?poai
,?ghi
], 氣象源2(NWP_2): [u100
,?v100
,?t2m
,?tp
,?tcc
,msl
,poai
,ghi
]
變量 | 描述 | 單位 |
---|---|---|
u100 | 100米高度緯向風 | m/s(米/秒) |
v100 | 100米高度經向風 | m/s(米/秒) |
t2m | 2米氣溫 | K(開爾文) |
tp | 總降水量 | m(米) |
tcc | 總云量 | (0 - 1) |
sp | 地面氣壓 | Pa(帕斯卡) |
poai | 光伏面板輻照度 | W/m2(瓦/平方米) |
ghi | 水平面總輻照度 | W/m2(瓦/平方米) |
msl | 海平面氣壓 | Pa(帕斯卡) |
初賽訓練集和測試集:
數據集 | 時間范圍 | 空間范圍 | 時間分辨率 |
---|---|---|---|
TrainA | 20240101 ~ 20241231 | 場站周邊 11x11 個格點 | 1h |
TestA | 20250101 ~ 20250228 | 場站周邊 11x11 個格點 | 1h |
復賽訓練集和測試集:
數據集 | 時間范圍 | 空間范圍 | 時間分辨率 |
---|---|---|---|
TrainB | 20240101 ~ 20250228 | 場站周邊 11x11 個格點 | 1h |
TestB | 20250301 ~ 20250430 | 場站周邊 11x11 個格點 | 1h |
?比賽數據分析
總體思想:結果時序模型輸入一般都是 [B* T*feature]三維? ,但是這個拓展了兩個維度,把多的這兩維處理好就能順利放入時序模型了?。
1.文件結構?
Input/
├── 1/
│ ├── NWP_1/
│ │ ├── 20240101.nc
│ │ ├── 20240102.nc
│ │ └── ...
│ ├── NWP_2/
│ ├── NWP_3/
├── 2/
├── ...
Output/
├── output1.csv
├── output2.csv
3個氣象源
1個站點 - 對應3個不同機構的氣象源數據 NWP_1,NWP_2,NWP_3
baseline中只用了NWP_1
我們需要將3個氣象源都利用起來
簡單辦法,把NWP_1,NWP_2,NWP_3 屬性都連起來 一個NWP有8個氣象特征,
連起來后我們的特征維度8*3=24
5個維度
每個輸入文件有5個維度,time,channel,hour,lat,lon
from netCDF4 import Dataset
import numpy as np
import pandas as pdnc_path = "data/初賽訓練集/nwp_data_train/1/NWP_1/20240101.nc"
dataset = Dataset(nc_path, mode='r')
dataset.variables.keys()
輸出結果 dict_keys(['time', 'channel', 'data', 'lat', 'lon', 'lead_time'])?????????
time表示數據第一個時刻,為世界時;channel為變量,共8維;hour為從起始時間到預報時間的時間間隔,數值為0~23;lat為緯度,數值從小到大為從北向南排列;lon為經度,數值從小到大為從西向東排列。這里經緯度數值僅代表相對關系,中心點為離場站最近的點。
需要通過
time 起始時間到預報時間間隔
hour =?lead_time
data.shape == [1, 8, 24, lat, lon]
? ? ? ? ? ? ? ? ? ? ? ? ?^ ?^ ? ^
? ? ? ? ? ? ? ? ? ? ? ? ? | ?| ? └── lead_time: 0~23 小時
? ? ? ? ? ? ? ? ? ? ? ? ??| ?└── channel: 8 個變量(如 u100, v100...)
? ? ? ? ? ? ? ? ? ? ? ? ?└── time: 通常只有 1(僅起始時間)
把channel 和11*11站點數據處理成 2維度
trick:
歸一化 Y
對 Y 做歸一化(通常歸一到 [0, 1])在回歸預測任務中是非常常見、有效且標準的做法,尤其是在風電/光伏功率預測這類 尺度不一、目標動態范圍大的任務 中,它能帶來諸多優勢。
原因 | 說明 |
---|---|
🎯 穩定模型訓練 | 避免目標值過大導致梯度爆炸或收斂緩慢 |
📏 對抗單位不一致 | 輸入是歸一化氣象數據,Y 不歸一會尺度失衡 |
📉 提高預測精度 | 模型學的是“相對變化”,更好擬合歸一化目標 |
📐 通用性更強 | 方便多場站間 transfer(特別是單位不同的場站) |
?實踐中常用方法
1. 歸一化到 [0, 1]:
y_max = fact_df["value"].max() y = y / y_max
?? 最常用!方便訓練、預測后乘回來
2. 保存歸一化參數用于反歸一:
self.y_max = y_max # 推理時: y_pred * y_max
真實場景中是否有效?
以光伏/風電預測為例:
-
幾乎所有 top 比賽/論文/產品系統都使用 Y 歸一化策略
-
典型例子:阿里天池光伏預測挑戰賽、SGCC 風電短期預測項目
總體流程
階段 | 動作 |
---|---|
加載 Y | 清洗負值,小于閾值置零 |
擬合 Y | 歸一化到 [0, 1],保存 y_max |
推理后 | 模型輸出 * y_max,恢復原單位 |
歸一化 Y 是“回歸問題中”的行業標準做法,尤其在新能源功率預測任務中對收斂速度和泛化能力都有顯著提升效果。