使用傅立叶分析进行时间序列预测

BBD*_*Sys 35 python math matlab

对于已知具有季节性或日常模式的数据,我希望使用傅立叶分析来进行预测.在运行时间序列数据fft后,我获得系数.如何使用这些系数进行预测?

我相信FFT假设它接收的所有数据构成一个周期,那么,如果我只是使用ifft重新生成数据,我也在重新生成我的函数的延续,那么我可以将这些值用于未来的值吗?

简单地说:我运行fft为t = 0,1,2,.. 10然后在coef上使用ifft,我可以使用重新生成的时间序列为t = 11,12,... 20?

tar*_*nov 40

我知道这个问题对你来说可能不再适用,但对于寻找答案的其他人,我在Python中写了一个非常简单的傅里叶外推的例子https://gist.github.com/tartakynov/83f3cd8f44208a1856ce

在运行脚本之前,请确保已安装所有依赖项(numpy,matplotlib).随意尝试一下. 在此输入图像描述 PS局部静止小波可能比傅立叶外推更好.LSW通常用于预测时间序列.傅立叶外推的主要缺点是它只是用周期N重复你的系列,其中N是你的时间序列的长度.

  • 这个良好的视觉示例展示了其他帖子中指出的弱点:频域,就其性质而言,在时域中产生固定周期.上面的红线外推是简单的蓝色(观察)线的起始段的副本,虽然略微降低了噪音.因此,要对水平*h*时间单位进行任何有意义的短期预测,其中*h*«历史观测的数量,在外推中只应使用最重要的**高频率系数."高"频率阈值可以相对于*h*任意定义. (8认同)

Ste*_*joa 23

听起来你想要一个外推去噪的组合.

您说您想要在多个时段重复观察到的数据.那么,只需重复观察到的数据.无需傅立叶分析.

但你也想找到"模式".我认为这意味着在观察到的数据中找到主要频率成分.然后是,采用傅立叶变换,保留最大系数,并消除其余系数.

X = scipy.fft(x)
Y = scipy.zeros(len(X))
Y[important frequencies] = X[important frequencies]
Run Code Online (Sandbox Code Playgroud)

至于周期性重复:设z = [x, x],即两个信号周期x.然后Z[2k] = X[k]对于k{0,1,...,N-1}中的所有,否则为零.

Z = scipy.zeros(2*len(X))
Z[::2] = X
Run Code Online (Sandbox Code Playgroud)


duf*_*ymo 8

在时间序列数据上运行FFT时,会将其转换为频域.系数乘以系列中的项(正弦和余弦或复指数),每个都具有不同的频率.

外推总是一件危险的事情,但欢迎你试试.当你这样做的时候,你正在使用过去的信息来预测未来:"通过今天的预测来预测明天的天气." 请注意风险.

我建议阅读"黑天鹅".

  • 我读过黑天鹅.我不是在谈论股票价格.让我们说..收获数据,这是非常季节性的,或着名的太阳黑子数据.所以我说的是可以预测的事情. (2认同)
  • +1.外推是危险的,是的.通常,人们会制作模型,并假设未来的行为就像模型所说的那样.模型取决于参数,这些参数是根据当前或过去的观察结果估算的 因此,您不"预测"任何东西,只适合模型. (2认同)
  • @Alexandra C:我说的是已知重复的数据. (2认同)