数据校验的习惯:每个异常都要有个解释
我的掌握程度:
先掌握这个答案
数据体检固定清单:①行数对账(交易日×股票数−合理缺失=实际行数);②价格范围(>0、日收益不超涨跌停界);③抽样比对(随机挑3只股票和行情软件对数,精确到分);④截面检查(某天全市场收益分布是否异常,如均值整体偏移=对齐错误);⑤缺失率统计(各字段NaN比例,突增=数据源故障)。原则:异常未解释=数据不可信=研究暂停。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
本阶段实战方法 · 把行情数字变成可比较的收益
看股票、基金或策略业绩时,先对齐本金、起止日期、现金流与费用。
- 选一个固定区间,记录期初价值、期末价值、分红、出入金和交易费用。
- 没有中途出入金时,用(期末价值+已取出分红-期初价值-费用)÷期初价值计算收益;有出入金时先区分时间加权与资金加权。
- 用相同区间的基准作比较,同时记录最大亏损;不要单凭一次盈利评价能力。
使用边界
- 不同期限的收益不可直接排名;年化只是换算,不是未来收益承诺。
- 模拟价格不是实时行情。普通股票交易手数、T+1和费用应按具体市场规则核对。
背景 · 从一个困惑说起
研究员A:拿到数据直接跑因子,结果很漂亮。研究员B:先跑了20分钟体检,发现3只股票价格全为0、某天全市场收益率整体偏移1%——修完再跑,因子失效。三个月后实盘,A的策略暴雷,B的稳定运行。
由此产生的问题
系统性的数据校验该包含哪些固定动作?为什么「每个异常都要有解释」是数据工作的职业标准?
核心概念
数据体检固定清单:①行数对账(交易日×股票数−合理缺失=实际行数);②价格范围(>0、日收益不超涨跌停界);③抽样比对(随机挑3只股票和行情软件对数,精确到分);④截面检查(某天全市场收益分布是否异常,如均值整体偏移=对齐错误);⑤缺失率统计(各字段NaN比例,突增=数据源故障)。原则:异常未解释=数据不可信=研究暂停。
为什么需要它
①错误传播:数据错1%,因子结论可能错100%(方向都可能反);②时间成本不对称:体检20分钟 vs 实盘暴雷后排查一周;③建立「数据信任度」档案:每份数据的已知问题记录在案,团队共享——这是机构数据组的日常制度。
实际应用场景
写一个health_check(df)函数作为数据管道第一步;每次数据更新自动跑、异常邮件告警;研究报告附「数据体检摘要」(专业细节,面试加分)。
与之前知识的联系
q-065的图鉴给「异常种类」,本题给「制度化防线」。数据车间全部完工——下一题是车间的毕业典礼:完整流水线。
⚠ 常见误解
- 数据源是大厂的就不用检查:所有数据源都有口径变更、接口故障、静默错误的经历
- 抽样3只太少没意义:抽样比对的意义是「抓系统性口径错」(如复权方式变了),不是统计抽样
- 校验拖慢研究:它只在「数据更新」时跑一次;不做校验的返工才是真正的慢
🛠 本题实践任务
把health_check改造成你的版本,跑在你已下载的数据上,逐项给每个非零异常找到解释(停牌?除权?数据源问题?)。全部有解释才算过关。
💡 提示(先自己想5分钟再看)
解释的来源:对照q-065图鉴和q-013除权知识;实在解释不了的行,隔离出来单独研究。
✅ 验收标准
一份体检报告+每项异常的书面解释。「无解释不放行」从今天成为你的数据纪律。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(脏数据、清洗),再用案例、公式和代码帮助理解。此功能需要先启用服务。