时间序列 101 - 新手入门
上次更新于
这有帮助吗?
上次更新于
这有帮助吗?
时间序列数据是指在不同时间点收集的同一主题的数据,例如某国按年份计算的 GDP、某特定公司在一段时间内的股票价格,或你每秒记录的心跳。事实上,任何可以在不同时间间隔连续捕获的数据都是时间序列数据。
请看下面一个时间序列数据的例子,下图是特斯拉公司(股票代码:TSLA)去年每日的股票价格。右侧的 Y 轴是美元价值(图表上的最后一个点,即 701.91 美元,是截至本文撰写时(2021 年 4 月 12 日)的最新股票价格)。
另一方面,更传统的数据集,例如客户信息、产品信息、公司信息等,它们在单一时间点存储信息,称为横截面数据。
请看下面一个数据集的例子,它跟踪了 2020 年上半年美国最畅销的电动汽车。请注意,下面的图表不是跟踪一段时间内售出的汽车,而是在同一时期跟踪不同的汽车,例如特斯拉、雪佛兰和日产。
区分横截面数据和时间序列数据并不难,因为这两种数据集的分析目的截然不同。对于前一种分析,我们感兴趣的是跟踪一段时间内的特斯拉股票价格,而对于后一种分析,我们希望分析同一时期(即 2020 年上半年)的不同公司。
然而,典型的真实世界数据集很可能是混合的。想象一下像沃尔玛这样的零售商,它每天销售数千种产品。如果你分析特定日期按产品划分的销售情况,例如,如果你想知道圣诞前夜最畅销的商品是什么,这将是横截面分析。相反,如果你想了解某个特定商品(例如 PS4)在一段时间(例如过去 5 年)内的销售情况,这现在就变成了时间序列分析。
准确地说,时间序列数据和横截面数据的分析目的不同,真实的现实世界数据集很可能是时间序列数据和横截面数据的混合。
时间序列预测正如其名,即预测未来的未知值。然而,与科幻电影不同,它在现实世界中稍微不那么激动人心。它涉及收集历史数据,为算法消耗做准备(算法简单来说就是幕后的数学),然后根据从历史数据中学习到的模式预测未来值。
你能想到为什么公司或任何人都可能对预测任何时间序列(GDP、月销售额、库存、失业率、全球气温等)的未来值感兴趣吗?让我给你一些商业视角
零售商可能对预测 SKU 级别的未来销售额感兴趣,以便进行规划和预算。
小商家可能对按商店预测销售额感兴趣,这样他们就可以安排合适的资源(繁忙时期增加人手,反之亦然)。
像谷歌这样的软件巨头可能想知道一天中最繁忙的时间或一周中最繁忙的日子,以便相应地安排服务器资源。
卫生部门可能对预测累计 COVID 疫苗接种数量感兴趣,以便了解何时可能达到群体免疫的临界点。
时间序列预测大致可分为以下几类
经典/统计模型 — 移动平均、指数平滑、ARIMA、SARIMA、TBATS
**机器学习 **— 线性回归、XGBoost、随机森林或任何带有降维方法的机器学习模型
**深度学习 **— RNN, LSTM
PyCaret 的回归模块是一个监督学习模块,用于估计因变量(通常称为“结果变量”或“目标”)与一个或多个自变量(通常称为“特征”或“预测因子”)之间的关系。
由于机器学习算法无法直接处理日期,我们从日期中提取一些简单的特征,例如月和年,并删除原始日期列。
我在初始化设置之前手动分割了数据集。另一种方法是将整个数据集传递给 PyCaret 并让它处理分割,在这种情况下,你需要在 setup 函数中传递 data_split_shuffle = False 以避免在分割前打乱数据集。
现在是时候初始化 setup 函数了,我们将使用 fold_strategy 参数明确传递训练数据、测试数据和交叉验证策略。
基于交叉验证 MAE 的最佳模型是**最小角回归** (MAE: 22.3)。让我们检查一下在测试集上的得分。
测试集上的 MAE 比交叉验证的 MAE 高出 12%。不太好,但我们将继续使用它。让我们绘制实际值和预测值曲线来可视化拟合情况。
末端的灰色背景是测试期(即 1960 年)。现在让我们确定最终模型,即在整个数据集(这次包括测试集)上训练最佳模型,即最小角回归。
现在我们已经在整个数据集(1949 年至 1960 年)上训练了模型,让我们预测到未来五年,直到 1964 年。要使用最终模型生成未来预测,我们首先需要创建一个包含未来日期上的 Month、Year、Series 列的数据集。
现在,让我们使用 future_df 进行评分并生成预测。
使用这个轻量级的 Python 工作流自动化库,你能实现的功能没有限制。如果你觉得这很有用,请不要忘记在我们的 GitHub 仓库上给一个 ⭐️。
点击下方链接查看文档和工作示例。
本教程重点介绍使用机器学习进行时间序列预测。在本教程中,我将使用一个名为的开源低代码 Python 机器学习库的回归模块。如果你之前没用过 PyCaret,可以快速入门。尽管如此,你不需要任何 PyCaret 的先验知识就可以跟着本教程学习。
回归的目的是预测连续值,例如销售额、数量、温度、客户数量等。PyCaret 中的所有模块都提供了许多特征,通过函数来准备数据用于建模。它拥有超过 25 种即用型算法和来分析已训练模型的性能。
在本教程中,我使用了美国航空公司乘客数据集。你可以从下载数据集。该数据集提供了 1949 年至 1960 年美国航空公司乘客的月总数。
我希望你觉得本教程很简单。如果你认为你已经准备好进入下一个级别,可以查看我在.
上发布的进阶时间序列教程。我很快将使用撰写一篇关于时间序列数据无监督异常检测的教程。如果你想获取更多更新,可以关注我的, ,和.
了解更多关于 PyCaret 的信息,请关注我们的和.
加入我们的 Slack 频道。邀请链接.