knime 时间序列预测_使用KNIME和Spark进行时间序列分析

本文探讨了如何利用KNIME和Spark进行时间序列分析,以预测纽约市的出租车需求。通过数据清理、时间序列可视化、消除非平稳性和季节性以及构建训练集和测试集,展示了预测流程。目标是预测下一个小时的出租车需求。
摘要由CSDN通过智能技术生成

knime 时间序列预测

需求预测

我认为我们都同意,知道未来的发展将使生活变得更加轻松。 这对于生活事件,洗衣机和冰箱的价格或整个城市的电能需求都是如此。 了解明天或下周需要多少瓶橄榄油,可以在零售商店中制定更好的进货计划。 了解汽油或柴油价格可能上涨的情况,使货运公司可以更好地计划其财务状况。 这种知识可以提供帮助的例子数不胜数。

需求预测是数据科学的一大分支。 其目标是使用历史数据以及可能的其他外部信息来估计未来需求。 需求预测可以涉及任何数字:餐厅的访客,产生的kW / h,学校新注册,货架上所需的啤酒瓶,电器价格等。

预测纽约的出租车需求

作为需求预测的一个示例,我们将解决预测纽约市出租车需求的问题。 在纽约这样的大城市中,每天有超过13,500辆黄色出租车在街上漫游(根据《 2018年出租车和豪华轿车委员会概况》 )。 这使得了解和预测出租车需求对于出租车公司乃至城市规划者而言都是至关重要的任务,以提高出租车队的效率并最大程度地减少旅行之间的等待时间。

在此案例研究中,我们使用了纽约出租车数据集 ,该数据集可从纽约出租车和豪华轿车委员会(TLC)网站下载。 该数据集跨越纽约市的出租车旅行10年,其中包含有关每次旅行的广泛信息,例如上车和下车的日期/时间,位置,票价,小费,距离和乘客人数。 由于我们仅将此案例研究用于演示,因此我们仅使用了2017年的Yellow出租车子集。对于更一般的应用,将另外几年的数据包括在数据集中将很有用,至少能够估算年度季节性。

让我们设定本教程的目标,以预测下一个小时在纽约市所需的出租车行程。

时间序列分析:过程

需求预测问题是经典的时间序列分析问题。 我们有一个时间序列的数字值(价格,访问者数量,kW / h等),我们希望根据过去的N个值来预测下一个值。 在我们的案例中,我们有一个每小时的出租车出行次数的时间序列(图1a),并且我们要根据最近N个小时的出租车出行次数来预测下一个小时的出租车请求数。

对于此案例研究,我们通过以下步骤实现了时间序列分析过程 (图1):

  • 数据转换:聚合,时间对齐,缺失值估算以及其他所需的转换,通常取决于数据域和业务案例
  • 时间序列可视化
  • 消除非平稳/季节性(如果有)
  • 数据分区以构建训练集(过去)和测试集(未来)
  • N个过去值的向量的构造
  • 训练一个或多个机器学习模型以实现数值输出
  • 预测误差的计算
  • 模型部署(如果可以接受预测误差)
时间序列火花图1 尼米

图1.时间序列分析的一些经典步骤。

注意,精确预测单个数值可能是一项复杂的任务。 在某些情况下,甚至不需要精确的数值预测,并且在将其转换为分类问题后,可以令人满意且容易地解决相同的问题。 为了将数字预测问题转化为分类问题,您只需要在目标变量之外创建类。

例如,很难预测两周后的洗衣机价格,但是预测此价格在两周内会增加,减少还是保持不变则容易得多。 在这种情况下,我们已将价格预测的数值问题转换为三个类别的分类问题(价格上涨,价格下跌,价格不变)。

数据清理和其他转换

第一步是将时间稀疏的原始数据行(在这种情况下为出租车出行,但可能是与客户签订合同或快速傅立叶变换幅度相同)移到按时间均匀采样的时间序列值。 这通常需要两件事:

  • 在预定义的时间范围内的聚合操作:秒,分钟,小时,天,周或月,具体取决于数据和业务问题。 用于聚合的粒度(时间标度)对于可视化不同的季节性影响或捕获信号中的不同动态非常重要。
  • 重新对齐操作,以确保在所考虑的时间窗口内时间采样是均匀的。 通常,时间序列以捕获的时间的单个序列表示。 如果缺少任何时间样本,我们不会发出通知。 重新调整过程会在跳过的采样时间插入缺失值。

另一个经典的预处理步骤包括估算缺失值。 这里有许多时间序列专用技术,例如使用上一个值,上一个和下一个值之间的平均值或上一个和下一个值之间的线性插值。

