时间序列与 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 =白噪声)。维托米尔·约万诺维奇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

江湖再见,机器视觉兄弟们,我已经提离职了,聪明的机器视觉工程师,离职不亏本!

我闻江湖已叹息&#xff0c;又闻人间繁闹闹。同为布衣沦落人&#xff0c;相逢何必曾相识。 此生谁料事事休&#xff0c;道不尽人情冷暖&#xff0c;聚散离合总平常&#xff0c;不似勇气少年时。 我估计今年公司年底是发不出工资了&#xff0c;因为订单续不上。年终奖更是没有&…

Android 弹出自定义对话框

Android在任意Activity界面弹出一个自定义的对话框&#xff0c;效果如下图所示: 准备一张小图片&#xff0c;右上角的小X图标64*64&#xff0c;close_icon.png&#xff0c;随便找个小图片代替&#xff1b; 第一步&#xff1a;样式添加&#xff0c;注意&#xff1a;默认在value…

通过微软MediaCreationTool制作Win10系统安装U盘,安装纯净版Win10的通用教程

最近新入手了一台Lenovo的入门级主机。 为了避免以后忘记装机步骤&#xff0c;特写下此博客记录。 装机步骤是在Lenovo网站上看的&#xff0c;在这表示感谢。 https://iknow.lenovo.com.cn/detail/177365

(十二)Flask重点之session

session 自我介绍&基本使用&#xff1a; 在Flask中&#xff0c;Session是一种用于在客户端和服务器之间存储和传输数据的机制。它允许您在用户与应用程序之间保持状态&#xff0c;并且可以存储和检索有关特定用户的信息。 Flask使用Werkzeug库提供的SecureCookie来实现S…

LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve

接着前面的Langchain&#xff0c;继续实现读取YouTube的视频脚本来问答Indexes for information retrieve LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗…

Python接口自动化(什么是接口、接口优势、类型)

简介 经常听别人说接口测试&#xff0c;接口测试自动化&#xff0c;但是你对接口&#xff0c;有多少了解和认识&#xff0c;知道什么是接口吗&#xff1f;它是用来做什么的&#xff0c;测试时候要注意什么&#xff1f;坦白的说&#xff0c;笔者之前也不是很清楚。接下来先看一下…

Python懒羊羊

目录 系列文章 写在前面 绘图基础 懒羊羊 写在后面 系列文章 序号文章目录直达链接表白系列1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595…

requests库出现AttributeError问题的修复与替代方法

在使用App Engine时&#xff0c;开发者们通常会面临需要发送爬虫ip请求的情况&#xff0c;而Python中的requests库是一个常用的工具&#xff0c;用于处理爬虫ip请求。然而&#xff0c;在某些情况下&#xff0c;开发者可能会遇到一个名为AttributeError的问题&#xff0c;特别是…

力扣贪心——跳跃游戏I和II

1 跳跃游戏 利用边界进行判断&#xff0c;核心就是判定边界&#xff0c;边界内所有步数一定是最小的&#xff0c;然后在这个边界里找能到达的最远地方。 1.1 跳跃游戏I class Solution {public boolean canJump(int[] nums) {int len nums.length;int maxDistance 0;int te…

Day36力扣打卡

打卡记录 T 秒后青蛙的位置&#xff08;DFS&#xff09; 链接 class Solution:def frogPosition(self, n: int, edges: List[List[int]], t: int, target: int) -> float:g [[] for _ in range(n 1)]for x, y in edges:g[x].append(y)g[y].append(x)g[1].append(0)ans …

Python编程技巧 – 使用字典

Python编程技巧 – 使用字典 Python Programming Skills – Using Dictionary Dictionary, 即字典&#xff0c;这是Python语言的一种重要的数据结构&#xff1b;Python字典是以键&#xff08;key&#xff09;值(value)对为元素&#xff0c;来存储数据的集合。 前文提到Python列…

Linux--网络编程

一、网络编程概述1.进程间通信&#xff1a; 1&#xff09;进程间通信的方式有**&#xff1a;管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;信号&#xff0c;信号量这么集中 2&#xff09;特点&#xff1a;依赖于linux内核&#xff0c;基本是通过内核来实现应用层…

【亚马逊云科技产品测评】活动征文|aws云服务器 + 微服务Spring Cloud Nacos 实战

文章目录 前言一、拥有一台Aws Linux服务器1.1、选择Ubuntu版本Linux系统1.2、创建新密钥对1.3、网络设置1.4、配置成功&#xff0c;启动实例1.5、回到实例区域1.6、进入具体的实例1.7、设置安全组 二、在Mac上连接Aws云服务&#xff0c;并安装配置JDK112.1、解决离奇的错误2.2…

代码随想录 Day50 单调栈 LeetCodeT503 下一个最大元素II T42接雨水

前言 前面我们说到了单调栈的第一题,下一个最大元素I,其实今天的两道题都是对他的变种,知道第一个单调栈的思想能够想清楚,其实这道题是很简单的 考虑好三个状态,大于等于小于,其实对于前面这些题目只要细心的小伙伴就会发现其实小于和等于的处理是一样的都是直接入栈,只有大于…

【Ubuntu】Windows远程Ubuntu系统

步骤 开启ssh服务并开放22端口关闭防火墙ufw或iptables &#xff1b;或者将远程端口添加到入站与出站规则安装xrdp并将xrdp用户添加到ssl-cert用户组mstsc 远程&#xff0c;输入账号密码 1、开启ssh服务 1.1. 查看ssh是否已经开启 sudo ps -e | grep ssh如果最后返回是sshd…

Go并发编程学习-class1

class1. Mutex 解决资源并发访问 基础概念 临界区概念&#xff1a;一个被共享的资源&#xff0c;可以被并发访问。通过Mutex互斥锁&#xff0c;可以限定临界区只能由一个线程获取。 根据不同情况&#xff0c;不同适用场景 ●共享资源。并发地读写共享资源&#xff0c;会出现…

shell 脚本变量

目录 什么是 shell shell 的两种面向对象 shell 脚本概述 脚本 &#xff08;本质为程序&#xff09; 脚本的组成 执行脚本 例题 脚本构成 脚本执行逻辑及执行方式 脚本的常见错误 编写 shell 脚本 执行脚本文件的方式 重定向 重定向操作 shell 变量的作用及类型…

CentOS7安装部署Kafka with KRaft

文章目录 CentOS7安装部署Kafka with KRaft一、前言1.简介2.架构3.环境 二、正文1.部署服务器2.基础环境1&#xff09;主机名2&#xff09;Hosts文件3&#xff09;关闭防火墙4&#xff09;JDK 安装部署 3.单机部署1&#xff09;下载软件包2&#xff09;修改配置文件3&#xff0…

数据结构【栈】

文章目录 数据结构 栈栈的概念与结构栈接口实现 数据结构 栈 栈的概念与结构 栈是是一种特殊的线性表&#xff0c;栈的规定是只在一端插入删除数据&#xff0c;插入删除的一端叫做栈顶&#xff0c;另一端叫栈底。根据上面的特性&#xff0c;栈的数据是后入先出 栈接口实现 栈接…

【算法】二分查找-20231121

这里写目录标题 一、344. 反转字符串二、392. 判断子序列三、581. 最短无序连续子数组四、680. 验证回文串 II 一、344. 反转字符串 提示 简单 865 相关企业 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组…