4. 数据准备与清洗:额度策略收益评估所需的数据源、数据清洗规则、数据质量检查

额度策略收益评估的准确性,高度依赖底层数据的质量。未经清洗的原始数据通常包含缺失值、异常值、重复记录和逻辑冲突,直接使用会导致收益计算偏差、策略误判甚至模型失效。本节系统梳理评估所需的核心数据源、标准清洗规则及质量检查框架。

4.1 核心数据源清单

额度策略收益评估需要整合用户维度、授信维度、用款行为、还款表现及外部征信五类数据。下表列出各数据源的关键字段与用途:

数据类别 典型数据表 关键字段 评估用途
用户画像 user_profile user_id, age, income_level, occupation, city_level 风险分层、额度基准定价
授信记录 credit_decision user_id, credit_limit, decision_date, product_code, risk_grade 额度分配、策略分组
用款行为 loan_drawdown user_id, drawdown_amount, drawdown_date, loan_term, interest_rate 资金使用率、利息收入计算
还款表现 repayment_schedule user_id, due_date, paid_amount, overdue_days, repayment_status 逾期损失、回收率、收益修正
外部征信 credit_report user_id, credit_score, query_count, existing_debt, public_record 风险校准、额度上限约束
数据时间窗口提示: 收益评估通常需要至少 12 个月的完整表现期数据。对于新上线策略,可使用 3-6 个月短期数据做初步评估,但需在报告中明确标注“观察期不足”的风险。

4.2 数据清洗规则

清洗规则按处理优先级分为四个层级,每层解决一类典型问题。以下为各层级的核心规则与 SQL 示例:

4.2.1 第一层:缺失值处理

  • 关键标识缺失: user_id 为空或格式异常 → 直接剔除该记录。
  • 数值字段缺失: income_level、credit_score 等连续变量缺失 → 使用行业均值或同风险等级中位数填充,并生成缺失标记列。
  • 类别字段缺失: occupation、city_level 等分类变量缺失 → 归入“未知”类别,不直接删除。
-- 缺失值填充示例:收入字段用同风险等级中位数填充
UPDATE user_profile t1
JOIN (
    SELECT risk_grade, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY income_level) AS median_income
    FROM user_profile
    WHERE income_level IS NOT NULL
    GROUP BY risk_grade
) t2 ON t1.risk_grade = t2.risk_grade
SET t1.income_level = t2.median_income, t1.income_imputed_flag = 1
WHERE t1.income_level IS NULL;

4.2.2 第二层:异常值检测与截断

  • 额度异常: credit_limit 超过产品上限 3 倍或为负数 → 截断至产品上限,并记录异常标记。
  • 利率异常: interest_rate 超出 [0, 0.5] 区间 → 视为录入错误,替换为同产品平均利率。
  • 逾期天数异常: overdue_days 为负值或超过 999 → 修正为 0 或截断至 999。

4.2.3 第三层:重复与逻辑冲突

  • 重复授信: 同一 user_id 在同一 decision_date 出现多条授信记录 → 保留最新一条,其余标记为重复并剔除。
  • 用款日期冲突: drawdown_date 早于授信 decision_date → 视为数据错乱,剔除该笔用款记录。
  • 还款金额矛盾: paid_amount 大于应还总额 → 截断至应还总额,并记录超额还款标记。

4.2.4 第四层:格式与一致性标准化

  • 日期格式统一: 所有日期字段转为 YYYY-MM-DD 标准格式。
  • 金额单位统一: 所有金额字段统一为“分”或“元”,避免跨表单位不一致。
  • 枚举值映射: repayment_status 统一为 0-正常、1-逾期、2-核销、3-结清。

4.3 数据质量检查框架

清洗完成后,必须执行系统化的质量检查。检查维度分为完整性、准确性、一致性和时效性四项。以下 SVG 图展示了质量检查的完整流程与关键指标:

