跳至主内容

方法与口径

因子效力基于历史 IC,不代表未来预测力

本页描述因子效力面板上每个数字是怎么来的,以及它有哪些已知的、会让结果偏乐观的毛病。下面的计数直接读自面板同一份查询,不是写死在页面上的。

已出数因子
19
截面数
46
最新截面
2026-07-31
每截面有效样本(中位)
198

一、截面是怎么构建的

每个截面日期先圈一个“截至当日可投资”的股票池:候选池取当前 market_cap 最高的一批活跃 A 股(剔除指数代码),再对每只股票取该日之后的第一根日 K 作为锚点价——当时还没上市的股票没有锚点,自然被剔除,上市时点的正确性因此是免费拿到的。 存活下来的按“锚点收盘价 × 股本”这个规模代理排序取前 N 只,构成该日的投资域。

没有股本快照的股票会被排除,而不是退化成按价格排序——把价格和市值两种量纲混在一张排序里, 会悄无声息地污染 top-N,而这种污染在结果里不会以任何形式露头。

二、前瞻收益:20 个交易日

每个因子在投资域上算的是它对未来 20 个交易日收益的预测力。前瞻收益 = 第 20 个交易日的复权收盘价 ÷ 锚点日复权收盘价 − 1。交易日计数用的是该股票自身在 kline_daily 里的行序, 所以停牌日天然不计入——停牌当天没有 K 线,也就不占一个交易日。

样本门槛:一个截面上,某因子与前瞻收益重叠的有效样本少于 10 个就整点丢弃;重叠样本少于 3 个时相关系数本身返回 null 而不是 0。 上面那格“每截面有效样本”说的就是这个数:因子值与前瞻收益都拿得到的 股票数(中位 198 只),它小于投资域规模—— 基本面覆盖不全的因子,能打分的股票本来就更少,统计是在这个更小的集合上做的。

三、RankIC、IC、IR、命中率各是什么

  • RankIC:因子值与前瞻收益的 Spearman 秩相关。面板的头条指标用它而不是 IC,因为秩相关对极端值不敏感——A 股的估值类因子经常有离群到离谱的取值。
  • IC:同一对序列的 Pearson 相关。一起存下来,方便对照“是不是被几个极端值撑起来的”。
  • IR = mean(RankIC) / stdev(RankIC),在所有截面上算。 它回答的是“这个因子的效力稳不稳”,不是“效力有多大”——两个 RankIC 均值一样的因子,波动小的那个 IR 更高。
  • 命中率:方向调整后的正确期数占比。标注为“高优”的因子记 RankIC > 0 的期数,“低优”的因子(如 PE)记 RankIC < 0 的期数。所以它不是原始符号比例, 一个 PE 之类的低优因子命中率高,意味着它按预期在反向工作。

IC 的符号一律是原始符号,不按方向翻转后入库——面板负责在展示时解释符号, 数据库里存的是算出来的东西本身。

四、已知偏差(都会让结果偏好看)

下面几条不是“待办事项”,是现在就在影响面板数字的东西。其中多数的方向都是让结果比真实情况更好看一点。

1. 候选池的历史缺席偏差

候选池按当前市值圈定,不是历史时点的市值。当年很大、后来萎缩掉出候选池的股票, 在所有历史截面里都缺席——包括它本该入选的那些日期。上市锚点过滤解决的是“未上市却被算进去”, 解决不了“今天的赢家反过来决定历史统计范围”。要根治得有覆盖面更广的历史 K 线池。

2. 复权因子覆盖不全:99.8% 的 K 线行已带真实因子

历史上 adj_factor 一律是写死的 1.0(即未做除权除息调整)。2026-08-25 起该字段接入行情源的真实 qfq 复权因子:除权除息日由每日行情的昨收重述检测触发当晚重算, 每周再全量校准一遍;取不到因子的行显式标记为不可用(按原始价参与计算),不再用 1.0 冒充。 当前 99.8% 的行带真实因子;其余行(多为指数/ETF 或因子序列未覆盖的早期区间)仍按原始价处理, 跨越分红送股的个股在这些区间上的动量类因子仍有轻微失真。

