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

Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测

传感器监控、安全运营、欺诈检测——这些场景都需要及时发现异常状况。但是问题在于,异常样本出现频率低导致标注数据稀缺,监督学习模型难以构建。虽然异常(anomaly)和新颖性(novelty)这两个概念经常混用,但它们在建模假设和处理流程上存在本质差异。

本文会先讲清楚异常检测的核心概念,分析anomaly和novelty的区别,然后通过实际案例演示如何用概率密度拟合方法构建单变量数据集的无监督异常检测模型。所有代码基于distfit库实现。

Anomaly还是Novelty?差异在哪
两者都是偏离"常态"的观测值,统称为离群值(outlier)。离群值通常出现在分布的尾部,远离主体密度区域。如果某个值或某个小范围内出现显著的密度尖峰,也可能是潜在离群点。虽然检测目标一致,建模思路却不同:

Anomaly(异常):训练数据中已知存在离群值,它们偏离正常模式。建模策略是在正常样本(inlier)上拟合模型,忽略那些偏离样本,把落在正常行为范围外的观测识别为异常。

Novelty(新颖性):训练数据中不存在已知离群值,数据本身不包含偏离正常的观测。这种情况更棘手,因为缺少离群参照。领域知识在这里变得关键,避免模型在正常样本上过拟合。

三类离群值形态
刚才说了anomaly和novelty的建模差异,在建模前需要明确"在具体应用场景下,离群值长什么样"。离群值大致分三类(图1):

全局离群值(point outliers)指那些独立的、与所有其他观测都不同的单个数据点[1, 2]。平时说的"离群值"通常就是指这类。

上下文离群值(contextual outliers)是在特定上下文下不合理的观测。上下文可能体现为双峰或多峰分布,离群值在某个峰的范围内偏离。比如冬天零度以下正常,夏天就成了异常。时间序列、季节性数据、传感器数据、安全监控都会遇到这类问题。

集体离群值(collective outliers)是一组相似实例表现出的异常行为。这组离群点可能形成独立的峰,往往暗示着不同于单点异常的问题——批处理错误或数据生成过程的系统性问题。检测集体离群值通常需要专门的方法。

图1. 从左到右:全局离群值、上下文离群值、集体离群值示例

建模前还要考虑数据集维度。从特征数量看,异常检测分为单变量(univariate)和多变量(multivariate)两种方式。

http://www.hskmm.com/?act=detail&tid=24577

相关文章:

  • 10.4 闲话
  • 神秘专题训练之老题补做
  • 全球 whk 水平下降 998244353 倍,而你不变
  • 202510做题记录
  • 全球 wkh 水平下降 998244353 倍,而你不变
  • python 基础问题汇总
  • 球球大作战
  • 全球 OI 水平下降 998244353 倍,而我不变
  • VulnHub-Raven2 靶场 wp
  • javaScript的构造函数和java的构造函数区别
  • 天一生水 地六成之
  • P14041 [PAIO 2025] Towers
  • 根号分治简单解说
  • 哈希简单解说
  • Say 题选记(9.28 - 10.4)
  • Excel表设置为细框线
  • 前端学习教程-VIte整合ECharts
  • const不可改变解释
  • macOS Sequoia 15.7.1安全更新:修复字体解析器内存损坏漏洞
  • AtCoder Beginner Contest 426 ABCDEF 题目解析
  • 数学
  • 前端学习教程-ElementPlus 教程
  • AI训练的悖论:为什么越追求准确率越会产生幻觉?
  • 信奥大联赛周赛(提高组)#2516-S 赛后盘点
  • PSRAM 是什么
  • Debian 13 eza 安装与常用参数
  • Syncthing 2.0 版本开机自启
  • 鲜花 10.4:【半 whk 向】临项交换法贪心
  • 前端学习教程-Pinia 教程
  • 布谷娱乐直播架构源码开发实用功能:技术驱动更迭的创新体验