ML-For-Beginners 时间序列预测入门:从 GEFCom2014 电力负荷数据到经典 ML 模型基础
发布时间:2026/9/10 13:37:48 锦皓数字建站

ML-For-Beginners 时间序列预测入门从 GEFCom2014 电力负荷数据到经典 ML 模型基础【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners本篇技术指南聚焦 ML-For-Beginners 课程 7-TimeSeries 模块的第一课系统讲解时间序列Time Series的基本概念、核心术语与数据特征并以 GEFCom2014 全球能源预测竞赛的真实电力负荷数据为例完整演示如何用 Python/Pandas 加载、清洗与可视化时间序列数据。读者学完后将掌握时间序列—时间序列分析—时间序列预测三者区别、识别趋势/季节性/异常值等六类数据特征的方法并能独立运行仓库中的 notebook 完成电力负荷数据的一步前向预测准备为后续构建 ARIMA 模型奠定基础。为什么时间序列预测值得学习时间序列预测就像一个水晶球基于某个变量例如价格的历史表现你可以预测它未来的潜在价值。它是一个对商业具有直接价值的领域因为其应用直接覆盖**定价pricing、库存inventory与供应链supply chain**等问题。尽管深度学习技术已被用于获取更多洞察以更好地预测未来表现但时间序列预测在很大程度上仍然是一个由经典 ML 技术驱动的领域。想象你维护着一批智能停车计时器smart parking meters它们持续提供多久被使用一次、每次使用多长时间的数据。如果你能根据计时器过去的表现按照供需法则预测其未来的价值就能准确判断何时采取行动以实现目标——例如在高峰时段合理定价。虽然让人们在找车位时被收取更高费用并不讨喜但这确实是创造街道清洁收入的可靠途径。本文使用的数据来自GEFCom2014 预测竞赛Global Energy Forecasting Competition 2014包含 2012 至 2014 年间3 年的小时级电力负荷electricity load与温度temperature数据。基于电力负荷与温度的历史模式可以预测未来的电力负荷值。本课的目标是仅使用历史负荷数据预测未来一个时间步one time step ahead。三个必须区分的核心术语接触时间序列一词时你需要理解它在不同语境下的三种用法 时间序列Time Series在数学中时间序列是在时间顺序上被索引或列出、绘图的一系列数据点。最常见的情况是时间序列是在连续、等间隔的时间点上获取的序列。道琼斯工业平均指数的每日收盘价就是一个典型例子。时间序列绘图与统计建模在信号处理、天气预报、地震预测等事件不断发生、数据点可随时间绘制的领域中被广泛使用。 时间序列分析Time Series Analysis时间序列分析是对上述时间序列数据的分析。时间序列数据可以呈现不同形式包括**间断时间序列interrupted time series**——用于检测间断事件发生前后时间序列演变中的模式。所需的分析类型取决于数据本身的性质数据本身可以表现为数字或字符的序列。实际分析会使用多种方法包括频域与时间域方法、线性与非线性方法等。 时间序列预测Time Series Forecasting时间序列预测是使用模型根据过去收集的数据所表现出的模式来预测未来值。虽然也可以使用回归模型把时间索引作为图中的 x 变量探索时间序列数据但这类数据最好使用专门的模型类型来分析——因为时间序列数据是有序观测值的列表这与可用线性回归分析的数据不同。最常见的模型ARIMA最常见的模型是ARIMA即自回归积分滑动平均Autoregressive Integrated Moving Average的缩写。ARIMA 模型将序列的当前值与过去的值和过去的预测误差关联起来最适合分析数据随时间排序的时间域数据。ARIMA 有多种类型将在本模块的下一课中深入构建一个 ARIMA 模型。下一课将使用单变量时间序列Univariate Time Series构建 ARIMA 模型它只关注一个随时间改变取值的变量。这类数据的经典例子是记录夏威夷莫纳罗亚天文台Mauna Loa Observatory每月 CO2 浓度的数据集CO2YearMonthYearMonth330.621975.0419751331.401975.1319752331.871975.2119753333.181975.2919754333.921975.3819755333.431975.4619756331.851975.5419757330.011975.6319758328.511975.7119759328.411975.79197510329.251975.88197511330.971975.96197512✅ 请找出这个数据集中随时间变化的变量提示观察 Month 从 1 到 12 递增时哪个字段在持续变动。时间序列数据的六类特征把信号从噪声中分离观察时间序列数据时你会发现它带有某些需要纳入考量并加以缓解的特征。如果把时间序列数据看作你希望分析的信号这些特征就可以理解为噪声。你通常需要使用一些统计技术抵消部分特征以降低噪声。以下是处理时间序列前必须掌握的六类概念特征定义典型示例趋势Trends随时间可测量的上升与下降如何在需要时使用甚至移除趋势是时间序列处理的核心问题季节性Seasonality周期性波动影响销售的节假日高峰不同类型的图可以展示数据中的季节性异常值Outliers远离标准数据方差的数据点偶发的极端读数长期周期Long-run cycle与季节性无关的长期循环持续时间超过一年的经济下行恒定方差Constant variance随时间保持的稳定波动幅度白天与夜晚的能源使用突变Abrupt changes突然的变化可能需要进一步分析例如因 COVID 导致的企业突然停业引起的数据变化✅ 下面这张图展示了某游戏数年的每日游戏内货币消费数据来源于本课 images 目录。你能在其中识别出上面列出的哪些特征动手实验上手电力使用数据现在开始用真实数据创建时间序列模型的基础——首先使用 GEFCom2014 数据加载、清洗并可视化电力负荷。数据引用Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli 与 Rob J. Hyndman《Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond》International Journal of Forecastingvol.32, no.3, pp 896-913, 2016 年 7-9 月。1. 打开 notebook 并引入依赖库在本课的working文件夹中打开notebook.ipynb先添加帮助加载和可视化数据的库import os import matplotlib.pyplot as plt from common.utils import load_data %matplotlib inline注意这里使用的是随课附带的common文件夹中的文件它负责配置运行环境并处理数据下载。仓库中对应的环境配置见 working/common/environment.yaml其中锁定了python3.6.6、pandas0.23.4、matplotlib3.0.0、numpy1.16.2、statsmodels0.9.0、scikit-learn0.20.3等依赖并可通过conda env create -f environment.yaml一键创建环境。2. 将数据加载为 DataFrame调用load_data()并配合head()检查数据data_dir ./data energy load_data(data_dir)[[load]] energy.head()可以看到输出包含两列分别代表日期索引和负荷load2012-01-01 00:00:002698.02012-01-01 01:00:002558.02012-01-01 02:00:002444.02012-01-01 03:00:002402.02012-01-01 04:00:002403.0从源码看load_data的实现位于 7-TimeSeries/common/utils.py它先用pd.read_csv(..., parse_dates[timestamp])读取energy.csv然后将timestamp设为索引并用pd.date_range(min, max, freqH)以小时为频率重建索引——这样能确保时间序列在最小与最大时间戳之间的每个时间点都有记录从而识别数据中的缺失时段本数据集中没有缺失。最后删除timestamp列返回 DataFrame。3. 绘制完整数据调用plot()绘制从 2012 年 1 月到 2014 年 12 月的全部负荷数据energy.plot(yload, subplotsTrue, figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(load, fontsize12) plt.show()从这张图中可以直观看出负荷数据存在明显的年度长期周期冬季与夏季负荷明显偏高、日/夜恒定方差每天的锯齿状波动幅度相对稳定以及潜在的趋势变化。4. 放大观察2014 年 7 月第一周用[起始日期]: [结束日期]的切片模式将 2014 年 7 月的第一周作为输入传给energyenergy[2014-07-01:2014-07-07].plot(yload, subplotsTrue, figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(load, fontsize12) plt.show()这是一个漂亮的图仔细观察这些图试着识别上文列出的特征你能看到每日的周期性白天负荷高、深夜负荷低形成稳定的驼峰形态、周末与工作日的差异7 月 5-6 日周末负荷模式明显不同以及异常尖峰。通过可视化我们可以推断数据具有很强的日内季节性成分——这正是后续 ARIMA 建模时需要处理的结构。源码级解析数据管线背后发生了什么本课的common文件夹提供了完整的原始数据 → 干净 CSV管线理解它有助于你复现或替换自己的数据extract_data.py负责解压GEFCom2014.zip解出竞赛扩展数据GEFCom2014-E_V2.zip用pd.read_excel读取 Excel 文件然后通过data[Date].add(pd.to_timedelta(data.Hour - 1, unith))把日期 小时组合成timestamp列将温度列T重命名为temp并剔除 2012-01-01 之前无负荷数据的时段最后保存为energy.csv。utils.py除load_data外还提供了mape(predictions, actuals)平均绝对百分比误差即(|预测-实际|/实际).mean()用于评估预测质量以及create_evaluation_df和TimeSeriesTensor类——后者通过shift构建以 t 时刻为中心的滞后/超前特征张量形状为(samples, time steps, features)供后续课程中的 RNN/深度学习模型直接输入。这体现了本模块经典方法打底、深度学习增强的整体教学设计。课后挑战与延伸练习挑战列出你能想到的所有能从时间序列预测中受益的行业和研究领域。你能想到这些技术在艺术领域的应用吗计量经济学生态学零售业工业金融还有哪里课程同时配有课后测验以及一个动手作业详见 assignment.md寻找另外三个适合时间序列预测的数据集可参考 Kaggle 与 Azure Open Datasets创建一个 notebook 对它们进行可视化并在笔记中标注每个数据集具有的特殊特征季节性、突变或其他趋势评价标准要求至少完整绘图并解释三个数据集。虽然本课不展开介绍但值得一提的是神经网络有时被用来增强经典的时间序列预测方法。下一课你将使用本课准备好的数据与工具正式构建一个 ARIMA 模型进行预测——请确保已能顺利运行上述四个代码步骤。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。