第12章 趋势演算

在趋势理论的概念成为数据科学家们研究的热门话题之前,“趋势是什么”这个问题一直都困扰着数据科学家。目前,对趋势的分析,如果我们这么称呼,主要是通过人们“目测”观察时间序列图表并提供解释来进行。但人们的眼睛究竟在做什么?

本章描述了Apache Spark中一种新的数字化研究趋势算法的实现,称为趋势演算,由Andrew Morgan发明。初始参考实现是用Lua编写的,于2015年开源。

本章将讲解其核心方法,它能快速提取时间序列上的趋势变化点,也就是趋势方向变化的时刻。我们将详细描述趋势演算算法,并将其在Apache Spark中实现。其结果是一组可伸缩的函数,可以快速比较跨时间序列的趋势,并对趋势进行推论并跨时间框架进行相关性检验。使用这些创新性的新方法,我们演示如何构建因果排序技术以提取潜在因果模型,它们来自数以千计的时间序列输入。

在这一章里,我们将探讨以下主题。

  • 如何高效地构建时间窗口概要数据。
  • 如何高效总结时间序列数据,降低噪声以进一步研究趋势发展。
  • 如何用新趋势演算算法从概要数据中提取趋势反转点。
  • 如何创建用户定义的聚合函数(UDAF),使其在由复杂的window函数及更常见的group by方法创建的分区上操作。
  • 如何从用户定义的聚合函数(UDAF)中返回多个值。
  • 如何使用lag函数比较当前和之前的记录。

当提出一个问题时,数据科学家的第一个假设就是与趋势相关的;趋势是提供数据可视化的极好方式,尤其是对大型数据集来说,经常可以看出数据变化的总体方向。在第5章里,我们生成一个简单的算法来尝试预测原油价格。在那项研究中,我们聚焦于价格变化的方向,也就是说,价格趋势的定义。可以看出,趋势是一种自然的思考、解释和预测的方式。

为了解释和演示我们的新趋势方法,本章由两个部分组成。第一部分是关于技术方面的,提供了实现执行新算法所需的代码。第二部分介绍了该方法在实际数据中的应用。我们希望能表明:趋势作为看起来简单的概念,实际上需要相当复杂的计算,这远超过我们最初的设想,特别是在存在噪声的情况下。噪声导致许多局部高点和低点(在本章中称为抖动),使找趋势转折点、发现随时间变化的总体方向变得困难。忽略时间序列中的噪声、提取可解释趋势信号,是我们主要的挑战,我们将展示如何克服它们。 ...

Get 精通Spark数据科学 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.