第4章 数据采集与标准化:数据来源、数据清洗规则、标准化公式
适用场景
本流程适用于以下场景:
- 从多个异构系统(CRM、ERP、用户行为日志、第三方API、CSV/Excel导出、数据库)采集原始评分数据时,需统一数据口径与格式。
- 原始数据存在缺失值、重复记录、异常值或格式不一致,需要系统化清洗后才能输入评分模型。
- 不同量纲/量级的指标(如用户月活量 1e6 与付费率 0.03)需要通过标准化公式映射至统一评分尺度(通常为0-1或0-100)。
- 数据保鲜要求高、更新频率快(每日/每周),需要可重复执行的数据管道。
前置条件
- 已确定评分模型所需的所有数据字段(见第3章《指标池定义》)及每个字段的采集源、采集频率。
- 已获得数据源访问权限(数据库只读账号、API Key、文件共享路径)。
- 已定义数据质量基线:允许的最大缺失率、重复率、异常值比例。
- 环境依赖:Python 3.8+ (推荐)或等效ETL工具(如Apache NiFi、Talend),并安装pandas、numpy、scikit-learn。
操作步骤
- 确定数据来源清单:按字段编制
data_source_map.xlsx,包含字段名、来源系统、获取方式(SQL查询/API接口/文件导入)、表名/路径、调度频率。 - 执行数据采集:依清单用统一ETL脚本抽取原始数据,保存至
raw/目录,文件名含时间戳和来源标识。 - 数据清洗:
- 去重:基于联合主键(如 user_id + date)删除重复行,保留最近时间戳记录。
- 缺失值处理:连续变量用中位数/均值填充,分类变量用众数填充或单独编码为“未知”。
- 异常值检测:使用IQR方法或Z-score标记并替换为上下边界(如
Q1 - 1.5*IQR到Q3 + 1.5*IQR)。 - 格式统一:日期统一为
YYYY-MM-DD,字符串去空格/大小写,数值转为浮点数。
- 应用标准化公式:
- 偏好某变量越大越好(如活跃天数):使用Min-Max标准化
score = (x - min) / (max - min),映射至 [0,1]。 - 偏好某变量越小越好(如崩溃率):使用反向Min-Max
score = 1 - (x - min) / (max - min)。 - 对偏态分布(如收入):先取对数再标准化,或使用分位数标准化。
- 偏好某变量越大越好(如活跃天数):使用Min-Max标准化
- 生成标准数据集:将结果写入
scored/目录,字段包括原始主键、各评分维度标准值、总评分(如线性加权)。 - 数据质量校验:核对清洗后行数、最大/最小值范围、重复率归零、缺失率低于预设阈值。
提示:建议将清洗规则和标准化参数(min/max等)持久化为JSON配置文件,方便审计和回滚。
输入输出物
| 类别 | 名称 | 格式 | 说明 |
|---|---|---|---|
| 输入 | 数据源清单 | Excel/CSV | 字段与来源映射关系 |
| 输入 | 原始数据抽取脚本 | .py / .sql | 支持多源并行抽取 |
| 输出 | 清洗后中间表 | Parquet / CSV | 仅含合法记录,缺失/异常处理完成 |
| 输出 | 标准化评分表 | Parquet / CSV | 含每个字段的评分区间 [0,1] 及加权总分 |
| 输出 | 清洗日志 | JSON / 文本 | 记录删除行数、填充值、异常值替换位置 |
责任边界
- 数据工程师:搭建采集管道,执行清洗与标准化脚本,输出合格数据集。
- 数据产品经理:确认字段清洗规则(填充策略、异常阈值)及标准化公式的选择。
- 算法工程师:提供标准化公式的参数(如Min-Max的 min/max 值来源可以是历史分布或业务预期期望区间)。
- 质量保障:审核清洗日志,确认数据质量验收标准通过。
记录材料
data_pipeline_config.json:包含所有字段的来源、清洗规则、标准化公式。raw_data_:原始数据备份,保留至少30天。.parquet cleaned_data_:清洗后数据。.parquet scored_data_:标准化后评分数据。.parquet data_quality_report_:自动生成的质量报告,含缺失率、重复率、异常率、分布图。.html
异常处理
| 异常现象 | 可能原因 | 应对措施 |
|---|---|---|
| 采集数据全部为空或明显异常(如负数时间) | 源系统接口变更/过期 | 触发告警,暂停管道,手工检查源系统文档并更新抽取脚本 |
| 缺失率超过15%阈值 | 源系统部分字段未生成/网络超时 | 改用中位数填充,并在清洗日志中标记为高风险字段,通知产品经理确认 |
| 标准化后评分超出 [0,1] 范围 | Min或Max值设定错误(如测试数据混入了生产分布) | 重新计算全局 min/max,或使用分位数标准化的版本 |
| 新字段出现但未在配置中注册 | 源系统结构变更 | 自动忽略未知字段,并发送警告给数据产品经理,以便后续迭代扩展评分模型 |
验收标准
- ① 数据完整度:最终标准数据集行数 >= 原始应采行数 × 95%(允许5%损耗,由清洗规则排除)。
- ② 重复率:清洗后重复行数为0。
- ③ 缺失率:每个字段缺失率 < 5%(超过则视为失败并回滚,改用历史分布填充)。
- ④ 标准化范围:每个评分字段的值域严格落在 [0, 1] 内,偏差 < 0.001(浮点误差可接受)。
- ⑤ 可追溯性:清洗日志JSON记录了每一处替换/删除的原始值和目标值,且与最终数据集一一对应。
- ⑥ 执行时长:全流程(采集+清洗+标准化)不超过预设SLA时间(如 30 分钟 / 百万行数据)。