赞
踩
#AI夏令营 #Datawhale #夏令营
电力需求预测挑战赛
本赛题是一个典型的时间序列问题
时间序列问题是指对按时间顺序排列的数据点进行分析和预测的问题,往往用来做未来的趋势预测。比如,电力需求的准确预测对于电网的稳定运行、能源的有效管理以及可再生能源的整合至关重要。
时间序列问题的数据往往有如下特点:
1. 时间依赖性:数据点之间存在时间上的连续性和依赖性。
2. 非平稳性:数据的统计特性(如均值、方差)随时间变化。
3. 季节性:数据表现出周期性的模式,如年度、月度或周度。
4. 趋势:数据随时间推移呈现长期上升或下降的趋势。
5. 周期性:数据可能存在非固定周期的波动。
6. 随机波动:数据可能受到随机事件的影响,表现出不确定性。
在AI电力需求预测挑战赛中,准确预测电力需求对于电网的稳定运行、能源的有效管理以及可再生能源的整合至关重要。下面我将基于给定的赛题和数据结构,提供一份详细的笔记,并附带关键代码段。
赛题任务:训练时序预测模型助力电力需求预测。给定多个房屋对应电力消耗历史N天的相关序列数据等信息,预测房屋对应电力的消耗。
id
(房屋ID)dt
(日标识,脱敏处理,1-N,其中1为最近一天,1-10为测试集数据)type
(房屋类型)target
(实际电力消耗,预测目标)首先,需要导入必要的库:
import pandas as pd | |
import numpy as np |
# 读取训练集和测试集 | |
train = pd.read_csv('./data/train.csv') | |
test = pd.read_csv('./data/test.csv') |
# 计算训练数据最近11-20单位时间内对应id的目标均值 | |
target_mean = train[train['dt'] <= 20].groupby(['id'])['target'].mean().reset_index() |
# 将target_mean作为测试集结果进行合并 | |
test = test.merge(target_mean, on=['id'], how='left') |
# 保存结果文件到本地 | |
test[['id', 'dt', 'target']].to_csv('submit.csv', index=None) |
# 导入LightGBM和其他必要的库 | |
import lightgbm as lgb | |
from sklearn.metrics import mean_squared_log_error, mean_absolute_error | |
import matplotlib.pyplot as plt | |
# 数据可视化 | |
type_target_df = train.groupby('type')['target'].mean().reset_index() | |
plt.figure(figsize=(8, 4)) | |
plt.bar(type_target_df['type'], type_target_df['target'], color=['blue', 'green']) | |
plt.xlabel('Type') | |
plt.ylabel('Average Target Value') | |
plt.title('Bar Chart of Target by Type') | |
plt.show() |
# 合并训练数据和测试数据 | |
data = pd.concat([test, train], axis=0, ignore_index=True) | |
data = data.sort_values(['id', 'dt'], ascending=False).reset_index(drop=True) | |
# 历史平移特征 | |
for i in range(10, 30): | |
data[f'last{i}_target'] = data.groupby(['id'])['target'].shift(i) | |
# 窗口统计特征 | |
data[f'win3_mean_target'] = (data['last10_target'] + data['last11_target'] + data['last12_target']) / 3 | |
# 切分数据 | |
train = data[data.target.notnull()].reset_index(drop=True) | |
test = data[data.target.isnull()].reset_index(drop=True) | |
# 确定输入特征 | |
train_cols = [f for f in data.columns if f not in ['id', 'target']] |
# 定义LightGBM模型训练函数 | |
def time_model(clf, train_df, test_df, cols): | |
trn_x, trn_y = train_df[train_df.dt >= 31][cols], train_df[train_df.dt >= 31]['target'] | |
val_x, val_y = train_df[train_df.dt <= 30][cols], train_df[train_df.dt <= 30]['target'] | |
train_matrix |
个人感悟
电力需求预测挑战赛不仅让我掌握了更多关于时间序列预测和数据科学的技能,还让我深刻体会到了数据、特征工程、模型选择与调优、交叉验证、团队协作以及持续学习与反思的重要性。未来需要不断查阅相关文献,扩展知识面,提高数据处理和模型训练的能力。希望这些笔记对其他初学者有所帮助,一起探索这个有趣且充满潜力的领域。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。