python简单实现一个ARIMA模型(模型构建、绘图、预测结果、评估)

废话少说,先上代码:

# ACF2
plot_acf(diff1)

# PACF
plot_pacf(diff1)

# MODEL
model = sm.tsa.ARIMA(dta, order=(4, 1, 2))
results = model.fit(disp=0)
print('The detail of the model:')
print(results.summary())

# predict
predict_sunspots = results.predict(start=1, end=367)
predict_sunspots_2 = results.forecast(100)
print('The result of the prediction, next 100 :')
print(predict_sunspots_2[0])

# draw predictions
fig, ax = plt.subplots(figsize=(8, 4))
ax = diff1.plot(ax=ax)
predict_sunspots.plot(ax=ax)


# Model evaluation
residuals = pd.DataFrame(results.resid)
fig, ax = plt.subplots(1, 2)
residuals.plot(title="Residuals", ax=ax[0])
residuals.plot(kind='kde', title='Density', ax=ax[1])
print(residuals)

s = pd.DataFrame(results.resid, columns=['value'])
u = s['value'].mean()  # calculate the average
print(u)
std = s['value'].std()  # calculate the standard deviation
print(std)

# show results
plt.show()

解释:

模型构建

首先对模型进行ACF和PACF检验。根据图像确定p,q

model = sm.tsa.ARIMA(dta, order=(4, 1, 2)) 这是模型的构造函数。dta为时间序列,三个参数分别是p,d,q

d是差分的次数。p,q需要通过ACF,PACF图像来确定

预测

这里有两种方法,用predict可以设置预测的区间范围,通过start,end参数设置。这里有个无敌需要注意的地方:你构建ARIMA模型所用的这个序列,必须是等间隔的,而且必须是str,datetime或int类型。

什么是等间隔呢?比如说:你的数据点是2021-02-09,2021-02-10,2021-02-13。这就是不等间隔的时间序列。这样是没办法通过start和end来设置参数的

那么,你有一个不等间隔的时间序列,该怎么解决预测的问题呢?

1.使用插值法,填充缺失的值,使其转化为等间隔

2.不用start和end参数

forecast(100)的含义就是预测之后的100条数据

模型评估

画一个标准差分布图,看它符合正态分布的程度

你可能感兴趣的:(python,python,时序模型)