当前位置:网站首页>【機器學習】基於多元時間序列對高考預測分析案例
【機器學習】基於多元時間序列對高考預測分析案例
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,加入微信群請掃碼
边栏推荐
- Swift responsive programming
- APIJSON简单使用
- The release of autok3s v0.5.0 continues to be simple and friendly
- Converting cifar10 datasets
- Load local cifar10 dataset
- Most commonly used SQL statements
- Kettle表输入组件精度丢失的问题
- 数据存储和传输文件之XML使用和解析详解
- Alvaria宣布客户体验行业资深人士Jeff Cotten担任新首席执行官
- Sleep formula: how to cure bad sleep?
猜你喜欢
Day_ fourteen
Rxjs TakeUntil 操作符的学习笔记
The third day of mysql45
GridLayout evenly allocate space
The style of the mall can also change a lot. DIY can learn about it!
20省市公布元宇宙路线图
Sleep formula: how to cure bad sleep?
完美洗牌问题
Interviewer: your resume says you are proficient in mysql, so you say cluster / Union / overlay index, table return, index push down
Lecun predicts AgI: big model and reinforcement learning are both ramps! My "world model" is the new way
随机推荐
【NLP】今年英语高考,CMU用重构预训练交出134高分,大幅超越GPT3
Describe your understanding of the evolution process and internal structure of the method area
After flutter was upgraded from 2.2.3 to 2.5, the compilation of mixed projects became slower
Catheon gaming appointed mark Aubrey, former Asia Pacific head of Activision Blizzard, as CEO
Flutter assembly
Hash table, generic
User registration, information writing to file
Bombard the headquarters. Don't let a UI framework destroy you
Mt60b1g16hc-48b:a micron memory particles FBGA code d8bnk[easy to understand]
根据先序遍历和中序遍历生成后序遍历
Educational administration system development (php+mysql)
Converting cifar10 datasets
Catheon Gaming任命Activision Blizzard前亚太区负责人Mark Aubrey担任首席执行官
What are some tricks that novice programmers don't know?
【机器学习】基于多元时间序列对高考预测分析案例
Interviewer: your resume says you are proficient in mysql, so you say cluster / Union / overlay index, table return, index push down
Collection overview, array encapsulation
Dart syntax
Built in function globals() locals()
解析数仓lazyagg查询重写优化