【全国硕士研究生报名人数Python时间序列分析:ARIMA代码】 | 您所在的位置:网站首页 › 报名人数考研怎么查询 › 【全国硕士研究生报名人数Python时间序列分析:ARIMA代码】 |
背景 十九大报告,对教育方面做出了详细说明。近年来,随着研究生招生规模的逐渐扩大,报名参加硕士研究生考试的人数也逐年增加。大多数关于研究生的文章是以研究生的现状、研究生的教育、研究生的就业等方面为主题。就目前新闻热点而言,全国硕士研究生报名人数的增长问题也是一热门话题。报考人数与录取人数也存在着极大差异。 针对近年来,全国各地硕士研究生报名人数稳增不减的情况,利用python以及时间序列相关分析,结合近20年的全国硕士研究生报名人数数据采用ARIMA建立模型进行分析研究。根据实验寻找恰当的ARIMA模型并对未来三年全国硕士研究生报名人数进行预测。 一、数据理解 1、数据来源本问研究数据资料来源于考研帮以及中研招生信息网,使用的数据资料包括1995—2018年全国硕士研究生报名人数。 2、数据导入 data = [15.50,20.40,24.20,27.40,31.9,39.2,46,62.4,79.7,94.5,117.2,127.12,128.2,120,124.6,140.6,151.1,165.6,176,172,164,177,201,238] time=pd.Series(data,#生成时间序列 index=pd.date_range(start = '1995',periods=24,freq='A')) 数据展示![]() 1、时序图 根据上面的信息,运用python语言中的matplotlib库,绘制全国硕士研究生随时间的趋势图。 time.plot(figsize=(6,4),color='r', label='人数 = F(年份)') plt.xlabel('年份') # xlabel 方法指定 x 轴显示的名字 plt.ylabel('人数/万人') # ylabel 方法指定 y 轴显示的名字 plt.legend() # legend 是在图区显示label,即上面 .plot()方法中label参数的值 plt.title('1995—2018年全国硕士研究生报名人数时间序列图') plt.show()
由图1可以得出,1995-2022年全国硕士研究生报名人数总体上呈上升趋势,由1995年的15.5万人上升到2022年的457万人,年平均增长率为15.77%。所以它有很大可能不是平稳序列。 2、自相关图 根据上面的信息,运用python语言中的绘图程序,绘制全国硕士研究生报名人数时间序列的自相关图。 plot_acf(time).show
从上图可以看出,在5阶后才落入区间内,并且自相关系数长期大于0,显示出很强的自相关性。 3、ADF单位根检验 print(adfuller(time))
4、总结 从上面三种检验中可以发现,该序列一定为非平稳序列。 差分后的平稳性检验 差分运算为了将非平稳时间序列转化为平稳序列,我们需要对该序列做差分运算。差分运算就是后一时间点减去当前时间如y(t)-y(t-1),用D表示,定义为Dy(t)=y(t) - yt - 1。 那么k阶差分可表示为:y(t)-y(t-k)=D(k)*y(t)=(1-L^k)*y(t)=y(t)-(L^k)*y(t),L为滞后算子,定义为L*y(t)=y(t-1),则k阶之后算子定 义为(L^k)*y(t)= y(t-k)。 进行差分遵循从小到大这一特点,故现对该时间序列进行 1阶差分运算,得出如下图所示的趋势图。 #做一阶差分 def differ1(price): price_diff = price.diff() price_diff = price_diff.dropna() plt.figure(figsize=(6, 4)) plt.plot(price_diff) return price_diff day_diff = differ1(time)#一阶差分 plt.title('一阶差分') plt.show()图3 全国硕士研究生报名人数1阶差分时间序列图 上图显示,1阶差分处理后的数据增减趋势较为平稳,但是依据数据最优化及准确性原则,需要对1阶差分后的时间序列再做一次差分运算。 故现对该序列进行2阶差分运算。 day_diff = differ1(day_diff)#二阶差分 plt.title('二阶差分') plt.show()图4 全国硕士研究生报名人数2阶差分时间序列图 在理论上,足够多的差分运算可以充分提取原时间序列中的非平稳确定性信息。但进行差分运算需要注意的是,差分运算的阶数不是越多越好。差分是对信息的提取、加工的过程,每次差分都会有信息的损失,所以差分的阶数需要适当,以免过度差分。差分后的时间序列是否平稳,可以通过对差分后的时间序列进行单位根检验以此来判断差分的阶数是否最优。 #再次进行ADF检验 print(adfuller(day_diff1)) print(adfuller(day_diff2))
以上是对差分阶数d的选择,而在ARIMA模型中参数p与 q也需要进行选择。时间序列的自相关系数(ACF)与偏自相关系数(PACF)可以判断参数p与q。 对平稳后的时间序列,即对1阶与2阶差分处理后的时间序列绘制自相关图与偏自相关图。 ①1阶差分后的时间序列: #一阶差分后的自相关图和偏自相关图 flg1 = plt.figure() acf1 = flg1.add_subplot(1,2,1) pacf1 = flg1.add_subplot(1,2,2) plot_acf(day_diff1,lags=22,ax = acf1) plt.title('一阶差分后自相关图') plot_acf(day_diff1,lags=22,ax = pacf1) plt.title('一阶差分后偏自相关图') plt.show()
一阶差分后的自相关图显示滞自相关值基本没有超过边界值,虽然1阶与3阶自相关值超出边界,那么很可能属于偶然出现的,而自相关值在其他上都没有超出显著边界。偏自相关图显示除去1阶基本上也没有超过边界值。可以考虑p=2,q= 0,即ARIMA(2,1,0)模型。. ②2阶差分后的时间序列: #二阶差分后的自相关图和偏自相关图 flg2 = plt.figure() acf2 = flg2.add_subplot(1,2,1) pacf2 = flg2.add_subplot(1,2,2) plot_acf(day_diff1,lags=22,ax = acf2) plt.title('二阶差分后自相关图') plot_acf(day_diff1,lags=22,ax = pacf2) plt.title('二阶差分后偏自相关图') plt.show()图6 d=2下的自相关与偏自相关图 二阶差分后的自相关图与偏自相关图显示没有超过边界值。 总结: 由上面的检验可知,该序列可以算是平稳序列了。 模型选择与参数估计此时选择ARIMA(p,d,q)模型进行预测时,参数根据0, 1,2从低阶到高阶选择,根据AIC准则作为选择最优值模型。 arma_mod120 = sm.tsa.ARIMA(time,order = (1,2,0)).fit() print(arma_mod120.aic)
将上面的信息整理成下表: 模型 aic ARIMA(1,2,0) 162.25302291755247 ARIMA(1,2,1) 162.68977473937656 ARIMA(2,2,0) 163.44292392417188 ARIMA(2,2,1) 161.5282670619417 根据比较发现模型ARIMA(2,2,1)的AIC=161.53最小,则此模型最好。 白噪声检验 print(acorr_ljungbox(arma_mod221.resid, lags = 5,boxpierce=True))返回值: lb_stat:测试的统计量 pvalue:基于卡方分布的p统计量 bp_stat:基于 Box-Pierce 的检验的p统计量 bp_pvalue: 基于卡方分布下的Box-Pierce检验的p统计量[1] 对残差序列进行白噪声检验,得出P值=0.9439> 0.05,残差序列白噪声检验说明模型显著成立。ARIMA(2,2,1) 模型对该时间序列拟合成功。 三、模型预测运用上述得到的 ARIMA(2,2,1)模型对全国硕士研究生报名人数并给出预测表和预测图如下。 2019-2021年全国硕士研究生报名人数预测值(万) 年份 预测值 2019 265.796811 2020 277.979823 2021 280.468011 图7 2019-2021年全国硕士研究生报名人数预测图 从上图中可以看出,对于2019年报名人数的预测266万相比前一年只增加了 28万人,而2018年与2017年相差37万,二者相比可能存在不足。增长的速度有所下降。 本篇内容参考:arima模型_时间序列分析(R)‖ARIMA模型预测实例 |
CopyRight 2018-2019 实验室设备网 版权所有 |