4. 数据清洗与预处理面试实战
在另类数据量化研究岗位的面试中,数据清洗与预处理几乎是必考环节。面试官并不只是想确认你会不会调用 dropna() 或 fillna(),而是想判断你能否把"脏数据"转化为"可交易信号",以及你是否理解每一步处理对最终因子收益的潜在影响。本章围绕缺失值、异常值、去重、标准化四条主线,给出可复用的回答框架、追问路径与公司侧重点。
一、核心原理:清洗不是"干净",而是"可解释"
另类数据(卫星图像、信用卡流水、APP埋点、招聘广告等)的清洗目标与通用数据分析不同。量化研究关心的是:处理后的数据能否稳定预测未来收益,且不引入前视偏差。因此,任何清洗动作都要回答两个问题:这一步是否改变了数据的截面排序?以及这一步是否用到了未来信息?
缺失值方面,随机缺失可以用均值、中位数或模型插补;但系统性缺失往往本身携带信号。例如某只股票在某周没有卫星图像覆盖,可能意味着云层遮挡或数据供应商覆盖不足,直接填充会抹掉信息。异常值方面,要区分"错误值"与"真实极端值":前者应修正或剔除,后者可能正是因子收益的来源。去重方面,另类数据常因多源合并产生重复记录,需按主键与时间戳去重。标准化方面,截面标准化(z-score、rank)是因子构建的常规操作,但时序标准化与截面标准化的选择会显著影响回测结果。
二、方法流程:从诊断到验证的闭环
建议按以下五步组织回答,每一步都对应一个可追问的细节:
- 数据质量诊断:统计缺失率、重复率、异常值比例,按时间与标的维度分别查看。
- 缺失值处理:根据缺失机制选择删除、均值/中位数填充、前向填充或模型插补。
- 异常值处理:用分位数法、MAD法或业务阈值识别,区分错误值与极端值。
- 去重与对齐:按主键去重,统一时间频率与标的代码,处理停牌与退市。
- 标准化与验证:选择截面或时序标准化,回测对比因子IC、换手率与回撤。
下面是一段常见的缺失值与异常值处理代码示例,面试时可以口述逻辑,不必逐行背诵:
import pandas as pd
import numpy as np
# 缺失率诊断
missing_rate = df.isnull().mean().sort_values(ascending=False)
# 按标的分组中位数填充
df['value'] = df.groupby('stock_id')['value'].transform(
lambda x: x.fillna(x.median())
)
# MAD法识别异常值
median = df['value'].median()
mad = (df['value'] - median).abs().median()
df['is_outlier'] = (df['value'] - median).abs() > 3 * 1.4826 * mad
# 截面z-score标准化
df['zscore'] = df.groupby('date')['value'].transform(
lambda x: (x - x.mean()) / x.std()
)
三、案例/场景:卫星图像数据的清洗实战
假设你研究某零售公司的停车场车流量因子。原始数据来自卫星图像识别,存在以下问题:部分日期因云层遮挡缺失;部分停车场识别框重叠导致重复计数;极端天气日车流量异常低;不同城市停车场规模差异大。
处理思路:缺失日期若连续超过3天,标记为"数据不可用"而非填充;重复计数按停车场ID与日期去重,保留置信度最高的记录;异常低值先判断是否为真实天气事件,若是则保留但加入天气控制变量;标准化采用城市内截面rank,避免规模差异主导因子。最后回测对比清洗前后因子IC,若IC从0.03提升到0.05且换手率未显著上升,说明清洗有效。
| 问题类型 | 常见处理方法 | 量化研究关注点 | 公司侧重点 |
|---|---|---|---|
| 随机缺失 | 均值/中位数/模型插补 | 是否改变截面排序 | 高频数据公司关注实时插补 |
| 系统性缺失 | 标记缺失、单独建模 | 缺失本身是否含信号 | 另类数据供应商关注覆盖率 |
| 错误异常值 | 修正或剔除 | 是否引入前视偏差 | 风控团队关注极端值处理 |
| 真实极端值 | 保留并加控制变量 | 是否影响因子稳定性 | 对冲基金关注尾部收益 |
| 重复记录 | 按主键与时间戳去重 | 是否重复计算信号 | 数据工程团队关注主键设计 |
| 量纲差异 | 截面z-score或rank | 是否保留可比性 | 多因子团队关注标准化一致性 |
四、误区/复盘:面试中容易踩的坑
误区二:把异常值全部剔除。真实市场极端事件往往包含重要信息,全部剔除可能导致因子在尾部失效。
误区三:忽略标准化的一致性。训练集用z-score,测试集用min-max,会导致因子暴露不可比。
误区四:不做回测验证。清洗方法没有绝对对错,只有对因子表现的影响,必须用IC、换手率、回撤等指标验证。
复盘时可以用STAR结构组织一个项目案例:情境(另类数据源脏乱)、任务(构建可回测因子)、行动(诊断、清洗、标准化、回测对比)、结果(IC提升、换手率可控)。面试官通常会追问:"如果清洗后因子IC下降,你会怎么办?"此时应回答:先检查是否引入前视偏差,再对比不同清洗方案的稳健性,最后考虑是否更换数据源或调整因子构建逻辑。
总结来说,数据清洗与预处理面试的核心不是罗列方法,而是展示你具备"研究闭环"思维:从业务语义出发,诊断数据问题,选择可解释的处理策略,并用回测验证其对因子表现的影响。掌握这一框架,你就能在面试中把看似基础的问题回答出研究深度。