乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      27、python時(shí)間序列預(yù)測(cè)(ARIMA模型案例代碼)

       阿甘ch1wn8cyc3 2019-03-19

      目錄

      1、模型識(shí)別

      01 主要的模型

      02 截尾和拖尾

      03 如何判斷拖尾和截尾

      2、時(shí)間序列算法公式

      3、詳細(xì)步驟

      01 平穩(wěn)性檢驗(yàn)(adf檢驗(yàn))

      02 對(duì)數(shù)據(jù)進(jìn)行差分構(gòu)造平穩(wěn)序列

      03 平穩(wěn)性監(jiān)測(cè)

      04 白噪聲檢驗(yàn)

      05 定階

      06 模型預(yù)測(cè)

      4、案例代碼


      1、模型識(shí)別

      01 主要的模型

      AR(P)模型(Autoregressive Model)

          自回歸模型描述的是當(dāng)前值與歷史值之間的關(guān)系
              
      MA(q)模型(Moving Average Model)
           移動(dòng)平均模型描述的是自回歸部分的誤差累計(jì)
         
       ARIMA模型(Autoregressive Integrated Moving Average Model)

          所謂ARIMA模型,是指將非平穩(wěn)時(shí)間序列轉(zhuǎn)化為平穩(wěn)時(shí)間序列,然后將因變量?jī)H對(duì)它的之后值以及隨機(jī)誤差項(xiàng)的現(xiàn)值和滯后值進(jìn)行回歸所建立的模型
          
          Xt=自回歸AR+移動(dòng)平均MA模型

      模型 自相關(guān)系數(shù) 偏自相關(guān)系數(shù)
      AR(P)  拖尾 P階截尾
      MA(q) q階截尾 拖尾
      ARMA(P,q) p階拖尾 q階拖尾

      02 截尾和拖尾

      (1)p階自回歸模型 AR(P) 
      AR(p)模型的偏自相關(guān)函數(shù)PACF在p階之后應(yīng)為零,稱(chēng)其具有截尾性; 
      AR(p)模型的自相關(guān)函數(shù)ACF不能在某一步之后為零(截尾),而是按指數(shù)衰減(或成正弦波形式),稱(chēng)其具有拖尾性。

      (2)q階移動(dòng)平均模型 MA(q) 
      MA(q)模型的自相關(guān)函數(shù)ACF在q階之后應(yīng)為零,稱(chēng)其具有截尾性; 
      MA(q)模型的偏自相關(guān)函數(shù)PACF不能在某一步之后為零(截尾),而是按指數(shù)衰減(或成正弦波形式),稱(chēng)其具有拖尾性。

      03 如何判斷拖尾和截尾


      (1)如果樣本自相關(guān)系數(shù)(或偏自相關(guān)系數(shù))在最初的d階明顯大于2倍標(biāo)準(zhǔn)差范圍,而后幾乎95%的樣本自相關(guān)(偏自相關(guān))系數(shù)都落在2倍標(biāo)準(zhǔn)差范圍以?xún)?nèi),而且由非零自相關(guān)(偏自相關(guān))系數(shù)衰減為小值波動(dòng)的過(guò)程非常突然,這時(shí),通常視為自相關(guān)(偏自相關(guān))系數(shù)截尾。

      (2)如果有超過(guò)5%的樣本相關(guān)系數(shù)落在2倍標(biāo)準(zhǔn)差范圍以外,或者是由顯著非零的相關(guān)函數(shù)衰減為小值波動(dòng)的過(guò)程比較緩慢或者非常連續(xù),這時(shí),通常視為相關(guān)系數(shù)不截尾。

      2、時(shí)間序列算法公式

      重要的幾種為:AR、MA、ARMA、ARIMA模型,具體公式見(jiàn)下圖:

      3、詳細(xì)步驟

      01 平穩(wěn)性檢驗(yàn)(adf檢驗(yàn))


      #  a  時(shí)序圖檢驗(yàn)

      根據(jù)平穩(wěn)時(shí)間序列的均值和方差都為常數(shù)的性質(zhì),平穩(wěn)序列的時(shí)序圖顯示該序列值始終在一個(gè)常熟附近隨機(jī)波動(dòng),而且波動(dòng)的范圍有界;如果有明顯的趨勢(shì)性或者周期性,那他通常不是平穩(wěn)序列

      #  b 自相關(guān)圖檢驗(yàn)。

      平穩(wěn)序列具有短期相關(guān)性民政性質(zhì)對(duì)平穩(wěn)序列而言通常只有近期的序列值對(duì)現(xiàn)時(shí)值的影響比較明顯,間隔越遠(yuǎn)的過(guò)去只對(duì)現(xiàn)時(shí)值得影響越小。隨著延遲期數(shù)K的增加,平穩(wěn)序列的自相關(guān)系數(shù)Pk(延遲K期)會(huì)比較快的衰減趨向于零,并在零附近隨機(jī)波動(dòng),而非平穩(wěn)序列的自相關(guān)系數(shù)衰減的速度比較慢,這就是利用自相關(guān)圖進(jìn)行平穩(wěn)性檢驗(yàn)的標(biāo)準(zhǔn)


      #c 單位根檢驗(yàn)  

      單位根檢驗(yàn)是指檢驗(yàn)序列中是否存在單位根,如果存在單位根就是非平穩(wěn)時(shí)間序列了


      # ADF單位根檢驗(yàn)

      其中第二中的ADF檢驗(yàn)中,如果p值顯著大于0.05,統(tǒng)計(jì)量化大于三個(gè)或者兩個(gè)水平值,差距越大,越不平穩(wěn)。

      若統(tǒng)計(jì)量顯著小于三個(gè)置信度且p值接近0,為平穩(wěn)序列

      其他情況,可能是數(shù)據(jù)量不夠的原因沒(méi)有展現(xiàn)趨勢(shì)

      02 對(duì)數(shù)據(jù)進(jìn)行差分構(gòu)造平穩(wěn)序列

      差分運(yùn)算:

      p階差分

      相聚一期的兩個(gè)序列值之間的減法運(yùn)算稱(chēng)為I階差分運(yùn)算

      k步差分

      相聚k期的兩個(gè)序列值之間的減法運(yùn)算稱(chēng)為k步chafenyunsuan

      #差分后的結(jié)果
      D_data = data.diff(k).dropna()

      k 相距k時(shí)間

      一般在一階差分后就是比較平穩(wěn)的序列

      03 平穩(wěn)性監(jiān)測(cè)

      04 白噪聲檢驗(yàn)

      #白噪聲檢驗(yàn)
      from statsmodels.stats.diagnostic import acorr_ljungbox

      #返回統(tǒng)計(jì)量和p值

      print(u'差分序列的白噪聲檢驗(yàn)結(jié)果為:', acorr_ljungbox(D_data, lags=1))  # 分別為stat值(統(tǒng)計(jì)量)和P值

      # P值小于0.05,所以一階差分后的序列為平穩(wěn)非白噪聲序列。

      05 定階

      第一種方法人為識(shí)別

      一階差分后自相關(guān)圖顯示1階截尾,

      偏自相關(guān)顯示托尾性,所以建立ARIMA(0,1,1)

      第二種:相對(duì)最優(yōu)模型識(shí)別

      計(jì)算ARMA(p,q)。當(dāng)p,q均小于所組合BIC信息量,取其中BIC信息量達(dá)到最小的模型階數(shù)

      確定pq值

      from statsmodels.tsa.arima_model import ARIMA
      #定階

      #一般階數(shù)不超過(guò)length/10

      pmax = int(len(D_data)/10) 

      #一般階數(shù)不超過(guò)length/10

      qmax = int(len(D_data)/10) 


      #bic矩陣

      bic_matrix = [] 
      for p in range(pmax+1):
        tmp = []
        for q in range(qmax+1):
      #存在部分報(bào)錯(cuò),所以用try來(lái)跳過(guò)報(bào)錯(cuò)。
          try: 
            tmp.append(ARIMA(data, (p,1,q)).fit().bic)
          except:
            tmp.append(None)
        bic_matrix.append(tmp)

      #從中可以找出最小值

      bic_matrix = pandas.DataFrame(bic_matrix) 

      #先用stack展平,然后用idxmin找出最小值位置。

      p,q = bic_matrix.stack().idxmin() 

      print(u'BIC最小的p值和q值為:%s、%s' %(p,q))

      # 取BIC信息量達(dá)到最小的模型階數(shù),結(jié)果p為0,q為1,定階完成。

      06 模型預(yù)測(cè)


       #建立ARIMA(0, 1, 1)模型

      model = ARIMA(data, (p,1,q)).fit() 

      #給出一份模型報(bào)告

      model.summary2() 

      #作為期5天的預(yù)測(cè),返回預(yù)測(cè)結(jié)果、標(biāo)準(zhǔn)誤差、置信區(qū)間。

      model.forecast(5)
       

      4、案例代碼


      1. import pandas

      2. # 讀取數(shù)據(jù),指定日期為索引列

      3. data = pandas.read_csv(
      4. 'D:\\DATA\\pycase\\number2\\9.3\\Data.csv' ,
      5. index_col='日期'
      6. )

      7. # 繪圖過(guò)程中

      8. import matplotlib.pyplot as plt

      9. # 用來(lái)正常顯示中文標(biāo)簽

      10. plt.rcParams['font.sans-serif']=['SimHei']

      11. # 用來(lái)正常顯示負(fù)號(hào)

      12. plt.rcParams['axes.unicode_minus'] = False

      13. # 查看趨勢(shì)圖
      14. data.plot() #有增長(zhǎng)趨勢(shì),不平穩(wěn)


      15. # 附加:查看自相關(guān)系數(shù)合片自相關(guān)系數(shù)(查分之后),可以用于平穩(wěn)性的檢測(cè),也可用于定階系數(shù)預(yù)估

      16. #自相關(guān)圖()

      17. from statsmodels.graphics.tsaplots import plot_acf

      18. plot_acf(data).show() #自相關(guān)圖既不是拖尾也不是截尾。以上的圖的自相關(guān)是一個(gè)三角對(duì)稱(chēng)的形式,這種趨勢(shì)是單調(diào)趨勢(shì)的典型圖形,說(shuō)明這個(gè)序列不是平穩(wěn)序列





      19. # 1 平穩(wěn)性檢測(cè)

      20. from statsmodels.tsa.stattools import adfuller as ADF


      21. def tagADF(t):
      22. result = pandas.DataFrame(index=[
      23. "Test Statistic Value", "p-value", "Lags Used",
      24. "Number of Observations Used",
      25. "Critical Value(1%)", "Critical Value(5%)", "Critical Value(10%)"
      26. ], columns=['銷(xiāo)量']
      27. );
      28. result['銷(xiāo)量']['Test Statistic Value'] = t[0]
      29. result['銷(xiāo)量']['p-value'] = t[1]
      30. result['銷(xiāo)量']['Lags Used'] = t[2]
      31. result['銷(xiāo)量']['Number of Observations Used'] = t[3]
      32. result['銷(xiāo)量']['Critical Value(1%)'] = t[4]['1%']
      33. result['銷(xiāo)量']['Critical Value(5%)'] = t[4]['5%']
      34. result['銷(xiāo)量']['Critical Value(10%)'] = t[4]['10%']
      35. return result;


      36. print('原始序列的ADF檢驗(yàn)結(jié)果為:',tagADF(ADF(data[u'銷(xiāo)量']))) # 添加標(biāo)簽后展現(xiàn)

      37. # 平穩(wěn)判斷:得到統(tǒng)計(jì)量大于三個(gè)置信度(1%,5%,10%)臨界統(tǒng)計(jì)值,p值顯著大于0.05,該序列為非平穩(wěn)序列。
      38. # 備注:得到的統(tǒng)計(jì)量顯著小于3個(gè)置信度(1%,5%,10%)的臨界統(tǒng)計(jì)值時(shí),為平穩(wěn) 此時(shí)p值接近于0 此處不為0,嘗試增加數(shù)據(jù)量,原數(shù)據(jù)太少

      39. # 2 進(jìn)行數(shù)據(jù)差分,一般一階差分就可以

      40. D_data = data.diff(1).dropna()
      41. D_data.columns = [u'銷(xiāo)量差分']

      42. #差分圖趨勢(shì)查看

      43. D_data.plot()
      44. plt.show()

      45. # 附加:查看自相關(guān)系數(shù)合片自相關(guān)系數(shù)(查分之后),可以用于平穩(wěn)性的檢測(cè),也可用于定階系數(shù)預(yù)估

      46. #自相關(guān)圖

      47. plot_acf(D_data).show()

      48. plt.show()

      49. #偏自相關(guān)圖

      50. from statsmodels.graphics.tsaplots import plot_pacf

      51. plot_pacf(D_data).show()

      52. # 3 平穩(wěn)性檢測(cè)

      53. print(u'差分序列的ADF檢驗(yàn)結(jié)果為:', tagADF(ADF(D_data[u'銷(xiāo)量差分'])))

      54. # 解釋?zhuān)篢est Statistic Value值小于兩個(gè)水平值,p值顯著小于0.05,一階差分后序列為平穩(wěn)序列。

      55. # 4 白噪聲檢驗(yàn)
      56. from statsmodels.stats.diagnostic import acorr_ljungbox

      57. #返回統(tǒng)計(jì)量和p值

      58. print(u'差分序列的白噪聲檢驗(yàn)結(jié)果為:', acorr_ljungbox(D_data, lags=1)) # 分別為stat值(統(tǒng)計(jì)量)和P值

      59. # P值小于0.05,所以一階差分后的序列為平穩(wěn)非白噪聲序列。


      60. # 5 p,q定階

      61. from statsmodels.tsa.arima_model import ARIMA

      62. #一般階數(shù)不超過(guò)length/10

      63. pmax = int(len(D_data)/10)


      64. #一般階數(shù)不超過(guò)length/10

      65. qmax = int(len(D_data)/10)

      66. #bic矩陣

      67. bic_matrix = []
      68. for p in range(pmax+1):
      69. tmp = []
      70. for q in range(qmax+1):
      71. #存在部分報(bào)錯(cuò),所以用try來(lái)跳過(guò)報(bào)錯(cuò)。
      72. try:
      73. tmp.append(ARIMA(data, (p,1,q)).fit().bic)
      74. except:
      75. tmp.append(None)
      76. bic_matrix.append(tmp)

      77. #從中可以找出最小值

      78. bic_matrix = pandas.DataFrame(bic_matrix)

      79. #先用stack展平,然后用idxmin找出最小值位置。

      80. p,q = bic_matrix.stack().idxmin()



      81. print(u'BIC最小的p值和q值為:%s、%s' %(p,q))
      82. # 取BIC信息量達(dá)到最小的模型階數(shù),結(jié)果p為0,q為1,定階完成。

      83. # 6 建立模型和預(yù)測(cè)

      84. model = ARIMA(data, (p,1,q)).fit()

      85. #給出一份模型報(bào)告

      86. model.summary2()

      87. #作為期5天的預(yù)測(cè),返回預(yù)測(cè)結(jié)果、標(biāo)準(zhǔn)誤差、置信區(qū)間。

      88. model.forecast(5)



       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多