当前位置: 首页 > news >正文

时间序列与 Statsmodels:预测所需的基本概念(1)

后文:时间序列与 statsmodels:预测所需的基本概念(2)-CSDN博客

一、说明

        本博客解释了理解时间序列的基本概念:趋势、季节性、白噪声、平稳性,并使用自回归、差分和移动平均参数进行预测示例。这是理解任何时间序列数据的强制性步骤。

二、时间序列介绍

        时间序列通常是在固定采样间隔内随时间顺序测量的变量,从而产生时间序列形式的数据。时间序列最重要的特征之一是时间上接近的观察结果往往是相关的(序列相关)。基本上,我们基于这种序列依赖性进行所有预测,从经典的 SARIMA 模型到 LSTM 或 LGBT。时间序列中最重要的概念是趋势,季节性、周期、随机游走和白噪声。

        趋势是时间序列中的系统性变化,看起来不具有周期性。相反,季节性变化是每个时期(无论采样间隔是年、月、周等)内的重复模式,并且可以在更多采样周期内重复自身。周期是一种与某些固定采样间隔不对应的模式,但它具有相同的重复模式(例如米兰科维奇周期、厄尔尼诺现象、商业周期……)。白噪声是时间序列中的纯粹随机性,当我们删除所有模式(趋势、季节性、自相关)时留下的。白噪声应该与此处定义的随机游走区分开来,并且它不是平稳过程,因为它与时间无关。

        让我们看一个示例,使用非常简单且有用的包 statsmodels 来分解时间序列 - 如何提取趋势和季节性以及如何检查时间序列是否平稳。所有这些使我们能够进行预测,基本上假设现有的时间序列模式将在某个(至少)较短的未来时间继续(推断)。我们将使用可以在此处找到的著名的航空乘客数据。

航空旅客数据

三、趋势和季节性示例

        现在我们将时间序列分解为趋势和季节(将采用 12 个月的输入参数)。之后我们必须检查残差的平稳性。平稳时间序列是一种其属性不依赖于观察该序列的时间的序列。因此,具有趋势或季节性的时间序列并不是静止的——趋势和季节性会影响时间序列在不同时间的值。另一方面,白噪声序列是平稳的——什么时候观察它并不重要,它在任何时间点看起来都应该大致相同。因此,我们将检查残差的平稳性,这表明我们确实做了趋势和季节性解释了时间序列的所有“模式”。

from statsmodels.tsa.seasonal import seasonal_decomposedef decomposition(timeseries, period):decomposition = seasonal_decompose(timeseries, period=period)trend = decomposition.trendseasonal = decomposition.seasonalresidual = decomposition.residplt.figure(figsize=(10, 5))plt.subplot(411)plt.plot(timeseries, label='Original')plt.legend(loc='best')plt.subplot(412)plt.plot(trend, label='Trend')plt.legend()plt.subplot(413)plt.plot(seasonal,label='Seasonality')plt.legend()plt.subplot(414)plt.plot(residual, label='Residuals')plt.legend()plt.tight_layout()plt.show(block=False)
decomposition(data, 12)

 时间序列的分解

        我们将使用 adfuller 检验来告诉我们零假设是否为真(时间序列不是平稳的)。

from statsmodels.tsa.stattools import adfuller
def test_stationarity(timeseries, rolling=12):#Determing rolling statisticsrolmean = timeseries.rolling(rolling).mean()rolstd = timeseries.rolling(rolling).std()#Plot rolling statistics:plt.figure(figsize=(10, 5))orig = plt.plot(timeseries, color='blue',label='Original')mean = plt.plot(rolmean, color='red', label='Rolling Mean')std = plt.plot(rolstd, color='black', label = 'Rolling Std')plt.title('Power consumption Old data')plt.xlabel('Time - periods(30s)')plt.ylabel('Power consumption in Watts')plt.legend(loc='best')plt.title('Rolling Mean & Standard Deviation')plt.show()#Perform Dickey-Fuller test:print ('Results of Dickey-Fuller Test:') dftest = adfuller(timeseries, autolag='AIC')dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','#Lags Used','Number of Observations Used'])for key,value in dftest[4].items():dfoutput['Critical Value (%s)'%key] = valueprint (dfoutput)if dfoutput['p-value'] < 0.05:print('The timeseries is stationary at 95% level of confidence')else:print('The timeseries is not stationary at 95% level of confidence')
test_stationarity(data, rolling=12)

