Python时间序列--ARIMA模型参数选择(六)

2023-11-12

ARIMA模型参数选择流程

import pandas as pd
import numpy as np

# TSA from Statsmodels
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt

# Display and Plotting
import matplotlib.pylab as plt
import seaborn as sns

pd.set_option('display.float_format', lambda x: '%.5f' % x) # pandas
np.set_printoptions(precision=5, suppress=True) # numpy

pd.set_option('display.max_columns', 100)
pd.set_option('display.max_rows', 100)

# seaborn plotting style
sns.set(style='ticks', context='poster')

1.数据读取
CSV格式的数据示例
在这里插入图片描述

#parse_dates参数:将csv中的时间字符串转换成日期格式
#index_col=0 第一列为index值
ts_df = pd.read_csv('data/series1.csv',
                    index_col=0, parse_dates=[0])
n_sample = ts_df.shape[0]
print(ts_df.shape)
print(ts_df.head())

在这里插入图片描述
2.训练集、测试集划分

# 创建训练集和测试集
n_train=int(0.95*n_sample)+1 #95%作为训练集
n_forecast=n_sample-n_train #5%作为测试集
#ts_df
ts_train = ts_df.iloc[:n_train]['value']
ts_test = ts_df.iloc[n_train:]['value']

3.统计图、ACF、PACF图

'''
使用plt.subplot2grid来创建第1个小图, (3,3)表示将整个图像窗口分成3行3列, (0,0)表示从第0行第0列开始作图,colspan=3表示列的跨度为3, rowspan=1表示行的跨度为1. colspan和rowspan缺省, 默认跨度为1.
ax1 = plt.subplot2grid((3, 3), (1, 0), colspan=2)
使用plt.subplot2grid来创建第2个小图, (3,3)表示将整个图像窗口分成3行3列, (1,0)表示从第1行第0列开始作图,colspan=2表示列的跨度为2. 同上画出 ax3, (1,2)表示从第1行第2列开始作图,rowspan=2表示行的跨度为2. 再画一个 ax4 和 ax5, 使用默认 colspan, rowspan。
ax2 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
'''

def tsplot(y, lags=None, title='', figsize=(14, 8)):
    
    fig = plt.figure(figsize=figsize)
    layout = (2, 2)
    ts_ax   = plt.subplot2grid(layout, (0, 0))
    hist_ax = plt.subplot2grid(layout, (0, 1))
    acf_ax  = plt.subplot2grid(layout, (1, 0))
    pacf_ax = plt.subplot2grid(layout, (1, 1))
    
    y.plot(ax=ts_ax)
    ts_ax.set_title(title)
    y.plot(ax=hist_ax, kind='hist', bins=25)
    hist_ax.set_title('Histogram')
    smt.graphics.plot_acf(y, lags=lags, ax=acf_ax)
    smt.graphics.plot_pacf(y, lags=lags, ax=pacf_ax)
    [ax.set_xlim(0) for ax in [acf_ax, pacf_ax]]
    sns.despine()
    fig.tight_layout()
    return ts_ax, acf_ax, pacf_ax
tsplot(ts_train, title='A Given Training Series', lags=20);

在这里插入图片描述4.模型训练

arima200 = sm.tsa.SARIMAX(ts_train, order=(2,0,0))
model_results = arima200.fit()

当ACF图和PACF图显示pq值可能有多个值,可以用组合的方式确定更好的pq值

import itertools

p_min = 0
d_min = 0
q_min = 0
p_max = 4
d_max = 0
q_max = 4

# Initialize a DataFrame to store the results
results_bic = pd.DataFrame(index=['AR{}'.format(i) for i in range(p_min,p_max+1)],
                           columns=['MA{}'.format(i) for i in range(q_min,q_max+1)])

for p,d,q in itertools.product(range(p_min,p_max+1),
                               range(d_min,d_max+1),
                               range(q_min,q_max+1)):
    if p==0 and d==0 and q==0:
        results_bic.loc['AR{}'.format(p), 'MA{}'.format(q)] = np.nan
        continue
    
    try:
        model = sm.tsa.SARIMAX(ts_train, order=(p, d, q),
                               #enforce_stationarity=False,
                               #enforce_invertibility=False,
                              )
        results = model.fit()
        results_bic.loc['AR{}'.format(p), 'MA{}'.format(q)] = results.bic
    except:
        continue
