Python中如何使⽤以及去除时间序列数据中的趋势信息时间序列数据集可能包含⼀种趋势。
序列中的趋势是随着时间的推移不断的增加或减少。能够识别,建模,甚⾄去除时间序列数据集趋势信息是有益的。
在本教程中,你会发现如何在Python中建模以及去除时间序列数据的趋势信息。
完成本教程之后,你就会知道︰
时间序列中可能存在的趋势的重要性和类型以及如何识别它们。
如何使⽤简单的差分⽅法去除趋势。
如何建⽴线性趋势模型以及去除时间系列数据集中的趋势。
让我们开始吧。
Python中如何使⽤以及去除时间序列数据的趋势信息
图⽚来⾃john78727,保留部分权利
时间序列的趋势
趋势是时间序列⽔平的长期增加或减少。
“⼀般来说,不表现为周期性的时间序列的系统变化被称为趋势。”
——第5页,
识别和理解趋势信息可以帮助提⾼模型的性能;下⾯是⼏点原因︰
更快地建模:相关的知识会使模型的选择和评估更为有效。
简化问题:我们可以更正或消除趋势来简化建模和改善模型性能。
更多的数据:我们可以直接利⽤趋势信息,或者向模型提供附加信息来提⾼模型性能。
趋势的类型
趋势的类型有很多。
两种常见的类型是︰
确定性趋势:趋势始终如⼀地增加或减少。
随机的趋势:趋势的增加,减少不⼀致。
⼀般情况下,确定性趋势更容易识别和消除,但在本教程中介绍的⽅法还可⽤于随机趋势。
我们可以根据观察的范围来考虑趋势。
全局趋势:这些都是适⽤于整个时间序列的趋势。
局部趋势:这些都是适⽤于零件或⼦序列的时间序列的趋势。
⼀般来说,全局趋势更容易识别和解决。
确定趋势
您可以绘制时间序列数据,看看趋势是否明显。
困难在于实践中,确定时间序列的趋势是⼀个主观的过程。因此,从时间序列中提取或移除趋势是主观的。
创建您的数据线图并查看有没有明显的趋势。
将线性和⾮线性趋势线添加到图中,看看趋势是否明显。
去除趋势
有趋势的时间序列是⾮平稳的。
python怎么读csv数据可以模拟确定的趋势。建模之后,它可以从时间系列数据集中去除。这就是时间序列去趋势。
如果数据集没有趋势或我们成功地去除了趋势,数据集就是趋势平稳的。
在机器学习中使⽤时间系列趋势
从机器学习的⾓度来看,数据中的趋势有两种可能性︰
1.删除信息:去除扭曲输⼊和输出变量之间关系的系统信息。
2.添加信息:添加提⾼输⼊和输出变量之间关系的系统信息。
具体来说,趋势可以在数据准备和清理活动中从时间序列数据中剔除。这在运⽤统计学⽅法进⾏时间序列预测时是常见的,但使⽤机器学习模型时不⼀定能改善结果。
或者,可以直接添加趋势或添加趋势作为⼀个新的输⼊变量来预测输出变量。
这两种⽅法可能都与您的时间序列预测问题相关,所以都值得研究。
接下来,让我们看看有趋势的数据集。
洗发⽔销售数据集
此数据集描述了过去3年每⽉的洗发⽔销售量。
单位是销售计数,有36个观察点。原始数据集被归⼊Makridakis,Wheelwright和Hyndman(1998)。
下⾯是前5⾏数据,包括标题⾏。
"Month","Sales"
"1-01",266.0
"1-02",145.9
"1-03",183.1
"1-04",119.3
"1-05",180.3
下⾯是取⾃数据集市的整个,你可以从数据集市了解更多信息并下载数据集。
数据集呈增涨的趋势。
洗发⽔销售数据集
加载洗发⽔销售数据集
下载数据集并将其放置在当前⼯作⽬录中,⽂件命名为“shampoo-sales.csv”
数据集可以使⽤⾃定义的解析器加载,如下所⽰:
运⾏⽰例加载数据集,并创建⼀个图。
洗发⽔销售数据集图
差分法去趋势
时间序列去趋势最简单的⽅法就是差分。
具体⽽⾔,在等时间步长的基础上,计算前⼀观察点和观察点之差构造出新的序列。
value(t) = observation(t) - observation(t-1)
这可以从时间序列中去除趋势。
我们可以在Python中直接实现,创建⼀个差分数据集。
下⾯是洗发⽔销售数据集差分去趋势的例⼦。
运⾏本⽰例创建新的去趋势数据集,然后绘制时间序列。
因为第⼀个观察点没有差值可以创建(没有可以提取的),新的数据集会少⼀条记录。我们可以看到趋势的确已经被消除。
洗发⽔销售数据集差分去趋势
这种⽅法⾮常适合于线性趋势的数据。如果趋势是⼆次的(趋势的变化也同样增加或减少),然后已经差分数据集也可以采取差分,第⼆个层次的差分。如果需要的话,此过程可以进⼀步重复。
因为差分只要求当前时间的前⼀刻的数据,它可以很容易地应⽤于预处理看不见输出的样本数据或为监督式学习提供额外的输⼊。
接下来,我们将⽤拟合模型来描述趋势。
拟合模型去趋势
趋势通常可视化为⼀条直线穿过。
线性趋势可以⽤线性模型总结,⾮线性趋势可以⽤多项式或其它曲线拟合⽅法概括。
由于确定趋势的主观和特定域的性质,这种⽅法有助于确定是否存在趋势。即使将确定是超线性或指数的趋势拟合为线性模型也是有帮助的。
除了被⽤作趋势识别⼯具,这些适合的模型还可以⽤于时间序列去趋势。
例如,⼀个线性模型适⽤于时间指标预测。数据集如下所⽰︰
X,y
1,obs1
2,obs2
3,obs3
4,obs4
5,obs5
这个模型的预测将形成⼀条直线,可以作为该数据集的趋势线。这些预测也可以从原始时间序列中减去,以提供数据集的去趋势版本。value(t) = observation(t) - prediction(t)
模型的拟合残差是数据集的去趋势形式。也可以⽤多项式曲线拟合及其它⾮线性模型。
我们可以在Python中实现,使⽤scikit-learn 模型。
运⾏⽰例,符合线性模型,在原始数据集(蓝⾊)上绘制趋势线 (绿⾊)。
洗发⽔销售数据集趋势图
下⼀步,原始数据集减去这⼀趋势,然后绘制结果,结果为去趋势数据集。
除趋势的洗发⽔销售数据集模型
我们再次看到这种⽅法可以有效去除数据集的趋势。残差可能是⼀条抛物线,这表明,多项式拟合可能会有更好的效果。
因为趋势模型的输⼊是整数索引,它可⽤于新数据的去趋势,或为模型提供⼀个新的输⼊的变量。
进⼀步阅读
下⾯是趋势估计和时间序列去趋势的⼀些其他资料。
on Wikipedia
, GEOS 585A, Applied Time Series Analysis [PDF]
总结
在本教程中,你发现时间序列数据中的趋势以及如何利⽤Python消除趋势。
具体来说,你学到了:
时间序列中趋势信息的重要性,以及如何在机器学习中使⽤。
如何使⽤差分去除时间序列中的趋势。
如何建⽴线性趋势的模型以及去除时间序列中的趋势。
英⽂原⽂:machinelearningmastery/time-series-trends-in-python/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论