如何处理时间序列异常值?理解、检测和替换时间序列中的异常值

news2024/9/22 1:07:32

异常值的类型 (欢迎来到雲闪世界)

异常值是与正常行为有显著偏差的观察结果。

时间序列可能会因某些异常和非重复事件而出现异常值。这些异常值会影响时间序列分析,并误导从业者得出错误的结论或有缺陷的预测。因此,识别和处理异常值是确保时间序列建模可靠性的关键步骤。

在时间序列中,异常值通常分为两种类型:加性异常值和创新异常值。

附加异常值

附加异常值是相对于历史数据表现出异常高(或低)值的观察值。

加性异常值的一个例子是由于促销或相关病毒式内容导致产品销量激增。有时这些异常值是由于错误的数据收集而发生的。加性与异常值对底层系统的非持久性影响有关。异常值仅限于相应的观察值,此后时间序列恢复其正常模式。

包含一些附加异常值的时间序列。图片由作者提供。

附加异常值可以跨越连续的观测值。这些异常值也称为子序列异常值或异常值块。

创新异类

创新异常值与附加异常值类似,但具有持久性效应。异常值会对后续观察产生影响。一个常见的例子是,由于某些病毒式内容,网站的访问量有所增加。该网站的访问量可能会继续高于平常,直到这种影响消失。

编辑搜图

请点击输入图片描述(最多18字)

具有创新异常值的时间序列。图片由作者提供。

处理创新异常值的一种方法是使用干预分析。例如,使用一个虚拟变量,其效果会随着时间的推移而逐渐减弱。

与变化点的关系

离群值与变化的概念相关。一些观测值被称为变化点,标志着时间序列中结构变化的开始。

这些变化点与异常值相关但又不同。异常值是相对于特定分布的异常观测值。变化点是以分布变化为特征的结构性突变。

异常值的含义

如何处理异常值取决于其性质和分析的目标。

因噪声(例如数据收集错误)而产生的异常值是不需要的数据。在分析之前,应删除或替换此类异常值。

另一方面,一些异常值本身很有趣,而且预测起来很重要。因此,删除它们可能会导致误导性结论或过于乐观的预测。这种情况发生在各种领域,例如欺诈检测或能源。考虑一个能源需求的时间序列,其中能源负荷在某个时期激增。这种类型的异常值可能是由某些异常事件(例如极寒天气)引起的。公用事业公司需要预测此类异常值,因此删除它们并不是一个好主意。对这些观察结果进行建模是平衡能源供需和防止停电的关键。

检测并处理异常值

检测时间序列数据中的异常值的方法有很多种,其中很多方法可以分为两类:基于预测或基于估计。

基于预测的检测

根据预测检测异常值需要使用预测模型。目标是将预测值与实际值进行比较。两者之间的较大差异表明观察结果为异常值。

让我们使用以下时间序列来看一下这在实践中是如何运作的:

从datasetsforecast.m4导入M4

数据集,*_ = M4.load( './data' , 'Hourly' ) 

series = dataset.query( f'unique_id=="H1"' ).reset_index(drop= True )

上面代码中,我们从 M4 数据集中获取了 id 为 H1 的时间序列。接下来,我们基于 statsforecast 构建一个季节性朴素预测模型:

从statsforecast导入StatsForecast
从statsforecast.models导入SeasonalNaive 

# 季节性朴素模型
model = [SeasonalNaive(season_length= 24 )] 

# 创建 statsforecast 实例
sf = StatsForecast(df=series, models=model, freq= 'H' ) 
# 拟合预测模型
sf.forecast(h= 1 , level=[ 99 ], fitted= True ) 

# 获取样本内预测
preds = sf.forecast_fitted_values()

建立模型后,我们使用forecast_fitted_values方法获取训练样本的预测区间。然后,我们将其与实际值进行比较:

# 基于预测区间的异常值
outliers = preds.loc[(preds[ 'y' ] >= preds[ 'SeasonalNaive-hi-99' ]) | (preds[ 'y' ] <= preds[ 'SeasonalNaive-lo-99' ])]

任何超出 99% 预测区间的观测值均被视为异常值。

这是异常值的图:

季节性朴素模型检测到的异常值。图片来自作者

您也可以使用预测的实际误差来代替间隔。在这种情况下,当误差异常大时,就会出现异常值。

基于估计的检测

基于估计的方法使用汇总统计数据来检测异常值。一个例子是 z 分数。其思想是通过减去平均值并除以标准差来标准化数据。然后,异常值是具有较大 z 分数值的点。

以下是一个例子:

# 高于/低于 3 个标准差的值
thresh = 3

 rolling_series = series[ 'y' ].rolling(window= 24 , min_periods= 1 , center= True ) 
avg = rolling_series.mean() 
std = rolling_series.std(ddof= 0 ) 
zscore = series[ 'y' ].sub(avg).div(std) 
m = zscore.between(-thresh, thresh)

请注意,使用滚动窗口计算平均值和标准差来解释时间序列中的时间依赖性。