results_bic = results_bic[results_bic.columns].astype(float)

利用BIC或AIC来确定,值越小越好。

fig, ax = plt.subplots(figsize=(10, 8))
ax = sns.heatmap(results_bic,
                 mask=results_bic.isnull(),
                 ax=ax,
                 annot=True,
                 fmt='.2f',
                 );
ax.set_title('BIC');

在这里插入图片描述越黑越小


train_results = sm.tsa.arma_order_select_ic(
                            ts_train, 
                            ic=['aic', 'bic'],
                            trend='nc', 
                            max_ar=4, 
                            max_ma=4)

print('AIC', train_results.aic_min_order)
print('BIC', train_results.bic_min_order)
out:
AIC (4, 2)
BIC (1, 1)

5.模型检测
模型残差检验:

  • ARIMA模型的残差是否是平均值为0且方差为常数的正态分布
  • QQ图:线性即正态分布
#残差分析 正态分布 QQ图线性
model_results.plot_diagnostics(figsize=(16, 12));

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python时间序列--ARIMA模型参数选择(六) 的相关文章

  • Ubuntu彻底卸载pycharm的方法

    1 查看配置信息位置 首先在解压的pycharm 2020 2 1文件夹中 查看Install Linux tar txt 找到配置信息的位置 下图中蓝色标识 2 卸载安装文件 首先找到安装文件所在的目录 cd 切换至其目录 然后 sudo
  • 深入了解React:组件化开发与状态管理

    简介 React是一个流行的JavaScript库 用于构建用户界面 它以其高效的虚拟DOM和组件化开发的思想而闻名 使得构建复杂的Web应用程序变得更加简单和可维护 本篇博客将带您深入了解React的基本概念 组件化开发和状态管理 帮助您
  • FISCO BCOS(三十六)———Python Sdk window环境部署及应用开发

    1 环境要求 Python环境 python 3 6 3 3 7 3 最好是3 7 3 因为我是 FISCO BCOS节点 可以直接建链 可以是节点前置 也可以是一键部署 2 安装python 2 1 python下载地址 https ww
  • COM 组件设计与应用(十一)

    COM 组件设计与应用 十一 IDispatch 及双接口的调用作者 杨老师 下载源代码一 前言 前段时间 由于工作比较忙 没有能及时地写作 其间收到了很多网友的来信询问和鼓励 在此一并表示感谢 咳 我也需要工作来养家糊口呀 上回书介绍了两
  • linux系统函数总结(一)

    realpath include
  • c陷阱与缺陷

    第一章 词法陷阱 1 这一章没有太多 干货 唯一比较有趣的就是 1 3 语法分析中的 贪心法 所讲内容 这个 贪心 就是编译器会读入字符 如果能新读入的字符和之前所读入字符能组成符号 则编译器会继续读入下一个字符 直到读入的字符不能和之前的
  • BLE MESH组网(五)配置BLE MESH

    BLE MESH 五 配置BLE MESH 前言 概述 配置协议 供应程序 信标 邀请 交换公钥 前言 2017 年 5 月 全球最臭名昭著的勒索软件 WannaCry 在全球范围内积极攻击计算机 劫持用户数据索要赎金 这次攻击影响了 15
  • kafka性能参数和压力测试揭秘

    上一篇文章介绍了Kafka在设计上是如何来保证高时效 大吞吐量的 主要的内容集中在底层原理和架构上 属于理论知识范畴 这次我们站在应用和运维的角度 聊一聊集群到位后要怎么才能最好的配置参数和进行测试性能 Kafka的配置详尽且复杂 想要进行
  • 空间坐标系坐标变换及matlab代码实现

    1 前言 下文中描述坐标系使用了英文的简写 OS Origin Space 原始空间坐标系 NS New Space 新空间坐标系 2 坐标变换介绍 为了解决这个问题 可以利用机器人学中的位姿变换来进行描述 以下依次介绍坐标平移 坐标旋转和
  • j2ee mysql struts_Java新手如何学习Spring、Struts、Hibernate三大框架?

    如何通过java开发培训成为java技术抓紧 这里面java的基础语法很重要 同时 要从基础开始到java的深度编程 这里提炼出一些技术知识点 来避免一些误区 拉勾IT课小编为大家分解 这里面的一些技巧 1 避免使用正则表达式 正则表达式给
  • K8S第三讲 Kubernetes集群配置网络插件

    在Kubernetes集群中 网络插件是必需的 因为它们为Pod提供了可访问的IP地址 并确保它们能够相互通信 Kubernetes支持多种网络插件 包括Calico Flannel Weave Net等 这里以Calico为例介绍如何配置
  • 通过数组下标获取值都有哪些方法_js: 数组

    定义 数组是一种有序数据结合 创建方式 直接量 var a 1 2 构造函数 var b new Array 1 2 注意 构造函数中只传一个参数会变成长度 数组API var arr 0 1 2 push 添加元素 返回length 并把
  • Vue 艺术字体下载、设置

    1 本人常用的下载地址 https zh fonts2u com 2 找到你需要的字体点击下载 3 下载完之后有一个ttf文件 4 在vue里面 我个人在assets文件下创建一个文件夹 叫什么名字都行 找到你下载的ttf文件 把ttf文件
  • 【笔记】c编译执行过程

    c语言 c gt exe 过程 E 预处理 把 h和 c展开形成一个文件 宏定义直接替换 库文件 头文件打开 生成 i文件 gcc E hello c o hello i S 编译 i生成一个汇编代码文件 s gcc S hello i o
  • ES6 Symbol

    概览 const mySymbol Symbol mySymbol console log mySymbol Symbol mySymbol console log mySymbol Symbol mySymbol false consol
  • 收藏!生物信息学数据库大全,全网最全收集整理!

    综合数据库 INSD 国际核酸序列数据库 International Nucleotide Sequence Databank 由日本的DDBJ 欧洲的EMBL和美国的GenBank三家各自建立和共同维护 EMBL库 欧洲分子生物学实验室的
  • MySQL 全面知识总结

    基础 Mysql存储特点 Mysql存储数据以数据页为最小单位 在同一个数据页中 数据按照主键 连续存储 如果没有主键 则按照Mysql维护的 ROW ID 来连续存储 数据页和数据页之间以双向链表关联 数据和数据之间以单向链表关联 SQL
  • Go基础(复杂类型):结构体

    结构体 一个结构体 struct 就是一个字段的集合 而 type 的含义跟其字面意思相符 下面来写一个简单的例子 package main import fmt 一个结构体就是一个字段的集合 type Vertex struct X in

