- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。# ?* N8 t: B$ K- F$ |
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
% `! u- ]9 p. Y. d( s$ o2 E
% u5 ]0 n; j5 C6 V" x0 b1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。0 e' A( n2 N o: q
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。) j p' P' v3 j4 {0 Q! j2 d
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
. Q/ F3 ^' a3 @ n, T) G" N9 X4 O/ e. {
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。$ z' d6 H0 t# ]/ o
ARIMA模型的建立包括以下步骤:
1 a z: k7 z/ E9 m1 ?$ j
# ^; R% n9 N: M9 h1 ~) B7 V4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
0 c' w& |9 _$ K: y+ ^ x8 W5.如果时间序列不平稳,进行差分操作以实现平稳性。' n0 o& i8 S+ d7 }: v# v
6.通过观察ACF和PACF图来确定p和q的合适取值范围。
9 @/ z$ h5 i( Q6 h7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
1 y: g/ F+ R4 z& T) ]5 N7 H8.对每个模型进行参数估计和模型拟合。
6 e+ M# r% p+ C, i3 [; c3 C" C7 u9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。: T0 x- \9 \" z
" ?0 i' J/ a% r" Y7 m, B. t- g9 f% AARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。7 A1 t$ c/ r4 y( i1 ?) Z Z
* }( u0 e- v& s J
# 导入所需的库
4 J8 c: R5 D5 l nimport numpy as np
6 ] N% y( z$ K' V7 p: v1 T% }( f0 zimport pandas as pd& u* A+ ~- W: q2 c* D
import statsmodels.api as sm
+ e% S% ~: k; T: m+ t! mfrom statsmodels.graphics.tsaplots import plot_acf, plot_pacf+ `/ v$ s h1 y1 [
import matplotlib.pyplot as plt' s1 Q7 r. `" O' I# P% w. s
' X0 s) R( h6 C5 C. Z0 l- A7 k
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
' \; S3 \) y A8 R# d" W$ w) Y1 N# 源数据; X1 Z/ y5 i/ P! E. y1 v
df = pd.DataFrame({6 S# b( V- T' Y* T
'year': [i for i in range(1971, 1991)],. o' T6 L9 Z9 D" V- X& g
'num': [66.6, 68.9, 38, 34.5, 15.5,4 F7 T) V+ C" Z
12.6, 27.5, 92.5, 155.4, 154.6,$ _' _( u+ ?- p5 c, y
140.4, 115.9, 66.6, 45.9, 17.9,, z4 h5 O& a5 Z6 N" h
3.4, 29.4, 100.2, 157.6, 142.6],
; m- U" k5 w. a; E& B})/ h5 O( _8 g k; X9 W$ N
; ]# Y% s l. A
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。) K/ |" Q+ V) q, C# x6 A
# 画 acf 图
# h) ^: V# m* z& j( Y4 Splot_acf(df['num'])4 I: G2 y$ C! A3 q1 l4 }1 B
8 p/ C5 Z) J. ^2 e这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。, ]4 C: H6 c. ]) |9 q4 O6 r
# 画 pacf 图
8 O# A, B1 a! x8 d- Mplot_pacf(df['num'], lags=9)& Q9 q* ^3 x7 O! Q8 Q
' d% J7 j& Y& O8 E9 y- J这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。: N- {. |# q. Q, p" t- k
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
7 I6 F5 X7 t! E' mstr_list = []- L% D% \$ B2 ^
for p in range(1, 6):" K1 V# |6 D3 H* h
for q in range(1, 3):& ?$ G; Y+ X% O* o, r& o5 a, G
model = sm.tsa.ARMA(df['num'], (p, q)).fit()
+ z* f9 l0 w! N str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
7 O5 {7 S0 z" ^" J) [ y; {& c7 Afor each in str_list:$ ^- F( w6 M# z: t9 K# W! X/ i
print(each)
& l$ V. b4 Z _: w4 P& p
4 M+ i0 s7 X# C& M4 E这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。/ r/ J0 H( b& v6 H# d4 t. h; `; D
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
9 o. W3 b* F( ?( U) N+ Qmodel = sm.tsa.ARMA(df['num'], (2, 2)).fit() X* m0 }0 N9 @7 l% w, n/ d
model.summary()- P! T% k, A+ J' E% a& l: S: z
0 c/ C- |, \0 N, N2 F+ p6 t
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
5 \( u3 d( X: u* p i/ h$ w# 预测和画图) W4 P, P4 k) n8 W! k( M% d S
plt.plot(df['year'], df['num'])- T( K+ k5 R: t3 r* _' ?3 `
plt.scatter(df['year'], df['num'], label='actual')
! d! m; V& N7 Z0 R" Y& [year_list = [i for i in range(1971, 2001)]; d, I! l$ P5 E* J
plt.plot(year_list, model.predict(0, len(year_list)-1))
" c7 H7 n/ d" ~* H4 w8 kplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')- [6 D6 `2 m* h2 ^& k, a
plt.legend()
5 p4 f5 i( {, V" f. T
/ ] g2 ^* _0 [5 r这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
! c, @! z2 @* D2 j# J希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
0 h. d) g$ q7 H- G( a
/ k* k" W8 P* W# |& |! r1 P1 X+ b( \2 _$ x9 g) |" S( x
|
zan
|