博客
关于我
python之时间序列算法(ARMA)
阅读量:237 次
发布时间:2019-03-01

本文共 2854 字,大约阅读时间需要 9 分钟。

关于时间序列算法的分类与分析

传统的统计学方法是处理时间序列的重要方式之一。这些方法可以追溯到随机游走模型(RW)、历史平均模型(HA)、马尔科夫模型、时间序列模型以及卡尔曼滤波模型。RW和HA依赖于理论假设,未能充分考虑交通流量的波动性,导致预测结果与实际数据差异较大。而马尔科夫模型、时间序列模型和卡尔曼滤波模型则基于现有道路交通流量数据,假定数据符合某种概率分布,从而进行模型训练和参数估计。

ARMA模型介绍

ARMA模型是一种经典的统计学时间序列模型,其名称由AR(自回归模型)和MA(移动平均模型)两个部分组成。AR模型假设时间序列的值主要受到过去若干期的影响,误差项则视为当期的随机扰动。MA模型则假设误差项主要受到过去若干期随机扰动的影响。

AR模型的数学表达式为: [ X(t) = \phi_1 X(t-1) + \phi_2 X(t-2) + \dots + \phi_p X(t-p) + \varepsilon(t) ] 其中,(\phi_1, \phi_2, \dots, \phi_p) 是自回归系数,(\varepsilon(t)) 是随机扰动项。

MA模型的数学表达式为: [ X(t) = \theta_1 \varepsilon(t-1) + \theta_2 \varepsilon(t-2) + \dots + \theta_q \varepsilon(t-q) ] 其中,(\theta_1, \theta_2, \dots, \theta_q) 是移动平均系数。

ARMA模型结合了AR和MA的优势,整体表达式为: [ X(t) = \phi_1 X(t-1) + \phi_2 X(t-2) + \dots + \phi_p X(t-p) + \theta_1 \varepsilon(t-1) + \theta_2 \varepsilon(t-2) + \dots + \theta_q \varepsilon(t-q) ]

非平稳时间序列分析

在实际应用中,大部分时间序列数据都是非平稳的。非平稳时间序列分析主要包括两类:

  • 确定性因素分析:将时间序列的变化归结为长期趋势、季节变动、循环变动和随机波动四个因素的综合影响。其中,长期趋势和季节变动较为明显,而循环变动和随机波动难以确定。

  • 随机时序分析:针对确定性因素分析的不足,使用随机序列模型进行分析。常用的模型包括ARIMA、季节模型、异方差模型等。ARIMA模型通过差分运算将非平稳序列转化为平稳序列,再进行建模。ARIMA模型的核心是对非平稳序列进行差分处理,得到差分平稳序列后,使用ARMA模型进行拟合。

  • ARMA模型案例

    以Python的statsmodels库为例,以下是一个典型的ARMA模型应用案例:

    数据准备

    读取数据文件,包含日期和销量数据。

    import pandas as pd
    import matplotlib.pyplot as plt
    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    # 读取数据文件
    discfile = 'data/arima_data.xls'
    data = pd.read_excel(discfile, index_col='日期')
    # 设置中文支持
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    # 可视化数据
    data.plot()
    plt.show()

    平稳性检验

    通过自相关函数(ACF)和ADF检验发现数据呈现明显的非平稳性。

    # 自相关图
    plot_acf(data).show()
    # ADF检验
    from statsmodels.tsa.stattools import adfuller
    print('原始序列的ADF检验结果为:', adfuller(data['销量']))

    差分与平稳性检验

    对数据进行一阶差分,得到差分序列,进一步验证平稳性。

    # 一阶差分
    D_data = data.diff().dropna()
    D_data.columns = ['销量差分']
    # 可视化差分序列
    D_data.plot()
    plt.show()
    # 自相关图
    plot_acf(D_data).show()
    # 偏自相关图
    plot_pacf(D_data).show()
    # 平稳性检验
    print('差分序列的ADF检验结果为:', adfuller(D_data['销量差分']))

    白噪声检验

    检验差分序列是否为白噪声,结果显示非白噪声。

    from statsmodels.stats.diagnostic import acorr_ljungbox
    # 白噪声检验
    print('差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1))

    ARMA模型定阶

    通过BIC信息量检验确定模型的自回归阶数(p)和移动平均阶数(q)。

    # 定阶
    pmax = int(len(D_data)/10)
    qmax = int(len(D_data)/10)
    bic_matrix = []
    for p in range(pmax + 1):
    tmp = []
    for q in range(qmax + 1):
    try:
    model = ARIMA(D_data, (p, 1, q)).fit()
    tmp.append(model.bic)
    except:
    tmp.append(None)
    bic_matrix.append(tmp)
    bic_matrix = pd.DataFrame(bic_matrix)
    p, q = bic_matrix.stack().idxmin()
    print('BIC最小的p值和q值为:%s、%s' % (p, q))

    模型应用

    使用确定的(p=0)和(q=1)阶数,建立ARIMA(0,1,1)模型进行预测。

    model = ARIMA(data, (0, 1, 1)).fit()
    # 模型报告
    print('模型报告为:\n', model.summary2())
    # 预测未来5天
    forecasts = model.forecast(5)
    print('预测结果及信息:\n', forecasts)

    总结

    通过上述步骤,我们可以清晰地看到ARMA模型在处理非平稳时间序列数据中的应用。尽管传统方法如ARMA模型在某些场景下表现优异,但在复杂场景下深度学习模型(如LSTM、GRU、TCN等)往往更具优势。

    转载地址:http://gnpv.baihongyu.com/

    你可能感兴趣的文章
    npm ERR! Unexpected end of JSON input while parsing near '...on":"0.10.3","direc to'
    查看>>
    npm ERR! Unexpected end of JSON input while parsing near ‘...“:“^1.2.0“,“vue-html-‘ npm ERR! A comp
    查看>>
    npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
    查看>>
    npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
    查看>>
    npm install CERT_HAS_EXPIRED解决方法
    查看>>
    npm install digital envelope routines::unsupported解决方法
    查看>>
    npm install 卡着不动的解决方法
    查看>>
    npm install 报错 EEXIST File exists 的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>
    npm install 报错 Failed to connect to github.com port 443 的解决方法
    查看>>
    npm install 报错 fatal: unable to connect to github.com 的解决方法
    查看>>
    npm install 报错 no such file or directory 的解决方法
    查看>>
    npm install 权限问题
    查看>>
    npm install报错,证书验证失败unable to get local issuer certificate
    查看>>
    npm install无法生成node_modules的解决方法
    查看>>
    npm install的--save和--save-dev使用说明
    查看>>
    npm node pm2相关问题
    查看>>
    npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
    查看>>
    npm run build报Cannot find module错误的解决方法
    查看>>
    npm run build部署到云服务器中的Nginx(图文配置)
    查看>>