回顾︱时间序列预测与分解有哪些模型?(一)

更新时间:2023-05-05 11:59:48 阅读: 评论:0

回顾︱时间序列预测与分解有哪些模型?(⼀)本节简单回归⼀下时间序列任务的⼏种⽅向以及有哪些⽐较优秀的开源算法。
1 时序预测
时序预测从不同⾓度看有不同分类。从实现原理的⾓度,可以分为传统统计学、机器学习(⼜分⾮深度学习和深度学习)。
按预测步长区分,
可以分为单步预测和多步预测,简单来说就是⼀次预测未来⼀个时间单元还是⼀次预测未来多个时间单元的区别。
按输⼊变量区分,
可以分为⾃回归预测和使⽤协变量进⾏预测,区别在于维度中是否含有协变量,例如预测未来销售量时,如果只接受时间和历史销售量数据,则是⾃回归预测,如果可以接受天⽓、经济指数、政策事件分类等其他相关变量(称为协变量),则称为使⽤协变量进⾏预测。
按输出结果区分,
可以分为点预测和概率预测,很多模型只提供了点预测⽽不提供概率预测,点预测模型后再加蒙特卡洛模拟(或其他转化为概率预测的⽅式)往往不能准确反映模型输出的预测概念,⽽在⼤多数场景下,概率预测更贴近事实情况,对于未来的预测本⾝就应该是⼀种概率分布。
按⽬标个数区分,
可以分为⼀元、多元、多重时间序列预测。举例理解,使⽤历史的销售量预测未来1天的销售量为⼀元时间序列预测,使⽤历史的进店⼈数、销售量、退货量预测未来1天的进店⼈数、销售量、退货量(预测⽬标有三个)为多元时间序列预测,使⽤历史的红烧⽜⾁⾯、酸菜⽜⾁⾯、海鲜⾯的销售量预测未来1天的红烧⽜⾁⾯、酸菜⽜⾁⾯、海鲜⾯的销售量(预测⽬标有三种)为多重时间序列预测。
这些分类是不同⾓度下的分类,同⼀种算法往往只能是分类中的⼀种,例如传统的统计学算法只适合做⾃回归预测⽽不适合协变量预测。
图2 时序预测分类对应关系
2 时间序列分解
时间序列由 趋势,季节性和周期性以及剩余的其它部分组成(例如重⼤事件等),只不过不同的时间序列其占⽐不同,⽐如随机波动可能完全是由残差构成的;
当我们将时间序列分解为不同的components时,通常将趋势和周期组合为单个成为趋势周期的components(有时为简单起见也称为趋势)。
因此,我们认为时间序列包含三个部分:趋势周期部分,季节性部分和其它部分(包含时间序列中的任何其他内容)。
⼀般来说,做事件序列分解有两种⽅式,加性和乘性:
yt=St+Tt+Rt 加性
yt=St×Tt×Rt 乘性
S代表了ason 季节,t代表了trend 趋势,r代表了residual 其它难以分解⽆规律的部分
如果季节性波动的幅度或趋势性的强弱不随着时间的推移⽽发⽣变化则使⽤加法分解⽐较合适,如果
季节性波动的幅度或者趋势性的强弱随着时间推移⽽发⽣变化(⽐如销量增长越来越快,销量增长曲线的斜率越来越⼤)则使⽤乘法分解⽐较合适,乘法分解的⽅式在经济学序列中很常见。
时序分解库⼆:facebook-Prophet
之前笔者博客有记载过:
R+python︱Facebook⼤规模时序预测『真』神器——Prophet(遍地代码图)
3 分解 + 预测结合
参考:时间序列分解之⼀
分解+预测联合来做,sktime有实现⼀部分这样的功能,不过sktime并没有进⾏时间序列分解,⽽是⽤多项式回归来提取趋势性数据的部分,因为对于gbdt来说,消除趋势就可以了,周期其实不需要消除,周期本⾝是循环的,分布是稳定的,就好像这样:
我们可以把上⾯的数据理解为去除趋势之后的剩下的ason+residual的部分,那么接下来⽤gbdt就可以了。
趋势性的预测
如果有LR来做,会⽐较受异常点的影响,这⼀点对于电商销量来说是很致命的,因为双⼗⼀的销量就是⼀个异常点,根据m的损失函数,异常样本会不断的被模型训练学习,难以收敛,同时导致了整个拟合平⾯的偏移,泛化性能会变得很差:
⽐如说上图,去掉异常样本之后,lr能够较好的拟合,如果加⼊了异常样本,则lr最终拟合出来的平⾯就是绿线这个⿁样⼦压根没法⽤,泛化性能很差,误差很⼤
其他部分的预测:
从gbdt切⼊⽐较好理解,gbdt外推能⼒差对于趋势性强的时间序列数据的拟合能⼒⽐较差,通过时间序列分解之后去除了趋势性的部分,那么剩下的季节性+residual的部分,也就是简单的⽅法没法拟合的部分,⽤gbdt这样复杂的模型来拟合就⽐较合适了。
⼏个算法库:
3.1 sktime
Sktime是⼀个使⽤时间序列进⾏机器学习的开源Python⼯具箱。这是⼀个由英国经济与社会研究理事会、消费者数据研究中⼼和艾伦·图灵研究所资助的社区驱动的基⾦项⽬。
Currently, sktime provides:
State-of-the-art algorithms for time ries classification and regression, ported from the Java-bad tsml toolkit, as well as forecasting,
Transformers, including single-ries transformations (e.g. detrending or deasonalization) and ries-as-features transformations (e.g. feature extractors), as well as tools to compo different transformers,
Pipelining,
Tuning,
Enmbling, such as a fully customisable random forest for time-ries classification and regression, as well as
enmbling for multivariate problems,
from sktime.forecasting.all import *
y = load_airline()
y_train, y_test = temporal_train_test_split(y)
fh = ForecastingHorizon(y_test.index, is_relative=Fal)
forecaster = ThetaForecaster(sp=12)  # monthly asonal periodicityforecaster.fit(y_train)
y_pred = forecaster.predict(fh)
smape_loss(y_test, y_pred)
>>> 0.08661468139978168
3.2 tslearn
专⽤于时间序列数据的机器学习Python⼯具包
>>> from tslearn.utils import to_time_ries_datat>>> my_first_time_ries = [1, 3, 4, 2]
>>> my_cond_time_ries = [1, 2, 4, 2]
>>> my_third_time_ries = [1, 2, 4, 2, 2]
>>> X = to_time_ries_datat([my_first_time_ries,
my_cond_time_ries,
my_third_time_ries])
>>> y = [0, 1, 1]
4 ⼀些深度学习时序库
4.1 AWS的DeepAR

本文发布于:2023-05-05 11:59:48,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/857594.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:预测   时间   序列
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图