另一种方法是使用时间序列分解方法并检测残差上的异常值。让我们首先使用 STL 获取残差:

从statsmodels.tsa.seasonal导入STL 

stl = STL(series[ 'y' ].values, period= 24 , robust= True ).fit() 
resid = pd.Series(stl.resid)

请注意,我们将参数robust=True传递给 STL,以便模型可以容忍更大的错误。

然后,您可以使用标准箱线图规则来检测异常值。例如,将低于第一四分位数或高于第三四分位数的 IQR 3 倍的观测值标记为异常。操作方法如下:

q1,q3 = resid.quantile([ .25,.75 ])
iqr = q3 - q1 

is_outlier_r = ~resid.apply(lambda x:q1 - (3 * iqr)<x < q3 + (3 * iqr))
is_outlier_r_idx = np.where(is_outlier_r)[ 0 ] 

resid_df = resid.reset_index()
resid_df [ 'index' ] = pd.date_range(end = '2021-12-01',periods = series.shape [ 0 ],freq = 'H')
resid_df.columns = [ 'index','残差' ]

这些异常值在一系列残差中也很明显:

使用残差中的箱线图规则检测异常值。图片由作者提供。

替换异常值

检测后,您可以通过用更合理的值替换异常值来清除异常值。

首先删除异常值,然后将问题转变为数据插补任务。

时间序列插补有很多方法。这些包括:

  • 向前或向后填充

  • 移动平均线

  • 线性插值

关键要点

  • 时间序列异常值是与历史数据有显著偏差的观测值

  • 异常值在持久性和含义方面可以表现出不同的特征

  • 异常值检测有多种方法,包括基于预测的方法和基于估计的方法

  • 您可以使用数据插补技术替换不需要的异常值

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)

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

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

相关文章

域名是什么

在这个数字世界中&#xff0c;域名无疑是连接用户与网站的关键纽带。域名&#xff0c;是由一串字符组成的地址&#xff0c;用于在互联网上唯一标识和定位一个特定的资源。本文将深入探讨域名的概念、作用以及对互联网发展的重要性。 一、域名的定义与结构 域名可以看作是互联网…

用矩阵乘法的底层原理来理解“特征融合”

大家好啊&#xff0c;我是董董灿。 在很多 AI 模型中&#xff0c;都会出现内积运算。无论是卷积/全连接还是 Transformer 架构中的矩阵乘法&#xff08;或线性映射&#xff09;&#xff0c;其核心运算逻辑都是内积运算。 因此&#xff0c;很多时候&#xff0c;我们也把内积运…

Java 输入与输出之 NIO.2【AIO】【内存映射文件】【自动资源管理】探索之【四】

一&#xff0c;自动资源管理 Java 7 增加了一个新特性&#xff0c;该特性提供了另外一种管理资源的方式&#xff0c;这种方式能自动关闭文件等系统资源。这个特性又被称为自动资源管理(Automatic Resource Management, ARM)&#xff0c; 该特性以 try 语句的扩展版为基础。自动…

泛微E9开发 申请流程时,通过附件ID带出文件

申请流程时&#xff0c;通过附件ID带出文件 1、需求说明2、实现操作3、标准API知识-修改单个字段值&#xff08;不支持附件类型&#xff09;3.1.格式3.2.参数说明3.3.样例3.4.特别注意 1、需求说明 在用户申请流程表单的时候&#xff0c;需要用到系统中已经存在的文档&#xf…

MySQL-进阶篇-锁(全局锁、表级锁、行级锁)

文章目录 1. 锁概述2. 全局锁2.1 介绍2.2 数据备份2.3 使用全局锁造成的问题 3. 表级锁3.1 表锁3.1.1 语法3.1.2 读锁3.1.3 写锁3.1.4 读锁和写锁的区别 3.2 元数据锁&#xff08;Meta Data Lock&#xff0c;MDL&#xff09;3.3 意向锁3.3.1 案例引入3.3.2 意向锁的分类 4. 行级…

【超详细】从 0 到 1 打包你的 uni-app 应用:安卓篇打包指南

一. 介绍 在当前移动应用开发的大环境下&#xff0c;uni-app 作为一种使用 Vue.js 开发多平台应用的框架&#xff0c;为开发者提供了快速构建跨平台应用的能力。本文将为你介绍如何将 uni-app 项目打包成安卓应用&#xff0c;让你的应用在安卓设备上运行并上架应用市场。 二.…

学习之MySQL函数(字符串,数值,日期,流程)

字符串函数 函数是指一段可以直接被另一段程序或代码 案例&#xff1a; – 1、由于业务需求变更&#xff0c;企业员工的工号&#xff0c;统一为5位数&#xff0c;目前不足5位数的全部在前面补0、比如:1号员工的工号应该为00001. update emp set worknolpad(workno, 5, 0) 运…

2024大模型学习:机器学习在安全领域的应用|从大数据中识别潜在安全威胁

