- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
ARIMA(Autoregressive Integrated Moving Average)模型是一种常用的时间序列分析方法,用于对时间序列数据建模和预测。它通过结合自回归(AR)和滑动平均(MA)模型的特性,并对序列进行差分(Integration,即I)来建立模型。# m9 B9 Y4 Q9 \3 N3 C- a% B
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。: S, Y. N0 o+ `; N
2 X1 I9 _/ k: f& [1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。
5 n. J% e2 S% ^; D2 {2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。
# _, a! ^. c9 L# X; l5 P3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。
% l& O9 E" R" u; d5 _2 ?) T
; V' G3 v1 u' `: j! h1 CARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。3 x9 ?& K I7 d6 X3 q) n" N
ARIMA模型的建立包括以下步骤:
2 t; K9 R f$ {- `: B0 I' _ O/ d" l* E6 l$ m/ Z+ d" _- y# {
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。& I) A) D; H3 x4 z* E, Z2 J8 E" M6 b
5.如果时间序列不平稳,进行差分操作以实现平稳性。- X/ e d$ ]5 C8 X8 _7 x4 B' @4 z
6.通过观察ACF和PACF图来确定p和q的合适取值范围。2 t/ j/ V* N' ^& }. x# A: T" |5 t
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。2 ]! o6 G# N# y0 @
8.对每个模型进行参数估计和模型拟合。3 j" Z, A1 ~% r8 A, D9 F3 `, J: |
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
+ j- {, H9 p# h/ J) X/ R+ @/ m2 H$ j( P4 g& v0 W2 r; _5 Z
ARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。
3 z) X* i+ P- R$ J, G
, \9 E. w! l( K# 导入所需的库( t. r* W/ C! @( b
import numpy as np0 c& o! f: P( S1 s0 y1 J
import pandas as pd$ m: l( _' n' N5 [9 D+ V+ E
import statsmodels.api as sm
+ F! w8 }8 g+ S1 \4 ~from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
| y- E+ H& f2 @9 R- H1 Dimport matplotlib.pyplot as plt
. M9 M% `$ |6 k; d( t5 c6 ~" ~0 y
$ ]" Y: G6 D& U2 c2 D0 l+ o这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
6 s7 L0 f/ N9 u, A# 源数据4 y9 K4 M" @! d2 ~* T4 }
df = pd.DataFrame({
9 }5 b1 e! [( o' L) K 'year': [i for i in range(1971, 1991)],
1 }! o- I/ T- H% X+ W- u/ A 'num': [66.6, 68.9, 38, 34.5, 15.5,
$ P: h6 q( R2 p P' V% o 12.6, 27.5, 92.5, 155.4, 154.6," t" }* W3 I5 T# w6 i
140.4, 115.9, 66.6, 45.9, 17.9,& M+ j1 `7 i! W' x# j X
3.4, 29.4, 100.2, 157.6, 142.6],8 [0 `- l" x7 k2 q4 e+ M, ^$ ~$ k
}); N" S& w* i; d# ]7 f# W( }- _( k
4 G: t. T7 w7 g' g1 p
这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。! R. h# k+ b$ Z/ p
# 画 acf 图
2 b$ t9 x/ M6 C) Yplot_acf(df['num'])6 V$ w+ y' [+ ?7 |
$ O$ c9 b7 k0 W- g* r. W6 L
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。/ ?, S9 O; x. W5 b- Y1 p
# 画 pacf 图
5 ]' k+ Z: {' @plot_pacf(df['num'], lags=9)3 |% ~7 {* E) p% F
4 d2 v& h2 G3 y+ `% F
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。
" |! A j9 _# _2 W+ F9 B# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
: |7 S- r( c$ F% a4 f( E" Qstr_list = []- m+ N4 V9 q, G9 O0 Q5 Z
for p in range(1, 6):, V8 V# v- [/ e' i9 n7 r7 b
for q in range(1, 3):
+ H& o) t- N) b. p. l( \- X model = sm.tsa.ARMA(df['num'], (p, q)).fit()
|7 D) E" `' Z" j str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))$ ~' @1 l' e. F- o3 W
for each in str_list:! V+ V) I) Y9 a3 b9 F' t
print(each)
( l" ?; U2 s" W b6 E+ n+ R L- ]1 B$ a8 ~# U* ?, S, ?
这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。
1 m1 d0 s2 G/ a# B. l! ?$ P# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2
6 n+ V) d7 K. A# {6 `* }7 Q: Dmodel = sm.tsa.ARMA(df['num'], (2, 2)).fit()
$ {0 g7 Z# a+ M+ ^model.summary()$ e6 ?& C' b3 n5 E1 _. I- C* Q& a
7 a8 h4 g$ |; ?) n3 n
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。
; s8 h' I R1 V/ t8 k: T# 预测和画图. k8 x: _* W, M* r
plt.plot(df['year'], df['num'])5 g" d$ Z/ E) T6 ^. D4 W1 F! L& e
plt.scatter(df['year'], df['num'], label='actual')7 m: q) S8 A2 s- G
year_list = [i for i in range(1971, 2001)]" ?2 V! N0 ~3 A% N& \, T6 u- J
plt.plot(year_list, model.predict(0, len(year_list)-1))
% k; M# B9 n$ F- R7 D/ v0 Zplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
* K- p4 m' S/ c" `. X" @8 rplt.legend()5 g ~2 w8 ^ H, l
: t2 s: K+ R {& p& j: K/ ~
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。
( Y3 E; |( b) _& L) J希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
$ R# d; o- x% s+ i- L
! l1 N6 m8 {7 u( q, ?( k
. x8 t4 ~1 _7 W0 z" ]" w# B$ [6 h |
zan
|