我有一些时间序列数据,其中包含一些季节性趋势,我想使用ARIMA模型来预测这个系列在未来的行为。
为了预测我的感兴趣的变量(`log_var`)的行为,我已经取得了周、月和年度差异,然后将其作为输入到ARIMA模型中。
下面是一个例子。
我正在为几个不同的数据源进行此操作,在所有数据源中,我都看到了很好的结果,也就是说,如果我在训练数据上将
然而,我想要检查一下预测结果是什么样子的,为了做到这一点,我重新定义
我的方法在某些数据源上表现良好(即我将预测值与已知值进行比较,趋势看起来合理),但在其他数据源上表现不佳,尽管它们都是相同类型的数据,只是来自不同的地理位置。在某些地方,它完全无法捕捉到在每年的同一日期在训练数据中反复出现的明显季节性趋势。ARIMA模型总是很好地拟合训练数据,只是在某些情况下预测结果完全没有用。
现在我在思考我是否正在按照正确的程序来预测ARIMA模型的值。我的方法基本上是:
这是使用ARIMA进行预测的正确方法吗?
如果是,那么在某些数据集中预测看起来非常好,而在另一些数据集中却很糟糕,即使ARIMA模型在两种情况下都能很好地拟合训练数据,我是否有办法尝试理解原因?
为了预测我的感兴趣的变量(`log_var`)的行为,我已经取得了周、月和年度差异,然后将其作为输入到ARIMA模型中。
下面是一个例子。
exog = np.column_stack([df_arima['log_var_diff_wk'],
df_arima['log_var_diff_mth'],
df_arima['log_var_diff_yr']])
model = ARIMA(df_arima['log_var'], exog = exog, order=(1,0,1))
results_ARIMA = model.fit()
我正在为几个不同的数据源进行此操作,在所有数据源中,我都看到了很好的结果,也就是说,如果我在训练数据上将
log_var
与results_ARIMA.fittedvalues
绘制出来,它们非常匹配(我为每个数据源单独调整p和q,但d总是为0,因为我已经自己进行了差分)。然而,我想要检查一下预测结果是什么样子的,为了做到这一点,我重新定义
exog
为“测试”数据集。例如,如果我在2014年1月1日至2016年1月1日期间对原始ARIMA模型进行训练,则“测试”集只需从2016年1月1日开始即可。我的方法在某些数据源上表现良好(即我将预测值与已知值进行比较,趋势看起来合理),但在其他数据源上表现不佳,尽管它们都是相同类型的数据,只是来自不同的地理位置。在某些地方,它完全无法捕捉到在每年的同一日期在训练数据中反复出现的明显季节性趋势。ARIMA模型总是很好地拟合训练数据,只是在某些情况下预测结果完全没有用。
现在我在思考我是否正在按照正确的程序来预测ARIMA模型的值。我的方法基本上是:
exog = np.column_stack([df_arima_predict['log_val_diff_wk'],
df_arima_predict['log_val_diff_mth'],
df_arima_predict['log_val_diff_yr']])
arima_predict = results_ARIMA.predict(start=training_cut_date, end = '2017-01-01', dynamic = False, exog = exog)
这是使用ARIMA进行预测的正确方法吗?
如果是,那么在某些数据集中预测看起来非常好,而在另一些数据集中却很糟糕,即使ARIMA模型在两种情况下都能很好地拟合训练数据,我是否有办法尝试理解原因?