3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台上,因子库中 PEG(市盈率相对盈利增长比率)值大量缺失的情况是广泛存在的,并且这确实是由**明确的特殊原因(算法定义限制)**造成的。
根据 JoinQuant 官方 API 文档中关于成长因子的定义,PEG 的计算公式及特殊处理逻辑如下:
PEG = PE / (归母公司净利润(TTM)增长率 * 100)这意味着,只要一家上市公司出现以下两种情况之一,其 PEG 因子值就会在聚宽因子库中显示为缺失(nan):
在 A 股市场中,处于周期底部、业绩短期下滑或本身尚未盈利的公司数量庞大,这就直接导致了在横截面数据上,PEG 因子会出现大面积的 nan 值。
除了上述核心算法限制外,还有一些常规的财务数据原因会导致缺失:
面对大量缺失的 PEG 数据,在编写量化策略时可以采取以下几种处理方式:
直接剔除(推荐):PEG 因子通常用于寻找“高成长且估值合理”的股票。既然 PEG 为 nan 意味着公司亏损或业绩下滑,这本身就违背了 PEG 选股的初衷。因此,在选股逻辑中直接过滤掉 PEG 为 nan 的股票是最符合逻辑的做法。
# 假设 df 是包含 PEG 因子的 DataFrame
df = df.dropna(subset=['PEG'])
行业均值填充:如果您在进行多因子打分或回归模型,必须保留这些样本,可以使用聚宽提供的数据处理函数进行行业均值填充。例如在使用 neutralize(中性化)函数时,利用 fillna 参数:
from jqfactor import neutralize
# 使用申万一级行业均值填充缺失值
neutralize(data, how=['sw_l1'], fillna='sw_l1')
极值处理:在填充缺失值前后,建议结合 winsorize(去极值)函数,防止部分微利且微增长的公司产生极大的 PEG 值干扰模型。
总结来说,PEG 值的缺失是聚宽为了保证因子经济学意义而做的刻意设计,在策略开发时应将其视为“不符合成长股特征”的信号进行合理处理。