首页 > 其他分享 >查找时间序列数据中异常值的终极指南(第 1 部分)

查找时间序列数据中异常值的终极指南(第 1 部分)

时间:2024-07-17 17:54:57浏览次数:9  
标签:指南 plt df 数据 outliers counts 终极 异常 查找时间

时间序列分析中异常值检测的有效统计方法和工具

      异常值:这些令人困扰的数据点可能会扭曲统计模型、扭曲预测并破坏决策过程。

       雲闪世界专门介绍时间序列数据中异常值的识别和管理的四部分系列文章的开篇,我们将探索视觉和统计方法来有效识别时间序列数据中的异常值。对于任何想要提高分析准确性的人来说,这些基础知识都至关重要。

在第二篇文章中,我专门介绍了机器学习方法,鉴于其重要性和复杂性,它们值得专门讨论:查找时间序列数据中异常值的终极指南(第2部分)用于学习时间序列中异常检测的有效机器学习方法和工具

第三篇文章探讨了如何 管理 这些异常值的各种策略,包括移除、保留和封顶技术,提供了一些处理异常值的实用方法。

第四篇也是最后一篇文章中,我将继续探讨管理异常值的方法,重点关注归因和转换方法,以及评估异常值处理的影响。

您应该关心时间序列数据中的异常值的一些原因:

  1. 异常值会严重扭曲和误传数据集的关键统计数据,例如平均值、方差和相关系数。
  2. 异常值会影响预测模型的性能。
  3. 异常值可以掩盖时间序列数据中的真实趋势和周期行为。
  4. 根据没有经过严格审查的异常数据做出的决策可能会导致糟糕的战略决策

还有许多其他原因可以说明为什么处理时间序列数据中的异常值对于有效分析至关重要,但这些理由足以激励我们开始探索。

离群值与异常

我将交替使用“异常”和“离群值”这两个术语,但它们的定义有细微的差别。异常可以指任何偏离常态的数据点,而离群值则具体表示远离大多数数据点的极值。许多方法都可以应用于异常和离群值。

如何为时间序列数据选择正确的异常值检测方法?

选择时间序列数据的最佳异常检测方法首先要深入了解数据集和预期异常。

话虽如此,首先要考虑数据集的大小和可用的计算资源

对于可解释性至关重要的数据集,Z 分数和移动平均值等简单方法可能是理想的选择。但是,更复杂的场景(例如需要检测细微模式的场景)可能会受益于 LSTM 网络等高级技术(将在本系列的第二部分中介绍),这些技术需要大量数据和计算能力。

请记住:数据集大小、计算资源、可解释性和任务性质是选择适当的异常值检测方法的关键。

尝试各种方法和指标以准确评估其性能可能会大有裨益。如果可能,请考虑使用多种方法来提高准确性。此外,使用您或领域专家对该领域的了解可以指导您选择方法。

没有一刀切的解决方案;最好的方法取决于您的数据的具体特征、您想要检测的异常的性质以及您的特定要求。

评估异常检测方法在欺诈检测等领域尤其具有挑战性,因为异常并不常见但很重要。

准确率、召回率和 F1 分数等指标对于评估这些方法在捕获欺诈活动和减少误报方面的有效性至关重要。

在预测性维护等领域,ROC 曲线和 AUC 指标对于及时识别潜在的机器故障非常有价值。

在医疗保健等行业中,可视化经常用于监测患者的生命体征,但此类方法的准确性在很大程度上取决于领域专业知识的正确解释。

单变量与多变量数据

在开始异常值分析之前,重要的是考虑您的数据是单变量还是多变量。

单变量时间序列数据由随时间记录的单个观察序列组成。典型示例包括每日股票价格、每月销售数据或年度天气数据。

单变量数据的示例
单变量数据的示例

相比之下,多元时间序列数据涉及在相同时间间隔观察和记录的多个变量或序列。

这种类型的数据捕捉不同变量之间的关系和相互作用以及它们各自的趋势和季节性变化。例如,多变量时间序列可以包括温度、湿度和风速的每日测量值,所有这些都是同时记录的。

多元数据的示例

本文描述的某些方法更适合单变量数据,而其他方法则专门用于处理多变量。

但是,有些方法可以同时适用于这两种数据。在深入研究这些方法之前,我将在此概述针对这两种数据的几种常用方法:

对于单变量数据,通常使用时间序列图和箱线图等视觉检查方法,每次只关注一个变量。STL 分解也传统上用于单变量设置。Z 分数、改进的 Z 分数方法和 Grubbs 检验也用于此类数据。

孤立森林、LOF 和自动编码器等机器学习方法通​​常用于多变量数据的降维和异常检测,但它们也可以压缩和重建单变量时间序列数据,以根据重建误差识别异常。

异常值检测方法的思维导图
异常值检测方法的思维导图
异常值很多,远不止上述思维导图列出的这些

对于多变量数据,散点图分析是考察多变量关系的常用方法,而孤立森林、LOF、自编码器等自然适合处理高维数据。

请注意,一些 单变量方法也可以应用于多变量数据。例如,Z 分数方法也可以用于多变量场景,通过独立计算每个变量的 Z 分数。

箱线图可分别用于多变量数据集中的每个变量,以识别每个维度中的异常值。在多变量场景中,散点图可用于绘制变量对。STL分解虽然传统上是单变量的,但可以通过独立分解每个序列来分析多变量序列。

