聚宽微盘策略中的五个因子,到底有什么作用?
我在聚宽微盘选股模块中使用了五个财务因子。它们的任务不是直接预测某只股票一定会上涨,而是把不同公司的经营与盈利数据转换成一个可以比较的综合分数,为后续筛选缩小候选范围。
这五个因子分别是:
factor_list = [
"operating_revenue_growth_rate",
"total_profit_growth_rate",
"net_profit_growth_rate",
"earnings_growth",
"eps_ttm",
]
1. 营业收入增长率
聚宽字段:operating_revenue_growth_rate
营业收入增长率反映公司营业收入的变化,观察的是企业业务规模有没有扩张。它更接近“公司卖出了多少产品或服务”,还没有进入成本、费用和最终利润的层面。
这个因子的作用,是给模型提供企业经营规模变化的信息。只看利润可能会受到投资收益、资产处置或者成本突然变化的影响,而营业收入能够补充主营业务端的观察。
当前系数设置为:
-0.00190796451494171372. 利润总额增长率
聚宽字段:total_profit_growth_rate
利润总额增长率反映企业税前利润的变化。它已经考虑了收入、成本和费用,但还没有扣除所得税。
它的重要性在于:营业收入增长并不代表公司一定赚到了更多钱。把利润总额增长率和营业收入增长率放在一起,模型就能同时观察经营规模与利润端的变化。
当前系数设置为:
-6.027115922691245e-053. 净利润增长率
聚宽字段:net_profit_growth_rate
净利润增长率反映企业最终利润的变化,是扣除所得税等项目后的盈利结果。
它与利润总额增长率的方向通常比较接近,但口径并不完全相同。两者同时使用,可以让模型观察利润链条上不同位置的变化。不过,这两个因子也可能存在较高相关性,不能简单地认为它们一定提供了两份完全独立的信息。
当前系数设置为:
-1.8580428418195642e-054. 长期盈利增长
聚宽字段:earnings_growth
earnings_growth 属于盈利增长风格因子。与单期增长率相比,它更偏向观察企业较长期的盈利增长特征。
这个因子的作用,是避免模型只盯着某一个季度或者某一年的突然变化。短期财务数据可能受到低基数、一次性收益和会计调整影响,长期盈利增长能够提供另一个时间维度。
当前系数设置为:
-0.0052938921631175875. 每股收益 TTM
聚宽字段:eps_ttm
eps_ttm 是最近 12 个月口径的每股收益。它把企业利润换算到每一股上,反映每股对应的盈利水平。
前四个因子主要观察增长变化,eps_ttm 则补充当前盈利水平。这样,模型不仅看到“增长了多少”,也能看到“每股实际赚了多少”。
当前系数设置为:
-0.010077397467005972五个因子如何组合
五个因子并不是各自单独决定买卖,而是按照固定系数相加,形成每只股票的综合分数:
\[ S_i = \sum_{j=1}^{5} \beta_j x_{i,j} \]
其中,\(x_{i,j}\) 是股票 \(i\) 的第 \(j\) 个因子值,\(\beta_j\) 是对应的固定系数。
完整设置如下:
| 聚宽因子 | 观察内容 | 当前系数 |
|---|---|---|
operating_revenue_growth_rate |
营业收入变化 | -0.0019079645 |
total_profit_growth_rate |
税前利润变化 | -0.0000602712 |
net_profit_growth_rate |
最终利润变化 | -0.0000185804 |
earnings_growth |
较长期盈利增长特征 | -0.0052938922 |
eps_ttm |
最近 12 个月每股盈利 | -0.0100773975 |
计算代码可以写成:
coef_list = [
-0.0019079645149417137,
-6.027115922691245e-05,
-1.8580428418195642e-05,
-0.005293892163117587,
-0.010077397467005972,
]
factor_values = get_factor_values(
initial_list,
factor_list,
end_date=context.previous_date,
count=1,
)
df = pd.DataFrame(index=initial_list)
for factor in factor_list:
df[factor] = list(factor_values[factor].T.iloc[:, 0])
# 任意一个因子缺失,就不参加本次排序
df = df.dropna()
df["total_score"] = sum(
coef * df[factor]
for factor, coef in zip(factor_list, coef_list)
)
# 综合分数从高到低,保留前10%作为候选范围
df = df.sort_values("total_score", ascending=False)
top10pct = list(df.index)[:int(0.1 * len(df))]为什么五个系数都是负数
这里最容易产生误解。
五个系数全部为负,而代码又按照综合分数从高到低排列。因此,在其他条件完全相同的情况下,某个因子数值越大,经过负系数相乘后,反而可能降低综合分数。
所以,不能把这套设置解释成“营收增长越高越好”或者“每股收益越高越优先”。它是一套固定的线性排序参数,必须把五个因子放在一起计算,不能把任何一个因子脱离模型单独当作选股规则。
eps_ttm 的系数绝对值最大,并不等于它一定是五个因子中最重要的。五个字段的量纲、取值范围和波动幅度不同。要严谨比较因子重要性,需要先统一数据尺度,再结合 IC、分层收益或剔除单个因子后的结果进行判断。

这五个因子为什么重要
它们观察的不是同一个位置
营业收入增长率观察经营规模,利润总额增长率观察税前利润,净利润增长率观察最终利润,长期盈利增长补充更长时间维度,eps_ttm 则反映每股盈利水平。
单独一个指标往往只能看到公司的一面。五个因子组合后,模型可以从收入、利润、长期增长和每股盈利几个角度同时进行比较。
它们把主观判断变成统一排序
如果靠人工看财报,很容易因为个人偏好改变判断标准。固定因子与固定系数的意义,是让所有股票都按照同一套公式计算,使每次选股过程可以重复。
它们为候选股票增加财务约束
微盘股数量很多,财务质量差异也很大。五因子综合分数先保留排名前 10% 的股票,相当于在进入后续步骤前增加一道财务特征筛选,而不是只根据股票规模盲目选择。
五个因子要作为一个整体理解
三个增长率字段之间可能存在相关性,单个因子也可能受到异常值和财报口径影响。组合使用不能消除所有问题,但比只依赖单一财务指标包含更多信息。
当前五因子设置汇总
- 因子数量:5 个;
- 取值日期:
context.previous_date,避免使用当天尚未确定的数据; - 数据窗口:
count=1,读取当前截面的因子值; - 缺失值处理:
dropna(),任一因子缺失即退出本次评分; - 打分方式:五个因子分别乘以固定系数后相加;
- 排序方向:综合分数从高到低;
- 候选比例:保留综合分数前 10%。
总结
这五个聚宽因子的核心价值,不是分别给出五条简单的买入理由,而是把企业的经营增长、利润变化、长期盈利和每股收益放进同一个评分框架。
它们共同完成三件事:增加观察维度、统一选股标准、缩小候选范围。
真正使用时,最重要的是保持字段、系数、缺失值处理和排序方向一致。尤其要记住:系数全部为负,并不代表这些财务指标“越差越好”;它们只是当前综合排序公式中的参数,必须结合因子尺度与整体结果理解。
本文只用于介绍聚宽五因子的作用和当前代码设置,不构成投资建议。固定参数可能随市场环境失效,历史研究结果不代表未来表现。