Python时间序列分析3-非平稳序列的随机分析-SRARIMA

2023-11-15

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np
from datetime import datetime,timedelta
from time import time

数据读取与预处理

cat_fish = pd.read_csv('./data/catfish.csv',parse_dates=[0],index_col=0,squeeze=True)
cat_fish.head()
Date
1986-01-01     9034
1986-02-01     9596
1986-03-01    10558
1986-04-01     9002
1986-05-01     9239
Name: Total, dtype: int64

时序图

plt.plot(cat_fish)
[<matplotlib.lines.Line2D at 0x16f1ea95bb0>]

png

序列有明显的趋势性

start = datetime(2000,1,1)
end = datetime(2004,1,1)
plt.plot(cat_fish[start:end])
[<matplotlib.lines.Line2D at 0x16f1f8b7fa0>]

png

有很明显周期性

自相关系数图

from statsmodels.graphics.tsaplots import plot_acf,plot_pacf

plot_acf(cat_fish.diff(1)[1:],lags=24)

png

png

偏自相关系数图

plot_pacf(cat_fish.diff(1)[1:])

png

png

偏自相关系数图12步差分时,相关系数比较大,剔除趋势性后,原始数据还是呈现出明显的周期性

白噪声检验

from statsmodels.stats.diagnostic import acorr_ljungbox

acorr_ljungbox(cat_fish.diff(1)[1:],lags=[6,12,18,24],return_df=True)
lb_stat lb_pvalue
6 95.719733 1.957855e-18
12 373.541488 1.498233e-72
18 466.300398 1.243989e-87
24 731.756632 5.126647e-139

不是白噪声

使用SARIMA(0,1,0)x(1,0,1,12)进行预测

(0,1,0)是一阶差分,提取趋势性信息
(1,0,1,12)是ARMA(1,1),季节周期为12,提取季节性信息

模型训练

from statsmodels.tsa.statespace.sarimax import SARIMAX
print(cat_fish.index[0],cat_fish.index[-1])
1986-01-01 00:00:00 2012-12-01 00:00:00
train_end = datetime(2009,1,1)
test_end = datetime(2010,1,1)
train_data = cat_fish[:train_end]
test_data = cat_fish[train_end + timedelta(days=1):test_end]

model = SARIMAX(train_data,order=(0,1,0),seasonal_order=(1,0,1,12))

model_fit = model.fit()