此处的目标是预测下一个小时的出租车需求(等于所需的出租车行程数)。 因此,由于我们需要时间序列的每小时时间标度,因此在数据集中按每天的每一小时计算纽约市的出租车旅行总数。 这要求按小时和日期(年,月,月中的某天,小时)对数据进行分组,然后对每组中的行数(即出租车行程数)进行计数。

时间序列可视化

在进行数据准备,模型训练和模型评估之前,通过视觉数据探索了解我们正在处理的问题总是很有用的。 在这种情况下,我们将在多个时间范围内可视化数据。 每个可视化可以提供有关数据时间演变的不同见解。

在上一步中,我们已经按小时汇总了出租车行程数。 这将产生时间序列x(t) (图2a)。 此后,为了观察不同时间尺度上的时间序列演变,我们还在按天(图2b)和按月(图2c)进行汇总后将其可视化。

从每小时的时间序列图中,您可以清楚地看到24小时制:白天出租车次数较多,而夜间出租车次数较少。

如果我们改用每日量表,则每周的季节性模式将变得明显,工作日的出行次数增加,周末的出行次数减少。 通过变化的平均值,可以轻松地在此时间刻度上发现此时间序列的非平稳性。

最后,每月时间序列的图没有足够的数据点来显示任何类型的季节性模式。 将数据集扩展到包括更多年可能会在图中增加点,并且可能会观察到冬季/夏季的季节性模式。

时间序列火花图2a 尼米

图2a。 根据纽约市出租车数据集,按小时划分的纽约市出租车行车次数图,于2017年6月的前两周进行了放大。 这里的24小时季节性很容易看到。

时间序列火花图2b 尼米

图2b。 根据纽约市出租车数据集,放大了2017年5月至2017年9月之间的时间窗口,按天划分了纽约市出租车行车次数的图。 这里的每周季节性非常容易发现。 三个深谷分别对应于阵亡将士纪念日,七月四日和劳动节。

时间序列火花图2c 尼米

图2c。 根据NYC Taxi数据集,绘制2017年全年纽约市出租车行车次数。 您会看到冬天(出租车旅行次数更多)和夏天(出租车旅行次数更少)之间的区别。

图2a。 根据纽约市出租车数据集,按小时划分的纽约市出租车行车次数图,于2017年6月的前两周进行了放大。 这里的24小时季节性很容易看到。

图2b。 根据纽约市出租车数据集,放大了2017年5月至2017年9月之间的时间窗口,按天划分了纽约市出租车行车次数的图。 这里的每周季节性非常容易发现。 三个深谷分别对应于阵亡将士纪念日,七月四日和劳动节。

图2c。 根据NYC Taxi数据集,绘制2017年全年纽约市出租车行车次数。 您会看到冬天(出租车旅行次数更多)和夏天(出租车旅行次数更少)之间的区别。

非平稳性,季节性和自相关函数

许多时间序列分析技术的常见要求是数据必须是固定的

平稳过程具有以下特性:均值,方差和自相关结构不会随时间变化。 平稳性可以用精确的数学术语定义,但就我们的目的而言,我们指的是没有时间趋势的平坦时间序列,其平均和方差随时间变化,自相关结构随时间变化。 出于实用目的,通常从运行序列图或线性自相关函数( ACF )确定平稳性。

如果时间序列是非平稳的,则通常可以通过将其替换为一阶差分来将其转换为平稳的。 也就是说,给定序列x(t) ,我们创建新的序列y(t)= x(t)-x(t-1) 。 您可以多次对数据进行差分,但是通常一阶差分就足够了。

季节性违反平稳性,并且通常也从时间序列的线性自相关系数确定季节性。 这些是在时间t的时间序列x(t)的值与其在时间t-1,…,tn的过去值之间的皮尔森相关系数 。 通常,在-0.5到0.5之间的值将被认为是低相关性,而在此范围之外(正或负)的系数将表明高相关性。

实际上,我们使用ACF图来确定主要季节性或非平稳性的指数。 ACF图在y轴上报告针对x(t)及其过去的x(ti)值计算的自相关系数与在x轴上的滞后i的关系。 ACF图中的第一个局部最大值定义了季节性模式的滞后(lag = S)或对非平稳性进行校正的需要(lag = 1)。 为了不考虑不相关的局部最大值,通常会引入截止阈值,通常是从预定义的置信区间(95%)开始。 同样,更改时间范围(即聚合的粒度)或延长时间窗口使我们能够发现不同的季节性模式。