随机推荐

  • MATLAB机器人工具箱1-位姿描述及轨迹

    1 位姿描述 1 1 二维空间位姿描述 开启机器人工具箱 startup rvc 代码 clc clear 开启机器人工具箱 startup rvc 二维平面内的位姿描述 T1 SE2 1 2 30 pi 180 建立齐次坐标变换 代表 1
  • SSM毕业设计分享 疫情防控物业管理系统

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 开发环境 3 3 系统结构设计 4 项目获取 1 项目简介 Hi 各位同学好呀 这里是M学姐 今天向大家分享一个今年 2022 最新完成的毕业设计项
  • C++ 函数重载(多态)、函数模板

    内容均出自 C primer plus 本文仅为个人理解总结所用 若有不明欢迎站内私信交流 若发现文中错漏之处 期待不吝赐教站内私信 一 函数重载 多态 先上定义 C Premer Plus page276 函数多态是C 在C语言的基础上新
  • iOS平台Socket编程实践(一)

    iOS平台Socket编程实践 关于TCP Socket编程基础可以参看我的 我所不知道的TCP Socket编程 系列文章 iOS平台Socket编程主要内容及辅助工具 1 TCP协议编程 2 UDP协议编程 3 WireShark抓包辅
  • QT5.15.2安装教程

    QT属于开源项目 从QT5 15开始都统一为下载器在线安装的方式 安装较为简单 1 下载好在线下载器 QT对5 15以及以上版本已经停止提供离线安装包 但是 5 15以及以上版本都支持在线安装 清华镜像 Qt5 15及其以上版本在https
  • DCIC2021学习笔记 - TASK 2 结果提升

    采用建议库函数结果为17 4530 经过KNN结果为17 51 提升不大 尝试调研滴滴出行调度方案后修改结果 To Do List 调研论文 OM 滴滴 在线司机调度系统的实践研究 OM 北邮X滴滴 基于最小车队的动态车辆调度
  • 超实用的Mac风扇控制系统:Macs Fan Control Pro mac中文版

    Macs Fan Control Pro Mac中文激活版是专为mac用户开发的一款Mac风扇控制系统 用户可以监控电脑中的显卡温度 以及风扇等等 可以帮你解决mac风扇噪音问题 解决mac发热问题 而且支持自定义风扇转速策略设置 非常好用
  • 面试准备计划

    C 知识点 基本概念 关键字 函数底层实现 Linux 指令 makefile c make 数据库 SQL 基本语法 存储过程 触发器 事务 索引等底层实现 存储引擎 非关系型数据库redis mapreduce HDFS 操作系统 进程
  • 从零开始搭建自己的VueJS2.0+ElementUI单页面网站(一、环境搭建)

    前言 VueJS可以说是近些年来最火的前端框架之一 越来越多的网站开始使用vuejs作为前端框架 vuejs轻量 简单的特性使得前端开发变得更加简易 而基于vuejs的前端组件库也越来越多 我们今天使用的ElementUI 是饿了么团队开发
  • select下拉列表级联

    原文地址 http blog csdn net symgdwyh article details 5432582
  • Python学习(十)之数字(Number)、字符串(String)

    文章目录 一 Python3 数字 1 整型的不同进制 2 数据类型的转换 3 数字运算 4 数学函数 5 随机数函数 6 三角函数 7 数字常量 二 Python3 字符串 1 对字符串的访问 2 字符串运算符 3 转义字符 4 字符串格
  • GLP(Grafna +Loki +Promtail)日志可视化企业级实战

    文章目录 1 效果展示 Loki 指标展示 日志展示 内存分析案例 业务请求量分析统计 自由探索日志 0 简介 grafana学习 自定义查询按钮 为什么不是ELK ELK Loki 1 loki聚合组件 架构
  • phpstudy2016 RCE漏洞验证

    文章目录 漏洞描述 漏洞验证 漏洞描述 PHPStudyRCE Remote Code Execution 也称为phpstudy backdoor漏洞 是指PHPStudy软件中存在的一个远程代码执行漏洞 漏洞验证 打开phpstudy2
  • 小熊个人资料_抖音网红熊董事长个人资料,美迪智董事长张曼如信息介绍

    想必大家最近都被抖音上面一只勤勤恳恳发传单的熊给刷屏了吧 广州那么热的天别说女孩子穿着那么厚的衣服满街跑 就连男生也不行啊 毕竟那个衣服里面是不透气的 最开始大家是被这个网红熊的坚持感动到了 后来才知道发传单的只是一个20岁的女生 后来大家
  • Promise原理

    一 Promise与异步的关系 之前做练习遇到Promise与SetTimeout的混合使用 自己发现对于Promise的理解不够彻底 所以今天就来看看这方面的问题 首先Promise的主要作用是能够处理异步问题 那么什么是异步呢 与它相反
  • <li>标签获取选中的值

    ul class payType li class selected 支付宝付款 li li 货到付款 li ul window nl ad function 获取id为zhifubao下边所有li标签 var fukuan documen
  • 【k8s故障处理篇】kubernetes集群中工作节点Noready故障处理

    k8s故障处理篇 kubernetes集群中工作节点Noready故障处理 一 查看故障情况 二 检查master节点系统pod是否运行正常 三 在master节点检查node02节点详细信息 四 检查node02节点日志 五 最终解决方法
  • [Nowcoder

    题目描述 There s a new art installation in town and it inspires you to play a childish game The art installation consists of
  • QT给控件QLineEdit添加clicked()事件方法

    做Qt开发的会知道QLineEdit是默认没有clicked事件的 但是Qt有很好的一套信号 槽机制 而且Qt是基于C 面向对象的思想来设计的 那么我们就很容易通过自己定义一些类 重写QLineEdit的一些方法去实现没有的方法 比如cli
  • Python时间序列--ARIMA模型参数选择(六)

    ARIMA模型参数选择流程 import pandas as pd import numpy as np TSA from Statsmodels import statsmodels api as sm import statsmodel