机器学习在安全领域的应用&#xff1a;从大数据中识别潜在安全威胁 &#x1f9d1; 作者简介&#xff1a;现任阿里巴巴嵌入式技术专家&#xff0c;15年工作经验&#xff0c;深耕嵌入式人工智能领域&#xff0c;精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者&…

【王树森】RNN模型与NLP应用(8/9):Attention(个人向笔记)

前言 基于RNN的Seq2Seq模型无法记住长序列Attentnion机制可以大幅度提升Seq2Seq模型 Seq2Seq Model with Attention Attention可以让句子在逐步变长的时候不忘记前面的输入信息Attention还可以告诉Decoder应该关注哪一个状态优点&#xff1a;Attention可以大幅度提高准确率缺…

中小企业数字化营销突围秘籍,快来解锁!

​嘿&#xff0c;各位中小企业主们&#xff01;在如今这个数字化时代&#xff0c;市场竞争那叫一个激烈。传统营销方式渐渐力不从心&#xff0c;而数字化营销则成为咱们中小企业突出重围的关键路径。 现状不容乐观 目前呢&#xff0c;有一部分中小企业已经迈出了数字化营销的步…

【hot100篇-python刷题记录】【最小覆盖子串】

R7-子串篇 class Solution:def minWindow(self, s: str, t: str) -> str:ret_left,ret_right-1,len(s)left0#s子串字母出现的次数cnt_sCounter()#t中字母出现的次数cnt_tCounter(t)for right,c in enumerate(s):cnt_s[c]1while cnt_s>cnt_t:#找到更短的子串if right-left…

破解“目录名称无效”难题:数据恢复实战指南

在数字化生活日益普及的今天&#xff0c;数据存储与管理成为了我们日常不可或缺的一部分。然而&#xff0c;当您尝试访问某个文件夹时&#xff0c;却遇到了“目录名称无效”的错误提示&#xff0c;这无疑会让人感到焦虑和困惑。本文将深入探讨“目录名称无效”这一问题的根源&a…

Unet改进11:在不同位置添加MLCA||轻量级的混合本地信道注意机制

本文内容:在不同位置添加MLCA注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 注意机制是计算机视觉中应用最广泛的组成部分之一,它可以帮助神经网络突出重要元素,抑制无关元素。然而,绝大多数通道注意机制只包含通道特征信息,忽略了空间特征…

android gradle阿里云镜像地址,下载速度快,而且几乎是最新的所有版本

阿里云Gradle的镜像地址&#xff1a; macports-distfiles-gradle安装包下载_开源镜像站-阿里云 还是比较全的&#xff0c;最主要是下载速度比较快。 这样可以节省很多时间。 我们可以利用离线的方式来使用这些Gradle就可以了。 android 离线的方式使用下载到本地的gradle-CS…

鸿蒙开发—黑马云音乐之music页面播放音乐(下)

目录 1.暂停播放和恢复播放 2.上一首、下一首功能 1.暂停播放和恢复播放 src/main/ets/services/AvPlayerManager.ets&#xff1a; export interface songItemType {img: stringname: stringauthor: stringurl: stringid: string }//作用&#xff1a;负责管理播放对象的各种…

Windows环境CP Editor安装使用方法

step0&#xff1a;下载软件包&#xff0c;附件有已经下载的安装包 Download CP Editor | CP Editor step1&#xff1a;下载后双击安装即可(记住安装路径) step2&#xff1a;找到安装目录下的cpeditor\mingw64\bin配置环境变量 step3&#xff1a;双击打开即可使用

pikachu 靶场环境搭建 完整版(手把手保姆级教学)

文章目录 一、pikachu靶场简介二、靶场环境准备三、pikachu 靶场搭建过程1、phpstudy 配置2、MySQL环境变量配置&#xff08;非必要&#xff09;3、pikachu 靶场配置4、靶场连接测试 四、pikachu靶场搭建时数据库连接问题等其它问题(Warning: mysqli_connect(): (HY000/1049): …

全球城市多边形和点数据集 (GUPPD)

全球城市多边形和点数据集 (GUPPD) 第 1 版是一套包含 123,034 个城市定居点的全球数据集&#xff0c;包含 1975-2030 年期间的地名和人口&#xff0c;每五年更新一次。该数据集建立在欧盟委员会联合研究中心 (JRC) 2015 年全球人类定居点 (GHS) 城市中心数据库 (UCDB) 的基础上…

【手撕数据结构】二叉树oj题

目录 单值二叉树题目描述题目思路及代码 相同的树题目描述题目思路及代码 对称二叉树题目描述题目思路及代码 另一棵树的子树题目描述题目思路及代码 二叉树的前序遍历题目描述题目思路及代码 二叉树的构建与遍历题目描述题目思路及代码 单值二叉树 题目描述 题目思路及代码 …

模型 情境领导力

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。灵活变通&#xff0c;因势利导的领导艺术。 1 情境领导力的应用 1.1 软件项目的成功转型 在一家知名的软件开发公司中&#xff0c;有一个由资深工程师李伟领导的团队&#xff0c;负责开发一款新的客…