从头了解时间序列分析

从头了解时间序列分析

我记得我第一个真正的数据科学任务是朝九晚五的工作。这个任务是去开发一个框架,用于对数千个从未见过的时间序列进行自动化训练、优化和评估。

从长远来看,这个项目是成功的,但我确实遇到了这个过程中可能会遇到的问题。

这就是我写这篇文章的原因,帮助你尽可能地避开这些问题。在接下来的文章中,我们将进行比较宽泛的概述并回答一些问题:

  • 什么是时间序列?
  • 什么时候使用时间序列分析?
  • Python 为时间序列分析提供了哪些选项?

如果你想了解更多数据分析相关内容,可以阅读以下这些文章:
长文总结:时间序列分类的实践指南(附Python代码)
除了预测姨妈周期,时间序列还能干嘛?
教你如何用神经网络和机器学习进行动态定价
四个数据科学求职者的常见失误

那么,什么是时间序列?

随着时间的推移,几乎所有公司都会衡量一些东西——比如销售额、收入或其他东西。因此,时间序列分析技能是任何数据分析师和科学家的必备技能——即使是初级职位!

为了让时间序列数据有意义,必须在相同的时间间隔内收集。例如,每天下午 3 点测量你网站上的访问量就合乎常理,但一天多次执行这个操作但忘记前几天的数据就没有意义。

我们来看一个例子。下图显示了数千辆轻型车的销量:

图 1 — 数千辆轻型汽车的销量(来源:FRED)

这是时间序列的一个很好的例子。这是过去四十年间的月度采样数据。阴影区域正是美国经济衰退期间。

但是,你如何分析这些数据呢?要回答这个问题,你必须了解时间序列中的两个基本概念——趋势和季节性。

顾名思义,趋势代表随时间的一般运动,而季节性代表单个季节过程中的行为变化。例如,大多数月度采样数据都具有年度的季节性,意思是,无论趋势如何,每年都会在某些月份重复某些模式。

让我们在 Python 中加载数据集,进一步探索这些概念。为了证明是同一组数据,下列是数据在Matplolib 默认的可视化样子:

图 2 — 使用 Matplotlib 绘制的轻型汽车销售图
(图片由作者提供)

你可以用 Python 将任何时间序列分解为趋势、季节性和残余成分。简单来说,残余成分(residual components)显示了未通过趋势和季节性而捕获的所有内容。在我们的数据集中,分解图如下所示:

图 3 — 轻型汽车销售分解(图片由作者提供)

可以看到,该图由四个部分组成。第一个显示原始时间序列,其他三个说明趋势、季节性和残余。暂时不用考虑可视化的代码,让我们现在只关注于整体的情况。

让我们回答下一个问题——什么时候使用时间序列分析?

什么时候使用时间序列分析?

我们在前面提到过,随着时间的推移,大多数公司会收集某种数据。他们为什么这样做呢?我们来看看下面几个例子。

模式分析

只查看原始数据,你是无法发现时间序列数据中的模式和关系的。图表会更加清晰,但却很难进行直接分析。这时候,模式的分析就可以发挥它的作用了。

Stumpy 库是完成这项工作的最好工具。现在,请看下图:

图 4 — 使用 Python 和 Stumpy 进行模式查找
(来源:Stumpy docs)

模式识别和分析能够更好地预测未来。

异常检测

Stumpy 还提供了一种检测时间序列异常的方法。简而言之,异常值就是比起你期望的任值相差极大的值。检测正态分布值中的异常值,与从平均值中分理处几个标准差地记录一样容易,但对于时间序列数据,就不那么容易了。

以下是 Stumpy 可以为你做的事情:

图 5 — 使用 Python 和 Stumpy 进行异常检测
(来源:Stumpy docs)

一般预测

收集时间序列数据的一大原因就预测未来。很好的是,Python 提供的预测技术完全超出你的想象。AR、MA、EXSM、ARMA、ARIMA、SARIMA、SARIMAX、VAR、VARMA、RNN、LSTM、GRU 等首字母缩略词,现在听起来可能像一门外语,但你很快就会完全理解它们。

看看下图——它显示了过去 20 年的历史数据和对未来 2 年的预测:

图 6-2 年轻量化汽车销售预测(图片由作者提供)

用于生成这些预测的算法称为三重指数平滑(Holt-Winters)听起来可能很复杂,但是不用害怕,它是可用算法中最简单的算法之一,运行结果也足以让你大吃一惊。

还有更多的时间序列分析使用例子,但以上这三个应该足以让你动力满满。

Python 为时间序列分析提供了哪些选项?

Python 是一种用于时间序列分析的优秀语言。以下是我们将在本文中使用的库,其中包含简要说明和用例:

  • Pandas — 数据分析的基础库。通过Pandas,你可以有效地使用日期时间索引、日期范围,执行转换、滞后、聚合等转换。
  • Statsmodels — 用于统计建模的 Python 库。通过Statsmodels ,你可以使用从简单移动平均到季节性和向量自回归的统计模型。你还可以用来测试平稳性等等。
  • Scikit-Learn — Python 的通用机器学习库。它不附带任何特定于时间序列的算法,但如果时间序列被重新定义为监督机器学习问题,则任何回归算法都可用于时间序列预测。
  • TensorFlow — 最流行的 Python 深度学习库。我们能使用它来探索如何使用循环神经网络 (RNN) 及其变体(LSTM、GRU)来预测时间序列。
  • Prophet — 来自 Facebook 的时间序列预测库。它基于加性模型。它同时还有升级版——Neural Prophet。
  • Stumpy — 一个 Python 库,可有效计算矩阵的配置文件,用于模式和异常检测等。
  • PyCaret — 一个用于自动化机器学习的Python 库,非常出色,最新版本支持时间序列。

虽然以上内容很多,但是我们将竭尽所能地解释清楚。

希望本文能让你对时间序列分析有个大概的了解。感谢阅读!你还可以订阅我们的YouTube频道,观看大量数据科学相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Dario Radecic
翻译作者:Lia
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://towardsdatascience.com/time-series-analysis-from-scratch-seeing-the-big-picture-2d0f9d837329