3、数据预处理实战:清洗、去重、缺失值处理、异常值检测,以及标准化和归一化的具体方法

在形象数据实战项目中,数据预处理往往占据整个分析流程 60% 以上的时间。原始数据通常来自多个渠道(问卷、传感器、业务系统、爬虫),不可避免地存在格式不一致、重复记录、字段缺失、极端离群值以及量纲差异等问题。若直接将这些“脏数据”送入模型或可视化看板,轻则导致统计指标失真,重则使聚类、回归等算法完全失效。本章将围绕数据清洗、去重、缺失值处理、异常值检测、标准化与归一化五个核心环节,结合形象数据(如身高、体重、体脂率、肤色RGB值、穿搭风格评分等)展开实战拆解。

形象数据预处理全流程链路 原始数据接入 多源异构数据 数据清洗 格式统一/类型转换 文本去空格/单位统一 去重 完全去重/部分去重 基于关键字段 缺失值处理 删除/填充/插值 均值/中位数/模型 异常值检测 3σ / IQR / 箱线图 业务规则校验 标准化 (Z-score) 均值=0, 标准差=1 适合正态分布数据 归一化 (Min-Max) 映射到[0,1]区间 适合有界数据 干净数据集 供建模/可视化 质量可追溯 关键决策点: ① 清洗与去重是前置条件,缺失值和异常值处理顺序可互换,但需记录处理日志 ② 标准化/归一化必须在训练集上拟合参数,再应用到测试集,防止数据泄露 ③ 异常值不一定是错误值,需结合业务场景判断是否剔除或保留

3.1 数据清洗:从“能用”到“好用”的第一道关口

核心原理

数据清洗的目标是修正原始数据中的格式错误、单位不统一、编码混乱、文本杂质等问题。形象数据中常见的问题包括:身高字段混入“175cm”“1.75m”“175”等多种写法;肤色RGB值出现“255,255,255”与“#FFFFFF”混存;穿搭评分字段包含“好”“8分”“8.5”等非结构化文本。清洗的本质是建立统一的数据字典和格式规范,让后续处理能够基于一致的数据类型和语义进行。

判断方法与操作流程

  1. 字段类型检查:使用 df.dtypes 或 info() 查看各列类型,将“身高”转为 float,“性别”转为 category,“评分”转为 int 或 float。
  2. 单位统一:建立单位映射表,如将“m”统一转为“cm”,将“kg”与“斤”统一为“kg”。
  3. 文本清洗:去除首尾空格、全角半角转换、正则表达式提取关键数字(如从“身高175cm”中提取175)。
  4. 格式标准化:日期统一为 YYYY-MM-DD,颜色值统一为 RGB 三元组或 HEX 字符串。

案例拆解:形象评分表清洗

某时尚品牌收集了 5000 条用户穿搭评分数据,原始“评分”列包含“8分”“8.5”“很好”“A”“9”等混合值。通过正则提取数字部分,将“很好”映射为 9(基于预设规则),将“A”映射为 10,最终统一为 0-10 的浮点数。清洗后数据量从 5000 条变为 4982 条(18 条因无法解析被剔除),评分分布更接近正态。

常见误区:清洗时直接删除无法解析的记录,可能导致样本偏差。应先尝试规则映射,无法映射的再单独标记,最后决定删除或人工复核。

3.2 去重:识别并消除“看似不同实则相同”的记录

核心原理

去重分为完全去重(所有字段完全相同)和部分去重(基于关键字段判断重复)。形象数据中,同一用户可能因多次提交产生多条记录,或不同渠道导入的数据存在冗余。去重的关键在于定义“重复”的判定规则,避免误删有效数据。

判断方法与操作流程

去重类型判定字段适用场景保留策略
完全去重所有字段系统重复导出保留第一条
关键字段去重用户ID + 日期同一用户同日多次提交保留最新或评分最高
模糊去重姓名 + 手机号(相似度)不同渠道录入差异人工审核或保留置信度高者
# Python示例:基于用户ID和日期去重,保留最新记录
df = df.sort_values('submit_time').drop_duplicates(
    subset=['user_id', 'record_date'], keep='last'
)

案例拆解:多渠道数据合并去重

某形象分析项目合并了线上问卷(3200条)和线下门店采集(1800条),发现 600 条疑似重复。通过比对“手机号+姓名”完全匹配,确认 450 条重复;另有 150 条手机号相同但姓名不同,经人工抽样发现是夫妻共用手机号,属于有效数据。最终保留 4550 条唯一记录,去重率 9%。

经验提醒:去重前务必保存原始数据备份,并记录去重规则和保留策略,便于追溯和审计。

3.3 缺失值处理:不盲目填充,也不轻易删除

核心原理

缺失值处理需先判断缺失机制:完全随机缺失(MCAR)、随机缺失(MAR)、非随机缺失(MNAR)。形象数据中,体脂率字段常因设备故障缺失,肤色值可能因用户拒绝填写而缺失。处理策略取决于缺失比例、字段重要性和业务含义。

判断方法与操作流程

  • 缺失比例 < 5%:可直接删除缺失记录,或使用均值/中位数填充。
  • 缺失比例 5%-20%:使用回归插补、KNN插补或多重插补。
  • 缺失比例 > 20%:考虑删除该字段,或将其转化为“是否缺失”的二元特征。
  • 业务规则填充:如“穿搭风格”缺失时,可根据“场合”字段推断。

