3. 数据探索与可视化:初步了解异常值

拿到数据后的第一件事是什么?我个人的习惯是——先别急着建模,更别急着跑算法。先坐下来,跟数据“聊聊天”。聊天的工具,就是可视化。

你可能会觉得,异常值检测不就是找个算法一套吗?其实不是。越复杂的项目,我越强调先用眼睛看。为什么呢?因为很多数据结构上的秘密,算法是看不出来的,但一眼扫过去往往就心里有数了。

这一章咱们就聊聊,如何通过数据探索和几张经典的图,快速定位那些“不对劲”的点。

3.1 为什么先用眼睛看?

我在项目里见过不少新人,接过数据就干,结果跑了一堆模型,性能一直上不去。回过头一看,原来是某个字段里混进了-9999这种占位符。你说模型能学好吗?

可视化有三大好处:

  • 直观:数据分布、离群点、缺失模式,一眼就能发现
  • 快速:几行代码比跑完整个pipeline要快得多
  • 找方向:看完图你才知道该用哪种检测方法

说白了,可视化就是给你的数据做一次“体检”。

3.2 三张“王牌”图表

我用的最多的是下面三种图。它们各有侧重,组合起来基本能覆盖80%的异常初筛场景。

图表类型 能发现什么 典型例子
箱线图 (Box Plot) 四分位范围之外的点 电商订单金额中的超大额交易
直方图 (Histogram) 整体分布形态与“孤岛” 用户年龄分布中的极端低龄/高龄
散点图 (Scatter Plot) 变量之间的偏离关系 广告花费与转化率中的虚假点击

3.3 箱线图:异常值的“标准尺”

箱线图很好理解。中间是箱子,上下是须,须之外的点就是异常值。

它的依据是四分位距(IQR)。计算起来很简单:

IQR = Q3 - Q1
上须 = Q3 + 1.5 * IQR
下须 = Q1 - 1.5 * IQR
超出须的点 = 潜在异常值

举个代码示例:

import matplotlib.pyplot as plt
import seaborn as sns

# 假设data是DataFrame,有一列'amount'
sns.boxplot(data=data, y='amount')
plt.title('订单金额箱线图')
plt.show()

我曾在处理金融交易数据时,用箱线图一眼就发现了几个交易金额超越上须十几倍的点。后来核实确实是系统重复记账,属于数据采集错误。

3.4 直方图:看清数据“真面目”

直方图看的是数据长啥样。正常数据往往呈钟形或者偏态分布。如果你发现图上有孤立的“小山峰”,那通常有问题。

看个例子:

import matplotlib.pyplot as plt
import seaborn as sns

sns.histplot(data=data, x='age', bins=50)
plt.title('用户年龄分布直方图')
plt.axvline(x=120, color='red', linestyle='--')
plt.show()

我遇到过的情况是,某个日志里年龄字段出现了200、300这种值。你看直方图就会发现,主分布集中在0-100之间,但在右端突然冒出一根孤零零的柱子。那基本就是异常数据。

3.5 散点图:发现“不和谐”的关系

散点图适合看两个变量之间的关系。正常数据往往聚集在某个趋势线附近,而那些偏离很远的点,往往就是异常。

代码也很简单:

import matplotlib.pyplot as plt

plt.scatter(data['feature_a'], data['feature_b'])
plt.xlabel('Feature A')
plt.ylabel('Feature B')
plt.title('A与B的散点关系')
plt.show()

我有个印象很深的例子——分析服务器请求量与错误率的关系。正常情况下,请求越多错误也越多,呈现正相关。但图中有一个点,请求量很低,错误率却爆高。一看日志,原来是某次部署配置错误导致大量502。

3.6 可视化之后的行动

看到了异常点,接下来要做什么?我建议你先做这么几步:

  • 标注:在图上把这些点标出来,记下它们的索引
  • 溯源:去业务系统里看它们是怎么产生的
  • 分类:判断是真异常(数据错误)还是合理波动
  • 决断:决定过滤、修正还是保留

可视化不是终点,而是起点。它的作用是帮你快速锁定“可疑目标”,为后续的定量检测提供方向。我个人习惯先把可视化结果存成截图,方便在团队里讨论。

有一次在一个高维数据集上,我随便画了个箱线图就想批量过滤异常值。结果把很多业务上合理的促销数据给滤掉了。后来才意识到:每个字段的“异常阈值”都不一样,不能一套IQR规则走天下。

所以这里警告:可视化发现的异常,一定要结合领域知识做二次确认。

3.7 本章知识体系

下面这张图总结了我们这一章的核心逻辑:通过三种可视化方法,从原始数据中发现异常值的线索。

数据探索与可视化流程 原始数据 箱线图 (IQR) 直方图 (分布) 散点图 (关系) 标记疑似异常点 业务确认 → 进入后续检测流程 可视化只是“筛选”, 不能替代定量检测