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)
实操检查清单:
  • 是否对每个字段记录了缺失比例和异常值数量?
  • 缺失值处理策略是否与业务团队确认过?
  • 异常值是否区分了“真实极端值”和“录入错误”?
  • 清洗后的数据分布是否与原始分布保持合理一致?

数据准备是分群评分沙盘模型中最耗时但回报最高的环节。扎实的数据质量评估与科学的缺失值、异常值处理策略,能够显著提升后续模型训练的稳定性和评分结果的可靠性。