数据质量检查流程框架 数据质量检查流程框架 完整性检查 准确性检查 一致性检查 时效性检查 完整性指标 • 字段缺失率 < 5% • 关键字段非空率 = 100% • 记录完整度 > 95% • 主键唯一性 = 100% 准确性指标 • 异常值占比 < 1% • 金额字段正数率 = 100% • 日期逻辑正确率 > 99% • 枚举值合法率 = 100% 一致性指标 • 跨表关联匹配率 > 98% • 单位统一率 = 100% • 枚举值映射一致率 = 100% • 汇总金额勾稽偏差 < 0.1% 时效性指标 • 数据延迟 < T+1 • 表现期覆盖 > 12个月 • 最新数据日期 < 7天 • 历史数据回溯完整性 质量检查通过标准:四项全部达标 质量检查执行建议 • 每次数据更新后自动运行检查脚本,生成质量报告 • 任一维度未达标时,需回退至清洗步骤重新处理

4.4 数据质量检查脚本示例

以下 Python 脚本展示了自动化质量检查的核心逻辑,适用于每日数据管道后的质量验证:

import pandas as pd
import numpy as np

def run_data_quality_checks(df, table_name):
    """
    执行数据质量检查,返回检查结果字典
    """
    results = {}
    total_rows = len(df)
    
    # 1. 完整性检查
    missing_rate = df.isnull().sum().mean() / total_rows
    results['missing_rate'] = round(missing_rate, 4)
    results['completeness_pass'] = missing_rate < 0.05
    
    # 2. 准确性检查:金额字段必须为正数
    amount_cols = ['credit_limit', 'drawdown_amount', 'paid_amount']
    for col in amount_cols:
        if col in df.columns:
            negative_count = (df[col] < 0).sum()
            if negative_count > 0:
                results[f'{col}_negative_flag'] = True
                results['accuracy_pass'] = False
                break
    else:
        results['accuracy_pass'] = True
    
    # 3. 一致性检查:主键唯一性
    if 'user_id' in df.columns:
        dup_count = df['user_id'].duplicated().sum()
        results['duplicate_rate'] = round(dup_count / total_rows, 4)
        results['consistency_pass'] = dup_count == 0
    
    # 4. 时效性检查
    if 'decision_date' in df.columns:
        max_date = df['decision_date'].max()
        days_lag = (pd.Timestamp.today() - pd.Timestamp(max_date)).days
        results['data_lag_days'] = days_lag
        results['timeliness_pass'] = days_lag <= 1
    
    results['overall_pass'] = all([
        results.get('completeness_pass', False),
        results.get('accuracy_pass', False),
        results.get('consistency_pass', False),
        results.get('timeliness_pass', False)
    ])
    
    return results

# 使用示例
# quality_report = run_data_quality_checks(loan_data, 'loan_drawdown')
# print(quality_report)
常见清洗陷阱: 不要对缺失值直接填充 0 或删除整行,这会导致收益计算中的“幸存者偏差”。建议保留缺失标记列,在后续建模或统计中单独评估缺失模式对收益的影响。另外,清洗规则必须版本化记录,每次策略迭代后需重新评估规则是否仍然适用。

4.5 清洗后数据验证清单

在将清洗后数据投入收益评估前,建议逐项确认以下清单:

检查项 验证方法 通过标准
用户数完整性 对比清洗前后 user_id 去重计数 差异 < 2%
授信总额勾稽 汇总 credit_limit 与业务系统总授信额对比 偏差 < 0.5%
用款金额分布 检查 drawdown_amount 的 1%/99% 分位数 无极端离群值
逾期率稳定性 计算清洗前后整体逾期率 变化 < 0.3%
时间序列连续性 按月统计记录数,检查无断月 连续 12 个月无缺失

完成上述数据准备与清洗工作后,即可进入下一阶段的训练集切分与收益评估建模。数据质量是额度策略收益评估的基石,建议将清洗与检查流程固化为自动化管道,每次策略迭代时自动触发,确保评估结果始终基于可靠的数据基础。