用平实的语言介绍这个项目
一个看起来比实际好一倍的系统。
这个项目把新披露的 SEC 文件按“有多大可能重要”排序。真正有意思的不是排序本身,而是:早期版本的得分大约是诚实版本的两倍,原因只是对一个时间戳的假设,而这个差异被测量出来并公开发布,而不是悄悄改掉。
要解决的问题
每天申报的量,没人读得完
上市公司持续在申报,而其中大部分并不会改变什么。想要跟上的人,每天早上都要决定当天哪些文件值得打开——这个决定通常只凭标题、凭公司规模,或者干脆不做。
所以这个项目问的问题很窄,也可以核对:在今天申报的全部文件里,哪五份应该先读?排序结果可以对照之后实际发生的情况来评分,这也是选择排序而不是任何需要预测价格的做法的原因。
评估覆盖 957 个交易日内的 9,721 份申报文件,每个交易日的中位数为 9 份。
数据来自哪里
三类来源,各有自己的观察时间
SEC 申报文件
来自 EDGAR 的 8-K 披露,并保留受理时间戳——也就是该文件真正对外公开的时刻,而不是文件上印的日期。
日线价格
复权后的日开盘价、最高价、最低价与收盘价,用于测量披露之后发生了什么,以及构建公司页上的历史走势。
Company Facts
已申报的财务数字,附带其会计概念、单位与报告期间,用于“财报结果”部分,而不是用于排序模型。
没有任何数据是购买的、从终端抓取的或人工录入的。全部输入要么是公开申报文件,要么是供应商复权价格序列,评估过程还记录了每一项的行数与内容哈希。
做什么与不做什么
明确的边界
它做什么
- 按“之后出现异常大幅、经基准调整后的波动”的估计概率,对当天的申报文件排序。
- 在模型从未训练过的交易日上,把这个排序与实际发生的情况作对照测量。
- 公开测量结果、失败的尝试,以及支撑两者的证据文件。
它不做什么
- 不提供投资建议、目标价或买卖判断。
- 它估计的是反应的幅度,从不估计方向。大幅波动可能朝任一方向。
- 历史排序结果不等于交易收益。这里没有考虑交易成本、滑点、容量,也没有计入判断错误的代价。
测出来是多少
诚实测量下的得分
这个数字的含义。 它是每天前五名中事后被证明重要的平均占比。它不是“前五名里至少找到一份重要文件”的概率,也不是按天计算的成功率。在一个典型交易日里选五份,它意味着其中大约有一份是重要的。
平均精度的 95% 区间为 36.5% 至 43.0%,来自按交易日聚类的自助重采样,共 2,000 次抽样。只给点估计而不给这个区间,会让结果显得比样本所能支撑的更精确。
那个时间戳
对一个时间戳的假设
文件在某一分钟被受理,读者只能在那之后行动。最初的流水线却按申报“日期”建仓——对于收盘后受理的文件,这意味着在它存在之前就已建仓。模型的其他部分没有任何改动。
在相同的交易日上测量,这条捷径得到 31.2%,而诚实流水线得到 19.8%。下表每一行都再去掉一项模型本不该知道的信息。
| 阶段 | 每日前五占比 | 平均精度 | 不可能成立的建仓占比 |
|---|---|---|---|
| Naive pipeline | 31.2% | 59.7% | 96% |
| + purged, embargoed CV | 31.2% | 59.0% | 96% |
| + shifted trailing features | 27.4% | 43.9% | 96% |
| + point-in-time universe | 27.4% | 43.9% | 96% |
| + point-in-time entry | 19.8% | 39.7% | 0% |
哪些没成功
三件尝试过但没有上线的事
刻意写成一份“否定清单”。这三项都用与正面结果相同的机制测量,并以相同方式报告。
来自申报正文的语言特征
对正文做情绪分析与变化检测得到的特征,并没有在“到达时间 + 条目代码”已有的信息之外改进排序。
把“与自身历史比较”用作排序信号
把一份披露与同一家公司的历史比较,在公司页上是有用的;但它并没有改进横截面的每日排序。
波动率预测
只有通过样本外覆盖率检验的预测器才会出现在公司页上。没有任何预测器通过时,这张卡片是直接不出现,而不是给一个近似值。
正在运行的部分
正在运行的部分
研究引擎按计划刷新申报文件、价格与已申报财报,并据此重新生成每一个公司页。你正在看的这个网站就是它的输出,页面上的每个数字都链接到其背后的申报文件或价格序列。