数据探索与理解:数据来源分析、数据质量评估、数据分布探索
大家好,我是你们的老朋友。今天咱们聊聊数据挖掘里最容易被忽视、却又最要命的一步——数据探索与理解。
说实话,我见过太多团队,拿到数据就急着建模。结果呢?模型跑出来效果差,回头一查,数据源有问题,质量一塌糊涂。嗯,这就像盖房子不打地基,迟早要塌。
我个人习惯,拿到任何数据任务,前30%的时间都花在数据探索上。别嫌慢,这步做好了,后面建模会顺很多。
数据来源分析:搞清楚数据从哪来
数据来源分析,说白了就是问三个问题:
- 数据是谁产生的? 用户行为?传感器?业务系统?
- 数据怎么采集的? API接口?日志文件?数据库导出?
- 数据有没有被加工过? 原始数据还是ETL后的?
我在项目中遇到过一件事。有一次做用户画像,数据团队给了我一堆"用户活跃度"字段。我一看,数值特别规整,全是整数。后来一查才知道,这是他们自己算的评分,不是原始数据。你想想看,用加工过的数据再去加工,误差会放大多少倍?
数据来源分析,我建议你画一张数据血缘图。不用太复杂,就画清楚:原始数据→ETL过程→存储位置→字段含义。这张图能帮你省掉后面80%的排查时间。
数据质量评估:别让脏数据毁了模型
数据质量评估,我一般从四个维度入手:
| 维度 | 检查内容 | 常见问题 |
|---|---|---|
| 完整性 | 缺失值比例 | 字段空值、整行缺失 |
| 准确性 | 数据是否在合理范围 | 年龄200岁、负数的销售额 |
| 一致性 | 不同来源数据是否矛盾 | 用户性别在A表是男,B表是女 |
| 时效性 | 数据是否及时更新 | 昨天的数据今天还没入库 |
举个例子。我之前做电商销售预测,发现某个商品的销量突然暴涨。一开始以为是爆款,后来一查,是数据采集系统出了bug,把同一个订单重复记录了三次。这就是准确性问题,如果不发现,模型会以为这个商品有巨大潜力,结果备货备了一堆,全砸手里了。
我的经验之谈: 数据质量评估不是一次性工作。每次数据更新,都要重新检查。我习惯写一个自动化脚本,每天跑一遍质量检查,发现问题立刻报警。
检查缺失值时,别只看比例。还要看缺失模式。是随机缺失?还是跟某个特征相关?比如用户收入字段经常缺失,可能高收入人群不愿意填。这种非随机缺失,处理方式完全不同。
数据分布探索:摸清数据的脾气
数据分布探索,说白了就是看看数据长什么样。我一般分三步走:
第一步:单变量分析
每个字段单独看。数值型字段看均值、中位数、标准差、最大值、最小值。分类型字段看频数分布。
这里有个小技巧:数值型字段一定要画直方图。我见过太多人只看统计量,结果被平均值骗了。比如用户消费金额,平均值是500,但直方图一看,其实是双峰分布——一部分人花100,一部分人花1000。平均值500根本代表不了任何人。
# 我常用的快速探索代码
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('data.csv')
# 数值型字段概览
print(df.describe())
# 画直方图
df['amount'].hist(bins=50)
plt.show()
# 检查异常值
Q1 = df['amount'].quantile(0.25)
Q3 = df['amount'].quantile(0.75)
IQR = Q3 - Q1
outliers = df[(df['amount'] < Q1 - 1.5*IQR) | (df['amount'] > Q3 + 1.5*IQR)]
print(f"异常值数量: {len(outliers)}")
第二步:双变量分析
看两个字段之间的关系。数值对数值,画散点图。数值对分类,画箱线图。分类对分类,画堆叠柱状图。
为什么会这样?因为很多业务问题,本质上是变量之间的关系问题。比如"广告投入和销售额的关系",散点图一看就明白是线性还是非线性。
💡 一个小建议: 双变量分析时,别忘了计算相关系数。但记住,相关系数只衡量线性关系。我遇到过两个变量相关系数接近0,但散点图一看是完美的U型关系。所以,一定要看图。
第三步:多变量分析
这一步更高级一些。可以用PCA降维后可视化,或者用热力图看所有字段的相关系数矩阵。
我个人习惯,先做热力图。一眼就能看出哪些字段高度相关。高度相关的字段,建模时要注意多重共线性问题。
# 相关系数热力图
import seaborn as sns
corr_matrix = df.corr()
plt.figure(figsize=(12, 10))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()
数据探索的避坑指南
做了这么多年数据挖掘,我总结了几条血泪教训:
- 不要只看汇总统计量。 平均值、中位数这些数字会骗人。一定要可视化。
- 注意数据的时间跨度。 如果数据只覆盖了促销期间,那模型学到的全是促销模式,平时根本用不了。
- 检查数据是否平衡。 分类问题中,正负样本比例严重失衡的话,模型会偷懒——全预测成多数类,准确率还很高,但毫无意义。
- 别忘了业务背景。 数据分布异常,有时候不是数据问题,而是业务逻辑。比如"双十一"当天的销量暴增,这不是异常值,是正常业务波动。
总结一下
数据探索与理解,说白了就是跟数据交朋友。你得知道它从哪来、质量怎么样、脾气如何。这个过程没有捷径,但做好了,后面的建模工作会轻松很多。
记住一句话:垃圾进,垃圾出。数据探索花的时间,最终都会在模型效果上体现出来。
下一章,咱们聊聊数据预处理。到时候我会分享一些处理缺失值和异常值的实战技巧,敬请期待。