🚀 AI 一键生成 joinquant 策略代码

JoinQuant 因子库中 earnings_growth 缺失值为何每天变动?

joinquant | 发布时间: 2026/5/22
以下内容由 EasyQuant 生成。

问题描述

earnings_growth的处理问题

按照文档中的写法,理论上没有5年财报的股票earnings_growth和sales_growth都应该是NA
Img

但是实际上取到的因子值,会有一个每天变动的值。
Img

请问这实际上是怎么处理的呢?

解决方案

您好!您观察到的现象是由于 JoinQuant 因子库对**风格因子及其描述因子进行了正规化处理(包括缺失值填充)**所导致的。

根据 JoinQuant API 文档的说明,具体处理逻辑如下:

1. 原始计算确实为 NaN

正如您在文档中所见,earnings_growth(5年盈利增长率)和 sales_growth(5年营业收入增长率)在计算时,至少需要有4年的财务数据,否则原始计算结果确实为 NaN

2. 缺失值填充逻辑导致数值变动

为了保证多因子模型和组合优化的正常运行,JoinQuant 对风格因子(growth 是风格因子,而 earnings_growth 是构成它的描述因子)进行了统一的缺失值填充处理。文档中明确指出了填充规则:

缺失值填充:按照聚宽一级行业分行业,以不缺失的股票因子值相对于市值的对数进行回归,对缺失值进行填充。

为什么每天都在变动?
因为在对缺失值进行回归填充时,引入了**市值(Market Cap)**作为自变量。由于股票的市值是随着每天的股价波动而变化的,因此通过回归模型计算出来的填充值也会每天发生变动。

3. 其他正规化处理的影响

除了缺失值填充,因子在最终输出前还会经历以下处理:

  • 去极值:将2.5倍标准差之外的值,赋值成2.5倍标准差的边界值。
  • 标准化:进行市值加权标准化 $x=(x- mean(x))/(std(x))$。

由于全市场的均值、标准差以及个股的市值每天都在变化,这也会导致即使是填充后的数值,在经过标准化后每天都会呈现出不同的变动。

总结

您取到的非 NA 且每天变动的值,是系统为了保证因子数据的完整性,利用同行业其他股票的数据结合该股票每日变动的市值进行回归填充后的结果。如果您在研究中需要严格剔除上市时间不足的股票,建议在获取因子数据后,结合 get_security_info 获取上市日期(start_date),手动将上市不足 4-5 年的股票因子值过滤或重新置为 NaN。