输入输出与接入说明.md 6.0 KB

E10-A 输入输出与接入说明

1. Python 接口

from pv_forecast.mspf_pv.inference import predict_selected_arrays
prediction_pu = predict_selected_arrays(
    package_root, site, power_history, future_raw, elevation, device="cpu"
)
prediction_kw = prediction_pu * capacity_kw

package_root 为本包根目录;site 是 beiliu、jiangmen 或 qingyuan。power_history 形状为 [N,48,7],future_raw 为 [N,16,20],elevation 为 [N,16],返回 [N,16]。样本数和顺序必须一致,N必须大于0。推荐 float32。所有必需输入应为有限数值;上游缺失输入应跳过并记录,不应静默填成0。不要预先标准化 future_raw,模型会使用随权重保存的训练标准化器。

第 j 个输出对应 issue_time + (j+1)*15min,不是历史采样时间。所有输入都必须在 issue_time 已获得。输出时保留 issue_time、forecast_time 和 lead_time_min,不要把不同起报的同一目标时刻混合。

2. 历史输入(列顺序固定)

历史网格:issue_time-235min 至 issue_time,每5分钟一个点,共48点。原功率数据可带秒偏移。训练原规则:每个网格点只向前回查5分钟以内的功率;绝不读取晚于网格点的实测。

预处理参考 pv_forecast/deep/build.py:regular_power_history。它对每个历史窗口最多允许5%的缺点,使用该窗口内、起报之前已有历史点插值/端点填充;超过阈值则跳过。若业务要求完全禁止插值,可直接跳过有缺点的窗口,但应记录此接入规则与训练缺失处理的差异。该历史修补规则不是用未来实况填充。

列 字段 来源/计算
0 power_pu 实测功率kW / 场站归一化容量kW
1 delta_power_pu 相邻5分钟标幺功率差,窗口第一点固定为0
2 power_clear_ratio clip(power_pu / max(clear_sky_ghi/1000,0.05),0,2)
3 clear_sky_ghi_div1000 历史网格对应晴空GHI / 1000
4 solar_elevation_div90 历史网格对应太阳高度角 / 90
5 hour_sin sin(2π*北京时间日内小时/24)
6 hour_cos cos(2π*北京时间日内小时/24)

后五列由时间、场站经纬度、海拔和 pvlib 计算,原始功率源中不需要自带。solar_features 位于 pv_forecast/features.py,场站参数见 configs/sites.yaml。7列历史张量请严格按上表顺序拼接。

3. EC 批次与原始文件契约

E10-A 使用00/12 UTC两个批次,每个起报选择满足 init_time+8h <= issue_time 的最新批次。8小时是实验中对发布时间和传输延迟的保守假设,不是已实测的接收时刻。生产必须同时检查该文件确实已接收,禁止使用事后才获得的批次;缺少所选批次或预报覆盖不足时应跳过并记录,回退策略不在本包内自动开启。

UTC的00/12时对应北京时间08/20时;在当前8小时可用性规则下,分别最早在北京时间16时/次日04时使用。文件名 YYYYMMDDHH.csv 中的HH是UTC起报小时。

已处理EC文件列:init_time,time,ssrd,tcc,lcc,mcc,hcc,2t,2d,10u,10v。时间字段带UTC时区,time是预报有效时刻。当前数据约定:ssrd为已处理的辐照度 W/m²,云量为0–100百分数,2t/2d为摄氏度,10u/10v为m/s。不能直接把EC原始GRIB累计辐射J/m²、温度K或0–1云量按此契约输入,需要先转换为与训练一致的processed数据。

pv_forecast/ec_latest.py:build_latest_ec_future 实现本模型的最新批次更新和插值。它需要已经含有太阳几何/时间列的 future_raw 模板;不要用未初始化数组调用。目标16个时刻的太阳几何列应先用 solar_features 建好,再调用该函数。

4. 未来输入(20列,顺序固定)

序号 字段 来源/单位
0 ec_ghi_wm2 EC辐照度先除以源时刻晴空GHI得到晴空指数,再将该指数插值到目标时刻并乘目标晴空GHI,W/m²
1–4 ec_tcc / ec_lcc / ec_mcc / ec_hcc 对应EC云量插值,百分数0–100
5–6 ec_t2m_c / ec_d2m_c EC气温、露点温度插值,摄氏度
7 ec_relative_humidity 由气温T、露点Td计算RH,百分数
8–9 ec_u10_ms / ec_v10_ms EC风分量插值,m/s
10 ec_wind_speed sqrt(u²+v²),m/s
11 ec_clear_sky_index clip(ec_ghi/max(clear_sky_ghi,20),0,1.5),晴空GHI<1时为0
12 ec_lead_hours (目标有效时刻-init_time)的小时数
13–14 solar_elevation / solar_zenith pvlib计算的目标时刻太阳高度角/天顶角,度;此处不除以90
15 clear_sky_ghi pvlib计算的目标时刻晴空辐照度,W/m²;此处不除以1000
16–17 hour_sin / hour_cos 目标时刻北京时间日内周期编码
18–19 dayofyear_sin / dayofyear_cos 目标时刻北京时间年内周期编码,周期365.25天

RH公式:clip(100*exp(17.625*Td/(243.04+Td)-17.625*T/(243.04+T)),0,100)。源EC在其预报有效时间轴上插值是使用已发布预报,允许覆盖晚于issue的目标时间,不是读取未来实测。

5. 输出与限制

elevation另传目标时刻的太阳高度角(度),须与future_raw第13列一致。既有后处理:高度角小于-3°时置0;每个分支及最终融合结果裁剪至[0,1.15]标幺。因此预测允许达到归一化容量的115%,不是100%硬上限。本次交付保留该正式规则。江门4050kW为归一化容量,配置中的4275kW交流额定值不是本模型的标幺分母,不可替换。

样例输出单位为kW,小数3位,北京时间带+08:00。如转MW需除1000,不能只改列名。实际功率不参与推理;评估时另外按目标时间与实测匹配。

6. 集成自检

本核心包已用三站真实样例验证输出与原E10-A一致,样例和测试资料不随核心包提供。接入时验证自有输入时区、字段顺序、功率/云量/温度/辐射单位和EC可用批次。禁止调用fit或重新拟合scaler。每站整套 .pt、.joblib、场站配置必须配对部署。