model_fit.summary()
C:\Users\lipan\anaconda3\lib\site-packages\statsmodels\tsa\base\tsa_model.py:159: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
  warnings.warn('No frequency information was'
C:\Users\lipan\anaconda3\lib\site-packages\statsmodels\tsa\base\tsa_model.py:159: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
  warnings.warn('No frequency information was'
SARIMAX Results
Dep. Variable: Total No. Observations: 277
Model: SARIMAX(0, 1, 0)x(1, 0, [1], 12) Log Likelihood -2296.563
Date: Sat, 03 Apr 2021 AIC 4599.126
Time: 17:13:59 BIC 4609.988
Sample: 01-01-1986 HQIC 4603.485
- 01-01-2009
Covariance Type: opg
coef std err z P>|z| [0.025 0.975]
ar.S.L12 0.9889 0.007 135.425 0.000 0.975 1.003
ma.S.L12 -0.7923 0.054 -14.692 0.000 -0.898 -0.687
sigma2 9.069e+05 7.77e+04 11.666 0.000 7.55e+05 1.06e+06
Ljung-Box (Q): 71.38 Jarque-Bera (JB): 0.57
Prob(Q): 0.00 Prob(JB): 0.75
Heteroskedasticity (H): 2.47 Skew: 0.08
Prob(H) (two-sided): 0.00 Kurtosis: 3.16


Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).

预测

predictions = model_fit.forecast(len(test_data))
predictions = pd.Series(predictions,index=test_data.index)
residuals = test_data - predictions
plt.plot(test_data,color ='b',label = 'y')
plt.plot(predictions,color='r',label='y_pred')
plt.legend()
plt.show()

png

残差图

plt.plot(residuals)
[<matplotlib.lines.Line2D at 0x16f35389c40>]

png

残差白噪声检验

acorr_ljungbox(residuals,lags=10,return_df=True)
lb_stat lb_pvalue
1 2.974643 0.084579
2 3.702085 0.157073
3 9.938764 0.019094
4 16.441791 0.002480
5 16.607813 0.005307
6 17.906828 0.006469
7 21.149384 0.003555
8 21.996374 0.004923
9 22.067707 0.008667
10 22.789588 0.011550

循环预测

predictions_new = test_data.copy()
for train_end in test_data.index:
    train_data = cat_fish[:train_end-timedelta(days = 1)]
    model = model = SARIMAX(train_data,order=(0,1,0),seasonal_order=(1,0,1,12),freq='MS')
    model_fit = model.fit() 
    pred = model_fit.forecast(1)
    predictions_new[train_end] = pred
plt.plot(test_data,color ='b',label = 'y')
plt.plot(predictions_new,color='r',label='y_pred')
plt.legend()
plt.show()

png

plt.plot(test_data-predictions_new)
[<matplotlib.lines.Line2D at 0x16f3878bdc0>]

png

print('RMSE:', np.sqrt(np.mean(residuals**2)))
RMSE: 1832.9537663585463
residuals_new = test_data-predictions_new
print('RMSE:', np.sqrt(np.mean(residuals_new**2)))
RMSE: 1242.0409950292837
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python时间序列分析3-非平稳序列的随机分析-SRARIMA 的相关文章

  • 没有任何元数据的 zip 文件

    我想找到一种简单的方法来压缩一堆文件 而无需任何文件元数据 例如时间戳 这zip命令似乎总是保留元数据 我没有找到禁用元数据的方法 我希望解决方案是一个命令或最多一个 python 脚本 谢谢 正如一些帖子已经指出的那样 zip 标头中的大
  • 从正在运行的 python 脚本检测优化标志是否为 -O 或 -OO

    有时我想生成一个子进程 其优化标志与启动父进程时使用的优 化标志相同 我可以使用类似的东西 optimize not debug 但这样我就可以匹配两者 O and OO flags 是否有一些 python 内部状态包含该信息 经过一番深
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 错误:permission_manager_qt.cpp(82) 不支持的权限类型:13

    我正在开发具有内置浏览器功能的 python 代码 PyQt 5 13 import sys from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 QtWidgets imp
  • 如果字段值在外部列表中,Django 会注释布尔值

    想象一下我有这个 Django 模型 class Letter models Model name models CharField max length 1 unique True 还有这个列表 vowels a e i o u 我想查询
  • “char”/“character”类型的类型提示

    char 或 character 没有内置的原始类型 因此显然必须使用长度为 1 的字符串 但是为了暗示这一点并暗示它应该被视为一个字符 如何通过类型提示来实现这一点 grade chr A 一种方法可能是使用内置的 chr 函数来表示这一
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • 更改 pandas 中多个日期时间列的时区信息

    有没有一种简单的方法可以将数据帧中的所有时间戳列转换为本地 任何时区 不是逐列进行吗 您可以有选择地将转换应用于所有日期时间列 首先 选择它们select dtypes https pandas pydata org pandas docs
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • 为什么我用 beautifulSoup 刮的时候有桌子,但没有 pandas

    尝试抓取条目页面转换为制表符分隔格式 主要拉出序列和 UniProt 登录号 当我跑步时 url www signalpeptide de index php sess m listspdb bacteria s details id 10
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • Pandas Dataframe:将包含列表的行扩展到多行,并为所有列提供所需的索引

    我在 pandas 数据框中有时间序列数据 索引为测量开始时的时间 列中包含以固定采样率记录的值列表 连续索引 列表中元素数量的差异 这是它的样子 Time A B Z 0 1 2 3 4 1 2 3 4 2 5 6 7 8 5 6 7 8
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • Python - 如何查询定义方法的类?

    我的问题有点类似于this one https stackoverflow com questions 5520580 how do you get all classes defined in a module but not impor
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t

随机推荐

  • docker容器中elasticsearch配置跨域访问(elasticsearch-head插件访问不到es集群)

    问题 docker容器中elasticsearch配置跨域访问 elasticsearch head插件访问不到es集群 原因 elasticsearch head插件访问不到es集群 是因为调用过程中出现了跨域问题 解决方法 docker
  • 基于宝塔面板成功配置网站SSL安全证书(支持https访问)

    前提条件 你熟悉宝塔面板搭建网站 我这个建站老鸟都在用宝塔面板建站 主要就是图它的节省时间和精力 大家有不熟悉宝塔面板使用的 可以查看文章 宝塔面板添加WordPress站点详细图文教程 之后你就完全可以入门了 你拥有一台云服务器和一个万网
  • 服务器基准测试

    https bp aliyun com detail 189 Version 5 1 3 Based on the Byte Magazine Unix Benchmark Multi CPU vers
  • 每天Leetcode 刷题 初级算法篇-缺失数字

    题目要求 缺失数字 力扣题解 代码 import java util Arrays program mydemo description 缺失数字 author Mr zeng create 2021 03 03 09 49 public
  • 【ChatGPT】原生JS实现ChatGPT小型Demo

    初入前端的小白也可以尝尝鲜 无需科学上网 调用API2D的接口进行连接 也可以换成官方API 均有免费额度 第一步 注册API2D https api2d com r 187255 使用GitHub或邮箱进行注册登录 通过 GitHub 注
  • MySql详解(一)--架构篇

    MySQL架构篇 逻辑架构 Connectors 连接器 指的是不同语言中与SQL的交互 ManagementServeices Utilities 系统管理和控制工具 ConnectionPool 连接池 管理缓冲用户连接 线程处理等需要
  • no node folder is found in data folder(s), node has not been started yet?]

    报错 no node folder is found in data folder s node has not been started yet ES 角色调整后报该错误 过程 把 Master DataNode 节点 切换为纯 Mast
  • Linux 下ELF 文件理解及C/C++代码实现

    ELF 就是 Executable and Linkable Format 它定义了可重定位文件 可执行文件和 共享目标文件的结构 这种格式能让操作系统正确解释文件中的机器指令 理解ELF文件 目标文件 格式主要三种结构 可重定向文件 Re
  • perl实现,匹配并打印一个段落

    有一个应用场景 实现后 觉得还是记录下来 以后还会遇到的 举例 根据 这样的行 匹配并打印该段落范围的所有行 另外一点 打印出的内容 只允许存在max最大值和min最小值 sdsdfsdf 1123123 1sdfs 2saas max 0
  • 最浅显易懂的Django系列教程(49)-redis教程

    redis教程 概述 redis是一种nosql数据库 他的数据是保存在内存中 同时redis可以定时把内存数据同步到磁盘 即可以将数据持久化 并且他比memcached支持更多的数据结构 string list列表 队列和栈 set 集合
  • 数据分析基础理论

    什么是数据分析 收集大量数据 研究和概括总结 提取有用的信息形成概 帮助做出判断 以便采取适当行动 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析 将他们加以汇总和理解 以求最大化的开发数据功能 发挥数据的作用 数据分析的价值
  • CentOS7网络配置

    本文是我从另外三个文章中整合而来 用于自存 如有侵权请联系我删除 CentOS 7教程 二 网络设置 知乎 zhihu com VMware安装 Linux下CentOS7的配置及网络环境的配置 最新版特别全 centos7 配置 Cong
  • GET和POST的区别、Promise的两个方法及POST请求常见的参数类型

    GET和POST的区别 可能有纰漏 区别 GET POST 参数的位置不同 GET把请求参数直接暴露在URL上 因此GET比POST更不安全 不能用来传递敏感信息 GET请求发送的参数会被完整的保留在浏览器历史记录里 POST把请求参数放在
  • springBoot的配置文件

    目录 配置文件的格式 1 配置项的分类和中文支持 2 properties 配置文件 读取配置文件 优缺点分析 3 yml 配置文件 读取配置文件 优缺点分析 4 多个配置文件 5 properties 和 yml 的对比 在 spring
  • 2.1/2.2 系统目录结构 2.3 ls命令 2.4 文件类型 2.5 alias命令

    这个是同学提供的 2 1 2 2 系统目录结构 系统的目录 tree命令 yum install y tree 以树形结构显示文件目录 显示如下特别注意一下目录 root boot dev etc home bin srv usr loca
  • S11、反射系数、回损、VSWR之间的换算

    文章目录 1 S参数 2 反射系数 3 电压驻波比 VSWR 4 回损 RL 5 换算表 6 反射功率系数 7 传输功率系数 8 统一转换 参考 在学习天线设计过程中 遇到许多经常出现的参数 总结一下避免以后每次都去查找资料 1 S参数 S
  • Springboot2整合mybatis-plus+swagger+druid

    一 简介 1 版本 springboot版本为2 0 5 RELEASE mybatisplus版本为2 1 9 2 项目地址 https gitee com wbsxch ssm git 3 留个记录 方便查找 开发步骤 1 新建spri
  • 第四课:循环(一遍又一遍/重复/啰嗦)结构

    第四课 循环 一遍又一遍 重复 啰嗦 结构 一 掌握while循环结构 其次于for 1 初始化循环变量 xxxxx 2 循环条件 while 条件表达式 3 循环操作 循环体 4 更新循环变量 循环出口 二 掌握do while循环 前期
  • Unity游戏开发面试问题总结(含答案)

    马上金九银十了 今天就来给大家说说关于面试题的内容 给大家整理了9道Unity面试基本都会问到的问题 初衷也很简单 就是希望在面试的时候能够帮助到大家 减轻大家的负担和节省时间 对于没有跳槽打算的也可以复习一下相关知识点 就当是查缺补漏 1
  • Python时间序列分析3-非平稳序列的随机分析-SRARIMA

    import pandas as pd import matplotlib pyplot as plt import numpy as np from datetime import datetime timedelta from time