作者:缅追逐暗夜的流星 | 来源:互联网 | 2023-10-14 13:37
文章目录时序特点时序模型的前提时序模型的自相关图和偏自相关图时列模型训练&检验&预测模型评价时序特点一系列相同时间间隔的数据点只有一列数据,没有变量与变量之间的关系线
文章目录
- 时序特点
- 时序模型的前提
- 时序模型的自相关图和偏自相关图
- 时列模型训练&检验&预测
- 模型评价
时序特点
时序模型的前提
时序模型的自相关图和偏自相关图
时列模型训练&检验&预测
- 若原时序平稳,则直接使用
ARMA(p,q)
模型 - 若原时序不平稳,而通过作差分后平稳,则使用
ARIMA(p,d,q)
模型
-
寻找模型的最佳阶数(p,q):
最佳的 p,q:模型的 aic or bic 最小时。
from statsmodels.tsa.arima_model import ARMA, ARIMA
ts_train &#61; ts[ ts.index<&#61;&#39;2020-04-30&#39; ]
pmax, qmax &#61; 5, 5
Mid &#61; []
arma_pq &#61; None
for i in range(pmax&#43;1):for j in range(qmax&#43;1):arma_pq &#61; ARMA(ts_train, (i,j)).fit()Mid[&#39;({},{})&#39;.format(i,j)] &#61; [arma_pq.aic, arma_pq.bic]
p,q &#61; eval(sorted(Mid.items(), key &#61; lambda i:i[1])[0][0])
-
训练模型
arma &#61; ARMA(ts_train, (p,q)).fit()
-
模型检验
resid &#61; arma.resid
plot_acf(resid,lags&#61;40)
from statsmodels.stats.stattools import durbin_watson
durbin_watson(resid.values)
acorr_ljungbox( resid, lags&#61;1 )
-
模型预测
pred_in &#61; arma.predict(start&#61;&#39;20200101&#39;, end&#61;&#39;20200430&#39;)
ts_test_in &#61; ts[ (ts.index >&#61; &#39;2020-01-01&#39;)&(ts.index <&#61; &#39;2020-04-30&#39;) ] fig &#61; plt.figure(figsize&#61;(20,7))
ax1 &#61; fig.add_subplot(211)
ax1.plot(ts_test_in, label&#61;&#39;in-sample test&#39;)
ax1.plot(pred_in, label&#61;&#39;in-sample prediction&#39;)
plt.title(&#39;in-sample comparison&#39;)
plt.legend()
pred_out &#61; arma.predict(start&#61;len(ts_train)-30, end&#61;len(ts_train)&#43;30)
ts_test_out &#61; np.append( np.array(ts_train)[-30:], np.array(ts[ts.index>&#39;2020-04-30&#39;])[:30] )ax2 &#61; fig.add_subplot(212)
ax2.plot(ts_test_out, label&#61;&#39;out-sample test&#39;)
ax2.plot(pred_out, label&#61;&#39;out-sample prediction&#39;)
plt.title(&#39;out-sample comparison&#39;)
plt.legend()plt.show()
模型评价
1、模型在样本内的预测可以达到一个不错的效果。
2、但是&#xff0c;模型在样本外的预测是一个周期性的 sin 波形&#xff08;试了几种数据都一样&#xff0c;不知道怎么回事&#xff09;。
3、欢迎来评论&#xff01;