【风况预测评分规则-python实现】第五届全国工业互联网数据创新应用大赛-机组数据驱动的风电场短期风况预测
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【1】【验证集制作】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【2】【验证集使用】
第五届全国工业互联网数据创新应用大赛 机组数据驱动的风电场短期风况预测 【3】【计算最终得分】
【风况预测评分规则-python实现】第五届全国工业互联网数据创新应用大赛-机组数据驱动的风电场短期风况预测
以下是新版计算方法直接上代码
基本的准备from tqdm import tqdm import numpy as np import pandas as pd
field = np.array(['风场1', '风场2'])
field_len = field.shape[0]
machine = np.array([[f'x{i}' for i in list(range(26, 50+1))], [f'x{i}' for i in list(range(25, 49+1))]])
machine_len = machine[0].shape[0]
season = np.array(['春', '夏', '秋', '冬'])
season_len = season.shape[0]
period = np.array([f'{s}_{str(i).zfill(2)}' for s in season for i in range(1, 20+1)])
period_len = period.shape[0]
读取验证集答案和预测答案
df_true = pd.read_csv('answer_val.csv', encoding='utf-8')
df_pred = pd.read_csv('answer_train.csv', encoding='utf-8')
预测答案标准化
将 df_true 复制一份,然后根据 风场、风机、时段 把你的预测结果移动到相应的位置
这样保证 df_true 和 df_pred 的格式完全一致,方便后面的计算
df_pred = pd.merge(
left = df_true[['风场', '风机', '时段', '时刻']].copy(),
right = df_pred,
how = 'left',
on = ['风场', '风机', '时段', '时刻']
).fillna(0)
计算最终得分R
# 公式 5 e = np.minimum((df_pred['风向'] - df_true['风向']).values % 1, (df_true['风向'] - df_pred['风向']).values % 1)
# 公式 6 # 2个风场,每个风场25个风机,每个风机80个时段,每个时段20个时刻 w = np.arange(2 * 25 * 80 * 20, dtype=float) % 20 w[w < 10] = 0.06 w[w >= 10] = 0.04
# 公式 7 a = w * (((df_true['风速'] > 0.15) & (df_true['风场'] == '风场1')) | ((df_true['风速'] > 0.086) & (df_true['风场'] == '风场2'))).values
# 公式 3 m = (w * np.abs(df_pred['风速'] - df_true['风速']).values).reshape(-1, 20).sum(1)
# 公式 4 n = (a * e).reshape(-1, 20).sum(1)
# 公式 2 # 2个风场,每个风场25个风机,每个风机80个时段 E1, E2 = (0.7 * m + 0.3 * n).reshape(2, 25, 80).mean(1)
# 公式 1 R = 100 / (1 + E1.sum() + E2.sum())



