基于ARIMA的考研国家线预测 使用Python语言

基于ARIMA的考研国家线预测 使用Python语言

本文使用Python语言编写ARIMA算法,实现对2023年mba考研国家线进行预测。

ARIMA简介

ARIMA可以实现对单变量时间序列数据的预测,适合对小样本数据(n<30)进行短期预测,是基于统计学的原理。本文不关心具体的数学逻辑,只研究怎么实现。

ARIMA建模流程

  1. 加载数据,并对数据进行平稳性与白噪声检验,通过则计算模型参数d,并进行下一步,
  2. 使用AIC准则计算模型参数p,q,再进行下一步。
  3. 对ARIMA(p,d,q)进行残差检验,检验通过则进行下一步。
  4. 对未来进行预测。

程序流程

  1. 获取数据,搜寻2012年到2022年10年mba国家线数据,放到一个excel中,进行备用,之后用python进行读取。
	df = pd.read_excel('mba分数线.xlsx', usecols = [0,1]) # 读取excel的前两列,分别是年份和对应的分数线
	df = df.sort_values('年份') # 按年份对数据进行排序,从小到大排
	df = df.set_index(['年份']) # 将年份设置成索引列
	df #显示df结果,df = dataframe,一种数据格式,可以认为是一个表格

结果:
基于ARIMA的考研国家线预测 使用Python语言_第1张图片

  1. 对数据进行平稳性白噪声检验:
    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))
    
    结果:
    基于ARIMA的考研国家线预测 使用Python语言_第2张图片
    在这里的查看方式是查看平稳性检验P-value的值与白噪声检验lb_pvalue的值,存在都小于0.05就算通过检验,所以在本文就是1阶差分平稳,ARIMA(p,d,q)的参数d = 1。
  2. 确定参数(p,q)
    可以使用AIC准则与BIC准则确定(p,q),其中AIC适合小样本数据。
    '''计算(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)
    
    在这里我门使用AIC的结果,因此(p,q)= (4,0)加上上面算的参数d = 1,因此ARIMA的参数(p,d,q)为(4,1,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检验

结果:

基于ARIMA的考研国家线预测 使用Python语言_第3张图片
查看参看检验图,KDE曲线与N(0,1)曲线近似重合,QQ图散点近似在一条直线上,模型拟合结果较好。

  1. 结果预测
    forecast = model.forecast(3, index = [2023,2024,2025], dynamic=True)
    print('分数线:')
    forecast
    

结果:
基于ARIMA的考研国家线预测 使用Python语言_第4张图片
2022年度分数线为170,经计算2023年的分数线为177分。

你可能感兴趣的:(python,考研,开发语言)