ARIMA差分自回归模型python代码

1.差分自回归模型的基本思想:将预测对象随时间推移而形成的数据序列视为一个随机序列,用一定的数学模型来近似描述这个序列。这个模型一旦被识别后就可以从时间序列的过去值以及现在值来预测未来值。不能对时间序列直接采取线性回归算法是因为时间序列所对应的值并不是独立的。
2.要对非平稳的序列进行平稳处理,因为非平稳的序列不能进行预测。
3.代码:
#!/usr/bin/python

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_model import ARIMA


def date_parse(date):
    return pd.datetime.strptime(date, '%Y-%m')

if __name__ == '__main__':

    data = pd.read_csv('AirPassengers.csv', header = 0, parse_dates = ['Month'], date_parser = date_parse, index_col = ['Month'])
    p,d,q = 2, 1, 2
    data.rename(columns = {'#Passengers':'Passengers'}, inplace = True)
    passengersNums = data['Passengers'].astype(np.float)
    logNums = np.log(passengersNums)
    subtractionNums = logNums - logNums.shift(periods = d)
    rollMeanNums = logNums.rolling(window = q).mean()
    logMRoll = logNums - rollMeanNums

    plt.plot(logNums, 'g-', lw = 2, label = u'log of original')
    plt.plot(subtractionNums, 'y-', lw = 2, label = u'subtractionNums')
    plt.plot(logMRoll, 'r-', lw = 2, label = u'log of original - log of rollingMean')
    plt.legend(loc = 'best')
    plt.show()

    arima = ARIMA(endog = logNums, order = (p,d,q))
    proArima = arima.fit(disp = -1)
    fittedArima = proArima.fittedvalues.cumsum() + logNums[0]
    fittedNums = np.exp(fittedArima)
    plt.plot(passengersNums, 'g-', lw = 2, label = u'orignal')
    plt.plot(fittedNums, 'r-', lw = 2, label = u'fitted')
    plt.legend(loc = 'best')
    plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

解释: 
(1)首先对原始时间序列数据进行对数处理,差分处理,滑动平均处理。其中差分处理与滑动平均处理是对非平稳序列进行平稳处理,结果如图: 
平稳处理 
很明显观察到用差分与原始数据减去滑动平均的结果可以对非平稳序列进行平稳处理。 
(2)然后用差分自回归模型拟合原始数据。其中参数p为自回顾函数的参数,d为差分的参数,q为滑动平均的参数。结果如图: 

拟合结果与原始数据

文章出处:https://blog.csdn.net/zlzl8885/article/details/73188910?utm_source=itdadao&utm_medium=referral

阅读更多
上一篇tensorflow中的基本概念
下一篇预测算法——指数平滑法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