3. 退市股票的幸存者偏差

取价的查询过滤 status='active',所以在锚点日与前瞻窗口末端之间退市的股票, 会整对从 IC 样本里消失。方向明确:所有因子的 IC 都因此比真实情况略微好看。

4. PIT 基本面深度不足,价值类因子期数极少

价值与质量类因子要用“当时能拿到的”财务快照,而我们积累的 point-in-time 历史深度还不够长,能对齐上计算窗口的完整快照只覆盖很少几个截面。 当前有 7 个因子的期数不足 10 期,而覆盖最好的因子有 46 期。 期数个位数的因子,IR 再夸张也不构成证据——看起来最惊人的数字往往正是样本最少的那个。 面板如实展示这些行,不做隐藏,也请不要据此下结论。

5. 重叠的前瞻窗口,期数不等于独立样本数

每期的前瞻窗口有 20 个交易日那么宽,而相邻两期的间隔中位数只有 14 天(实测值,不是设定值)——推进间隔短于这个窗口, 相邻两期覆盖的“未来”就有一段是同一段行情(按每周 5 个交易日折算,约 50%),IR = mean(RankIC) / stdev(RankIC) 的那个 stdev 因此建立在彼此不独立的观测上。 同理,上面那格的 46 个截面不能当成 46 个独立样本来读,其中真正独立的信息量要少得多。 无论哪种情况都要说清楚:我们没有做任何重叠修正(Newey-West 一类的自相关调整一个都没上)。窗口一旦重叠,stdev 就会偏小、IR 偏高,稳定性看起来比实际更可信。

还有一条不算偏差但同样要说清楚:一条 factor_ic 记录都没有的因子,面板会让它整行缺席, 而不是补一行 0。编出来的 0 会被读成“测过、结果没用”,比不显示更容易误导。

五、为什么最新一期总是一个月前

这是最常被当成“数据断更”的一点,其实是方法本身自带的滞后:要给某个截面日期打分, 必须先等它的 20 个交易日前瞻收益走完,数据才算闭合。20 个交易日约合一个自然月,所以最新一期永远落后今天约一个月, 这是正确行为。

此刻面板最新一期是 2026-07-31,距今 36 天。计算任务本身按周运行;如果这个数字明显超过一个月加一周,那才是调度出了问题, 而不是方法的正常滞后。

同理,采样也不是每天一个点。一个点位的“未来”要等够交易日才算数,天天算不会让结论更准, 只会让面板反复展示同一批还没成熟的数据。

实际节奏也是量出来的:相邻两期间隔的中位数是 14 天, 而历史上最大的一次间隔是 34 天(2026-04-11 2026-05-15)。明显超出中位间隔的那一段是调度空洞,不是方法自带的滞后—— 上面那条“距今多少天”只量得到最新一期的边缘,量不到中间漏掉的期,两个数要一起看才完整。

六、去哪儿核对

面板实时数字:/factors(无需登录)。围绕这套口径写的长文与数据表快照:/research。本页描述的是工具怎么算,不对任何具体证券给出方向性判断。

投资风险提示 | Investment Risk Warning

  • 本平台提供的分析和建议仅供参考,不构成投资建议
    Analysis and suggestions provided are for reference only and do NOT constitute investment advice.
  • 股票投资有风险,入市需谨慎。过往业绩不代表未来收益。
    Stock investment carries risks. Past performance does not guarantee future results.
  • 历史回测结果仅供策略评估参考,不代表实际交易表现
    Backtest results are for strategy evaluation only and do not represent actual trading performance.
  • AI分析可能存在误差,请独立判断并自行承担投资风险。
    AI analysis may contain errors. Please make independent judgments and bear investment risks yourself.
  • 请根据自身风险承受能力理性投资,量力而行。
    Please invest rationally according to your own risk tolerance and financial capability.