2、数据准备基础:数据采集来源、数据质量评估、缺失值与异常值处理策略
在构建分群评分沙盘模型之前,数据准备是决定模型上限的关键环节。本章将系统讲解数据采集的典型来源、数据质量的量化评估方法,以及缺失值与异常值的处理策略,为后续的特征工程与模型训练打下坚实基础。
2.1 数据采集来源
数据采集是数据准备的起点。根据业务场景的不同,数据来源可分为内部系统数据、外部合作数据与公开数据集三大类。下表总结了常见的数据采集来源及其适用场景:
| 来源类别 | 典型数据源 | 采集方式 | 适用场景 |
|---|---|---|---|
| 内部系统 | CRM、ERP、交易流水、日志 | API 接口、数据库直连、ETL 抽取 | 用户画像、行为分析、风控评分 |
| 外部合作 | 征信机构、第三方数据平台 | 加密接口、数据交换协议 | 信用评分、反欺诈、客户分层 |
| 公开数据 | 政府统计、行业报告、开源数据集 | 爬虫、文件下载、开放 API | 基准测试、市场分析、模型预训练 |
| 传感器/IoT | 设备日志、GPS、传感器读数 | 消息队列、流式处理 | 实时评分、设备监控、位置分群 |
实践建议:在分群评分项目中,优先使用内部系统数据(如交易频次、客单价、活跃时长),因为这些数据与业务目标直接相关,且采集成本较低。外部数据仅用于补充关键缺失维度,避免过度依赖。
2.2 数据质量评估
数据质量评估是数据准备的核心步骤,通常从完整性、准确性、一致性、时效性和唯一性五个维度进行量化打分。以下是一个标准的数据质量评估框架:
- 完整性(Completeness):检查字段缺失比例,通常要求关键字段缺失率低于 5%。
- 准确性(Accuracy):验证数据是否真实反映客观事实,例如年龄字段不应出现负数。
- 一致性(Consistency):检查同一实体在不同数据源或不同时间点的取值是否矛盾。
- 时效性(Timeliness):评估数据是否在有效时间窗口内,例如评分模型通常要求数据滞后不超过 30 天。
- 唯一性(Uniqueness):检测重复记录,确保每条样本只对应一个实体。
质量评分公式:数据质量总分 = 0.3 × 完整性 + 0.25 × 准确性 + 0.2 × 一致性 + 0.15 × 时效性 + 0.1 × 唯一性。建议在数据准备阶段输出一份数据质量报告,标记每个字段的评分等级(优/良/差)。
2.3 缺失值处理策略
缺失值是数据准备中最常见的问题。处理策略的选择取决于缺失机制(MCAR、MAR、MNAR)以及业务含义。以下是三种主流策略及其适用条件:
| 策略 | 方法 | 适用条件 | 注意事项 |
|---|---|---|---|
| 删除法 | 删除含缺失值的行或列 | 缺失比例 < 5%,且缺失随机 | 可能丢失有效信息,样本量不足时慎用 |
| 填充法 | 均值/中位数/众数填充、前向/后向填充 | 缺失比例 5%~20%,数据分布稳定 | 均值填充会降低方差,影响模型区分度 |
| 模型预测法 | KNN 插补、回归插补、MICE 多重插补 | 缺失比例 > 20%,或缺失与目标变量相关 | 计算成本高,需避免过拟合 |
关键提醒:在分群评分模型中,缺失值本身可能携带信息(例如用户未填写收入字段可能暗示收入不稳定)。建议将缺失标记作为一个独立特征(如 is_missing_flag)加入模型,而非简单填充。
2.4 异常值处理策略
异常值(Outliers)会显著影响分群边界和评分稳定性。处理前需先通过统计方法或业务规则识别异常值,再选择适当的处理策略。
异常值识别方法:
- Z-Score 法:当 |Z| > 3 时视为异常,适用于近似正态分布的数据。
- IQR 法:超出 Q1 - 1.5×IQR 或 Q3 + 1.5×IQR 的值视为异常,适用于偏态分布。
- 业务规则法:根据领域知识设定阈值,例如年龄 > 120 或交易金额为负。
异常值处理策略:
| 策略 | 操作方式 | 适用场景 |
|---|---|---|
| 截尾(Winsorize) | 将异常值替换为分位数边界值(如 1% 和 99% 分位点) | 数据分布长尾,保留样本量 |
| 删除 | 直接移除异常样本 | 异常由录入错误或设备故障导致 |
| 单独分箱 | 将异常值归入“其他”类别或单独分箱 | 异常值本身具有业务含义(如欺诈交易) |
| 对数/Box-Cox 变换 | 通过数学变换压缩极端值的影响 | 数据严重右偏,且异常值无法直接删除 |
2.5 数据准备实操要点
在实际项目中,数据准备通常遵循以下步骤,建议使用 Python 的 pandas 和 numpy 库快速实现:
import pandas as pd
import numpy as np
# 1. 加载数据
df = pd.read_csv('raw_data.csv')
# 2. 数据质量评估
def quality_report(df):
report = pd.DataFrame({
'缺失率': df.isnull().mean(),
'唯一值数': df.nunique(),
'数据类型': df.dtypes
})
return report
# 3. 缺失值处理(中位数填充)
df['age'].fillna(df['age'].median(), inplace=True)
# 4. 异常值处理(IQR 截尾)
Q1 = df['income'].quantile(0.25)
Q3 = df['income'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
df['income'] = df['income'].clip(lower, upper)
# 5. 输出清洗后数据
df.to_csv('cleaned_data.csv', index=False)
实操检查清单:
- 是否对每个字段记录了缺失比例和异常值数量?
- 缺失值处理策略是否与业务团队确认过?
- 异常值是否区分了“真实极端值”和“录入错误”?
- 清洗后的数据分布是否与原始分布保持合理一致?
数据准备是分群评分沙盘模型中最耗时但回报最高的环节。扎实的数据质量评估与科学的缺失值、异常值处理策略,能够显著提升后续模型训练的稳定性和评分结果的可靠性。