分享
目前的时间序列预测的state of the art 方法?
注意,是时间序列的预测问题(特别是只预测一个y值)。实际问题场景如下描述:首先是时间轴,共5个月,每天中的每个时间段(24个)的y值,然后预测第六个月(或只是第六个月第一周)的每天的24个时间段的y值。这里的y值是类似于某一公园的总客流量这样的变量。因此y值受当天天气、节假日等因素的影响。关于预测方法,我查过之后,得知主要有三类方法:1,线性回归之类的,这类方法我比较熟悉,可以将上述(天气、节假日)的因素提取特征加进去;2,ARIMA类的经典时间序列方法;3,RNN和LSTM等机器学习方法。只是我对2和3了解很少,不知道如何将上述(天气、节假日)的因素提取特征加进去?所以,1:目前这类问题最好的方法是哪一类?2:如果使用LSTM或RNN,有办法将上述(天气、节假日)的因素提取特征加进去训练吗?——LZ是机器学习小白。
回复 ( 4 )
数据量不够的时候别想着用神经网络,lstm什么的,那得是大数据。
我简单讲下2.加入节假日等时间因素的一个处理方法吧。把天气、节日做成连续变量或者0-1变量,做线性回归,用残差做状态空间模型(可以理解为超级版的ARIMA),R里{forecast}包中有个tbats函数,有心的话可以看下这个函数的帮助文档和论文。这样的思路可以用于处理节假日,天气,多周期,不平稳,各种类似的时序问题。
最近在弄类似的东西,一些感想如下。
本质上讲,可利用的无非是序列的历史信息和关于预测内容的跨域信息。
只考虑历史信息的话,基于回归的方法(ARMA不妨大概认为是一种多元线性回归)基本也就做到头了。这个方法可以提供一个群体的发展趋势,但对于个体的差异带来的预测结果和观察值的波动很难处理。
此时加进去一些跨域特征,使得对不同类型、变化趋势的个体得以区分,从而希望可以再提高一下性能。这大概是使用RNN之类方法的原因。
所以我觉得先不提方法,了解要分析的数据是更重要的。也就是找到有区分度的信息在哪里。然后再选择使用什么方法,能够“放大”这些区分度,从而使用不同的模式刻画变化,进行预测。
不可能期望某一个方法如同一个黑盒子,把所有能取得的信息全扔进去,然后它就能自动的给出预测结果。当然,如果真的有这种东西,请务必告诉我。。。
回答问题
1. no free lunch原理,没有通用的对每个问题都最优的算法。具体问题具体分析。
但几乎可以肯定的说,机器学习方法无论在准确率、通用性、适应性都远远超过传统的统计分析方法。比如arIMa其实就可以用线性的机器学习模型学到,但是arIMa学不了机器学习的非线性预测能力、抽象能力或者集成学习能力。
2.当然可以。首先我要说,机器学习算法不止rnn和lstm这两个神经网络算法,还可以设定滑动时间窗口的特征,然后用任何一种回归算法(线性回归、岭回归、贝叶斯方法、决策树、支持向量机、ann、以及各类集成学习算法如rf,xgb)都能做回归分析。
具体上述哪个机器学习回归算法好,这是取决于你的数据集,这还是回到我说的第一个点,具体问题要具体分析,实践是检验算法的唯一标准。多用几个模型,多尝试,算cv的准确率。
新手的话,对于Python的sklearn,有个基础的表可以看看(但是记住这些都不包括集成算法如rf和gbrt xgb )
另外,刚才提到的滑动时间窗口特征也好理解。定一个窗口大小n,那么第t个时间的预测,模型所使用特征用t-1. t-2一直到t-n,这个n你自己定就好。注意一点,在这个窗口里的y即历史上的因变量(标签)记录,也是要用到第t个时间的预测里的。