赞
踩
本文使用Python语言编写ARIMA算法,实现对2023年mba考研国家线进行预测。
ARIMA可以实现对单变量时间序列数据的预测,适合对小样本数据(n<30)进行短期预测,是基于统计学的原理。本文不关心具体的数学逻辑,只研究怎么实现。
df = pd.read_excel('mba分数线.xlsx', usecols = [0,1]) # 读取excel的前两列,分别是年份和对应的分数线
df = df.sort_values('年份') # 按年份对数据进行排序,从小到大排
df = df.set_index(['年份']) # 将年份设置成索引列
df #显示df结果,df = dataframe,一种数据格式,可以认为是一个表格
结果:
d0 = df
d1 = d0.diff(1)
d2 = d1.diff(1)
d3 = d2.diff(1)
print('\n原始数据平稳性检验:\n',ADF(d0.dropna()))
print('\n一阶差分平稳性检验:\n',ADF(d1.dropna()))
print('\n原始数据白噪声检验:\n',acorr_ljungbox(d0.dropna(),lags = 5))
print('\n一阶差分白噪声检验:\n',acorr_ljungbox(d1.dropna(),lags = 5))
'''计算(p,q)参数'''
d = d1 # 因为是1阶差分稳定,所在在这里是一阶差分数据源
trend_evaluate = sm.tsa.arma_order_select_ic(d, ic=['aic', 'bic','hqic'], trend='n', max_ar=4, max_ma=2) # 计算AIC
print('trend AIC', trend_evaluate.aic_min_order)
print('trend BIC', trend_evaluate.bic_min_order)
print('trend HQIC', trend_evaluate.hqic_min_order)
trend AIC (4, 0)
trend BIC (4, 0)
trend HQIC (4, 0)
4.对ARIMA(4,1,0)进行检验,判断模型是否可用
# 带入模型
order=(0,1,1)
model = ARIMA(d0, order=order).fit()
resid=model.resid # 残差检验
model.plot_diagnostics()
plt.show()
print('D-W检验的结果为:',sm.stats.durbin_watson(resid.values)) # DW检验
print('残差序列的白噪声检验结果为:\n',acorr_ljungbox(resid)) # LB检验
结果:
查看参看检验图,KDE曲线与N(0,1)曲线近似重合,QQ图散点近似在一条直线上,模型拟合结果较好。
forecast = model.forecast(3, index = [2023,2024,2025], dynamic=True)
print('分数线:')
forecast
结果:
2022年度分数线为170,经计算2023年的分数线为177分。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。