2. 数据准备与清洗:复盘所需数据源与清洗原则

效果评估与风险人群复盘的准确性,高度依赖底层数据的质量。本章聚焦于构建复盘所需的数据体系,明确三大核心数据源(行为数据、交易数据、画像数据)的采集范围,并建立标准化的数据清洗原则与常见问题处理流程。

2.1 复盘所需三大数据源

复盘分析需要整合多维度数据,以形成对风险人群的完整刻画。下表列出了三大数据源的核心字段与用途:

数据源类型 核心字段示例 复盘用途
行为数据 登录时间、浏览页面、点击频次、停留时长、操作路径、设备指纹 识别异常操作模式(如高频点击、非正常时段登录)、评估用户活跃度与转化漏斗
交易数据 订单金额、交易时间、支付方式、收货地址、退款记录、交易对手 分析交易金额分布、异常交易时段、高频退款行为、关联交易网络
画像数据 年龄、性别、注册时长、信用评分、职业、收入区间、历史逾期标签 分层评估不同客群的风险表现,定位高风险画像特征
数据源整合提示: 建议以用户唯一标识(如用户ID)作为主键,将行为、交易、画像数据通过时间戳对齐,构建宽表用于后续复盘分析。避免在数据源层面遗漏关键维度,导致复盘结论片面。

2.2 数据清洗原则与标准流程

原始数据通常包含缺失、异常、重复等问题,必须经过清洗才能用于复盘。数据清洗应遵循以下四项核心原则:

  1. 完整性原则: 确保关键字段(如用户ID、交易金额、时间戳)非空,缺失比例超过阈值(如30%)的字段需评估是否保留。
  2. 准确性原则: 剔除明显超出业务逻辑范围的数据(如交易金额为负数、年龄超过120岁)。
  3. 一致性原则: 统一数据格式(如日期格式统一为YYYY-MM-DD)、编码标准(如性别统一为0/1)。
  4. 时效性原则: 仅保留复盘时间窗口内的数据,剔除过期或无效记录。

下图展示了标准的数据清洗流程,从原始数据输入到清洗后数据输出,包含关键处理节点:

数据清洗标准流程图 原始数据 缺失值处理 异常值检测 重复值去重 格式统一 清洗后数据 说明:缺失值处理包括删除、填充(均值/中位数/众数)或模型预测;异常值检测常用3σ原则或箱线图法。

2.3 常见数据问题与处理策略

在实际复盘项目中,数据问题往往集中在以下几类。下表总结了常见问题、识别方法及推荐处理策略:

问题类型 识别方法 推荐处理策略
缺失值 使用 isnull() 统计各字段缺失比例;可视化缺失矩阵 缺失率 < 5%:删除记录;5%-30%:填充(均值/中位数/众数);> 30%:评估字段重要性,考虑删除字段
异常值 箱线图、Z-score、业务规则(如交易金额 > 100万) 业务明确错误:直接删除或修正;业务合理但极端:保留并单独标记,用于风险人群分析
重复数据 基于主键(如用户ID+时间戳)去重;检查完全重复行 完全重复:保留第一条;业务重复(如同一用户同一天多次登录):根据业务逻辑保留或聚合
格式不一致 检查日期格式、数值单位、文本编码 统一转换为标准格式(如日期统一为YYYY-MM-DD,金额统一为分)
逻辑矛盾 交叉字段校验(如注册时间 > 交易时间) 根据业务逻辑修正或删除矛盾记录
注意: 在处理异常值时,切勿直接删除所有异常记录。部分异常值可能代表高风险行为(如单笔大额交易),这些数据对于风险人群复盘具有重要价值。建议先标记异常类型,再根据复盘目标决定保留或剔除。

2.4 数据清洗代码示例

以下Python代码片段展示了使用Pandas进行数据清洗的典型操作,涵盖缺失值处理、异常值检测与重复值去重:

import pandas as pd
import numpy as np

# 加载原始数据
df = pd.read_csv('risk_review_data.csv')

# 1. 缺失值处理:填充交易金额缺失值(中位数)
df['transaction_amount'].fillna(df['transaction_amount'].median(), inplace=True)

# 2. 异常值检测:基于3σ原则剔除交易金额异常
mean = df['transaction_amount'].mean()
std = df['transaction_amount'].std()
df = df[(df['transaction_amount'] >= mean - 3*std) & 
        (df['transaction_amount'] <= mean + 3*std)]

# 3. 重复值去重:基于用户ID和交易时间戳去重
df.drop_duplicates(subset=['user_id', 'transaction_time'], keep='first', inplace=True)

# 4. 格式统一:将日期列转换为标准格式
df['transaction_time'] = pd.to_datetime(df['transaction_time'], format='%Y-%m-%d')

# 输出清洗后数据概览
print(f"清洗后数据量: {len(df)} 条")
print(df.info())
关键点: 数据清洗是复盘分析的基石。建议在清洗完成后,生成一份数据质量报告,记录清洗前后的数据量变化、缺失值处理方式、异常值剔除比例等,确保复盘过程可追溯、可复现。