QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 10032|回复: 1
打印 上一主题 下一主题

[国赛经验] python时间序列预测(ARIMA模型案例代码)

[复制链接]
字体大小: 正常 放大

326

主题

32

听众

1万

积分

  • TA的每日心情
    慵懒
    2020-7-12 09:52
  • 签到天数: 116 天

    [LV.6]常住居民II

    管理员

    群组2018教师培训(呼和浩

    群组2017-05-04 量化投资实

    群组2017“草原杯”夏令营

    群组2018美赛冲刺培训

    群组2017 田老师国赛冲刺课

    跳转到指定楼层
    1#
    发表于 2020-5-23 14:43 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    1、模型识别
    - P/ l8 o/ p+ ^. P( ^01 主要的模型( M3 L9 {. [+ k1 F3 V, y# L  `
    AR(P)模型(Autoregressive Model)+ O( n. M' g  R% L: e
      x0 L5 l) ?' P# c" U. @
        自回归模型描述的是当前值与历史值之间的关系  {# H, y5 T9 x0 H% |( d

    7 e' b0 W8 `4 G5 D6 ^6 J. {( m9 [' pMA(q)模型(Moving Average Model)7 W" D4 T* p$ [9 |( H3 D
         移动平均模型描述的是自回归部分的误差累计6 J  A( I. Q7 ^

    0 ~/ |. V% c5 s1 T5 O) P0 C ARIMA模型(Autoregressive Integrated Moving Average Model)9 G1 h2 \* Q- t
    8 Z( p/ G% |2 U% M4 Q
        所谓ARIMA模型,是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的之后值以及随机误差项的现值和滞后值进行回归所建立的模型; U8 `" i  b: `. }* T

    ; ]/ w- R5 }4 ?9 r/ T    Xt=自回归AR+移动平均MA模型
    7 t1 k! M. N( B0 X, n 4.png
    8 s' w$ |! K* n+ d* X- V02 截尾和拖尾9 J0 F8 @0 Z1 s' Y
    (1)p阶自回归模型 AR(P)
    ; Y# Z$ n: z5 o  I2 R/ a# d/ A: s$ wAR(p)模型的偏自相关函数PACF在p阶之后应为零,称其具有截尾性;
    9 `. _  V( y% p$ F$ A1 kAR(p)模型的自相关函数ACF不能在某一步之后为零(截尾),而是按指数衰减(或成正弦波形式),称其具有拖尾性。
    + r1 @1 R9 k2 M. [; p1 I0 ~, W5 d' e" C8 F2 Q( K
    (2)q阶移动平均模型 MA(q) + d7 s+ }& M" J+ v; Z! A& H" g
    MA(q)模型的自相关函数ACF在q阶之后应为零,称其具有截尾性;
    / V- W4 G2 y0 F/ W6 eMA(q)模型的偏自相关函数PACF不能在某一步之后为零(截尾),而是按指数衰减(或成正弦波形式),称其具有拖尾性。
    & [1 h  Z* b  b* r0 X+ E) M* U* A9 U% a
    03 如何判断拖尾和截尾
    # E1 v8 ?+ C& u2 T3 K3 f: E  T& \0 c$ e6 G5 h3 P
    (1)如果样本自相关系数(或偏自相关系数)在最初的d阶明显大于2倍标准差范围,而后几乎95%的样本自相关(偏自相关)系数都落在2倍标准差范围以内,而且由非零自相关(偏自相关)系数衰减为小值波动的过程非常突然,这时,通常视为自相关(偏自相关)系数截尾。2 i; J! m6 d* F. c
    4 b7 Y" w0 D6 ^- O6 f
    (2)如果有超过5%的样本相关系数落在2倍标准差范围以外,或者是由显著非零的相关函数衰减为小值波动的过程比较缓慢或者非常连续,这时,通常视为相关系数不截尾。! V1 W! Z1 M3 n! \
    8 X" {' [/ i3 H. l& j5 [7 I, X8 m, j
    2、时间序列算法公式
    0 W6 b* h- ~' ]" {9 D重要的几种为:AR、MA、ARMA、ARIMA模型,具体公式见下图:
    , y2 r+ ~' P) W2 [
    # R: K& T' h+ N* w# f& }; L: ?
    - ?/ m7 n! N, B9 g
    % }4 c3 _* o2 B: Y; R" C2 W3 i4 V1 G3、详细步骤" N  N3 J$ j% i  @
    01 平稳性检验(adf检验)! s: q2 Q  {9 B  @
    3 [! x  g# T& l! @9 g
    #  a  时序图检验+ _2 e8 G0 H% O) K! e, E2 c9 M' N

    * T! T2 f6 }( Y) T* B根据平稳时间序列的均值和方差都为常数的性质,平稳序列的时序图显示该序列值始终在一个常熟附近随机波动,而且波动的范围有界;如果有明显的趋势性或者周期性,那他通常不是平稳序列
    / C" [$ t; k$ O' D* v
    - d( }9 F3 H" p#  b 自相关图检验。2 F8 E* k: {7 `" z6 p) l
    6 [9 W4 t- R: @* f2 L5 s' H
    平稳序列具有短期相关性民政性质对平稳序列而言通常只有近期的序列值对现时值的影响比较明显,间隔越远的过去只对现时值得影响越小。随着延迟期数K的增加,平稳序列的自相关系数Pk(延迟K期)会比较快的衰减趋向于零,并在零附近随机波动,而非平稳序列的自相关系数衰减的速度比较慢,这就是利用自相关图进行平稳性检验的标准) |: }$ O5 U$ N8 M/ B
    9 U& t( N9 h6 q3 C  V- i
    ; g' V# m( a' r3 p7 v# q
    #c 单位根检验  3 S0 h( ]% v/ X6 O  ?
    2 A  Y4 \/ _& L: p
    单位根检验是指检验序列中是否存在单位根,如果存在单位根就是非平稳时间序列了
    . U  v: k8 O$ v
    ( ^. c7 u# \9 C+ R3 m% f9 B0 s5 \! {2 S9 y, }; R
    # ADF单位根检验
    3 Q7 |$ @/ B) ~
      i* J: n# o& Y其中第二中的ADF检验中,如果p值显著大于0.05,统计量化大于三个或者两个水平值,差距越大,越不平稳。
    ( I9 z8 ]) ~0 x( u
    * j1 l3 N- n3 @+ I若统计量显著小于三个置信度且p值接近0,为平稳序列
    . ]$ _8 Y9 n6 R5 m- y7 l- w0 j* i: ^  _6 q: h: j! k; \7 k  A% z
    其他情况,可能是数据量不够的原因没有展现趋势, T/ @! Z  p& R2 ?2 j' S

    ' h, l2 _3 K6 c9 Z9 a! R2 g, b02 对数据进行差分构造平稳序列& G1 Z8 T+ F! j- \2 ?2 J  V
    差分运算:
    / \& E6 ~1 i3 V7 j. F, @) Q- s# k! }, x& J, s0 D
    p阶差分
    , t7 o# ^/ p( ]5 M- M: {. _6 U# P" Q: i
    相聚一期的两个序列值之间的减法运算称为I阶差分运算% g- ~. V' O8 L

    4 v: S. V  K  i! T' jk步差分1 t6 G: N% ~+ V5 W/ s8 h/ l* f
    3 O7 y5 i2 Q; F  _( I3 H/ o. M
    相聚k期的两个序列值之间的减法运算称为k步chafenyunsuan  l0 i0 i( {, ~! b

    4 i# P* r% h: p# o+ A. C#差分后的结果
    7 v: T1 d: f: a5 b, w' L8 F: Q1 Z) VD_data = data.diff(k).dropna()
    , T6 ?3 O  V7 r/ j( p/ w$ s4 B; {( ~6 A) j
    k 相距k时间
    & M$ k% E  p0 l+ }8 c
    4 l0 y( r! R  P3 j/ N" E& w一般在一阶差分后就是比较平稳的序列
    8 j4 Q3 I( t# ~& g* ^$ H, J
    9 g7 I( V% s1 H# l$ Q0 f$ p6 S03 平稳性监测
    9 B( a" h; G( e3 [  T" }04 白噪声检验# C. R, h3 w$ q1 A0 V0 U2 |
    #白噪声检验" T. r" i6 h0 J/ j$ ]& d
    from statsmodels.stats.diagnostic import acorr_ljungbox/ R0 S4 J+ {5 e) Z

    / y; J. K8 q2 K#返回统计量和p值
    ( ?7 L: }& |; k+ R" a2 r2 _2 ?8 ^& |8 }6 J) ^, `- n2 t* p; b: Q& p
    print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1))  # 分别为stat值(统计量)和P值
    0 U  Z# I- p- [; j5 B, D
    0 o# P2 b# n; Q3 v+ z! e0 q* l# P值小于0.05,所以一阶差分后的序列为平稳非白噪声序列。# d: Y- @7 x  o) L& U1 v7 m

    : c5 B* y  p: _) W2 f7 |1 v& u% ~7 X/ M0 e05 定阶
    # K5 L8 \) X, _; A第一种方法人为识别
    8 Q% T1 A' T4 O/ @: L1 i% q' r' S2 {' t' }3 c4 a. H% t, _
    一阶差分后自相关图显示1阶截尾,
    : @. p/ }3 ^: S6 Q' o% Y' p! e- {# r" E0 D  @+ {
    偏自相关显示托尾性,所以建立ARIMA(0,1,1)
    9 l* X4 B1 o7 s' P$ w' O0 S2 s/ f  l' O5 a6 w6 f% f5 C
    第二种:相对最优模型识别) R) v7 H8 Z% c! p
    3 @2 ~) C& A' Y
    计算ARMA(p,q)。当p,q均小于所组合BIC信息量,取其中BIC信息量达到最小的模型阶数! n. e7 k& n2 `: V, d

    : z6 x! i/ U9 [, Y" n' |, Z7 k9 c2 e确定pq值
    3 J. w: T  \. m% K2 d1 Z$ D* `. R. G5 A( U! f/ ~6 C: S
    from statsmodels.tsa.arima_model import ARIMA2 _; n0 N; u% U* j9 Z1 k: d, P# h7 z6 D
    #定阶
    - t% j* }' W) d! ?, a% @
    7 {4 [3 y( X0 u9 N  i6 N#一般阶数不超过length/10- D( l/ R6 d2 |( O
      X8 w. N# U+ Z6 c+ ~7 {
    pmax = int(len(D_data)/10)
    & }& [, C# C( }/ |+ q8 Z* f4 ^
      P2 I$ t8 {" S( L9 h#一般阶数不超过length/10# a4 ?, T5 S9 v) B& A. A
      E. E/ O% I" ?  V% x: f
    qmax = int(len(D_data)/10)   R2 m0 n) l+ \9 f  O0 H( T" r

    ' w7 k* i5 K  C: ^
    , C! X% G* _1 |( s; V#bic矩阵$ I4 F: J6 q6 ?; G; R
      `* s' Y" ?' v7 N* Z  {, N
    bic_matrix = []
    8 M. d9 o8 m) e/ f" Sfor p in range(pmax+1):, e8 ~+ r: t1 M
      tmp = []
    ' ~/ T% f5 t- a+ b) N  for q in range(qmax+1):
    % U& e7 k* C* ]  m5 H#存在部分报错,所以用try来跳过报错。
    & t$ B$ y/ ^2 c* z/ {( ?2 I    try: + |3 h2 W: S1 M: V# p
          tmp.append(ARIMA(data, (p,1,q)).fit().bic)
    , W* C9 [2 c& w6 o2 v3 I. U5 `    except:& n% {. M8 f/ ]: I0 B. u4 k
          tmp.append(None)$ r8 s+ H# o  B6 _  a+ W5 s
      bic_matrix.append(tmp)( w5 |5 u( n7 l

    ! F, j+ F. g8 l8 {* X#从中可以找出最小值0 z3 D2 T2 ]! B6 r5 ^

      y$ O, k& v0 i( Y& H' c0 L5 v. u' fbic_matrix = pandas.DataFrame(bic_matrix) % J+ p+ v& u) T+ N3 ^5 M8 C$ H
    2 X/ l9 `. W6 h! S
    #先用stack展平,然后用idxmin找出最小值位置。
    ! b2 k* R0 b; ]$ Q$ T# k6 G) u& q3 l9 v" i( U. Z- l% R
    p,q = bic_matrix.stack().idxmin() 0 {, V# y4 _) |9 G4 q6 S0 e
    ! B7 H4 f6 ?$ v+ m$ b# x/ Z' [2 N" Q' F
    print(u'BIC最小的p值和q值为:%s、%s' %(p,q))
    " @" q# l+ ]. F/ \. L" N
    ) o! A: Z. f" z; ~1 J# 取BIC信息量达到最小的模型阶数,结果p为0,q为1,定阶完成。$ O  |2 v, H9 v% q' ~

    ' o4 ?" Q5 k& O2 {5 l7 W06 模型预测+ f( e1 g! S3 E2 v5 Q/ z3 E% M5 m( I. O
    " b" {: ~9 _0 o0 w  o2 f; R
    #建立ARIMA(0, 1, 1)模型9 J" r% l( |" @% O4 j& r
    2 i1 B! z! W( U, S
    model = ARIMA(data, (p,1,q)).fit() 9 z+ d5 C9 E  f+ x# k, S

    ; P+ b4 d( d- X. b  l#给出一份模型报告
    2 h" d' y/ @6 t! S+ M) \6 o+ v4 l8 R. d. |
    model.summary2() 5 J" ]8 z  ^9 C7 F. j: I! N

    4 L9 e2 M  i9 p3 ~- t#作为期5天的预测,返回预测结果、标准误差、置信区间。: ~6 e% i* O, G% P/ j. `! P

    , T$ T3 j  f, _% Q) Q6 v9 F2 Rmodel.forecast(5)% d. C( m* v- C6 D

    " z/ h3 z  |& I
    " x; }0 }9 R* r/ n0 V* t6 j2 l4、案例代码
    9 ~5 T; Q2 x8 t5 W" l$ R
    ' M1 q7 h, f: r/ g: m- N( Uimport pandas ' b. F/ d0 X3 n4 \$ w* s0 @
    % E4 K; l! U- Z% r5 T# J) M- v
    # 读取数据,指定日期为索引列
    + D% `0 Y$ N, q8 W6 A) k0 q3 j! `" z! d; |$ K
    data = pandas.read_csv(
    8 l$ _: r5 H$ v  I    'D:\\DATA\\pycase\\number2\\9.3\\Data.csv' ,
    ! K0 T' a0 Y1 S% _: {% @2 S: j    index_col='日期'
    & S- U, ^! B9 \: g8 x)- `; T" r' I% {1 a
    , t5 `9 }3 X+ Y  r% ~) G( T# K
    # 绘图过程中
    . `. Y# E1 z5 J# G9 l# V+ N
    - a! Y9 s/ ?  T9 X* ^# y" [import  matplotlib.pyplot as plt% `+ _$ ~$ S  i+ m+ i, ~0 C: b

    ! {0 e# W  H7 [% D# 用来正常显示中文标签1 F9 l* P" D% z  @( Q8 a0 R

    1 r* P4 U1 y7 eplt.rcParams['font.sans-serif']=['SimHei']! }" t, S7 H% n' q* T$ q1 L

    ; l1 S) H: L# X3 V# i( B$ G# 用来正常显示负号
    ) ~) L: E5 C, a; w5 T" G; C8 p& P% h- c4 P, n' |, s: x0 G
    plt.rcParams['axes.unicode_minus'] = False   z0 `5 v& z& [' d- q! k: J' T

    . R5 C/ v' ~: z3 W# D8 q+ A0 L* x# 查看趋势图
    / r8 k' l" q& {2 Zdata.plot() #有增长趋势,不平稳. h$ ^4 ]6 Z6 K* m5 I: X4 h% P

    & k2 K2 l+ j+ Y! T8 N8 f$ D
    - e6 o: `- Z$ [( P+ ~8 m8 V# 附加:查看自相关系数合片自相关系数(查分之后),可以用于平稳性的检测,也可用于定阶系数预估
    * X6 e  T; ], p; Y/ F) Q. T3 B- q7 q8 S
    #自相关图()
    3 ?% r1 i# D. V# |6 ~9 i
    * m# s# f+ i2 v" J1 ~from statsmodels.graphics.tsaplots import plot_acf  x; K' F8 Q3 T/ M: N/ l
    / N; `- q4 r$ b0 m
    plot_acf(data).show() #自相关图既不是拖尾也不是截尾。以上的图的自相关是一个三角对称的形式,这种趋势是单调趋势的典型图形,说明这个序列不是平稳序列) m' _1 _* [  f

    5 n1 ]1 J' L* C
    2 K9 t1 {5 k; d* p1 x0 j# E2 O
    1 G% O4 E( n* f$ i$ R( ^
    7 u9 Y* j, j* i$ S) y5 @% U& c7 X3 ?$ N4 i7 v
    # 1 平稳性检测
    $ _- j! f+ M5 O7 i, h; T$ V6 ^, n$ L7 m- q) z" ?0 M* Y/ }
    from statsmodels.tsa.stattools import adfuller as ADF
    , T" e" y! t6 `9 R1 @% k! n- o' e+ B3 d5 t' ?

    " R' _% `! q* L" X7 u3 Wdef tagADF(t):
    3 M( L) T( }. x1 Y2 k    result = pandas.DataFrame(index=[
    % U! d) h  Z9 P9 I/ U5 |) ^7 \            "Test Statistic Value", "p-value", "Lags Used",
    2 P6 z4 q: O% r            "Number of Observations Used", ! g! H* p, V" k+ j+ K5 j
                "Critical Value(1%)", "Critical Value(5%)", "Critical Value(10%)", p4 W/ F* N, Y
            ], columns=['销量']
    " A) @2 M4 e% U7 F    );, L9 `( n2 D' O2 `6 o+ J) Q, X% L
        result['销量']['Test Statistic Value'] = t[0]3 p1 ?8 |7 n" u9 U3 V% |: X
        result['销量']['p-value'] = t[1]$ {5 b' {$ ~& t! r" T8 ~  A7 w6 |
        result['销量']['Lags Used'] = t[2]/ @8 f  C% x. j3 A! {
        result['销量']['Number of Observations Used'] = t[3]: @) @+ z/ J9 B3 s
        result['销量']['Critical Value(1%)'] = t[4]['1%']
    & d+ a0 ?9 f+ g1 E2 `- C    result['销量']['Critical Value(5%)'] = t[4]['5%']
    5 P+ o/ z3 F  ^$ V; {: g    result['销量']['Critical Value(10%)'] = t[4]['10%']
    % S: K9 d& s# l% t( |- H: l    return result;
    " p  N7 p) I' d0 l% R3 z1 x
    , E4 U- t9 _9 O8 m. Q6 A1 Z* T- j) ?  \8 P$ b3 u! _
    print('原始序列的ADF检验结果为:',tagADF(ADF(data[u'销量'])))  # 添加标签后展现
    ! Z; D5 ]! \; @" [  j; D5 U
    5 l$ _; _7 @4 q& j# 平稳判断:得到统计量大于三个置信度(1%,5%,10%)临界统计值,p值显著大于0.05,该序列为非平稳序列。2 c9 x8 k0 r' Q3 _
    # 备注:得到的统计量显著小于3个置信度(1%,5%,10%)的临界统计值时,为平稳 此时p值接近于0 此处不为0,尝试增加数据量,原数据太少
    : O" j, H, g7 z1 e  v6 P, c1 H
    # x; z. T6 J/ \: s( }$ A4 L. m9 K# 2 进行数据差分,一般一阶差分就可以
    - Y" Z' \1 O- u4 Q% }# ^: }+ N1 g+ s7 Q( u# Q
    D_data = data.diff(1).dropna(); h/ h% @# {8 {3 P( ]
    D_data.columns = [u'销量差分']
    . e" ]( e+ T3 S8 m9 g1 u& l6 ~! K( C8 Z% D$ j
    #差分图趋势查看+ q: Z7 ]' d! e/ m- T, e7 z- `
    # F4 K) u0 ]( t$ N* f
    D_data.plot()
    6 W  A5 P; l4 ^" y& ^plt.show()/ L+ P3 o% [5 @

    : L& x- j: N& I# 附加:查看自相关系数合片自相关系数(查分之后),可以用于平稳性的检测,也可用于定阶系数预估; {4 ~" H5 y0 l# \

    + m1 c, {( {' H8 h8 f+ Y#自相关图( g" b- n( u$ q, b% b. ?' E4 [

    ' r+ A! m' D& j& mplot_acf(D_data).show()
    8 M1 K" K5 C& P2 H# z1 \
    , w* g0 ~7 X- t" Cplt.show()" C- h! {. `: p8 k. ~8 j% E

    9 X- f, B1 y- c+ X9 {2 H7 N* v#偏自相关图' _( J5 S( Q  \2 f1 n; |8 g

    ' D8 d8 q) m% sfrom statsmodels.graphics.tsaplots import plot_pacf
    * K/ I$ s9 |9 L0 x2 A
    8 _. i: [$ L) h$ E( P$ ]! y2 Nplot_pacf(D_data).show()
    2 d4 r; f6 n4 M- J( s2 ^4 F# g$ c* N6 T* b6 X7 p+ ~+ q/ Y5 A5 n
    # 3 平稳性检测
    % X' z: k: |/ e2 X) t
    " T% u$ _+ V6 @( ?! w" A# B* R" Zprint(u'差分序列的ADF检验结果为:', tagADF(ADF(D_data[u'销量差分'])))
    * J8 y* b6 K) i3 I% Z% O; h! t! e+ N& Z" w/ d2 i& a# N$ E5 b& T
    # 解释:Test Statistic Value值小于两个水平值,p值显著小于0.05,一阶差分后序列为平稳序列。
    , G) |7 W3 ?/ a1 k! [4 @1 J) z4 s8 G
    # 4 白噪声检验# A4 |/ _8 B* j/ M! Y% C
    from statsmodels.stats.diagnostic import acorr_ljungbox" J! a7 [4 t3 G8 Q' C
    ! t+ Q# P" r/ k/ I& e( u
    #返回统计量和p值& d# l% U6 {+ h$ R9 j% g! C

    8 W7 b+ x$ r0 u4 F, ]8 [( d2 P* vprint(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1))  # 分别为stat值(统计量)和P值9 V! ]8 s0 k) Z$ D1 |

    8 L# W/ d' W  q/ x0 Y( }# P值小于0.05,所以一阶差分后的序列为平稳非白噪声序列。/ `  Z! Y# R, I
    & ^# m4 E7 }% \5 K7 b$ ^
    1 R: T3 n9 r$ e& W
    # 5 p,q定阶/ j$ }! M: ?+ H. f/ Y3 i7 U

    4 \5 I. C: B, M- D+ n( A: m, O/ ]from statsmodels.tsa.arima_model import ARIMA7 x, Z  {) p6 _$ {" s4 b
    ! u7 l9 f6 z* a6 |: T; a$ ]
    #一般阶数不超过length/10+ u) G2 S1 O- Q# k
    / w) d, O& }& M& l) a
    pmax = int(len(D_data)/10)
    * B& ~& w6 ~. o5 `5 U5 q8 P7 T9 x7 ~" o; |
    4 R$ F3 ~5 k$ Y& W  O3 e9 K
    #一般阶数不超过length/10
    % E$ D% M" {$ w0 ^9 [# G( F6 F6 K+ C
    ( Z- n; d3 f7 X% Uqmax = int(len(D_data)/10)
    7 H2 h- `# _& m8 ~6 f( |, s$ S, H# j1 h) b; y
    #bic矩阵
    : H. @9 ~; u2 j: \2 \' k
    3 l* v8 I1 S( G' b" Nbic_matrix = [] % D% P5 q+ ]/ M; z6 O6 _6 K
    for p in range(pmax+1):  W! B. R, H* Z- C
      tmp = []
    ( {' ^5 {0 W5 v7 S4 G  @  for q in range(qmax+1):& [: Z# [9 f  _% }* y1 [  j& s
    #存在部分报错,所以用try来跳过报错。% N& G* d0 \7 ~* V
        try: : I# y0 \( F; S" S: }
          tmp.append(ARIMA(data, (p,1,q)).fit().bic)9 _% r2 u) S, b' R+ [6 S4 U
        except:
    . y4 w  Z/ t& h9 Z      tmp.append(None)
    & H9 r( u& @0 e  w: z* M9 F  bic_matrix.append(tmp)* `; @* E# D7 m; u9 j

    0 P  U* u# c; w7 |: x4 g8 M#从中可以找出最小值
    # ]! I0 m3 D7 J! n9 k3 h4 J. d' f1 P
    bic_matrix = pandas.DataFrame(bic_matrix) 8 C; p4 ~8 i8 r: Y5 \6 z5 l

    / |4 k* j) J, J#先用stack展平,然后用idxmin找出最小值位置。
    3 D6 M2 N; C0 P, }% n7 T
    + X3 G  d4 P* _1 Cp,q = bic_matrix.stack().idxmin() - P! g! R4 x6 q8 K
    . u  G/ |1 V6 @3 G  ]" b

    " k* n1 r9 ?1 b- k! ^, w+ v* l3 S9 o
    print(u'BIC最小的p值和q值为:%s、%s' %(p,q))
    # `0 t' ~) @9 v2 [& d# 取BIC信息量达到最小的模型阶数,结果p为0,q为1,定阶完成。1 u, e2 }( Q4 {  Z( i( w) H. D

    9 @  s' i  z+ g# 6 建立模型和预测
    . O0 \# Z% B5 ]( S- c
    " H! d% Y3 U) A" w" L% F* Bmodel = ARIMA(data, (p,1,q)).fit() . D& u' k) o" n8 B) ]# |$ p
    6 [) Q1 F* ]! [/ g
    #给出一份模型报告
    0 X6 j9 L$ k1 p& ?+ t! T
    8 X2 E8 a' y/ |8 Dmodel.summary2() ( T( J8 \5 i9 h4 D6 V. r

    2 U2 \; w# H9 ?# F#作为期5天的预测,返回预测结果、标准误差、置信区间。2 O) k5 {: c5 H  x0 f

    3 S. L! B' O$ n; Ymodel.forecast(5)3 }3 I6 Z. }0 v' y8 N  m7 k% u4 M2 B7 |

    ) w" d( k+ N" v& X* F* ^5 P' B3 K8 G0 u: F, t) S( v
    ————————————————' p( y0 A, `2 e9 S0 E
    版权声明:本文为CSDN博主「UP Lee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    # K; |' T$ |7 i3 j7 [. d6 o. i原文链接:https://blog.csdn.net/qq_36327687/article/details/85696152( j: r2 d0 f$ z. V

    8 ^" e: @+ [. i, }+ ^6 M' y
    ; v* Y5 N( S" n% Q- m
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    0

    主题

    3

    听众

    92

    积分

    升级  91.58%

  • TA的每日心情
    慵懒
    2020-5-25 19:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    群组2019美赛冲刺课程

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-9-1 04:01 , Processed in 0.682871 second(s), 58 queries .

    回顶部