TimeSeries平稳性

时间:2018-08-05 11:11:44

标签: python statsmodels arima

我正在开发python程序,用于按日期对事件数进行时间序列预测。为了进行预测,我使用ARIMA模型。现在我有一些结果,但是预测值不是很好。 首先,我使时间序列固定。为此,我使用了以下方法:通过Dickey-Fuller检验(0,5)检查平稳性,然后使用Box-Cox变换,并再次检查ed Dickey-Fuller值(0,3)。然后我试图找到一阶差分法。我没有收到好的结果。 我的问题是如何处理非平稳时间序列。我应该使用哪种方法使其静止? orange - input time series, blue - first order difference

2 个答案:

答案 0 :(得分:1)

许多时间序列问题本质上都是困难的,即使不是无法学习的-尤其是如果要防止过度拟合并具有一定的预测能力。如果使用简单的模型效果不佳,那么使用更复杂的模型就不可能取得更好的进步。

您的第一步应该是合并外部数据源,并为您的预测任务提供理论模型。在那些信号强度更高的输入上训练模型比在原始数据上训练模型效果更好(如果该任务是可学的)。

答案 1 :(得分:0)

您可以在下面探索多种方法来处理时间序列的非平稳性: https://medium.com/analytics-vidhya/preprocessing-for-time-series-forecasting-3a331dbfb9c2?source=friends_link&sk=30aac82f09efbbe8f1b6549a8e367575

关键点(用于创建固定时间序列):

  • 自滞差 —可以看作是当前系列与该系列的滞后版本之间的区别。移位可以为1、2、3、4等。 。对于我们没有任何滞后版本的项目,请将其作为NULL。

    示例— 让数据框为“时间”,列的值为“温度”,并在日期建立索引。所以可以这样进行自我区分:

    Time[‘Temperature_Diff’]=Time[‘Temperature’]-Time[‘Temperature’].shift(1) 
    

    如果使用的滞后版本为1

    Time[‘Temperature_Diff’]=Time[‘Temperature’]-Time[‘Temperature’].shift(2)
    

    如果使用的滞后版本为2

  • 记录自我差异-可以视为当前系列与该系列的滞后版本之间的区别。但是,您可以仅对实际系列应用对数转换。

  • 使用 statsmodels.tsa.seasonal.seasonal_decompose ,它将为您提供三个组成部分-趋势,季节性和残差。取这些残差,这将是我们预测的固定时间序列。

P.S。-该博客文章由我撰写。