Datawhale AI 夏令营 第二期——电力需求预测挑战赛

#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')

Baseline模型

1. 计算训练数据最近11-20天内的目标均值
# 计算训练数据最近11-20单位时间内对应id的目标均值
target_mean = train[train['dt'] <= 20].groupby(['id'])['target'].mean().reset_index()
2. 将均值作为测试集预测结果
# 将target_mean作为测试集结果进行合并
test = test.merge(target_mean, on=['id'], how='left')
3. 保存结果文件
# 保存结果文件到本地
test[['id', 'dt', 'target']].to_csv('submit.csv', index=None)

进阶模型(LightGBM)

1. 数据准备与可视化
# 导入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()
2. 特征工程
  • 历史平移特征:将前一天的电力消耗信息作为后一天的特征。
  • 窗口统计特征:计算过去几天的电力消耗均值、最大值、最小值等。
# 合并训练数据和测试数据
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']]
3. 训练LightGBM模型
# 定义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

个人感悟

电力需求预测挑战赛不仅让我掌握了更多关于时间序列预测和数据科学的技能,还让我深刻体会到了数据、特征工程、模型选择与调优、交叉验证、团队协作以及持续学习与反思的重要性。未来需要不断查阅相关文献,扩展知识面,提高数据处理和模型训练的能力。希望这些笔记对其他初学者有所帮助,一起探索这个有趣且充满潜力的领域。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值