2 y9 \: u0 Y; |) b. {# y# 取BIC信息量达到最小的模型阶数,结果p为0,q为1,定阶完成。6 _' P! Z- j; u
* `6 F1 c" r, o8 x" a06 模型预测2 u. y1 c* A& R) i. ?8 T1 E
7 w6 r1 G: ^) A& W
#建立ARIMA(0, 1, 1)模型# g k' b* I7 O
4 X' d, C B0 N3 z! o9 P
model = ARIMA(data, (p,1,q)).fit() 3 e6 ^) @# j3 l6 b
1 @0 z, J% M* U; q' m( Z# Q# q#给出一份模型报告 1 R6 f2 u& A3 S1 H9 x4 f+ e/ A; C0 x, b6 j. p! k, p1 a
model.summary2() 9 R8 f+ H0 a2 T. O+ L: P
5 ^+ F( b: [! E4 ?$ P( @9 }
#作为期5天的预测,返回预测结果、标准误差、置信区间。( M) z1 s* B( K' X. ]/ {( {
! `8 I7 i Z7 v: t; \model.forecast(5)" D& t Z4 ?: R' F' \; Z% B: A( N
9 u$ r7 [+ A x
' o, {8 |) H( i8 c9 E( o+ T
4、案例代码 6 a, G" e$ o. Y& f, v* A1 f: X9 I' W# e. n( m6 ?" r( J/ [) @" k
import pandas ; V R2 i$ e/ O 2 U( m+ N9 i- H6 k# 读取数据,指定日期为索引列1 K7 A0 Y" b. N+ x. e
! a9 @! M. ^" h' V+ pdata = pandas.read_csv(5 T. h3 Y7 y0 y1 T
'D:\\DATA\\pycase\\number2\\9.3\\Data.csv' ,. e$ `0 N: c+ U! @' L1 d- a( T
index_col='日期' 6 r4 a7 x" i, y: B2 U3 x)/ y& B! q( s' z8 Y
" i/ ^/ I( X5 r( j0 Cimport matplotlib.pyplot as plt 0 E- o2 g( s% ]) H0 j w. `3 G8 x( G3 X O- w$ v2 h- r
# 用来正常显示中文标签 6 [9 p+ I. }4 |9 i# H" s # z% k- C/ @% ~2 \; M' aplt.rcParams['font.sans-serif']=['SimHei']" `7 H {. T- z% D, M
' e. p* t! M% k+ g( Z4 d; B/ g
# 用来正常显示负号; T' Y& J/ g: @8 l
3 c0 g2 }1 S/ N& C- ]1 i+ @
plt.rcParams['axes.unicode_minus'] = False ! [6 }0 T% s" [5 O- B4 Y
9 E: @& s" Q" C' x
# 查看趋势图: K i) L$ D) K* m1 A3 r
data.plot() #有增长趋势,不平稳/ d& q+ M7 W q0 T
0 W8 I- q6 ]4 C& x( h& f( d7 U# U1 D* y+ m
# 附加:查看自相关系数合片自相关系数(查分之后),可以用于平稳性的检测,也可用于定阶系数预估( D$ r% G6 Z( b
1 r G$ r7 w" t y
#自相关图()2 h+ X b4 o, i4 O) X' {4 F
, L+ ?) {5 n+ z2 j$ Lfrom statsmodels.graphics.tsaplots import plot_acf 4 u& M# | N+ E- P# j 2 Q* O' z; g1 I9 s4 q/ d. lplot_acf(data).show() #自相关图既不是拖尾也不是截尾。以上的图的自相关是一个三角对称的形式,这种趋势是单调趋势的典型图形,说明这个序列不是平稳序列4 P# H& e' }& D; @3 i+ s6 S
9 t) D' S5 Z: U0 m; A# M0 x# e: S! s
' c5 y V# y% v" r8 S1 m& I* W- G: v
: }9 l# \ C4 G( x3 A8 G
# 1 平稳性检测( p" R* k$ Z Z
4 D- z3 f* g0 K' O* B& Y+ Mfrom statsmodels.tsa.stattools import adfuller as ADF , j0 B1 g g' k4 M# }& g6 m4 L- ?" E( w# @9 r5 W: l: l
5 s: L' o2 x) q: \" d& W
def tagADF(t):: k+ t) ]1 S3 U" P; q
result = pandas.DataFrame(index=[ ! D; ^& [; B0 y* w9 x# U1 s "Test Statistic Value", "p-value", "Lags Used", - e$ c. |! `# g: @# v) `
"Number of Observations Used", * k$ p, j' z# \( U$ }* A( }
"Critical Value(1%)", "Critical Value(5%)", "Critical Value(10%)"/ l7 ?7 V' `( N% }' N4 {
], columns=['销量']) ?- A( j* m: a; K
); % @4 ], B! h& r' B result['销量']['Test Statistic Value'] = t[0]( q/ Y+ J+ \( O+ y
result['销量']['p-value'] = t[1] , ?" h' S' ^9 v) F3 |( R V result['销量']['Lags Used'] = t[2]5 t/ N( W( i' r4 [" ?
result['销量']['Number of Observations Used'] = t[3] 8 |3 w0 w$ _8 |% z: s result['销量']['Critical Value(1%)'] = t[4]['1%'] " I! x* x p$ k+ ~* U result['销量']['Critical Value(5%)'] = t[4]['5%'] ; I) h7 E' \ E/ [$ F3 ? result['销量']['Critical Value(10%)'] = t[4]['10%']& z6 @# x; I; s6 e
return result; 0 ^" D# r, D; J% y9 e: M! c! [$ w$ c7 o1 ~: D
1 G" L; w: K1 d; m' P* W4 Iprint('原始序列的ADF检验结果为:',tagADF(ADF(data[u'销量']))) # 添加标签后展现: n" U% n' u# X6 A# ^+ T
o" Q1 P8 `% a' A/ f# 平稳判断:得到统计量大于三个置信度(1%,5%,10%)临界统计值,p值显著大于0.05,该序列为非平稳序列。/ T: S0 D! D; d/ ]
# 备注:得到的统计量显著小于3个置信度(1%,5%,10%)的临界统计值时,为平稳 此时p值接近于0 此处不为0,尝试增加数据量,原数据太少( y5 {# I6 k, c) d
, [, |; t! o: r# Q" i- w, l) F
# 2 进行数据差分,一般一阶差分就可以 # [# n& p. K [/ ?- e d* k @1 R9 m6 z7 W
D_data = data.diff(1).dropna()" l" D5 [ \$ f$ E) i: c9 \
D_data.columns = [u'销量差分']1 A- H% _6 ~) E. }
$ x' d% y; ^' B
#差分图趋势查看" F3 H: y9 T+ X0 b2 b0 C' v) n
( y5 ]$ n) N0 \7 X6 `* l0 R! ~
D_data.plot() 5 s+ N B+ v- e5 p2 m, iplt.show()0 V, a2 e/ c+ g7 {/ T2 x# }
" m6 {5 p1 D3 m D6 s, o$ z# 附加:查看自相关系数合片自相关系数(查分之后),可以用于平稳性的检测,也可用于定阶系数预估 4 H* j. i! z1 F7 m8 n % v& D1 K+ f4 L# r& z7 w#自相关图! V5 M& N% Z- f* N0 c
* @" f$ |9 ? I9 M
plot_acf(D_data).show()/ j- i/ d. D. V% `7 o, v2 W
$ g: ]$ c5 V7 C+ @plt.show()* ~ K2 Q8 @0 d$ ?
) }3 I) d& F2 |% V6 \#偏自相关图 / r4 d. N/ E) m: \! ?! n' _. c! i
from statsmodels.graphics.tsaplots import plot_pacf N: y n; r, [
" B: h1 A3 R4 Hplot_pacf(D_data).show() , d2 P( G# r: _: p/ e ! Z- q( d* y% V: c/ u9 r5 F# 3 平稳性检测 / W8 G& B& e% W6 w' ~4 e. ~7 |6 V- u ; L. w+ _& {: P i9 [0 w5 L- aprint(u'差分序列的ADF检验结果为:', tagADF(ADF(D_data[u'销量差分']))) . `3 M* ~ F7 C1 R4 o/ p3 y+ `& D y( d
# 解释:Test Statistic Value值小于两个水平值,p值显著小于0.05,一阶差分后序列为平稳序列。 ?0 P6 n, h) n7 x