ML-For-Beginners 时间序列预测入门:理解概念并动手可视化电力负荷数据

发布时间:2026/9/11 20:35:33
ML-For-Beginners 时间序列预测入门:理解概念并动手可视化电力负荷数据 ML-For-Beginners 时间序列预测入门理解概念并动手可视化电力负荷数据【免费下载链接】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 Forecasting这一在定价、库存管理、供应链优化等场景中极具商业价值的技术展开。你将系统掌握时间序列、时间序列分析与时间序列预测三个核心概念的区别认识趋势、季节性、异常值、长期周期、恒定方差与突变等关键数据特征并基于 GEFCom2014 全球能源预测竞赛的真实数据集使用仓库提供的 Notebook 与工具函数完成数据的加载、清洗与可视化为下一课构建 ARIMA 模型打下坚实基础。为什么需要时间序列预测一个水晶球问题时间序列预测就像一颗水晶球基于某个变量如价格过去的表现你可以预测它未来的潜在取值。设想你管理着一片智能停车计费表它们随时间记录着使用频率和使用时长。能否根据每个计费表的历史表现结合供需规律预测其未来的价值在高峰时段提高收费或许不会让司机们开心但却是为街道维护创收的可靠途径——而准确预测何时行动正是时间序列预测要解决的挑战。这一领域虽然不如其他 ML 主题那么热门但对机器学习科学家来说是一项有趣且实用的技能。它在商业中有直接应用定价、库存、供应链因此价值显著。尽管深度学习技术已开始用于提升预测能力但时间序列预测在很大程度上仍然由经典机器学习方法主导。本课你将学习如何仅使用历史负荷数据预测未来一个时间步的值。动手之前先理解背后的核心概念至关重要。三个必须分清的定义课程文档强调遇到time series一词时需要理解它在多个语境下的不同含义时间序列Time Series数学上时间序列是按时间顺序索引或列出、绘图的数据点序列。最常见的是在连续等间隔时间点上采集的序列。典型例子是道琼斯工业平均指数的每日收盘价。时间序列绘图与统计建模常用于信号处理、天气预报、地震预测等事件随时间发生并可被追踪的领域。时间序列分析Time Series Analysis时间序列分析是对上述时间序列数据的分析。数据可呈现不同形式包括中断时间序列interrupted time series用于识别某个干扰事件前后序列的演变模式。所需的分析类型取决于数据本质可以是数值序列也可以是字符序列。分析采用的方法多种多样包括频域与时间域方法、线性与非线性技术等。时间序列预测Time Series Forecasting时间序列预测是使用模型基于过去已发生数据的模式来预测未来取值。虽然可以用回归模型探索时间序列数据把时间索引作为图中的 x 变量但这类数据最好用专门模型分析。时间序列数据是有序观测的列表与可用线性回归分析的数据不同。最常见的模型是 ARIMA即自回归积分滑动平均Autoregressive Integrated Moving Average。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✅思考题在这个数据集中随时间变化的变量是什么答案是 CO2 浓度列。时间序列数据的六大特征信号中的噪声分析时间序列数据时你会注意到某些需要处理才能更好理解其模式的特征。如果把时间序列数据看作待分析的信号这些特征就是噪声通常需要用统计技术来抵消趋势Trends随时间可测量的上升或下降。例如长期用电量的逐年增长。识别趋势后必要时可以从序列中移除趋势。季节性Seasonality周期性波动例如节假日带来的销售高峰。不同类型的图如按年/月/周聚合的图能揭示数据中的季节性规律。异常值Outliers显著偏离标准方差的数据点。长期周期Long-run cycle独立于季节性之外数据可能呈现长期循环例如持续超过一年的经济下行期。恒定方差Constant variance某些数据随时间呈现稳定的波动幅度例如白天与夜晚的能源使用差异。突变Abrupt changes数据可能呈现需要进一步分析的突然变化。例如 COVID 疫情导致的企业突然停业在各类数据中引发了显著位移。✅ 下面是一张多年间每日游戏内货币支出的示例图。你能从中识别出上述哪些特征如季节性、趋势、异常值等实战准备GEFCom2014 电力负荷数据集本课与下一课的实验数据来自GEFCom2014 全球能源预测竞赛包含2012 至 2014 三年间逐小时的电力负荷load与温度temp数据。基于电力负荷与温度的历史模式可以预测未来的电力负荷值。数据引用Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli and Rob J. Hyndman, Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond, International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016.在仓库中本课的实验文件位于 7-TimeSeries/1-Introduction/working练习版与 7-TimeSeries/1-Introduction/solution答案版目录二者结构一致notebook.ipynb本课 Jupyter Notebook原文中的_notebook.ipynb_common/utils.py环境工具函数负责数据加载与后续课程的评估辅助common/extract_data.py从 GEFCom2014 原始压缩包中解压、清洗并生成energy.csv的脚本common/environment.yaml本课程推荐的 conda 环境定义data/energy.csv已处理好的电力数据26,304 行小时级记录 表头。环境配置从 common 文件夹说起文档特别提示练习中使用的是随课程附带的common文件夹它负责搭建环境并处理数据下载。仓库中 7-TimeSeries/1-Introduction/working/common/environment.yaml 定义了名为dlts的 conda 环境关键依赖包括python3.6.6、pandas0.23.4、numpy1.16.2、matplotlib3.0.0statsmodels0.9.0下一课 ARIMA 建模的核心库tensorflow1.12.0、keras2.2.4、scikit-learn0.20.3通过 pip 额外安装pyramid-arima0.8.1可按文件头部注释创建并注册环境conda env create -f environment.yaml conda activate dlts python -m ipykernel install --user --name dlts --display-name Python (dlts)说明该环境定义面向课程原始编写时的版本Python 3.6 / TensorFlow 1.x。当前运行时可酌情使用新版 Python 与依赖但statsmodels与matplotlib仍是完成本课与后续 ARIMA 课程的核心。数据从哪来extract_data.py 的数据流水线虽然working/data/energy.csv已直接提供现成数据但 7-TimeSeries/1-Introduction/working/common/extract_data.py 揭示了数据的原始来源与处理逻辑值得理解检查data_dir/GEFCom2014.zip是否存在不存在则提示手动下载需联网获取 GEFCom2014 压缩包解压根目录再解压其中的GEFCom2014-E_V2.zip扩展负荷预测竞赛数据用 pandas 读取GEFCom2014-E.xlsx将Date与Hour合并为timestamp列data[Date].add(pd.to_timedelta(data.Hour - 1, unith))只保留timestamp、load、T重命名为temp三列剔除 2012-01-01 之前无负荷数据的时间段保存为data/energy.csv。可以看到课程提供的 CSV 是这份脚本清洗后的成品——已按小时对齐、去除了无负荷时段开箱即用。动手实验加载并可视化电力负荷数据打开 7-TimeSeries/1-Introduction/working/notebook.ipynb按以下四个步骤操作答案版见 7-TimeSeries/1-Introduction/solution/notebook.ipynb。第 1 步导入库import os import matplotlib.pyplot as plt from common.utils import load_data %matplotlib inline第 2 步加载数据为 DataFramedata_dir ./data energy load_data(data_dir)[[load]] energy.head()输出会得到两列时间戳timestamp与负荷loadload2012-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第 3 步绘制完整时间序列energy.plot(yload, subplotsTrue, figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(load, fontsize12) plt.show()第 4 步放大观察 2014 年 7 月第一周按[起始日期]:[结束日期]的切片语法传入energy即可截取任意区间energy[2014-07-01:2014-07-07].plot(yload, subplotsTrue, figsize(15, 8), fontsize12) plt.xlabel(timestamp, fontsize12) plt.ylabel(load, fontsize12) plt.show()观察这两张图尝试识别前文提到的特征全年曲线是否呈现季节性夏冬用电高峰与趋势单周放大图中每一天是否呈现白天/夜晚的恒定方差式的周期性波动以及是否存在异常值通过可视化你能得出哪些洞察深入理解 load_data源码级解析7-TimeSeries/1-Introduction/working/common/utils.py 中的load_data(data_dir)是本课数据加载的核心def load_data(data_dir): Load the GEFCom 2014 energy load data energy pd.read_csv(os.path.join(data_dir, energy.csv), parse_dates[timestamp]) energy.index energy[timestamp] energy energy.reindex(pd.date_range(min(energy[timestamp]), max(energy[timestamp]), freqH)) energy energy.drop(timestamp, axis1) return energy其关键逻辑是读取energy.csv并把timestamp解析为 datetime 后用pd.date_range(..., freqH)以小时为频率重新索引整个时间范围。这确保了 DataFrame 对从最小到最大时间戳之间的每个小时都有记录从而能暴露数据中缺失的时间段源码注释说明本数据集中没有缺失。这正是时间序列数据是等间隔有序观测这一概念在工程上的落地。另外同一文件还提供了mape()平均绝对百分比误差与TimeSeriesTensor为后续课程构造 RNN 输入张量等工具供课程后续使用。挑战你能想到哪些受益行业列出你认为可以从时间序列预测中受益的行业与研究领域。除了能源还能想到艺术、计量经济学、生态学、零售、工业、金融等领域中的应用吗结合本课学习的六大特征思考每个场景中会出现的趋势、季节性与突变。复习与延伸本课未涉及神经网络但神经网络有时会被用来增强经典时间序列预测方法如用深度学习捕捉 ARIMA 难以建模的非线性模式这是值得进一步探索的方向。课后作业完成课程配套作业寻找另外三个适合时间序列预测的数据集例如 Kaggle 或 Azure Open Datasets 上的数据创建 Notebook 绘制它们的可视化并标注各自呈现的特殊特征季节性、突变或其他趋势。评分标准要求至少绘制并解释三个数据集为优秀、两个为合格。作业详情见 7-TimeSeries/1-Introduction/assignment.md。下一步本课已完成概念铺垫与数据可视化。下一课将基于同样的电力负荷数据构建 ARIMA 模型真正生成预测结果。课程其余时间序列内容ARIMA、SVR位于 7-TimeSeries 目录相关概念速览可参考课程总览图 sketchnotes/ml-timeseries.png。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考