第二章:数据准备与探索

大家好,我是你们的老朋友。今天咱们聊聊数据准备与探索。说实话,很多同学觉得这步不够酷,总想直接上模型。我刚开始做异常检测时也这么想,结果被现实狠狠教育了一顿——数据没准备好,模型再花哨也是白搭。

核心观点:异常检测的成败,80%取决于数据准备阶段。模型只是工具,数据才是灵魂。

2.1 数据采集:从哪里来,到哪里去

数据采集听起来简单,但坑特别多。我个人习惯先问三个问题:

  • 数据源是什么?传感器、日志、数据库还是API?
  • 采集频率多高?每秒一次还是每小时一次?
  • 数据量有多大?几百条还是几百万条?

我在项目中遇到过最头疼的事:客户说“数据都有”,结果给过来的是几十个Excel文件,格式还不统一。嗯,那段时间我每天都在写数据合并脚本。

小技巧:采集阶段就做好数据字典,记录每个字段的含义、类型、取值范围。这能省下后面80%的沟通成本。

2.2 数据清洗:脏数据是异常检测的天敌

数据清洗说白了就是“去伪存真”。常见的脏数据包括:

  • 重复记录:同一个时间点采集了两次
  • 格式错误:本该是数字的字段出现了字母
  • 逻辑矛盾:温度传感器显示-9999℃
  • 时间戳乱序:后采集的数据时间戳反而更早

我曾经接手过一个工业设备的数据集,里面居然有30%的重复数据。你想想看,如果直接拿这个数据训练模型,模型学到的全是重复模式,真正的异常反而被淹没了。

# 一个简单的数据清洗示例
import pandas as pd

# 加载数据
df = pd.read_csv('sensor_data.csv')

# 去除重复行
df = df.drop_duplicates()

# 检查格式
df['temperature'] = pd.to_numeric(df['temperature'], errors='coerce')

# 过滤逻辑异常
df = df[(df['temperature'] > -50) & (df['temperature'] < 150)]

2.3 缺失值处理:别让“空”毁了你的模型

缺失值处理是数据准备的重头戏。为什么?因为大多数机器学习算法不能处理空值。常见的处理方法有:

方法 适用场景 注意事项
删除缺失行 缺失比例小于5% 小心丢失重要信息
均值/中位数填充 数值型数据,分布较均匀 会降低数据方差
前向/后向填充 时间序列数据 适合短时间缺失
插值法 数据有趋势性 计算量较大
模型预测填充 缺失比例较高 可能引入偏差

我个人建议:先看看缺失值的分布。如果缺失是随机的,用均值填充问题不大。但如果缺失集中在某个时间段,那就要小心了——这可能本身就是一种异常模式。

避坑指南:我曾经在某个项目中,直接用0填充了所有缺失值。结果模型学出来,把“值为0”当成了正常模式。后来才发现,那些缺失值其实是传感器故障导致的。嗯,从那以后我再也不敢随便填充了。

2.4 异常值初步探索:先别急着删

异常检测的目标就是找异常,所以异常值本身可能就是宝藏。但前提是,你得先区分“真正的异常”和“数据错误”。

常用的初步探索方法:

  • 箱线图:一眼看出离群点分布
  • Z-score:标准化后看偏离程度
  • IQR方法:四分位距法,鲁棒性更好
  • 可视化散点:肉眼观察异常模式
# 使用IQR方法检测异常值
Q1 = df['sensor_value'].quantile(0.25)
Q3 = df['sensor_value'].quantile(0.75)
IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

outliers = df[(df['sensor_value'] < lower_bound) | 
              (df['sensor_value'] > upper_bound)]
print(f"检测到 {len(outliers)} 个潜在异常值")

你想想看,如果一上来就把所有异常值删掉,那还检测什么呢?我建议先标记,再分析,最后再决定处理方式。

2.5 数据可视化基础:一图胜千言

可视化是数据探索的利器。对于异常检测,我常用的图表有:

  • 时间序列折线图:看趋势和突变点
  • 直方图:看数据分布形态
  • 箱线图:看离群点分布
  • 散点图矩阵:看多变量关系
  • 热力图:看特征相关性

记得有一次,我盯着一个时间序列图看了半天,总觉得哪里不对。后来把数据按小时分组画了箱线图,才发现凌晨3点到5点的数据方差特别大——原来是夜班操作员交接班时出的问题。这就是可视化的力量。

个人经验:可视化不是一次性工作。我通常会先画全貌图,再放大看细节,反复迭代。有时候一个异常模式,要换三四种图表才能看清楚。

2.6 本章知识体系

下面这张图总结了数据准备与探索的核心流程。我习惯把它贴在工位上,每次做项目前都过一遍。

数据准备与探索核心流程 数据采集 数据清洗 缺失值处理 异常值探索 数据可视化 数据准备完成 发现问题,返回修改 这是一个迭代过程,不是一次性任务 关键:每一步都要记录处理日志,方便回溯和复现

好了,这一章的内容就到这里。数据准备虽然繁琐,但它是整个异常检测项目的基石。记住一句话:垃圾进,垃圾出。把数据准备好了,后面的模型构建才能事半功倍。

本章要点回顾:

  • 数据采集要明确来源、频率和规模
  • 数据清洗要处理重复、格式、逻辑问题
  • 缺失值处理要分析缺失模式,选择合适方法
  • 异常值探索要区分真实异常和数据错误
  • 可视化是发现数据问题的利器

专注资料整理