时间序列平稳性检验结果

        从结果中可以看出,残差不是平稳的,并且您可以看到标准差如何随着时间的推移而增加,这意味着时间序列中还有一些参数需要额外分析。这导致了自回归参数和移动平均线。另外,我们显然在这个时间序列中具有乘性季节性效应,这意味着季节性效应随着趋势的增加而增加(Xt = mt(趋势)* st(季节)+ zt(误差))。但是让我们注意自回归。

        自回归可以很容易地理解为自相关,即时间序列与其自身在其他时间点的相关性。为此,我们使用相关图来显示不同时间点的去季节和去趋势时间序列的相关性。作为参数,我们可以输入要计算自相关的滞后数(在此数据中,我们有 144 个时间点)。

        蓝色和绿色线是我们的时间序列的时间滞后的相关性和部分相关性的置信水平。

        通常,如果 ACF 和 PACF 正在缓慢衰减,则意味着我们必须再做一件事,那就是求差。这应该有助于我们获得残差的平稳性,这在实践中意味着我们解释了时间序列的所有组成部分,并且我们完全“阅读”了它的模式。差分减去两个最接近的时间点。

def differencing(timeseries, second_order=False):diff = timeseries - timeseries.shift(1)diff=diff.dropna()print('Results of stationarity of the first ordered differencing')test_stationarity(diff)if second_order:diff_sec = diff - diff.shift(1)diff_sec=diff_sec.dropna()print('\n', 'Results of stationarity of the SECOND ordered differencing')test_stationarity(diff_sec)
differencing(data, False)

一阶差分并没有使时间序列平稳。

        在这里我们可以看到一阶差分还没有导致平稳时间序列。我们将尝试二阶差分(已差分时间序列的差分)。

differencing(data, True)

二阶差分导致时间序列的平稳性。

        最后!我们得到了平稳残差。残差的平均值和标准差不随时间变化。这意味着我们在 ARIMA 中的 I 参数应该是 2。但是 AR 和 MA 呢?正如您所猜测的,AR 是自回归参数,而 MA 是移动平均线。阅读上面的相关图,我们可以得出采用哪些参数的结论。公认的规则是,我们有 ACF 的正弦模式,并且在 PACF 中跳跃,它应该是 AR = 2,这意味着我们的预测时间点将采用以下公式: Yt = b0 + b1 Yt-1 + b2 Yt-2 + wt ( wt =白噪声)。维托米尔·约万诺维奇

相关文章:

时间序列与 Statsmodels:预测所需的基本概念(1)

后文&#xff1a;时间序列与 statsmodels&#xff1a;预测所需的基本概念&#xff08;2&#xff09;-CSDN博客 一、说明 本博客解释了理解时间序列的基本概念&#xff1a;趋势、季节性、白噪声、平稳性&#xff0c;并使用自回归、差分和移动平均参数进行预测示例。这是理解任何…...

计算机网络(持续更新…)

文章目录 一、概述1. 计网概述⭐ 发展史⭐ 基本概念⭐ 分类⭐ 数据交换方式&#x1f970; 小练 2. 分层体系结构⭐ OSI 参考模型⭐TCP/IP 参考模型&#x1f970; 小练 二、物理层1. 物理层概述⭐ 四个特性 2. 通信基础⭐ 重点概念⭐ 极限数据传输率⭐ 信道复用技术&#x1f389…...

BetterDisplay Pro for Mac(显示器校准软件)

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 以下是BetterDisplay Pro的主要特点&#xff1a; - 显示器校准&#xff1a;可以根据不同的需求和环境…...

Node.js之TCP(net)

Hi I’m Shendi Node.js之TCP&#xff08;net&#xff09; 最近使用Nodejs编写程序&#xff0c;需要用到自己编写的分布式工具&#xff0c;于是需要将Java版的用NodeJs重新写一遍&#xff0c;需要使用到TCP通信&#xff0c;于是在这里记录下Node.js TCP 的使用方法 依赖 需要使…...

何时使用Elasticsearch而不是MySql?

何时使用Elasticsearch而不是MySql&#xff1f; MySQL 和 Elasticsearch 是两种不同的数据管理系统&#xff0c;它们各有优劣&#xff0c;适用于不同的场景。本文将从以下几个方面对它们进行比较和分析&#xff1a; 数据模型查询语言索引和搜索分布式和高可用性能和扩展性使用…...

nodejs微信小程序 +python+PHP+图书销售管理系统的设计与实现-网上书店-图书商城-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

云原生周刊:Istio 1.20.0 发布 | 2023.11.20

开源项目推荐 DevPod DevPod 是一款纯客户端工具&#xff0c;可在任何后端基于 devcontainer.json 创建可重现的开发人员环境。每个开发者环境都在一个容器中运行&#xff0c;并通过 devcontainer.json 进行指定。通过 DevPod 提供商&#xff0c;这些环境可以在任何后端创建&…...

Ajax基础(应用场景|jquery实现Ajax|注意事项)

