3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!您观察到的现象是由于 JoinQuant 因子库对**风格因子及其描述因子进行了正规化处理(包括缺失值填充)**所导致的。
根据 JoinQuant API 文档的说明,具体处理逻辑如下:
正如您在文档中所见,earnings_growth(5年盈利增长率)和 sales_growth(5年营业收入增长率)在计算时,至少需要有4年的财务数据,否则原始计算结果确实为 NaN。
为了保证多因子模型和组合优化的正常运行,JoinQuant 对风格因子(growth 是风格因子,而 earnings_growth 是构成它的描述因子)进行了统一的缺失值填充处理。文档中明确指出了填充规则:
缺失值填充:按照聚宽一级行业分行业,以不缺失的股票因子值相对于市值的对数进行回归,对缺失值进行填充。
为什么每天都在变动?
因为在对缺失值进行回归填充时,引入了**市值(Market Cap)**作为自变量。由于股票的市值是随着每天的股价波动而变化的,因此通过回归模型计算出来的填充值也会每天发生变动。
除了缺失值填充,因子在最终输出前还会经历以下处理:
由于全市场的均值、标准差以及个股的市值每天都在变化,这也会导致即使是填充后的数值,在经过标准化后每天都会呈现出不同的变动。
您取到的非 NA 且每天变动的值,是系统为了保证因子数据的完整性,利用同行业其他股票的数据结合该股票每日变动的市值进行回归填充后的结果。如果您在研究中需要严格剔除上市时间不足的股票,建议在获取因子数据后,结合 get_security_info 获取上市日期(start_date),手动将上市不足 4-5 年的股票因子值过滤或重新置为 NaN。