- 在线时间
- 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)来建立模型。. ^# A# T: R9 x3 i
ARIMA模型的三个主要参数是p、d和q,分别对应于自回归、差分和滑动平均的阶数。
- t7 `1 q0 I7 o* M8 E" [
- u7 i* Y: k% r, j1.自回归(AR):自回归部分使用先前时间点的观测值来预测当前值。p参数表示自回归的阶数,即使用多少个先前时间点的值作为预测输入。) }" E; p j Y* J) |) V" @. a2 h
2.差分(I):差分是对时间序列进行一阶或多阶的差分操作,可以消除序列的非平稳性。d参数表示差分的阶数,默认为1阶差分。: [3 p% q8 E$ [1 w$ F9 v5 v. q- `
3.滑动平均(MA):滑动平均部分使用先前的误差值来预测当前值。q参数表示滑动平均的阶数,即使用多少个先前的误差值作为预测输入。5 o0 t! {" V- [
! q& m" ^! y2 R' }4 z8 U; B aARIMA模型的一般表示形式为ARIMA(p, d, q),其中p、d和q是非负整数。它可以很好地处理具有线性趋势和季节性的时间序列数据。+ Q! ~) Y. `3 @; s& O2 E) Q
ARIMA模型的建立包括以下步骤:# y; x% k: S5 q3 \8 ?6 O. I! T% c
0 ]) u; X1 H+ z* S
4.确定时间序列数据的平稳性,如平稳性检验、观察序列的趋势和季节性等。4 c w% e9 E* S7 a/ Q! p( f5 |
5.如果时间序列不平稳,进行差分操作以实现平稳性。3 e) t8 W( P2 w# x# J
6.通过观察ACF和PACF图来确定p和q的合适取值范围。 P$ V/ G6 O) m9 ?6 x
7.根据AIC等准则,以不同的p、d、q值建立多个ARIMA模型。. O' k$ [! K7 k4 I7 m3 @, Z, j T& T
8.对每个模型进行参数估计和模型拟合。9 c8 T: _, _4 k L" \; |* t% c8 ]
9.使用拟合的模型进行预测,并对模型的拟合效果进行评估。
: _/ e& L$ g- I5 F. Q
@ O" Z% @% n: Z1 u- gARIMA模型是时间序列分析领域中常用的模型之一,它可以用于预测未来趋势、季节性和周期性等时间序列数据的变化。在实际应用中,ARIMA模型可以被用于经济预测、股票市场分析、天气预测等各种领域。 G: o$ z3 s8 C
/ D4 B0 D# y8 F, O5 J# 导入所需的库# _4 {$ r* H( ^8 z
import numpy as np
) r! x. j# [- C) r+ B! Timport pandas as pd) Y1 Z5 b- b( S% b
import statsmodels.api as sm
/ W! U6 P. i! Qfrom statsmodels.graphics.tsaplots import plot_acf, plot_pacf
, H- [$ q; I' |( q/ Nimport matplotlib.pyplot as plt
0 z7 V/ K/ f1 S! B4 q( d) s+ A; ? H& b, Y
这些是导入需要使用的库,包括NumPy、Pandas、statsmodels和matplotlib。
% b# r- c* Q/ B c# 源数据
0 B: A4 z7 o+ h7 cdf = pd.DataFrame({
, u" {; k/ G0 Z# M# R3 e% g9 K1 S 'year': [i for i in range(1971, 1991)],5 }( T F/ D- D6 h, C( M
'num': [66.6, 68.9, 38, 34.5, 15.5,2 G# {) a! v* H& m: g1 p
12.6, 27.5, 92.5, 155.4, 154.6,* ?0 Q6 A3 K7 @1 X) W
140.4, 115.9, 66.6, 45.9, 17.9,
9 R0 s& {4 N* k) S M% x8 ^( G j 3.4, 29.4, 100.2, 157.6, 142.6],
4 Q" W! Z. s3 Z! ^( ~. R$ `; P})
, v- @( R: _, d8 @9 X% S S" Z9 q
6 G1 _# J* u! w: M5 C这里创建了一个DataFrame df,包含年份和对应的数据值。这个数据将用于建立ARIMA模型。
* S' _4 W2 A$ M' S# 画 acf 图" }% j: s) a/ Z
plot_acf(df['num'])
% C, N6 l- L s# S A2 i- M# @$ ?3 y$ A" n$ H. M
这段代码用于画出序列的自相关函数(ACF)图。ACF图可以帮助我们分析时间序列数据的自相关性。
8 O+ k4 M( x. \; n6 [# 画 pacf 图7 Y9 @" t! ]' i" s& ]# g% e
plot_pacf(df['num'], lags=9)
; A2 F) L/ w# _ w' ?1 d3 b$ v2 X1 \; N/ ?: B3 l$ @8 w; T
这段代码用于画出序列的偏自相关函数(PACF)图。PACF图可以帮助我们分析时间序列数据的偏自相关性。) _) C# Q0 u/ y7 c3 N
# 建立模型,参考 acf、pacf 代入 p、q,观察 aic
; c# P( M8 P) E) tstr_list = []6 _/ R. X+ H8 T: f/ v. v2 j) O5 f
for p in range(1, 6):
& i! {, Z' @: Q4 r4 }% G% m for q in range(1, 3):. ]& |6 j* x6 @& v5 G
model = sm.tsa.ARMA(df['num'], (p, q)).fit()
) s$ e# L$ Q9 R- k0 {: E( P str_list.append('p = {}, q = {}, aic = {}'.format(p, q, model.aic))7 A0 g% l; D8 f( ^& V2 H: w
for each in str_list:
7 K# v @; k0 R4 S; [% Q( h print(each)
m9 E8 \2 {9 u7 f
0 ?' v6 s a; {' C2 t9 ]$ J2 L这段代码用于建立ARIMA模型并观察模型的AIC(赤池信息准则)值。通过对不同(p, q)值的组合进行模型拟合,并输出对应的AIC值,以便选择最优的(p, q)值。! J. q3 ?6 X8 Y2 S( u! x- \1 c
# 发现 p=2,q=2 时 aic 最小,取 p=2,q=2( t* [- n4 ? P! v+ s4 h
model = sm.tsa.ARMA(df['num'], (2, 2)).fit()# o% N% {6 r `/ j+ r' P
model.summary()
" C9 d7 I. D6 i8 h" R: J+ E! r* Y6 A' a. h) L( B" ~( ]. n
根据观察AIC值的结果,选择最优(p, q)值为(2, 2),然后建立ARIMA模型并进行拟合。9 i; t* k$ E; [8 q% h
# 预测和画图6 V& `3 g1 X: c, n' q
plt.plot(df['year'], df['num'])3 t4 C4 ^* a3 _
plt.scatter(df['year'], df['num'], label='actual')
+ r1 ~6 U! s, F8 @/ E. Nyear_list = [i for i in range(1971, 2001)]. [* U& O1 j9 m9 x) O: V" ~* J
plt.plot(year_list, model.predict(0, len(year_list)-1))
' p0 [6 G5 b' O7 Wplt.scatter(year_list, model.predict(0, len(year_list)-1), label='predict')
- R5 D* s5 a4 C4 g/ }plt.legend()$ s i) ]" D* v) ~# w
* x& i6 V: p+ ^& d9 X9 i1 l6 l
这段代码用于使用拟合的模型进行预测,并绘制实际值和预测值的图表。首先画出实际值的曲线,然后画出预测值的曲线,并将预测值的点标记在图上。: A! o8 ?/ W$ ^$ b# X2 ~6 J
希望以上解释对你有帮助。如果你还有任何问题,请随时提问。
U" B- t0 o; I: Y5 O# d' A# G D- Z
- l/ v6 b& T& c$ M; Z2 l: c# I |
zan
|