4、数据清洗基础:缺失值处理、异常值检测、去重、格式统一、时间戳对齐、数据质量评估
在另类数据处理与投资信号提取的实战流程中,数据清洗往往占据整个项目 60% 以上的时间。另类数据(如卫星影像、电商订单、物流轨迹、舆情文本、信用卡消费流水等)天生具有高噪声、非结构化、多源异构的特征。若未经清洗直接进入信号提取环节,轻则降低策略夏普比率,重则产生虚假相关性导致实盘亏损。本章将系统拆解数据清洗的六大核心模块:缺失值处理、异常值检测、去重、格式统一、时间戳对齐与数据质量评估,并给出可直接落地的判断路径与工程化方法。
上图展示了数据清洗的完整工程链路:多源原始数据依次经过缺失值处理、异常值检测、去重、格式统一四大基础模块后,进入时间戳对齐与数据质量评估环节。质量评估结果不达标时,需要回溯至对应模块进行迭代优化。下面逐一展开每个模块的核心原理、操作流程与实战要点。
4.1 缺失值处理:从“忽略”到“决策”
核心原理
缺失值并非简单的“空值”,其产生机制决定了处理策略。按缺失机制可分为三类:完全随机缺失(MCAR)、随机缺失(MAR)与非随机缺失(MNAR)。MCAR 指缺失与任何变量无关,可直接删除或简单填充;MAR 指缺失与其他已观测变量相关,需用模型预测填充;MNAR 指缺失与缺失值本身相关,处理最为棘手,需引入外部信息或业务假设。在另类数据场景中,卫星影像因云层遮挡导致的缺失属于 MNAR,而传感器临时故障导致的缺失多为 MCAR。
判断方法与操作流程
- 缺失率诊断:计算每个字段的缺失比例。缺失率 < 5% 且为 MCAR 时,可直接删除缺失样本;缺失率在 5%-20% 之间,建议使用填充策略;缺失率 > 20% 时,需评估该字段的业务价值,考虑删除字段或引入代理变量。
- 缺失机制判断:通过 t 检验或卡方检验比较“有缺失组”与“无缺失组”在其他变量上的差异。若差异显著,则倾向于 MAR 或 MNAR。
- 填充策略选择:数值型字段优先使用中位数(抗异常值干扰)或线性插值;时间序列数据使用前向填充(ffill)或后向填充(bfill);分类字段使用众数填充;高维数据可使用 KNN 或随机森林回归预测填充。
- 缺失指示变量:对于有业务含义的缺失(如“未交易”与“数据丢失”),建议额外生成 is_missing 指示变量,保留缺失本身的信息量。
案例拆解:电商高频数据缺失处理
某量化团队获取某电商平台每日商品销量数据,用于构建消费景气度信号。原始数据中,约 12% 的“销量”字段缺失。初步诊断发现:缺失主要集中在周末及大型促销活动期间。进一步分析显示,周末缺失与平台系统维护相关(MCAR),而促销期间缺失与高并发写入失败相关(MNAR)。处理方案:对周末缺失使用前后 7 日同类型日(工作日/周末)的中位数填充;对促销期缺失,引入“促销活动虚拟变量”作为辅助特征,使用随机森林回归预测填充。最终,信号与社零总额的相关系数从 0.31 提升至 0.47,且回测中未出现前视偏差。
常见误区与复盘
- 误区一:所有缺失值一律用均值填充。这会压缩数据方差,削弱信号区分度。
- 误区二:忽略缺失的时空分布。若缺失集中在特定时段(如每年 1 月),填充后可能引入季节性伪信号。
- 复盘要点:每次填充后,应对比填充前后数据的分布形态(均值、方差、分位数),确保填充未破坏原始分布特征。
4.2 异常值检测:区分“噪声”与“信号”
核心原理
异常值在另类数据中具有双重身份:可能是传感器故障或录入错误产生的噪声,也可能是极端市场事件(如黑天鹅)或真实异常行为(如大额资金异动)的宝贵信号。因此,异常值检测的核心不是“删除”,而是“识别与标注”。检测方法分为三类:统计方法(3σ、IQR、MAD)、距离与密度方法(DBSCAN、LOF)、树模型与集成方法(孤立森林、随机森林)。
判断方法与操作流程
| 方法 | 适用场景 | 关键参数 | 优缺点 |
|---|---|---|---|
| 3σ 原则 | 近似正态分布的单变量数据 | σ 倍数(通常 3) | 简单快速;对非正态分布失效 |
| IQR 法 | 偏态分布、含离群点的数据 | 1.5×IQR 或 3×IQR | 稳健;对样本量敏感 |
| MAD 法 | 含强离群点的数据 | 中位数偏差 | 比 3σ 更稳健;计算稍复杂 |
| 孤立森林 | 高维数据、无监督场景 | 树数量、采样比例 | 线性复杂度;需调参 |
| DBSCAN | 密度分布不均的数据 | ε 邻域、MinPts | 可发现任意形状簇;参数敏感 |
实战场景:物流轨迹数据异常识别
在基于物流卡车 GPS 轨迹的供应链信号项目中,原始数据包含经纬度、速度、方向角等字段。初始使用 3σ 法检测速度异常,发现大量“瞬时速度超过 120km/h”的记录。但进一步核查发现,部分异常源于 GPS 漂移(噪声),而另一部分则对应真实的高速公路超车行为(信号)。处理策略:结合加速度(前后两点速度差/时间差)进行二次判断——若加速度超过 5m/s² 且持续时间小于 3 秒,判定为 GPS 漂移并剔除;若加速度持续超过阈值,则标记为“异常驾驶事件”并保留。最终,该异常事件频率与物流公司季度营收增速的领先相关性达到 0.62。
常见误区与总结
- 误区一:对全量数据统一使用一种检测方法。应分字段、分时段、分业务场景选择合适方法。
- 误区二:只检测单变量异常,忽略多变量组合异常(如“高销量+低库存”组合)。
- 总结:异常值检测的产出物应包含三部分——异常值列表、异常原因初步判断、处理建议(删除/修正/保留标注)。
4.3 去重:定义“唯一性”的业务边界
核心原理
去重并非简单的“删除重复行”,而是基于业务语义定义唯一键(Primary Key)。在另类数据中,常见重复类型包括:完全重复(所有字段相同)、关键字段重复(如相同时间戳+相同股票代码)、近似重复(如文本内容高度相似但略有差异)。去重策略直接影响数据量级与信号质量。
操作流程
- 定义唯一键:根据业务逻辑确定唯一标识。例如,行情数据唯一键为(时间戳, 股票代码);舆情数据唯一键为(新闻ID, 发布时间)。
- 完全去重:使用 DataFrame.drop_duplicates() 按唯一键去重,保留第一条或最后一条记录。
- 近似去重:对文本类数据使用 SimHash 或 MinHash 计算相似度,设定阈值(如相似度 > 0.85 视为重复)。
- 时间窗口去重:对于高频数据,若同一事件在 1 秒内被多次上报,仅保留第一条。
案例拆解:舆情数据去重
某团队抓取财经新闻用于构建市场情绪指标。原始数据中,同一篇新闻被多个源站转载,导致重复率高达 35%。若直接按标题去重,会遗漏不同源站的差异化编辑内容;若完全不去重,则会放大特定媒体的影响力。解决方案:采用“标题 SimHash 相似度 > 0.9 + 发布时间差 < 24 小时”的双重条件判定重复,保留源站权重最高的版本。去重后,情绪指标与沪深 300 次日收益的相关系数从 0.12 提升至 0.19,且策略换手率下降 22%。
常见误区
- 误区一:盲目使用全部字段去重,导致同一业务实体的多条记录被误删。
- 误区二:忽略时间维度。例如,同一股票在 09:30:00.000 与 09:30:00.500 的两笔成交不应视为重复。
4.4 格式统一:让数据“说同一种语言”
核心原理
多源数据在单位、编码、日期格式、数值精度、文本大小写等方面存在天然差异。格式统一的目标是建立标准化的数据字典与转换规则,确保后续特征提取时无需重复处理。关键维度包括:数值格式(整数/浮点/科学计数)、日期时间格式(YYYY-MM-DD vs MM/DD/YYYY)、单位统一(美元/人民币、吨/千克)、文本编码(UTF-8/GBK)、分类标签(“男/女” vs “M/F”)。
操作流程
# 示例:日期格式统一与单位转换
import pandas as pd
# 统一日期格式
df['date'] = pd.to_datetime(df['date'], format='mixed', dayfirst=False)
# 单位转换:将美元转换为人民币(假设汇率 7.2)
df['amount_cny'] = df['amount_usd'] * 7.2
# 文本标准化:统一大小写与去除空格
df['title'] = df['title'].str.strip().str.lower()
# 分类标签映射
df['gender'] = df['gender'].map({'M': 'male', 'F': 'female', '男': 'male', '女': 'female'})
实战场景:多源卫星数据格式统一
在卫星遥感数据中,不同卫星(如 Sentinel-1 与 Landsat-8)的影像分辨率、投影坐标系、辐射定标参数均不同。若直接拼接使用,会导致信号失真。处理流程:统一重采样至 10m 分辨率 → 转换至 WGS84 坐标系 → 辐射定标转换为反射率 → 统一存储为 GeoTIFF 格式。格式统一后,NDVI(归一化植被指数)信号与农产品期货价格的相关系数稳定性显著提升。
常见误区
- 误区一:忽略隐式格式差异。例如,某些数据源将“20240101”存储为整数,而另一些存储为字符串。
- 误区二:在清洗阶段过早进行聚合或降采样,导致后续分析灵活性下降。
4.5 时间戳对齐:构建统一时间轴
核心原理
另类数据的时间粒度差异巨大:行情数据精确到微秒,舆情数据精确到秒,卫星影像通常为日频或周频。时间戳对齐的目标是将多源数据映射到统一的时间轴上,以便进行特征拼接与信号计算。对齐方式包括:内连接(仅保留共同时间点)、左连接(以主数据时间轴为准)、重采样(升采样/降采样)、前向/后向填充。
操作流程
| 场景 | 推荐方法 | 注意事项 |
|---|---|---|
| 高频行情 + 日频舆情 | 舆情数据降采样至日频,或行情数据升采样至日频 | 避免引入未来信息,舆情应使用当日已发布数据 |
| 周频卫星 + 日频价格 | 卫星数据前向填充至日频 | 填充后需添加“数据日期”字段,区分实际观测日与填充日 |
| 跨时区数据 | 统一转换为 UTC 或交易所本地时间 | 注意夏令时切换,使用 pytz 或 zoneinfo 库 |
案例拆解:卫星与行情数据对齐
某团队利用夜间灯光卫星数据预测区域经济活跃度,进而构建大宗商品需求信号。卫星数据为月频,而商品期货为日频。对齐方案:将卫星数据前向填充至日频,并生成“距上次观测天数”特征。回测发现,若不添加该特征,模型会错误地将填充值视为真实观测值,导致信号衰减;添加后,策略年化收益提升 3.2 个百分点。
assert df.index.is_monotonic_increasing,确保时间轴单调递增。
4.6 数据质量评估:量化“干净”的程度
核心原理
数据质量评估是清洗工作的收尾环节,也是建立数据信任度的关键。评估维度包括:完整性(缺失率)、准确性(与真实值或权威源的偏差)、一致性(同一实体在不同字段或不同表中的逻辑统一)、及时性(数据延迟)、唯一性(重复率)。建议建立数据质量评分卡,对每个字段打分并生成报告。
评估指标体系
- 完整性得分 = 1 - 缺失率,目标 > 0.95
- 准确性得分 = 抽样比对准确率,目标 > 0.98
- 一致性得分 = 1 - 逻辑冲突率,目标 > 0.99
- 及时性得分 = 按时到达的数据量 / 总数据量,目标 > 0.90
- 唯一性得分 = 1 - 重复率,目标 > 0.99
操作流程
- 自动化检查:编写数据质量检查脚本,每日运行并输出报告。
- 阈值告警:当完整性得分低于 0.90 或准确性得分低于 0.95 时,触发告警并暂停信号更新。
- 人工抽检:每周随机抽取 100 条记录进行人工核对,验证自动化检查的准确性。
- 质量回溯:将质量评分与策略收益进行相关性分析,找出“低质量数据导致信号失效”的具体环节。
总结复盘
数据清洗不是一次性的“预处理”,而是贯穿数据管线全生命周期的持续过程。建议建立“清洗规则库”,将每次处理逻辑(如缺失值填充方法、异常值判定阈值)版本化管理,便于回溯与复现。同时,清洗规则的变更必须经过回测验证,避免因清洗逻辑调整导致策略表现变化而无法归因。