- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。
# |6 @3 q6 s9 j/ w5 O. I' |2 LARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
8 Q. {2 @! @; k$ c) U% A/ w& w! y; _5 {7 E/ Q0 ?- O. N- a
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。
' g+ d: g2 o4 d2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。, ^) k: s7 X- t; p/ K* t
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
; [# K4 {/ q! p/ f) j% F% f" w3 {1 f# C5 s( B
ARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。- u3 I2 @1 U2 b2 Y/ A
ARIMA模型的建立包括以下步骤:6 Z2 Y' K3 ?7 a R/ b
! E# W- V5 x$ c/ y/ ]' `; P: z4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。+ e% w4 `% S2 j' b( {* k
5.如果时间序列不平稳,进行差分操作以实现平稳性。0 d* B2 n6 H" l
6.通过观察ACF和PACF图来确定p和q的合适取值范围。
8 M6 M9 I# F$ ?9 z2 y3 P7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
2 G: p0 [3 B+ I% g+ M8.对每个模型进行参数估计和模型拟合。8 i0 u; ^1 q# X/ }8 V
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
! N+ X# A: Q0 e9 i4 @/ G4 `- K" \2 F" _* @! Y6 F) p/ [9 M
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
5 H2 ?) `* @2 I5 L: U5 j: W
- R7 k6 G- Y0 ~" K# 导入所需的库
) z) ?5 r5 z f* E6 p2 bimport numpy as np
& e) l. n# U! k! u5 himport pandas as pd
6 V. }3 d1 r4 b2 g& F5 yimport statsmodels.api as sm
0 Q5 h8 Z3 G4 \, ^3 V+ P8 ~from statsmodels.graphics.tsaplots import plot_acf, plot_pacf& m0 b7 Y9 Y) `8 o2 k8 W3 G9 I; |
import matplotlib.pyplot as plt
, H! P+ y5 M2 y2 y8 g/ o- A5 @
: c' k- I: I6 p% T2 r1 w7 X这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
4 H$ w( t) W8 O' y! N5 D. N# 源数据
, E7 U5 }1 Z8 C. l8 e1 E' x# Idf = pd.DataFrame({
1 L C- o v. h0 h) Q+ w+ g 'year': [i for i in range(1971, 1991)],
: C; L/ S' K f3 j/ U 'num': [66.6, 68.9, 38, 34.5, 15.5,5 K6 T+ k4 l4 O/ ^ d* x9 a
12.6, 27.5, 92.5, 155.4, 154.6,
) ~" @8 G" R- c+ v; m7 c! f# V 140.4, 115.9, 66.6, 45.9, 17.9,1 a9 \' T4 v! G$ \; d# y
3.4, 29.4, 100.2, 157.6, 142.6],
' I2 R+ u3 w7 r4 @})1 H# ~; |* z- t9 C' k% Y. ~% n
+ Q$ g9 ^9 d1 v1 g: y0 U
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。, Z* N ?0 }: h% m% Y2 C
# 画 acf 图7 S+ A; y! z" v, E* s: y% r
plot_acf(df['num'])
$ V* I9 r4 ^2 Q+ q8 p8 c6 o% S% E& d
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。2 i" [+ p0 `" D, ~1 d
# 画 pacf 图2 f9 b C) x/ X% u4 N
plot_pacf(df['num'], lags=9)4 b1 ]4 v2 E7 ]: [# W
K6 Y q0 U6 `0 |( N% G
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。
+ o; E5 s" q& b2 Y |; _9 I$ F# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
, [9 r D$ _+ m& K, Wstr_list = []
5 y/ v) b% }( B3 K+ V5 f: U8 `3 Y8 _& Kfor p in range(1, 6):
# O) `& V$ e% R; n4 I9 f$ M for q in range(1, 3):
: c/ U" g$ K( l model = sm.tsa.ARMA(df['num'], (p, q)).fit()
8 V2 r6 ^$ t9 y0 L4 Q% A str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))
4 h' q3 X! Z& M( [% Zfor each in str_list:/ M) r7 O$ m5 S/ K' K" ?! B. |
print(each)
4 O* w5 u4 O4 _2 i; C! |
; x, n2 R5 ]- Q* i0 V7 R: M# Z) i这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
9 `' ]+ t+ }0 G2 w+ O) h# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2! O4 o" {- V8 C# U- A1 W, [: g
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()+ [- z, `' o% q$ r, V
model.summary()6 u% g: g# r8 c! @/ U E
e) W1 ~1 {/ e4 t8 F- S. `5 c根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
( T. ]" z0 C1 x- u7 {# 预测和画图; g4 k Q8 ~5 [
plt.plot(df['year'], df['num'])
. w. \& N; v3 kplt.scatter(df['year'], df['num'], label='actual')
T2 X0 \; W& T$ k7 Z% kyear_list = [i for i in range(1971, 2001)]% B% L0 a& H$ i( g Q2 H
plt.plot(year_list, model.predict(0, len(year_list)-1))
# z; u# ^$ W/ u% s3 Fplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
2 W2 \$ `3 U. K$ Dplt.legend()+ e6 y6 k4 h3 u; e7 n p$ [% L& R
6 Q+ f# m) k0 T+ [. v
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。+ X; Q7 H& Y9 l5 T! ?
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。: K4 o: g0 a2 f( k$ ]& W F) M
* Y7 m# Q# |& \0 s" Y/ H |/ y2 @) C+ C/ g1 Q6 p6 V9 l9 g
|
zan
|