数据清洗怎么做:异常值、缺失与停牌退市
教科书上的数据干净整齐,真实数据不是。这一篇讲三类必然遇到的问题,以及处理它们的代价。
异常值
异常值有两种完全不同的来源,处理方式也该不同。
数据错误:录入错误、单位错误、重复记录。这类必须修正或剔除。
真实的极端情况:公司真的暴雷了、真的拿到了一笔巨额订单。这类不该被抹掉——它恰恰是最重要的信息。
区分两者需要业务判断,不能一律截尾。常用的做法是:先用分位数截尾或中位数绝对偏差法把数值压回合理范围(避免个别值主导统计),同时保留一个标记,让后续能识别"这家公司被处理过"。
缺失值
缺失的处理有三种,各有代价:
- 前向填充:用上一次的值。问题是会引入滞后,而且如果缺失时间很长,填充值早就失真了。
- 用行业均值填充:合理,但会稀释个股特性——被填充的股票被迫变得"像行业平均",而因子恰恰要找偏离平均的那些。
- 直接剔除:看似干净,实则危险。如果缺失不是随机的(比如业绩差的公司更倾向于延迟披露),剔除就会系统性地把"坏样本"去掉,回测自然好看。
关键在于判断缺失机制:是随机缺失,还是有系统性的原因。后者必须谨慎处理。
特殊状态
这几类在 A 股尤其常见,每一类都要单独定义规则。
停牌:期间没有成交,价格不更新。如果按零收益率处理,会低估波动;复牌时的跳空要单独处理,不能当成普通的日收益。
被特别处理与退市:这一条格外要紧。这类公司往往正是因子分值极低的那批——如果因为数据缺失或简称变化被自动剔除,等于策略自动避开了表现最差的一批,回测会明显虚高。正确做法是保留它们,并在收益上真实体现退市带来的损失。
新股:上市初期波动异常、历史数据不足、还常有炒作。通常的做法是剔除上市后若干个交易日。
涨跌停:黄金段位提过,这里补充一点——涨停不仅意味着买不进,还意味着当天的价格没有完全反映信息,收益率是被截断的。
两条原则
事先定好规则。清洗规则必须在看到回测结果之前就定下来。如果事后发现某个处理让结果变好才保留它,那就是变相过拟合。
每一步留痕。记录剔除了多少样本、为什么剔除、填充了多少、用的是什么规则。这些记录能在结果异常时快速定位,也能防止清洗规则在不知不觉中被反复调整。
一句人话:数据清洗的目标不是"让数据好看",而是"让数据忠实"。忠实的数据常常不好看,但不好看的真数据比好看的假数据有用得多。
写在最后
数据干净之后,就可以谈因子的来源了。下一篇讲因子挖掘的两条路:人工构造与机器搜索。
本文为投研学习参考资料,仅供研究参考,不作为投资决策依据。市场有风险,投资需谨慎。
← 返回智远教投