- 在线时间
- 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)来建立模型。' T& H/ J2 I7 n; v
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
& |8 ~: Z$ L$ K \9 E& ]9 K2 B
3 }0 y# A8 F! ]6 j8 G$ m) O: w) f' P1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。. t6 P Q- O8 M' ~: Q
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。" r; ~; X6 Z( O2 r% s
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
( Q7 g$ {! T1 g8 _/ G [4 Z* O. q) I9 d. ^% x* j
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。
' b$ y* G' u0 V: w0 K4 D/ x1 m6 xARIMA模型的建立包括以下步骤:
# `9 H4 J, X9 U8 l6 m* g2 @- i6 P5 p- `
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。( @9 g# O- m. Y" z0 Q3 S3 u
5.如果时间序列不平稳,进行差分操作以实现平稳性。- b8 c% y2 l% C8 W/ {* y9 M! i& y$ a
6.通过观察ACF和PACF图来确定p和q的合适取值范围。$ N0 U6 A7 k) @2 U# ], W E
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
* K8 `. J& k$ o5 n5 b* c8.对每个模型进行参数估计和模型拟合。
* j, A! l) \0 i! G6 O8 o1 c- ?1 t9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
; | x V* D0 w3 d- y/ s( M) P8 a9 y( x/ M6 \- l1 @4 G7 ~5 d
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。8 v$ I& M; P& Y" B4 d! t) D
+ l4 ~) c0 H0 p# 导入所需的库
) V( R; k. e8 I9 u' M3 z7 F& L% gimport numpy as np
) U, @- C- u( t3 Q3 T7 K% V' E' x) M2 oimport pandas as pd6 v& k9 c& R) T# Q& E
import statsmodels.api as sm) I) [6 z1 a( @# w, o3 s/ n- a
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf( K0 r, W6 f8 N
import matplotlib.pyplot as plt
2 j+ T7 W3 w% I& p1 ~
4 A" Q0 z& u6 Q7 ^ @! k这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
1 D& b3 B2 N/ }# a# 源数据
& F0 x: V* ` M! t: F$ tdf = pd.DataFrame({+ y1 M" Y& d# x7 w! h
'year': [i for i in range(1971, 1991)],
3 a; ]2 h( }( t2 _4 G2 O* { 'num': [66.6, 68.9, 38, 34.5, 15.5,' T3 x) W$ X. V+ X
12.6, 27.5, 92.5, 155.4, 154.6,1 d( I7 @& p3 P8 `# y* j3 Z
140.4, 115.9, 66.6, 45.9, 17.9,
& s' X7 K: @1 q: w, h 3.4, 29.4, 100.2, 157.6, 142.6],& Y; P% \: r w- s, l6 T$ E! d
})$ t1 L/ p' A+ s$ C: {; _% e
# T+ }1 H `+ f8 L9 N& V
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。- I6 W. l, W: @9 y7 |" f
# 画 acf 图
, {; g8 l2 `7 Q% |) Uplot_acf(df['num'])( P2 A0 U+ P$ ~
4 [) {0 Y4 ~4 L4 F这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。+ [$ a" _1 R4 e- p$ [% k
# 画 pacf 图
( X+ U4 @& p7 d7 k& G/ [plot_pacf(df['num'], lags=9)2 e& Y) n1 Y# ^
, H0 G/ o' S M$ W5 _6 r- Y7 U这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。# Z% ?9 b, a; _) R4 B" o/ U) J
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
" Q) R7 W+ ^( R9 k5 s4 B* Cstr_list = []. {7 O$ |* x/ f; r7 S, k- Y1 D* e
for p in range(1, 6):$ a. f' d$ Z& _+ H) o4 q
for q in range(1, 3):
5 ~: |. h" f4 R* D7 b! J model = sm.tsa.ARMA(df['num'], (p, q)).fit()
9 _9 a5 p/ W% _6 v str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
0 T H P! O0 Rfor each in str_list:( E1 }7 |( r$ N& G: [% Q2 o: I' t2 L
print(each)! j' z( A& w3 @# s8 I) g) b
1 v! {% U r7 k3 g/ I
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。2 \/ A7 \6 ]7 W8 ^
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
, W* U0 t1 p4 G+ O3 mmodel = sm.tsa.ARMA(df['num'], (2, 2)).fit(). [& c& B& e8 D1 j" \- {
model.summary()) m, a$ \$ ?( m8 q7 z
6 V g6 M g5 o' O根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
4 U" Y0 v) p4 H* g# 预测和画图; F" r6 y) m7 F/ q
plt.plot(df['year'], df['num'])) g5 }6 E/ O* _: l
plt.scatter(df['year'], df['num'], label='actual')' l' X0 W* z3 J+ }2 C* B
year_list = [i for i in range(1971, 2001)]7 t5 j# H& T$ h6 Y* [" \4 i' e) c6 i
plt.plot(year_list, model.predict(0, len(year_list)-1))
# E/ @- `% U1 c* Mplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
9 R5 c% D- c6 ?plt.legend()
/ G6 V: E/ q) b9 f5 f& H
' L3 Y$ h3 ]9 P, S这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
# h- e) c" d* O- Z7 P2 i/ l希望以上解释对你有帮助。如果你还有任何问题,请随时提问。+ A1 G+ K6 c, G- A: S
- T' I' @7 R! o+ m7 S2 E: c7 [9 ?# ]+ \' w
|
zan
|