文章目录 一、Ajax简介二、基于jquery实现Ajax三、使用Ajax注意的问题1.Ajax不要与form表单同时提交2.后端响应格式问题3、使用了Ajax作为请求后的注意事项 一、Ajax简介 AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。…...

【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析

文章目录 前言1.调用形式2.LoadBalancerInterceptor3.负载均衡流程分析3.1 调用流程图3.2 intercept&#xff08;&#xff09;方法3.3 execute&#xff08;&#xff09;方法3.4 getServer()方法3.4 子类的chooseServer&#xff08;&#xff09;方法3.5 getLoadBalancerStats().…...

Springboot和Vue+MYSQL项目(基本介绍+前后端结合初步项目)+maven+mybatis

一、基本知识 当我们谈论全栈开发时&#xff0c;通常指的是一个开发者能够处理整个应用程序的开发&#xff0c;包括前端&#xff08;Front-End&#xff09;和后端&#xff08;Back-End&#xff09;的所有层面。这三个基本的领域是&#xff1a; 前端开发&#xff08;Front-End …...

基于单片机K型热电偶温度采集报警系统

**单片机设计介绍&#xff0c; 基于单片机K型热电偶温度采集报警系统 文章目录 一 概要简介系统特点系统组成工作原理应用领域 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于单片机K型热电偶温度采集报警系统介绍 简介 该系统是基于单片…...

利用OpenCV做个熊猫表情包 二

之前写了一篇 利用OpenCV做个熊猫表情包吧_Leen的博客-CSDN博客 回想起来觉得有点太弱了&#xff0c;意犹未尽&#xff0c;每次使用需要自己去手动截取人脸&#xff0c;清除黑边什么的才能使用demo去合成表情&#xff0c;无奈之前由于安装的vs&#xff0c;opencv版本都比较低…...

华纳云服务器怎么清理cdn缓存?

清理 CDN(内容分发网络)缓存通常需要通过 CDN 提供商的管理界面或 API 进行操作。不同的 CDN 提供商可能有不同的方法和步骤&#xff0c;以下是一个通用的清理 CDN 缓存的一般步骤&#xff1a; 1. 登录到 CDN 提供商的管理界面&#xff1a; 打开你所使用的 CDN 提供商的网站。 …...

python functools.wraps保留被装饰函数属性

作用 普通装饰器 &#xff0c;会覆盖函数名称&#xff0c;并且 会替换 函数 文档字符串 介绍 functools.wraps(wrapped[, assigned][, updated]) This is a convenience function for invoking partial(update_wrapper, wrappedwrapped, assignedassigned, updatedupdated) …...

【多线程 - 11、死锁】

死锁 1、介绍 在 Java 中使用多线程&#xff0c;就会有可能导致死锁问题。死锁会让程序一直卡住&#xff0c;程序不再往下执行。只能通过中止并重启的方式来让程序重新执行。要尽可能避免死锁的情况发生 2、造成死锁的原因 互斥条件&#xff1a; 同一资源同时只能由一个线程读…...

flask实现session开发

要在Flask应用中实现会话&#xff08;session&#xff09;开发&#xff0c;你可以使用Flask内置的session模块。以下是一个示例代码&#xff0c;演示在Flask应用中启用和使用会话功能&#xff1a; from flask import Flask, session, redirect, url_for, requestapp Flask(__…...

paddle dataset

paddle实现图像旋转 import numpy as np from PIL import Image from matplotlib import pyplot as plt from paddle.vision.transforms import functional as F import cv2imagecv2.imread(./1.jpg) imagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)# 图像旋转 opencv # imgR90 …...

接口自动化测试实战:JMeter+Ant+Jenkins+钉钉机器人群通知完美结合

前言 一、本地JAVA环境安装配置,安装JAVA8和JAVA17 二、安装和配置Jmeter 三、安装和配置ant 四、jmeter + ant配置 五、jenkins安装和配置持续构建项目 六、jenkins配置流程 前言 搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境,本地java环境…...

HAL库STM32串口开启DMA接收数据

STM32CubeMx的配置 此博客仅仅作为记录&#xff0c;这个像是有bug一样&#xff0c;有时候好使&#xff0c;有时候不好&#xff0c;所以趁现在好使赶紧记录一下&#xff0c;很多地方用到串口接收数据&#xff0c;DMA又是一种非常好的接收方式&#xff0c;可以节约CPU的时间&…...

Web安全研究(五)

Automated WebAssembly Function Purpose Identification With Semantics-Aware Analysis WWW23 文章结构 introbackgroundsystem design abstraction genapplying abstractionsclassifier data collection and handling data acquisitionstatistics of collected datamodule-…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...