检测数据中的异常值的最佳方法是什么?

视觉方法

目视检查是识别时间序列数据中异常值的基本方法。数据的性质也会影响目视检查的实施方式。

时间序列图

这是时间序列数据最直接的图表。它允许您查看趋势、模式、季节性变化和随时间变化的潜在异常值。与其他数据有显著偏差的点通常很容易被发现。

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

def plot_temporal_trends(df, columns):
 
    num_plots = len(columns)
    fig, axes = plt.subplots(num_plots, 1, figsize=(10, num_plots * 3), sharex=False)  # sharex=False to not share x-axis
    fig.suptitle(f'Temporal Trends', fontsize=16, y=1.02 + 0.01 * num_plots)
    
    if num_plots == 1:  # Ensure axes is iterable
        axes = [axes]
    
    for ax, col in zip(axes, columns):
        ax.plot(df.index, df[col], marker='o', markersize=4, linestyle='-', label=col)
        ax.set_title(f'{col} - {title}')
        ax.set_ylabel('Value')
        
        # Setting the date formatter for each subplot's x-axis
        ax.xaxis.set_major_locator(mdates.YearLocator(base=2))
        ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
        
        # Rotate and align the tick labels so they look better
        ax.tick_params(axis='x', rotation=45)
        
        ax.legend()
    
    plt.tight_layout(rect=[0, 0, 1, 0.97])  # Adjust layout to make room for the title
    plt.show()

columns = df.columns.tolist()
plot_temporal_trends(df, columns)

您能发现异常值吗?

标签:指南,plt,df,数据,outliers,counts,终极,异常,查找时间
From: https://blog.csdn.net/2401_85233349/article/details/140490164

相关文章

  • 高质量C/C++编程指南总结(七)—— 内存管理
    1.内存分配的方式从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处......
  • 折腾指南: 将光猫改造成你的NAS,WebDAV+网页文件管理器vList5+natmap
    原文:https://hi.imzlh.top/2024/07/18.cgi(预发布)很久没有写完全折腾类文章了,这还得追溯到上次折腾S905L3A那会。这篇文章很长,但是是小白级包学会。为什么会有这篇文章?这篇文章本来应该在4个月前就完成了,但是我一直都在折腾NAS软件其中我也尝试了很多方法,奈何时间不足断断续......
  • java八股复习指南-多线程篇
    多线程线程的实现在Java中,实现多线程的主要有以下四种继承Thread类,重写run()方法;实现Runnable接口,实现run()方法,并将Runnable实现类的实例作为Thread构造函数的参数target;实现Callable接口,实现call()方法,然后通过FutureTask包装器来创建Thread线程;......
  • java八股复习指南
    spring全家桶理解Spring框架核心:ioc和aop1.ioc:控制反转是指把对象的创建和配置的控制权从调用方转移给spring容器,我们可以将对象交给容器管理,即bean,这样不需要自己去new对象,只需要获取bean就可以使用。好比在家自己做菜,菜的味道全部由自己控制;去餐馆吃饭,菜的味道则是交由餐馆......
  • 《深入探索 Linux 系统:从入门到精通的全面指南》
    更多内容,可前往官方网站进行浏览LinuxKernelDocumentation:        这是Linux内核的官方文档网站,包含了详细的内核开发和使用指南。非常适合需要深入了解Linux内核架构和功能的用户。CentOSOfficialDocumentation:这是CentOS的官方文档网站,提供了关......
  • 释放Conda通道束缚:启用自由通道恢复的终极指南
    释放Conda通道束缚:启用自由通道恢复的终极指南在Conda的生态中,通道(channels)是包来源的路径,而自由通道(freechannel)通常指的是非限制性的包源,可以提供更多的包选择。有时,由于某些原因,自由通道可能会被禁用或受限。本文将详细介绍如何在Conda中使用condaconfig--setrestor......
  • react速成指南
    React18速成–适合有vue基础的同学目录前言脚手架创建react项目jsx重点知识1.在jsx语法中html直接内嵌在函数中并通过return返回2.jsx只能有一个根元素(整合成一个盒子)3.插值4.事件操作React18组件通信与插槽1.为dom组件设置Props2.react组件的PropsReactHooks1.......
  • 快速上手 Caffeine:Java 缓存库初学者指南
    一、背景简介:Caffeine是一个高性能的Java缓存库,旨在为现代应用程序提供快速、高效的缓存解决方案。它由GoogleGuavaCache的创始人之一开发,具备基于时间的过期、基于大小的回收、异步加载、统计信息等多种特性。Caffeine的性能有多么强大呢?以下是官方给出的基准测试......
  • Go微服务开发指南
    在这篇深入探讨Go语言在微服务架构中的应用的文章中,我们介绍了选择Go构建微服务的优势、详细分析了主要的Go微服务框架,并探讨了服务发现与注册和API网关的实现及应用。关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理......
  • 提升 Python 水平的高级指南
    Python是一种功能强大且灵活的编程语言,深受开发者喜爱。尽管Python易于学习,但要掌握其高级特性并将其运用自如,需要不断深入学习与实践。本文旨在帮助已经熟悉Python基础的开发者,探索更高级的Python技巧与最佳实践,提升编程水平。1.高级数据结构数据结构概述数据结......