当前位置:网站首页>【機器學習】基於多元時間序列對高考預測分析案例
【機器學習】基於多元時間序列對高考預測分析案例
2022-06-25 16:26:00 【風度78】
本文借助 ARIMA模型,通過對中國的往年高考錄取率進行建模和預測,並驗證和檢驗模型精度和可行性,來應用模型來估計未來的錄取率,進一步得出2030年中國高考錄取率的預測值。
本文系讀者投稿
作者簡介:理智,河北科技大學的大三學生,主攻深度學習。和大多數程序員一樣,他是個樂觀主義者,大量的時間都在調試代碼,在調試中滿懷希望,克服遇到的無數挫折。
01 數據來源
本文采用的數據來自世界銀行官網(https://data.worldbank.org.cn/)的中國宏觀經濟數據集,現行版本的數據集共 45行12列,提供自1959年至2021年中國大陸12個指標每年的比特置和數值。數據集格式采用國際通用慣例,每年的記錄包含數值記錄和比率記錄,記錄包含了時間(世界時)、人口(萬人)、金額(億美元)、比例等指標,數據集的結構如錶1所示,圖1畫出了中國1949至2021年間的5個指標關系密切程度的熱力圖。
錶 1 世界銀行數據列錶 (️滑動查看更多)| 出生年 | 高考年 | 新生兒人口(單比特:萬人) | 大學招生擴招政策,布爾變量,0錶示無,1錶示是 | 出生年GDP(億美元) | 高考年GDP(億美元) | 高考年GDP占世界比例(%) | 參加高考人數(單比特:萬人) | 高考錄取人數(單比特:萬人) | 高考錄取率 | 高等教育毛入學率 | 參加高考人數同比增長 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1959 | 1977 | 1635 | 0 | 550 | 1749.4 | 2.39 | 570 | 27 | 4.74 | 1.65 | NaN |
| 1960 | 1978 | 1402 | 0 | 597.2 | 1495.4 | 1.73 | 610 | 40.2 | 6.59 | 2.87 | 0.07 |
| 1961 | 1979 | 949 | 0 | 500.6 | 1782.8 | 2.23 | 468 | 28 | 5.98 | 2.95 | -0.233 |
| 1962 | 1980 | 2451 | 0 | 472.1 | 1911.5 | 2.12 | 333 | 28 | 8.41 | 1.14 | -0.288 |
| 1963 | 1981 | 2934 | 0 | 507.1 | 1958.7 | 1.67 | 259 | 28 | 10.81 | 0.95 | -0.222 |

02 統計分析
在1959年~2020年的61年間,新生兒數量有較大波動,1987年後新生兒數量呈單調遞减趨勢,且2016年後下降最為明顯。
年GDP方面,呈上昇趨勢,1993年後變化較為明顯。
整體上新生兒數量與出生年GDP無較為明顯的關系,但存在部分區間負相關關系(1987年後)。

高考錄取率與當年GDP如圖3。兩者均整體呈上昇趨勢,初步判斷兩者之間存在正相關關系。

高考參加人數及與之相關的情况:參加高考的人數逐年增加,但是參加高考的人數的年同比增長變化波動大,無明顯特征,如圖4。

觀察高等教育毛入學率及當年GDP全球占比可知如圖5。

毛入學率與全球GDP占比呈上昇趨勢,初步判斷兩者間存在正相關關系。
03 時間序列預測高考錄取率
在此處,我們應用ARIMA模型進行高考錄取率預測。這裏ARIMA模型可以點擊查看詳情終於把時間序列預測ARIMA模型講明白了。
在應用ARIMA模型時需要先對觀測序列進行平穩性以及白噪聲檢驗,只有平穩非白噪聲序列才具有觀測價值,詳細流程有:

3.1
目標數據的原始數據序列時序圖及自相關圖
import matplotlib.pyplot as plt
# 確定目標數據
tag = data['高考錄取率']
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf
fig = plt.figure(figsize=(12,4))
ax1 = fig.add_subplot(121)
tag.plot()
plt.title('Sequence diagram')
ax2 = fig.add_subplot(122)
plot_acf(tag,ax=ax2) # 自相關圖
plt.show()
觀察時序圖可知:
由於該序列有明顯的單調遞增趨勢,初步判斷其為非平穩序列,且自相關圖顯示自相關系數長期大於0,說明序列間有很强的長期相關性。
結合上述流程,需要先對該序列進行平穩性檢驗。
3.2 ADF檢驗(單比特根檢驗)
# 平穩性檢測
from statsmodels.tsa.stattools import adfuller as ADF
ADF(tag)(-0.5482617125015317,
0.882249553115714,
0,
44,
{'1%': -3.5885733964124715,
'5%': -2.929885661157025,
'10%': -2.6031845661157025},
203.98252176030874)觀察結果,P值為0.882249553115714,顯著大於0.05。
最終將該序列判斷為非平穩序列。
由於最終判斷該序列為非平穩序列,因此需要對其進行差分處理。
3.3 差分處理
tag_diff = tag.diff().dropna()
tag_diff.plot()
plt.title('First order sequence diagram')
plt.show()
從上圖可以看出,一階差分後的數據增减趨勢較為平穩。但是依據最優化及准確性原則,需要再進行二階差分處理。
## 二階
tag_diff2 = tag_diff.diff().dropna()
tag_diff2.plot()
plt.title('Second order sequence diagram')
plt.show()
理論上說,多階的差分可以更好的剔除序列中的不確定因素,
但是差分的同時也會使得原序列損失一定的數據,所以差分的階數應該適當。
在本文中,二階差分過後,序列趨勢較為平穩,接下來對二階差分後的序列進行自相關及偏自相關圖的繪制分析。
# 偏自相關
fig = plt.figure(figsize=(12,4))
ax1 = fig.add_subplot(121)
plot_acf(tag_diff,ax=ax1)
ax2 = fig.add_subplot(122)
plot_pacf(tag_diff,ax=ax2)
plt.show()
ADF(tag_diff2)(-7.7836768644929695,
8.2881029271227e-12,
1,
41,
{'1%': -3.60098336718852,
'5%': -2.9351348158036012,
'10%': -2.6059629803688282},
202.9415785772855)觀察兩圖結果,
結果顯示,二階差分之後序列的自相關圖有較强的短期相關性,且 ADF 檢驗中 p值為 8.2881029271227e-12,顯著小於0.05,所以二階差分後的序列是平穩序列。
結合流程圖,平穩性檢驗後進行白噪聲檢驗。對於白噪聲相關內容可參見:時間序列預測中如何檢測隨機遊走和白噪聲
3.4 白噪聲檢驗
檢驗結果如下
# 白噪聲檢驗
from statsmodels.stats.diagnostic import acorr_ljungbox
acorr_ljungbox(tag_diff2,lags=[6,12,24])(array([14.16785, 16.24145, 22.69118]),
array([0.02781, 0.18042, 0.53808]))lbvalue: QLB檢驗統計量
pvalue: QLB檢驗統計量下對應的P值此時查看P值,也就是第二行數據(各列分別為延遲6、12、24階時的檢驗結果):
當 lags=6 時,也就是延遲 6階時 P值為 0.02781636 < 0.05,此時可判斷該序列為非白噪聲序列,具有觀測價值。
3.5 應用ARIMA模型
from statsmodels.tsa.arima_model import ARIMA
# 一般階數不超過length/10
pmax = int(len(tag_diff)/10)
qmax = int(len(tag_diff)/10)
bic_matrix = []
for p in range(pmax+1):
tmp = []
for q in range(qmax+1):
try:
tmp.append(ARIMA(tag, (p,1,q)).fit().bic)
except:
tmp.append(None)
bic_matrix.append(tmp)
bic_matrix = pd.DataFrame(bic_matrix)
p,q = bic_matrix.stack().idxmin() ## 得到最小p、q值
## 由於對原視數據進行了二階差分,所以此處的d值為 2
model = ARIMA(tag, (p,2,q)).fit()
model.summary2()
預測2030年的高考錄取率
print('預測2030年的高考錄取率為 ' +
str(model.forecast(9)[0][-1]) + '%')預測2030年的高考錄取率為 95.79511627906977%print('預測2030年的高考錄取率為 ' +
str(model.forecast(9)[0][-1]) + '%')預測2050年的高考錄取率為 98.79511627906977%04 結論
ARIMA是一種非常流行的時間序列統計方法,它是差分整合移動平均自回歸模型,分別是自回歸(AR)項指的是差分序列的滯後,移動平均(MA)項是指誤差的滯後,而I是用於使時間序列平穩的差分數,描述了數據點的相關性,並考慮數值之間的差异。
本文借助ARIMA模型,通過對中國的往年高考錄取率進行建模和預測,並驗證和檢驗模型精度和可行性,來應用模型來估計未來的錄取率,進一步得出了2030年中國高考錄取率的預測值為 95.795%。(僅供學習參考)
采用差分整合移動平均自回歸模型挖掘影響高考錄取率的關鍵因素,然而差分整合移動平均自回歸模型需要各指標與高考的相關關系,故可采用相關系數R的性質,得出各指標的相關性,建立ARIMA模型需要先對觀測序列進行平穩性以及白噪聲檢驗,只有平穩非白噪聲序列才具有觀測價值,最終預測高考錄取率。


往期精彩回顧
適合初學者入門人工智能的路線及資料下載(圖文+視頻)機器學習入門系列下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印《統計學習方法》的代碼複現專輯機器學習交流qq群955171419,加入微信群請掃碼
边栏推荐
- 赫尔辛基交通安全改善项目部署Velodyne Lidar智能基础设施解决方案
- Don't underestimate the integral mall, its role can be great!
- AD域登录验证
- Preliminary understanding of JVM
- GridLayout evenly allocate space
- Multiple decorators decorate a function
- Practice of geospatial data in Nepal graph
- Stop "outsourcing" Ai models! The latest research finds that some "back doors" that undermine the security of machine learning models cannot be detected
- 加密潮流:时尚向元宇宙的进阶
- Load local cifar10 dataset
猜你喜欢

Alvaria宣布客户体验行业资深人士Jeff Cotten担任新首席执行官

Dino: Detr with improved detecting anchor boxes for end to end object detection

Geographic location data storage scheme - redis Geo

教务系统开发(PHP+MySQL)

Day_ ten

The style of the mall can also change a lot. DIY can learn about it!

Blue Bridge Cup - practice system login

Bombard the headquarters. Don't let a UI framework destroy you

Day_ twelve

赫尔辛基交通安全改善项目部署Velodyne Lidar智能基础设施解决方案
随机推荐
Day_ 04
Principle analysis of ThreadLocal source code
Understanding of reflection part
DOM event flow, event delegate
Swift responsive programming
Problems caused by using ApplicationContext to render layout
数据存储和传输文件之XML使用和解析详解
DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection翻译
数字经济时代文化消费新特征
心樓:華為運動健康的七年築造之旅
教务系统开发(PHP+MySQL)
Educational administration system development (php+mysql)
The style of the mall can also change a lot. DIY can learn about it!
Android修行手册之Kotlin - 自定义View的几种写法
The style of the mall can also change a lot. DIY can learn about it!
f_ Read function [easy to understand]
MySQL_ JDBC
炮打司令部,别让一个UI框架把你毁了
Geographic location data storage scheme - redis Geo
The third day of mysql45