Datawhale 2024 年 AI 夏令营第二期的学习活动(“机器学习”方向),基于讯飞开放平台“电力需求预测挑战赛”开展的实践学习。
赛题分析
给定多个房屋对应电力消耗历史N天的相关序列数据等信息,预测房屋对应电力的消耗。
赛题数据由训练集和测试集组成,为了保证比赛的公平性,将每日日期进行脱敏,用 1-N 进行标识,即 1 为数据集最近一天,其中 1-10 为测试集数据。数据集由字段 id(房屋id)、 dt(日标识)、type(房屋类型)、target(实际电力消耗)组成。
预测结果以 mean square error 作为评判标准,具体公式如下:
1 n ∑ i = 1 n ( y i − y i ˉ ) 2 \frac{1}{n} \sum_{i=1}^n (y_{i} - \bar{y_{i}})^2 n1i=1∑n(yi−yiˉ)2
其中, y i y_{i} yi 是真实电力消耗, y ˉ i \bar y_{i} yˉi 是预测电力消耗。
预测结果文件以 csv 格式提交,编码为 UTF-8,第一行为表头,具体格式如下:
1 id,dt,target 2 00037f39cf,1,0 3 00037f39cf,2,0 4 00037f39cf,3,0 5 ...
这是一个时间序列问题,在数据集中,每个数据点都有一个时间戳,数据点之间存在潜在的依赖关系。在处理时间序列问题时,重要的是考虑到数据的特性,如非平稳性、季节性、趋势、周期性和噪声,处理时间序列问题的方法主要有:
- 统计方法:自回归模型(AR)、移动平均模型(MA)、自回归移动平均模型(ARMA)、自回归积分移动平均模型(ARIMA)、季节性的ARIMA模型(SARIMA)等。
- 机器学习:梯度提升决策树(GBDT)、循环神经网络(RNN)、长短期记忆网络(LSTM) 等。
Task-1 baseline
# 1. 导入需要用到的相关库
# 导入 pandas 库,用于数据处理和分析
import pandas as pd
# 导入 numpy 库,用于科学计算和多维数组操作
import numpy as np
# 2. 读取训练集和测试集
# 使用 read_csv() 函数从文件中读取训练集数据,文件名为 'train.csv'
train = pd.read_csv("./data/data283931/train.csv")
# 使用 read_csv() 函数从文件中读取测试集数据,文件名为 'train.csv'
test = pd.read_csv("./data/data283931/test.csv")
# 3. 计算训练数据最近11-20单位时间内对应id的目标均值
target_mean = train[train["dt"] <= 20].groupby(["id"])["target"].mean().reset_index()
# 4. 将target_mean作为测试集结果进行合并
test = test.merge(target_mean, on=["id"], how="left")
# 5. 保存结果文件到本地
test[["id", "dt", "target"]].to_csv("submit.csv", index=None)
可以看到,baseline 使用靠近测试集的 10 天的数据进行预测,取它们的平均值作为前 10 天的 target 值。
提交到讯飞开放平台,得分为 373.89846。
如果我们把使用的训练集的范围扩大到 dt <= 500
,得到的分数为 626.08861。
从评分标准来看,得分越小说明预测值越接近真实值,采用更大的数据集计算平均值得到的预测结果比较小数据集的预测结果要差。