python时间序列预测不连续怎么办_用Python处理非平稳时间序列攻略
简介
诸如:预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,以及预测一个股票在纽约证券交易所交易的价格等等,这些应用都有什么共同点?
它们都归属于时间序列数据的概念!如果没有“时间”成分,就无法准确地预测这些结果。随着我们周围的世界产生的数据越来越多,时间序列预测已成为数据科学家必须掌握的一项越来越关键的技术。
然而,时间序列却是一个复杂的话题,它同时具有多面性。
首先,要想使预测模型正常工作,就必须使时间序列保持平稳。为什么?因为绝大部分的原始数据都会有非平稳的趋势。如果尖峰是不稳定的,又怎么能确保模型正常工作呢?
本文的重点是时间序列数据的平稳性检验方法。在此假设读者已熟悉时间序列、ARIMA和平稳性的概念,以下是一些包含基础内容的参考资料:关于时间序列建模的完整教程-
初学者创建时间序列预测综合指南
目录
1. 平稳简介
2. 加载数据
3. 检验平稳的方法
ADF检验
KPSS检验
4. 平稳的种类
严格平稳
趋势平稳
差分平稳
5. 时间序列平稳化
差分
季节性差分
对数变换
1. 平稳简介
“平稳”是处理时间序列数据时遇到的最重要的概念之一:平稳序列是指其特性-均值、方差和协方差不随时间而变化的序列。
让我们用一个直观的例子来理解这一点。考虑以下三个图形:在第一幅图中,我们可以清楚地看到,均值随时间而变化(增加),呈现上升的趋势。因此,这是一个非平稳序列。对于一个平稳的时间序列,它不应该呈现出随时间变化趋势。
在第二幅图中,我们肯定看不到序列的趋势,但是序列的变化是一个时间的函数。正如前面提到的,平稳序列的方差必须是一个常数。
再来看第三幅图,随着时间的增加,序列传播后变得更近,这意味着协方差是时间的函数。
上述三个例子均表示非平稳时间序列。现在来看第四个图:
在这张图中,均值、方差和协方差都是常数,这就是平稳时间序列。
再想一想,用上面的哪一幅图来预测未来的值会更容易呢?第四个图,对吧?大多数统计模型要求序列是平稳的,才能进行有效和精确的预测。
因此,总的来说,平稳时间序列是一个不依赖时间变化 (即均值、方差和协方差不随时间变化)的时间序列。在下一节中,我们将介绍各种检测给定序列是否平稳的方法。
2. 加载数据
在本节和后续几节中,将介绍检测时间序列数据的平稳性的方法,以及处理非平稳序列所需的技术。同时,本文还提供了应用每种技术的python代码。大家可以到:AirPassengers这个链接上下载文中使用到的数据集。
在继续分析数据集之前,首先加载和预处理数据。
好了,看来可以继续了!
3. 检验平稳的方法
下一步是确定给定的序列是否是平稳的,并对它做相应的处理。本节将介绍一些常见的方法,利用这些方法来检测序列是否平稳。
目视检验
看一下我们在上一节中使用的图形,仅需通过目测图形,便能够识别出序列的均值和方差是否随时间变化。同样,通过绘制数据图形,便能确定该序列的属性是否随时间而变化。
显然,通过作图,可以看到序列的趋势(变化的均值),然而,这种目视检测方法得到的结果可能并不准确。最好是用一些统计检测方法来验证观测结果。
统计检验
可以利用统计检验来代替目视检验:比如单位根平稳测试。单位根指明给定序列的统计特性(均值,方差和协方差)不是时间的常数,这是平稳时间序列的先决条件。下面是它的数学解释:
假设我们有一个时间序列:
yt = a*yt-1 + ε t
其中yt是t时刻的数据值,ε t 是误差项。需要利用yt-1的值来计算yt,即:
yt-1 = a*yt-2 + ε t-1
如果利用所有的观察值,yt 的值将是:
yt = an*yt-n + Σεt-i*ai
假设在上述方程中a的值为1(单位),则预测值将等于yt-n 和从t-n到t的所有误差之和,这意味着方差将随着时间的推移而增大,这就是时间序列中的单位根。众所周知,平稳时间序列的方差不能是时间的函数。单元根检测通过检查a=1的值来检查序列中是否存在单位根。以下是两个最常用的单位根平稳检测方法:
ADF(增补迪基-福勒) 检验
迪基-福勒(Dickey Fuller)检验是最流行的统计检测方法之一,可以用它来确定序列中单位根的存在,从而帮助判断序列是否是平稳。这一检验的原假设与备择假设如下:
ref="">原假设:序列有一个单位根(a=1的值)
ef="">备择假设:该序列没有单位根。
如果否决原假设失败,则该序列是非平稳的,这意味着序列可以是线性的,也可以是差分平稳的(将在下一节中更多地了解差分平稳)。
Python代码:
ADF检验结果:ADF检验的统计量为1%,p值为5%,临界值为10%,置信区间为10%。我们对本序列的测试结果如下:
f="">平稳性检验:如果检验统计量小于临界值,我们可以否决原假设(也就是序列是平稳的)。当检验统计量大于临界值时,否决原假设失败(这意味着序列不是平稳的)。
在上面的例子中,测试统计量>临界值,这意味着序列不是平稳的。这证实了我们最初在目视检测中看到的观察结果。
KPSS(科瓦特科夫斯·基菲利普·斯施密特·辛) 检验
KPSS检验是另一种用于检查时间序列的平稳性 (与迪基-福勒检验相比稍逊一筹) 的统计检测方法。KPSS检验的原假设与备择假设与ADF检验的原假设与备择假设相反,常造成混淆。
KPSS检验的作者将原假设定义为趋势平稳的过程,并将备择假设定义为单位根序列。我们将在下一节详细了解趋势平稳。现在,来看一下KPSS检验的实现,并查看KPSS检验的结果。
ref="">原假设:这一过程是趋势平稳的。
ef="">备择假设:序列有一个单位根(序列是非平稳的)。
Python代码:
KPSS检验结果:KPSS检验-检验统计量、p-值和临界值和置信区间分别为1%、2.5%、5%和10%。对于航空乘客数据集的检验结果如下:
f="">平稳性检验:如果检验统计量大于临界值,则否决原假设(序列不是平稳的)。如果检验统计量小于临界值,则不能否决原假设(序列是平稳的)。对于航空乘客数据集来说,在所有置信区间,检验统计量的值都大于临界值,因此可以说该序列是不平稳的。
在为时间序列数据集准备模型之前,通常会同时进行两种统计检测。有一次,这两种检测显示出相互矛盾的结果:其中一个检测结果表明该序列是平稳的,而另一个则表明该序列是非平稳的!我困惑了好几个小时,想弄清楚这是怎么回事。后来才知道,序列的平稳性有多种类型。
综上所述,ADF检验有线性平稳或差分平稳的备择假设,而KPSS检验则是识别序列的趋势平稳。
4. 平稳的种类
通过了解不同类型的平稳性,来解释上述检验的结果。严格平稳:严格平稳序列满足平稳过程的数学定义。严格平稳序列的均值、方差和协方差均不是时间的函数。我们的目标是将一个非平稳序列转化为一个严格的平稳序列,之后,来对它进行预测。
趋势平稳:没有单位根但显示出趋势的序列被称为趋势平稳序列。一旦去除趋势之后,产生的序列将是严格平稳的。在没有单位根的情况下,KPSS检测将该序列归类为平稳。这意味着序列可以是严格平稳的,也可以是趋势平稳的。
差分平稳:通过差分可以使时间序列成为严格平稳的时间序列。ADF检验也称为差分平稳性检验。
应用两种检测总会更优些,通过两种检测之后,可以确定这个序列是否确实是平稳的。下面,来看一下应用两种平稳检测后的可能结果:
结果1:两种检测均得出结论:序列是非平稳的->序列是非平稳的
结果2:两种检测均得出结论:序列是平稳的->序列是平稳的
结果3:KPSS =平稳;ADF =非平稳->趋势平稳,去除趋势后序列严格平稳
结果4:KPSS =非平稳;ADF =平稳->差分平稳,利用差分使序列平稳。
5. 时间序列的平稳化
在熟悉了平稳性的概念及其不同的类型之后,接下来可以对序列进行平稳化操作。请记住,为了利用时间序列预测模型,必须首先将任何非平稳序列转换为平稳序列。
差分化
在该方法中,计算序列中连续项的差值。执行差分操作通常是为了消除均值的变化。从数学角度,差分可以写成:
yt‘ = yt – y(t-1)
其中yt 是t时刻的数值。
对序列差分化后,绘制出结果:
季节性差分
在季节性差分中,不计算连续值之间的差异,而是计算观测值与同一季节的先前观测值之间的差异。例如,星期一的观察值将与上星期一的观察值相减。从数学角度,它可以写成:
yt‘ = yt – y(t-n)
变换
变换用于对方差为非常数的序列进行平稳化。常用的变换方法包括幂变换、平方根变换和对数变换。对飞机乘客数据集进行快速对数转换和差分:
可以看出来,这个图形比先前的图形有了很大的改善。通过对这个序列进行平方根或幂变换,看看是否得出了更好的结果。欢迎在下面的评论部分分享你的发现!
尾注
在本文中,介绍了用于检验时间序列平稳性的不同方法。但并不止步于此,下一步是对得到的序列应用一个预测模型。可以参考以下文章来构建这样的模型:初学者时间序列预测指南(Beginner’s Guide to Time Series Forecast)。
如果对本文有任何问题或反馈,可以在下面的评论部分与我联系。
python时间序列预测不连续怎么办_用Python处理非平稳时间序列攻略相关推荐
- python时间序列预测不连续怎么办_手把手教你用Python处理非平稳时间序列(附代码)...
本文约3600字,建议阅读10分钟. 本文将重点介绍时间序列数据的平稳性检验方法. 简介 预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,预测一只股票在纽约证券交易所交易的价格--这些问 ...
- python决策树预测用户等级_使用python抓取婚恋网用户数据并用决策树生成自己择偶观...
最近在看<机器学习实战>的时候萌生了一个想法,自己去网上爬一些数据按照书上的方法处理一下,不仅可以加深自己对书本的理解,顺便还可以在github拉拉人气.刚好在看决策树这一章,书里面的理论 ...
- python群控手机过检测_手游群控检测规避封号攻略,工作室内部亲授
没点技术是不敢出来露脸的,否则会让人喷死你!只要提到技术,先要想到理论上是可以证实的,否则都是bug!专业研究去找bug,不如脚踏实地的去找技巧!目前手游这块,被封的狗一样的大有人在!如果是个人,有几 ...
- python处理时间序列非平稳_手把手教你用Python处理非平稳时间序列
简介 预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,预测一只股票在纽约证券交易所交易的价格--这些问题都有什么共同点? 它们都属于时间序列数据的范畴!如果没有"时间" ...
- Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略
Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...
- 深度学习多变量时间序列预测:卷积神经网络(CNN)算法构建时间序列多变量模型预测交通流量+代码实战
深度学习多变量时间序列预测:卷积神经网络(CNN)算法构建时间序列多变量模型预测交通流量+代码实战 卷积神经网络,听起来像是计算机科学.生物学和数学的诡异组合,但它们已经成为计算机视觉领域中最具影响力 ...
- db2top详细使用方法_Py之PIL:Python的PIL库的简介、安装、使用方法详细攻略
Py之PIL:Python的PIL库的简介.安装.使用方法详细攻略 目录 PIL库的简介 PIL库的安装 PIL库的用方法 1.几何图形的绘制与文字的绘制 2.绘制图形的各种案例 PIL库的简介 PI ...
- Python语言学习:python编程之pip命令集合、python调式、头部代码、代码运行等常见概念详细攻略(解决问题为导向)
Python语言学习:python编程之pip命令集合.python调式.头部代码.代码运行等常见概念详细攻略(解决问题为导向) 目录 一.pip命令集合 1.pip常规命令 1.1 pip下载se ...
- keras-yolo3:python库之keras-yolo3的简介、安装、使用方法详细攻略
keras-yolo3:python库之keras-yolo3的简介.安装.使用方法详细攻略 目录 keras-yolo3的简介 keras-yolo3的安装 keras-yolo3的使用方法 ker ...
- Python语言学习之文件格式后缀那些事:python和常见各种文件格式后缀介绍、使用方法之详细攻略
Python语言学习之文件格式后缀那些事:python和常见各种文件格式后缀介绍.使用方法之详细攻略 目录 常见各种文件格式后缀介绍 .pyc文件介绍 .py文件介绍 .pxd 文件 .pyd 文件 ...
最新文章
- Leetcode 764. Largest Plus Sign
- 数学笔记:重要性采样
- 【计网】计网----子网掩码,网关,ARP协议的作用
- 名为 cursor_jinserted 的游标不存在_性能优化技巧 - 程序游标
- SMM - 系统管理模式,SMRAM
- python学习之旅(入门)
- [译]36 Days of Web Testing(六)
- linux 用户管理、权限管理
- Oracle数据库日志存放位置
- 基于51单片机的超声波测距带语音播报
- 电脑消除,彻底清除电脑垃圾,让电脑运行更流畅!
- 如何保存网站上的背景图片
- elasticsearch7.x Java High Level REST客户端封装工具
- 云服务器-华为云服务器ECS挂载对象存储服务OBS教程
- zcum(浙江中医药)1919: kirito's 星爆气流斩
- apex英雄机器人探路者怎么玩_Apex英雄探路者玩法技巧攻略
- HTML语义化标签理解
- GameFrameWork学习笔记(一)
- mysql查询日期:本周、上周、本月、上月
- C语言-MSB/LSB大小端序