arima模型pqd确定_时间序列(三):python建⽴ARMA和
ARIMA模型
1. ARMA
ARMA与上期我们的AR模型有着相同的特征⽅程,该⽅程所有解的倒数称为该模型的特征根,如果所有的特征根的模都⼩于1,则该
ARMA模型的应⽤对象应该为平稳序列! 我们下⾯的步骤都是建⽴在假设原序列平稳的条件下的。
ARMA模型是平稳的。ARMA模型的应⽤对象应该为平稳序列!
2. 单位根检验(Dickey-Fuller test)
from statsmodels.tsa.stattools import adfuller
temp = np.array(data)
t = adfuller(temp)  # ADF检验成都国际赛车场
output=pd.DataFrame(index=['Test Statistic Value', "p-value", "Lags Used", "Number of Observations Used","Critical Value(1%)","Critical Value(5%)","Critical Valu output['value']['Test Statistic Value'] = t[0]
output['value']['p-value'] = t[1]
output['value']['Lags Used'] = t[2]
output['value']['Number of Observations Used'] = t[3]
output['value']['Critical Value(1%)'] = t[4]['1%']
output['value']['Critical Value(5%)'] = t[4]['5%']
output['value']['Critical Value(10%)'] = t[4]['10%']
output
p-value较⾼,序列具有单位根,即⾮平稳。
3. ARMA(p,q)模型阶次
1) 我们通过观察PACF和ACF截尾,分别判断p、q的值。
# ACF and PACF
from statsmodels.tsa.stattools import acf, pacf,plot_acf, plot_pacf
lag_acf = acf(data, nlags=20)
lag_pacf = pacf(data, nlags=20, method='ols')
fig, axes = plt.subplots(1,2, figsize=(20,5))
plot_acf(ts, lags=100, ax=axes[0])
plot_pacf(ts, lags=100, ax=axes[1])
plt.show()
2) 信息准则定阶
我们常⽤的是AIC准则,AIC⿎励数据拟合的优良性但是尽量避免出现过度拟合(Overfitting)的情况。所以优先考虑的模型应是AIC值最⼩的那⼀个模型。
T是样本容量,似然函数最⼤值是at的⽅差,参数个数为惩罚
# 为了控制计算量,我们限制AR最⼤阶不超过6,MA最⼤阶不超过4。
sm.tsa.arma_order_select_ic(data,max_ar=6,max_ma=4,ic='aic')['aic_min_order']  # AIC达州长途汽车站
两种定阶的⽅法结果不⼀定⼀致,⼀般采⽤第⼀种,也可通过模型的效果进⾏取舍。
4. ARMA建模及预测
五菱宏光新能源汽车2022款价格定阶(order)之后就能构建ARMA模型了。
# 模型阶次(3,3)来建⽴ARMA模型,最后10个数据⽤于预测。
from statsmodels.tsa import ARMA
order = (3,3)
train = data[:-10]
test = data[-10:]
tempModel = ARMA(train,order).fit()
中华4s店拟合优度AdjR^2
delta = tempModel.fittedvalues - train # 残差
score = 1 - delta.var()/train.var()
# 它的值在0-1之间,越接近1,拟合效果越好
玛莎拉蒂醉驾女司机被判2个月预测最后10个数据并与实际值⽐较
predicts = tempModel.predict(371, 380, dynamic=True)
print len(predicts)
comp = pd.DataFrame()
comp['original'] = test
comp['predict'] = predicts
comp.plot()
5. ARIAM
如果序列是⾮平稳的,就可以考虑使⽤ARIMA模型。
ARIMA⽐ARMA仅多了个"I",代表着其⽐ARMA多⼀层内涵:也就是差分。
通过考虑时间序列相邻两个值得变化量所构成的序列,把⼀个⾮平稳序列变成平稳序列,即差分的思想。称 Ct = Yt - Yt-1,为 Yt 的⼀阶差分序列。
⼀个⾮平稳序列经过d次差分后,可以转化为平稳时间序列。d具体的取值,我们得分被对差分1次后的序列进⾏平稳性检验,若果是⾮平稳的,则继续差分。直到d次后检验为平稳序列(⼀般⼀两次即可)。
ARIMA(p,d,q)模型阶次确定
帝豪ec718rv
经过上个步骤已经确定d值,p和q值可以按照ARMA模式⽤⾃相关和偏相关函数求,或⽤信息准则AIC确定。
ARIMA模型建⽴及预测
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data, order=(2,1,2)).fit()  # ARIMA = (2,1,2)
拟合优度
delta = model.fittedvalues - train
score = 1 - delta.var()/train[1:].var()
预测
start_index = datetime(1944, 6, 25)
end_index = datetime(1945, 5, 31)
forecast = model_fit.predict(start=start_index, end=end_index)
参考:
优矿