热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

时间序列模型ARMA/ARIMA(二)

文章目录时序特点时序模型的前提时序模型的自相关图和偏自相关图时列模型训练&检验&预测模型评价时序特点一系列相同时间间隔的数据点只有一列数据,没有变量与变量之间的关系线


文章目录

      • 时序特点
      • 时序模型的前提
      • 时序模型的自相关图和偏自相关图
      • 时列模型训练&检验&预测
      • 模型评价


时序特点


  • 一系列相同时间间隔的数据点

  • 只有一列数据,没有变量与变量之间的关系

    线性回归中,有自变量和因变量

  • 数据在时间上有相关性,即前后相关

    线性回归中,数据点间相互独立

  • 用历史数据预测未来数据


时序模型的前提


  • 平稳性

    • 数学上,时序的期望和方差基本上不随时间变动。

    • 时序图上,数据点围绕一个常数上下波动。

    • 统计学上,p-value 是否小于显著水平,比如 0.01。

      # ts:时序
      from statsmodels.tsa.stattools import adfuller
      adf = adfuller( ts )
      print(adf)
      #返回的第一个数据是单位根统计量,第二个是p-value
      # 若 p-value<0.01&#xff0c;则拒绝原假设&#xff0c;i.e. 原时序平稳
      # 原假设&#xff1a;时序存在单位根&#xff0c;i.e. 时序不平稳

    • 若原时序不平稳&#xff0c;要作一阶差分或更高阶差分去除原时序的趋势。

      # 一阶差分
      ts_diff &#61; ts.diff(1)[1:] #作差分的同时去掉第一个NaN值

  • 白噪声检验

    • &#xff08;只有&#xff09;在时序平稳后&#xff0c;检验时序是否在时间上相关。

      from statsmodels.stats.diagnostic import acorr_ljungbox
      noise &#61; acorr_ljungbox( ts, lags&#61;1 )
      # lags&#xff0c;设置时序滞后的阶数
      # 设置多少阶&#xff0c;结果会显示多少阶对应的统计量和p-value
      print( noise )
      # 返回的元组里的第一个数据是统计量&#xff0c;第二个是p-value
      # 若 p-value<0.01&#xff0c;则拒绝原假设&#xff0c;i.e. 原时序在时间上相关
      # 原假设&#xff1a;时序是随机序列


时序模型的自相关图和偏自相关图


  • 用来估计模型的阶数 p,q

    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    fig &#61; plt.figure(figsize&#61;(20,5))
    ax1 &#61; fig.add_subplot(211)
    plot_acf( ts, lags&#61;30, ax&#61;ax1 )
    ax2 &#61; fig.add_subplot(212)
    plot_pacf( ts, lags&#61;30, ax&#61;ax2 )
    # 以上lags可以自行选择


时列模型训练&检验&预测


  • 若原时序平稳&#xff0c;则直接使用 ARMA(p,q) 模型
  • 若原时序不平稳&#xff0c;而通过作差分后平稳&#xff0c;则使用 ARIMA(p,d,q)模型

  1. 寻找模型的最佳阶数(p,q)&#xff1a;

    最佳的 p,q&#xff1a;模型的 aic or bic 最小时。

    # 以原时序平稳且非白噪声为例&#xff0c;直接用 ARMA
    from statsmodels.tsa.arima_model import ARMA, ARIMA
    ts_train &#61; ts[ ts.index<&#61;&#39;2020-04-30&#39; ]
    # 根据自相关图和偏自相关图设置最大的 p,q
    pmax, qmax &#61; 5, 5
    Mid &#61; []
    arma_pq &#61; None
    # 迭代寻找最佳 p,q
    for i in range(pmax&#43;1):for j in range(qmax&#43;1):arma_pq &#61; ARMA(ts_train, (i,j)).fit()Mid[&#39;({},{})&#39;.format(i,j)] &#61; [arma_pq.aic, arma_pq.bic]
    # 根据 aic,bic 同时最小找到最佳 p,q
    p,q &#61; eval(sorted(Mid.items(), key &#61; lambda i:i[1])[0][0])

  2. 训练模型

    # 使用上述找到的最佳 p,q
    arma &#61; ARMA(ts_train, (p,q)).fit()

  3. 模型检验

    # 检验模型是否很好的捕捉了原时序的趋势
    resid &#61; arma.resid # 获取残差
    # 方法一&#xff1a;画残差的相关图&#xff0c;观察是否基本上都处于置信区间内
    plot_acf(resid,lags&#61;40)
    # 方法二&#xff1a;使用 DW 检验残差是否自相关&#xff08;DW接近2&#xff0c;则不存在相关性&#xff09;
    from statsmodels.stats.stattools import durbin_watson
    durbin_watson(resid.values)
    # 方法三&#xff1a;使用 ljungbox 检验残差是否是白噪声&#xff08;残差无自相关性&#xff09;
    acorr_ljungbox( resid, lags&#61;1 )

  4. 模型预测

    # 当模型很好的捕捉了原时序的趋势时# 1、样本内预测&#xff1a;start/end&#xff0c;都是训练集里出现过的日期
    pred_in &#61; arma.predict(start&#61;&#39;20200101&#39;, end&#61;&#39;20200430&#39;)
    ts_test_in &#61; ts[ (ts.index >&#61; &#39;2020-01-01&#39;)&(ts.index <&#61; &#39;2020-04-30&#39;) ] fig &#61; plt.figure(figsize&#61;(20,7))
    ax1 &#61; fig.add_subplot(211)
    ax1.plot(ts_test_in, label&#61;&#39;in-sample test&#39;)
    ax1.plot(pred_in, label&#61;&#39;in-sample prediction&#39;)
    plt.title(&#39;in-sample comparison&#39;)
    plt.legend()# 2、样本外预测&#xff1a;start/end&#xff0c;int&#xff0c;须一部分在训练集内&#xff0c;一部分不在
    pred_out &#61; arma.predict(start&#61;len(ts_train)-30, end&#61;len(ts_train)&#43;30)
    ts_test_out &#61; np.append( np.array(ts_train)[-30:], np.array(ts[ts.index>&#39;2020-04-30&#39;])[:30] )ax2 &#61; fig.add_subplot(212)
    ax2.plot(ts_test_out, label&#61;&#39;out-sample test&#39;)
    ax2.plot(pred_out, label&#61;&#39;out-sample prediction&#39;)
    plt.title(&#39;out-sample comparison&#39;)
    plt.legend()plt.show()


模型评价

1、模型在样本内的预测可以达到一个不错的效果。

2、但是&#xff0c;模型在样本外的预测是一个周期性的 sin 波形&#xff08;试了几种数据都一样&#xff0c;不知道怎么回事&#xff09;。

3、欢迎来评论&#xff01;


推荐阅读
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止”按钮终止“开始”按钮为以下代码调用的已运行功能提供建议 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
author-avatar
缅追逐暗夜的流星
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有