🚀 AI 一键生成 joinquant 策略代码

为什么JoinQuant聚宽因子库中的PEG值会大量缺失?

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

问题描述

因子库PEG值大量缺失,这种情况广泛存在吗?还是有特殊原因?

解决方案

在 JoinQuant(聚宽)平台上,因子库中 PEG(市盈率相对盈利增长比率)值大量缺失的情况是广泛存在的,并且这确实是由**明确的特殊原因(算法定义限制)**造成的。

核心原因分析

根据 JoinQuant 官方 API 文档中关于成长因子的定义,PEG 的计算公式及特殊处理逻辑如下:

  • 计算公式PEG = PE / (归母公司净利润(TTM)增长率 * 100)
  • 官方特殊处理逻辑如果 PE 或 增长率为负,则为 nan

这意味着,只要一家上市公司出现以下两种情况之一,其 PEG 因子值就会在聚宽因子库中显示为缺失(nan):

  1. 公司亏损:导致市盈率(PE)为负数。
  2. 业绩下滑:归母净利润(TTM)较上一周期出现负增长。

在 A 股市场中,处于周期底部、业绩短期下滑或本身尚未盈利的公司数量庞大,这就直接导致了在横截面数据上,PEG 因子会出现大面积的 nan 值。

其他次要原因

除了上述核心算法限制外,还有一些常规的财务数据原因会导致缺失:

  • 上市时间不足:次新股可能缺乏足够的数据来计算 TTM(滚动十二个月)的利润增长率。
  • 财报未披露:部分公司可能因各种原因未及时披露财务数据,导致基础依赖数据缺失。

量化策略中的处理建议

面对大量缺失的 PEG 数据,在编写量化策略时可以采取以下几种处理方式:

  1. 直接剔除(推荐):PEG 因子通常用于寻找“高成长且估值合理”的股票。既然 PEG 为 nan 意味着公司亏损或业绩下滑,这本身就违背了 PEG 选股的初衷。因此,在选股逻辑中直接过滤掉 PEG 为 nan 的股票是最符合逻辑的做法。

    # 假设 df 是包含 PEG 因子的 DataFrame
    df = df.dropna(subset=['PEG'])
    
  2. 行业均值填充:如果您在进行多因子打分或回归模型,必须保留这些样本,可以使用聚宽提供的数据处理函数进行行业均值填充。例如在使用 neutralize(中性化)函数时,利用 fillna 参数:

    from jqfactor import neutralize
    # 使用申万一级行业均值填充缺失值
    neutralize(data, how=['sw_l1'], fillna='sw_l1')
    
  3. 极值处理:在填充缺失值前后,建议结合 winsorize(去极值)函数,防止部分微利且微增长的公司产生极大的 PEG 值干扰模型。

总结来说,PEG 值的缺失是聚宽为了保证因子经济学意义而做的刻意设计,在策略开发时应将其视为“不符合成长股特征”的信号进行合理处理。