案例拆解:体脂率缺失的三种处理对比

某健康形象数据集包含 10000 条记录,体脂率缺失 12%。分别采用均值填充、中位数填充和 KNN 插补(k=5),对比填充后数据的标准差和分布形态。结果显示:均值填充使标准差从 5.2 降至 3.8,分布明显收窄;中位数填充对偏态分布更稳健;KNN 插补保留了原始分布形态,但计算成本较高。最终选择 KNN 插补,并在后续建模中验证了其效果最优。

关键原则:填充值只是估计值,应记录填充方法和参数,并在模型评估时对比不同填充策略的敏感性。

3.4 异常值检测:区分“噪声”与“真实信号”

核心原理

异常值检测的目标是识别显著偏离正常范围的数据点。形象数据中,身高 250cm、BMI 值 45、肤色 RGB 值为负等明显异常,通常源于录入错误或测量故障。但某些“异常”可能是真实存在的极端个体(如职业篮球运动员身高 220cm),需结合业务场景判断。

判断方法与操作流程

方法原理适用场景阈值
3σ 原则超出均值±3倍标准差近似正态分布99.7% 置信区间
IQR 箱线图超出 Q1-1.5×IQR 或 Q3+1.5×IQR偏态分布1.5 倍四分位距
Z-score标准化后值 > 3标准化后数据3
业务规则超出物理/逻辑范围身高、体重等自定义

案例拆解:身高异常值的处理闭环

某服装定制平台收集用户身高数据,发现 12 条记录超过 230cm。初步判定为异常,但进一步核查发现其中 3 条来自职业篮球运动员,属于真实数据。处理策略:将 9 条明显录入错误(如 1750cm)删除,3 条真实极端值保留但单独标记。后续建模时,分别测试“保留”与“剔除”两种方案,发现保留极端值使回归模型 R² 从 0.82 降至 0.79,但业务上更合理,最终选择保留并增加样本量。

风险提示:异常值检测不能“一刀切”。建议先标记异常,再结合业务复核,最后决定剔除、保留或转换(如 Winsorize 缩尾处理)。

3.5 标准化与归一化:消除量纲影响的关键步骤

核心原理

标准化(Z-score)和归一化(Min-Max)是两种最常用的数据缩放方法。标准化将数据转换为均值为 0、标准差为 1 的分布,适合数据近似正态或存在离群点的场景;归一化将数据线性映射到 [0,1] 区间,适合有明确上下界的数据。选择哪种方法取决于后续算法的假设:SVM、K-Means、PCA 等距离类算法对尺度敏感,通常需要标准化;神经网络和深度学习则常用归一化加速收敛。

具体方法与公式

# 标准化 (Z-score)
x_std = (x - mean) / std

# 归一化 (Min-Max)
x_norm = (x - min) / (max - min)

# 稳健标准化(使用中位数和IQR)
x_robust = (x - median) / IQR

案例拆解:形象特征融合前的缩放对比

某形象评分系统需要融合身高(150-200cm)、体重(40-120kg)、肤色亮度(0-255)和穿搭评分(0-10)四个特征。直接使用原始值计算欧氏距离时,身高和体重主导了距离计算,肤色和评分几乎被忽略。经过 Min-Max 归一化后,四个特征权重均衡,聚类结果从 3 个簇变为 5 个更有意义的簇。进一步对比标准化,发现由于肤色亮度分布偏态,标准化后仍存在离群点影响,最终选择 Min-Max 归一化。

实战建议:若数据存在极端离群值,优先使用稳健标准化(中位数+IQR)或先进行异常值处理再归一化。所有缩放参数(mean、std、min、max)必须从训练集计算,并保存参数用于测试集和预测集。

3.6 预处理流程的完整复盘与质量验证

核心原理

数据预处理不是一次性操作,而是一个需要迭代验证的过程。预处理完成后,应通过数据质量报告、分布对比、模型效果对比等方式验证预处理的有效性。同时,建立可复用的预处理流水线(Pipeline),确保新数据进入时能自动应用相同的处理逻辑。

质量验证清单

  • 清洗后各字段类型是否符合预期?
  • 去重后记录数与业务预期是否一致?
  • 缺失值填充后分布是否发生显著变化?
  • 异常值处理后模型性能是否提升?
  • 标准化/归一化后特征方差是否合理?

案例拆解:预处理前后模型效果对比

某形象推荐系统使用逻辑回归预测用户偏好,预处理前准确率为 68%,F1 分数为 0.61。经过完整预处理(清洗、去重、KNN 缺失值填充、IQR 异常值标记、Min-Max 归一化)后,准确率提升至 79%,F1 分数提升至 0.74。进一步分析发现,主要提升来自缺失值填充和归一化,而异常值处理对结果影响较小。

总结复盘:数据预处理的核心不是“用最复杂的方法”,而是“用最合适的方法”。每一步处理都应记录日志、保留参数、验证效果,形成可追溯、可复现的预处理流程。形象数据实战中,预处理质量直接决定后续建模和可视化的可信度,值得投入足够的时间和精力。