- 在线时间
- 479 小时
- 最后登录
- 2026-5-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7813 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2931
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1173
- 主题
- 1188
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。% t! Z+ ^! P& V- d* o
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
" R6 E2 O8 S8 e* K( ^) z9 r7 q5 ^3 m3 X- K9 F" L L
1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。, `$ G9 M9 b5 V5 ]& i0 v) y
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
* c; F/ b: H; `1 h5 c3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
& {4 W& I+ R: a$ h
, K7 O' Y1 q$ E* ~1 j. hARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。) Z/ {' l" G$ A y( X3 v
ARIMA模型的建立包括以下步骤:) D, k2 B5 t& Z! I
; x9 q [! ]; j3 K- l! Q1 l
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。
! W% P" d- f1 ]: B% O5.如果时间序列不平稳,进行差分操作以实现平稳性。
3 \6 O7 ?3 w Q; _7 g- Q6.通过观察ACF和PACF图来确定p和q的合适取值范围。5 y3 z5 Z% ?1 {" n
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。
$ W5 o2 o f' Z4 s! C8.对每个模型进行参数估计和模型拟合。
% Y( j% k" x3 i* u6 J+ Z, o6 N9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。7 x. E" ?* M$ j& n
! D/ ], b+ K4 ~5 E; x- ?ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。$ n. y$ e# D$ h
! L. X% C% f8 M4 J* J* H& I( p0 U3 Y
# 导入所需的库
6 `4 {: I, E; w9 l; k! }import numpy as np
. j- I0 U- y) l, |6 q( k& |& C: uimport pandas as pd. k5 q& ~0 E6 |* M0 l/ }" ?
import statsmodels.api as sm# u5 v' b3 C2 ~2 Q
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf2 M6 Q+ P, [1 y
import matplotlib.pyplot as plt+ _$ e+ F" _* x y; ?* D: Q: v. |
# @3 D2 ?& h$ F; B
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
5 K; ]5 I/ X& M7 p+ s7 N# 源数据
2 r- |2 @1 {! o8 f: q C, k" y. \: Adf = pd.DataFrame({
2 p3 e1 r1 n5 \ 'year': [i for i in range(1971, 1991)],) X# _& p. F: O$ k" s" Z
'num': [66.6, 68.9, 38, 34.5, 15.5,% ?0 f7 N7 P' q8 K" Q; s+ x# f- z
12.6, 27.5, 92.5, 155.4, 154.6,) g* ?9 S6 u3 ]2 D4 l% y/ a
140.4, 115.9, 66.6, 45.9, 17.9,3 @/ {4 v$ N( U
3.4, 29.4, 100.2, 157.6, 142.6],
; P' w4 c3 n J, K) ?. w5 s" v& L, N})8 I0 X F, g; H6 d. G9 y
4 T. W$ E( Z; X' E; u
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
/ [ F3 G1 q z' `# D# 画 acf 图6 C4 Z2 p, C- p
plot_acf(df['num']): @1 o" ?: M0 {; E
% P, J# _% Q5 ]( h这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。: r0 K- N/ ]; V9 Z t
# 画 pacf 图
4 G# C! r) S5 |) m2 nplot_pacf(df['num'], lags=9) ?. Z' M% _& q: T7 O- e: b y
- Z/ F" l" ]! [8 `这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。+ b. C% D4 i; G( m% `
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
F% W) X$ N7 B8 T1 Dstr_list = []
, D0 d* X; N0 X0 I5 w- tfor p in range(1, 6):6 X+ m9 h3 z8 w
for q in range(1, 3):
1 I! h% V3 Z. p model = sm.tsa.ARMA(df['num'], (p, q)).fit()
7 F) g% w' z* y0 B str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic)). S# t5 H! V0 H$ m/ Q
for each in str_list:
" L$ F! M4 T+ y o. \; I print(each)2 J' O9 W% y; y+ ^ l
5 v) h0 G5 p5 k/ O" Z! E$ f
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
5 d# g- u s8 l; U+ g# 发现 p=2,q=2 时 aic 最小,取 p=2,q=28 u* f& l' {. y ~+ ]0 L4 ?
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()# I1 A7 @/ k9 o
model.summary()
# m7 n z3 J) M$ V6 |% y8 N
( d8 g: }, M* l! {: j根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。+ Q% ]0 i# M: C c9 W3 e" O
# 预测和画图. A- J7 T5 f( J
plt.plot(df['year'], df['num'])0 N% W3 t) z' w0 e. S: [) T1 |
plt.scatter(df['year'], df['num'], label='actual')/ H b; W: s; ^* {: s" z
year_list = [i for i in range(1971, 2001)]
$ J7 |7 I4 V O& n( hplt.plot(year_list, model.predict(0, len(year_list)-1))
7 }! L# {9 O+ X& ^5 yplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
" `5 n5 a" w Hplt.legend()
4 m8 N- j3 g! R' h ?
' M0 X- |6 R/ @这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
, V6 s+ y( @& _. ~1 e希望以上解释对你有帮助。如果你还有任何问题,请随时提问。3 y4 _: k0 ?$ x! c, C3 l
8 W6 M3 ^) J9 I
7 p7 b; ^# b8 ~/ h6 z& K8 u9 r |
zan
|