如果我们发现季节性滞后为S ,则可以应用多种不同的技术来消除季节性。 我们可以从所有后续的S样本窗口中删除前S个样本; 我们可以计算一部分数据集的平均S样本模式,然后从随后的所有S样本窗口中删除该模式; 我们可以训练机器学习模型来重现要删除的季节性模式; 或更简单地说,我们可以从当前值x(t)中减去先前的值x(tS) ,然后处理残差y(t)= x(t)-x(tS)。 为了使本教程保持简单,我们在本教程中选择了最后一种方法。

图3显示了出租车每小时行驶次数的时间序列的ACF图。 在y轴上是为x(t)计算的自相关系数及其在滞后时间1到50的先前值。在x轴上是滞后时间。 该图表显示了出租车业务中预期的滞后= 1和滞后= 24(即每天的季节性)的峰值。 最高正相关系数在x(t)x(t-1) (0.91)之间, x(t)x(t-24) (0.83)之间,然后是x(t)x(t-48)之间 (0.68)。

如果我们使用时间序列的每日汇总并在n> 7的滞后间隔中计算自相关系数,我们还将在第7天观察到峰值,即每周的季节性。 在更大范围内,我们可能会观察到冬季和夏季的季节性变化,冬季人们乘坐出租车的频率要高于夏季。 但是,由于我们仅考虑一年的数据,因此我们不会检查这种季节性。

时间序列火花图3 尼米

图3. 50小时内的自相关图(皮尔森系数)。 x(t)x(t-1)x(t-24)x(t-48)的相关性最强,表示每天24小时的季节性。

数据分区以构建训练集和测试集

此时,必须将数据集划分为训练集(过去)和测试集(未来)。 请注意,两组之间的分割必须是时间上的分割。 不要使用随机分区,而是按时间顺序分割! 这是为了避免数据从训练集(过去)泄漏到测试集(未来)中。

我们为训练集保留了2017年1月至2017年11月的数据,为测试集保留了2017年12月的数据。

滞后:过去N个值的向量

该用例的目标是预测下一小时纽约市的出租车旅行需求。 为了进行此预测,我们需要前N个小时的出租车行程需求。 对于时间序列的每个值x(t) ,我们要构建向量x(tN),…,x(t-2),x(t-1),x(t)。 我们将过去的值x(tN),…,x(t-2),x(t-1)用作模型的输入,而将当前值x(t)用作目标列以训练模型。 对于此示例,我们尝试了两个值:N = 24和N = 50。

翻译自: https://www.infoworld.com/article/3405256/time-series-analysis-with-knime-and-spark.html

knime 时间序列预测

Knime Spark是一种数据分析工具,它结合了Knime和Apache Spark两个强大的开源项目。Knime是一个基于图形界面的数据分析平台,而Apache Spark是一个用于大规模数据处理的开源集群计算框架。 通过将Knime与Spark集成在一起,Knime Spark能够实现更高效、更强大的数据处理和分析。它允许用户在Knime的可视化界面中创建工作流程,并利用Spark的分布式计算引擎来处理大规模数据集。 Knime Spark提供了一系列的节点(nodes),用户可以使用这些节点来进行数据的清洗、转换、建模、评估等操作。这些节点能够直接利用Spark分布式计算引擎,以并行和分布式的方式处理数据,从而提高处理速度和效率。 与传统的数据处理工具相比,Knime Spark具有以下优势: 1. 可扩展性:Spark的分布式计算引擎使得Knime Spark能够处理大规模数据集。用户可以根据需求增加或减少计算资源,满足不同规模数据处理的需求。 2. 灵活性:Knime Spark允许用户使用Knime的图形界面创建工作流程,不需要编写复杂的代码。同时,用户也可以通过自定义节点来扩展Knime Spark的功能,以适应各种数据处理任务。 3. 高性能:通过利用Spark的分布式计算引擎,Knime Spark能够以并行和分布式的方式处理数据,从而提高处理速度和效率。用户可以利用Spark的各种优化技术,如数据分区和内存缓存,进一步提升性能。 4. 强大的生态系统:Knime Spark集成了Apache Spark的生态系统,用户可以利用Spark提供的各种库和工具进行数据分析和建模。同时,Knime Spark也支持与其他数据处理和建模工具的集成,如Python、R等。 综上所述,Knime Spark是一个结合了Knime和Spark两个开源项目的数据分析工具,它能够提供高效、灵活和高性能的数据处理和分析能力。无论是处理小规模数据还是大规模数据,Knime Spark都能够满足用户的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值