4. 数据清洗与预处理面试实战

在另类数据量化研究岗位的面试中,数据清洗与预处理几乎是必考环节。面试官并不只是想确认你会不会调用 dropna() 或 fillna(),而是想判断你能否把"脏数据"转化为"可交易信号",以及你是否理解每一步处理对最终因子收益的潜在影响。本章围绕缺失值、异常值、去重、标准化四条主线,给出可复用的回答框架、追问路径与公司侧重点。

数据清洗回答框架:四步递进 业务语义先行 缺失是否含信息 诊断分布形态 异常值来源分类 选择处理策略 去重与标准化 回测验证影响 对比因子IC变化 追问路径: 1. 缺失值占比多少?是随机缺失还是系统性缺失? 2. 异常值来自数据源错误还是真实市场极端事件? 3. 标准化后是否保留截面可比性?是否引入未来信息?

一、核心原理:清洗不是"干净",而是"可解释"

另类数据(卫星图像、信用卡流水、APP埋点、招聘广告等)的清洗目标与通用数据分析不同。量化研究关心的是:处理后的数据能否稳定预测未来收益,且不引入前视偏差。因此,任何清洗动作都要回答两个问题:这一步是否改变了数据的截面排序?以及这一步是否用到了未来信息?

缺失值方面,随机缺失可以用均值、中位数或模型插补;但系统性缺失往往本身携带信号。例如某只股票在某周没有卫星图像覆盖,可能意味着云层遮挡或数据供应商覆盖不足,直接填充会抹掉信息。异常值方面,要区分"错误值"与"真实极端值":前者应修正或剔除,后者可能正是因子收益的来源。去重方面,另类数据常因多源合并产生重复记录,需按主键与时间戳去重。标准化方面,截面标准化(z-score、rank)是因子构建的常规操作,但时序标准化与截面标准化的选择会显著影响回测结果。

面试加分点:主动说出"我会先做数据质量报告,再决定清洗策略",而不是直接说"我用中位数填充"。这体现你具备研究流程意识。

二、方法流程:从诊断到验证的闭环

建议按以下五步组织回答,每一步都对应一个可追问的细节:

  1. 数据质量诊断:统计缺失率、重复率、异常值比例,按时间与标的维度分别查看。
  2. 缺失值处理:根据缺失机制选择删除、均值/中位数填充、前向填充或模型插补。
  3. 异常值处理:用分位数法、MAD法或业务阈值识别,区分错误值与极端值。
  4. 去重与对齐:按主键去重,统一时间频率与标的代码,处理停牌与退市。
  5. 标准化与验证:选择截面或时序标准化,回测对比因子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是否保留可比性多因子团队关注标准化一致性

四、误区/复盘:面试中容易踩的坑

误区一:一上来就说"缺失值用均值填充"。面试官会追问:如果缺失是系统性的,均值填充是否抹掉了alpha?
误区二:把异常值全部剔除。真实市场极端事件往往包含重要信息,全部剔除可能导致因子在尾部失效。
误区三:忽略标准化的一致性。训练集用z-score,测试集用min-max,会导致因子暴露不可比。
误区四:不做回测验证。清洗方法没有绝对对错,只有对因子表现的影响,必须用IC、换手率、回撤等指标验证。

复盘时可以用STAR结构组织一个项目案例:情境(另类数据源脏乱)、任务(构建可回测因子)、行动(诊断、清洗、标准化、回测对比)、结果(IC提升、换手率可控)。面试官通常会追问:"如果清洗后因子IC下降,你会怎么办?"此时应回答:先检查是否引入前视偏差,再对比不同清洗方案的稳健性,最后考虑是否更换数据源或调整因子构建逻辑。

公司侧重点速查:高频量化公司更关注实时清洗与低延迟;基本面量化公司更关注缺失值的经济含义;另类数据供应商更关注数据覆盖率与标准化流程;风控团队更关注异常值对组合回撤的影响。回答时结合目标公司业务,能显著提升匹配度。

总结来说,数据清洗与预处理面试的核心不是罗列方法,而是展示你具备"研究闭环"思维:从业务语义出发,诊断数据问题,选择可解释的处理策略,并用回测验证其对因子表现的影响。掌握这一框架,你就能在面试中把看似基础的问题回答出研究深度。