精华帖子

因子研究(1)——基本面因子分析

由bqu1vdra创建,最终由bqu1vdra 被浏览 3 用户

研究区间:2015-01-01 ~ 2024-12-31(共 10 年,覆盖完整牛熊周期)

股票池:全 A 股(剔除 ST、停牌、上市不足 1 年、PE≤0 的股票)

研究因子:市盈率TTM、市净率、市销率TTM、ROE TTM、ROA TTM、毛利率TTM、净利润增长率(七个基本面因子,仅作示例)

估值类因子(衡量股票是否便宜)

1. 市盈率 TTM(PE-TTM)

  • 公式:股价 ÷ 过去12个月每股收益
  • 含义:反映投资者愿意为每1元利润支付的价格,也代表“回本年限”
  • 解读:市盈率越低,通常意味着股票越便宜;但极低的市盈率也可能隐含市场对公司未来的悲观预期(即“价值陷阱”)

2. 市净率(PB)

  • 公式:股价 ÷ 每股净资产
  • 含义:反映股价相对于公司账面净资产的溢价倍数
  • 解读:市净率越低,安全边际通常越高。常用于银行、钢铁等重资产行业的估值

3. 市销率 TTM(PS-TTM)

  • 公式:总市值 ÷ 过去12个月营业收入
  • 含义:反映股价相对于公司收入规模的定价
  • 解读:对于亏损或微利的企业(如初创期科技公司),市盈率失效,此时市销率是更常用的估值指标

盈利类因子(衡量公司赚钱能力)

4. ROE TTM(净资产收益率)

  • 公式:过去12个月净利润 ÷ 平均净资产
  • 含义:公司用股东投入的资本,一年能创造多少利润。
  • 解读:ROE越高,说明公司盈利能力越强。长期稳定在15%以上的公司通常被认为是优质企业

5. ROA TTM(总资产收益率)

  • 公式:过去12个月净利润 ÷ 平均总资产
  • 含义:公司用所有资产(包括借来的钱),能创造多少利润
  • 解读:ROA衡量的是资产的“使用效率”。与ROE不同,它不受财务杠杆(负债率)的影响。如果ROE很高但ROA一般,说明公司主要靠高负债来放大收益,风险相对更高

6. 毛利率 TTM

  • 公式:(营业收入 - 营业成本)÷ 营业收入
  • 含义:每1元收入中,扣除直接成本后剩下多少
  • 解读:毛利率反映产品的竞争力和定价权。高毛利率通常意味着品牌护城河、技术壁垒或规模效应。毛利率的变动趋势往往比数值本身更重要

成长类因子(衡量公司增长潜力)

7. 净利润同比增长率

  • 公式:(本期净利润 - 上年同期净利润)÷ 上年同期净利润
  • 含义:公司盈利能力的增长速度
  • 解读:高增长是市场给予高估值的主要理由。但需要注意的是,增速波动往往较大,而且市场交易的是“预期差”——如果增速很高但低于分析师预期,股价仍可能下跌

一、什么是因子分析?

1.1 核心思想

因子分析,是量化研究的基本工作单元。其核心思想是:寻找某一个可量化的股票特征(因子),使得该特征能够稳定地预测股票未来的截面收益差异

1.2 两大检验方法

本报告使用两种互补的方法对因子有效性进行检验:

1.2.1 分层回测(Quintile Backtest)

做法:每个月末,将全市场股票按因子值从小到大排序,均分为 5 组(Q1~Q5),分别跟踪各组下个月的等权平均收益,持续累计,形成净值曲线。

判断标准

  • Q1~Q5 的净值曲线呈现单调递增(或递减),说明因子具有截面区分能力
  • 多空组合(Q5−Q1)净值持续向上,说明因子可以转化为实际超额收益

代码实现

def quintile_backtest(df, factor_col, n_groups=5):
    records = []
    direction = FACTOR_CONFIG[factor_col][0]  # 取因子方向:-1表示越低越好

    for date, group in df.groupby('date'):    # ① 按月度截面循环
        sub = group[[factor_col, 'cum_ret_next']].dropna()

        factor_adj = sub[factor_col] * direction  # ② 方向调整,使Q5始终为"最好"组
        sub['group'] = pd.qcut(factor_adj, n_groups,  # ③ 等频分组(每组股票数量相等)
                               labels=['Q1','Q2','Q3','Q4','Q5'])

        for g, gdf in sub.groupby('group'):
            records.append({'date': date, 'group': g,
                           'ret': gdf['cum_ret_next'].mean()})  # ④ 组内等权平均收益

    group_ret = pd.DataFrame(records).pivot(              # ⑤ 整理为宽表
                    index='date', columns='group', values='ret')
    group_ret['Q5-Q1'] = group_ret['Q5'] - group_ret['Q1']  # ⑥ 多空收益差
    nav = (1 + group_ret.fillna(0)).cumprod()               # ⑦ 累积净值
    return group_ret, nav

PS:①按每个月末截面遍历 → ②调整因子方向(确保 Q5=最优组)→ ③用 pd.qcut 等频切分5档 → ④计算每组等权平均收益 → ⑤转为宽表格式 → ⑥构建多空组合 → ⑦累乘得净值曲线

#预设因子方向
FACTOR_CONFIG = {
    'pe_ttm':               (-1, '市盈率TTM(越低越好)'),
    'pb':                   (-1, '市净率(越低越好)'),
    'ps_ttm':               (-1, '市销率TTM(越低越好)'),
    'roe_avg_ttm':          ( 1, 'ROE TTM(越高越好)'),
    'roa_avg_ttm':          ( 1, 'ROA TTM(越高越好)'),
    'gross_profit_rate_ttm':( 1, '毛利率TTM(越高越好)'),
    'net_profit_growth':    ( 1, '净利润增长率(越高越好)'),
}

这个 FACTOR_CONFIG 字典是人工预设的,并且基于金融逻辑和长期的市场经验

1. 估值类因子:取负号(越低越好)

配置中 pe_ttmpbps_ttm 的方向是 -1。这背后是经典的价值投资逻辑:

  • 逻辑:估值指标(市盈率、市净率)衡量的是你为获得一单位盈利(或资产)所支付的价格。价格越低,意味着安全边际越高,未来的潜在回报率通常越高。
  • 经验证据:在全球大部分市场(包括A股)的长期历史回测中,低估值组合(低PE、低PB)的长期收益通常跑赢高估值组合。这就是所谓的价值因子
  • 处理方式:因为原始逻辑是“数值越小,未来收益越高”(即 IC 为负),为了在后续建模中统一处理(比如直接加权求和时希望“值越大越好”),这里用 -1 进行了方向转换

2. 质量类因子:取正号(越高越好)

配置中 roe_avg_ttmroa_avg_ttmgross_profit_rate_ttm 的方向是 1

  • 逻辑:ROE(净资产收益率)、ROA(总资产收益率)、毛利率代表了公司的盈利能力和护城河。护城河越宽、赚钱能力越强的公司,理论上应享有更高的股价表现。
  • 经验证据:虽然单纯看ROE有时会陷入“估值陷阱”(高ROE可能对应高估值),但在多因子模型中,质量因子是长期有效的正向因子,能够筛选出基本面扎实的公司。

3. 成长类因子:取正号(越高越好)

配置中 net_profit_growth 的方向是 1

  • 逻辑:净利润增长率是典型的成长因子。市场通常给予高增长公司更高的估值溢价。
  • 经验证据:在A股市场,成长因子(尤其是净利润同比增速)是过去十几年非常有效的选股维度之一。

★这个字典,是研究员基于经典金融理论过往实证经验建立的一个“因子候选池”。它代表了对每个因子“预期有效方向”的假设。在后续的分析中,会通过计算 Rank ICICIR 来验证这些预设是否符合实际数据。如果验证通过,这些因子就会被放入最终的选股模型;如果通不过,就会被剔除或修正。

1.2.2 IC 时序分析(Rank IC / ICIR)

做法:每个月末,计算当期全市场截面上因子值排名下月收益排名的 Spearman 相关系数,得到一个时间序列,称为 ==Rank IC 序列==

(关于相关系数:皮尔逊相关系数衡量变量之间的线性关系强弱,斯皮尔曼相关系数其实就是变量秩次的皮尔逊相关系数,主要衡量变量之间的单调关系)

核心指标

指标 含义 参考标准
IC 均值 因子预测能力的平均水平 |IC| > 0.03 认为有意义
ICIR IC均值 ÷ IC标准差,衡量因子稳定性 |ICIR| > 0.3 认为较好
IC > 0 占比 因子方向正确的月份比例 > 55% 认为稳定
t 统计量 检验 IC 均值是否==显著不为零== |t| > 2 认为统计显著

代码实现

def calc_rank_ic(df, factor_col):
    records = []
    direction = FACTOR_CONFIG[factor_col][0]  # 取因子方向

    for date, group in df.groupby('date'):     # ① 按月度截面循环
        sub = group[[factor_col, 'cum_ret_next']].dropna()
        factor_vals = sub[factor_col] * direction  # ② 方向调整

        ic, _ = spearmanr(factor_vals, sub['cum_ret_next'])  # ③ 计算Spearman相关系数
        records.append({'date': date, 'IC': ic})

    ic_series = pd.DataFrame(records).set_index('date')['IC']

    # ④ 计算汇总统计:IC均值、ICIR、t统计量
    t_stat = ic_series.mean() / (ic_series.std() / np.sqrt(len(ic_series)))
    summary = {
        'IC均值':   ic_series.mean(),
        'ICIR':     ic_series.mean() / ic_series.std(),  # 信息比率
        'IC>0占比': (ic_series > 0).mean(),
        't统计量':  t_stat,
    }
    return ic_series, summary

①按月遍历截面 → ②方向统一(PE越低越好,所以乘以-1翻转,让"低PE"对应"高因子值")→ ③spearmanr 计算因子排名与收益排名的相关系数(不受极端值影响)→ ④汇总成统计指标,t统计量用于假设检验

1.3 ★数据获取

数据准备的关键在于防止未来函数——财务数据必须按实际披露日而非报告期日期对齐:

sql = """
SELECT
    date,
    instrument,
    daily_return,           -- 日收益率(用于计算未来持仓收益)
    total_market_cap,       -- 总市值(用于后续中性化)
    sw2021_level1,          -- 申万一级行业代码
    pe_ttm,                 -- 市盈率TTM:已按实际披露日对齐,无未来函数风险
    pb,                     -- 市净率
    ps_ttm,                 -- 市销率TTM
    roe_avg_ttm,            -- ROE(TTM,净资产收益率)
    roa_avg_ttm,            -- ROA(TTM,总资产收益率)
    gross_profit_rate_ttm,  -- 毛利率TTM
    net_profit_ttm_yoy      -- 净利润同比增长率
FROM cn_stock_prefactors
WHERE st_status = 0      -- 排除ST股
  AND suspended = 0      -- 排除停牌股
  AND list_days > 365    -- 排除上市不足1年的新股(避免新股效应干扰)
  AND pe_ttm > 0         -- 排除亏损股(PE为负无比较意义)
  AND pb > 0
"""

注:在Bigquant平台,cn_stock_prefactors 表的财务字段已内置披露日对齐逻辑,调用时自动使用截至当日已公布的最新财报数据,无需额外处理

cn_stock_prefactors表本就已经有net_profit_ttm_yoy字段(净利润ttm同比增长),因此直接选用该字段数据即可,还无需向前取252个交易日的数据来计算,更方便

前五行结果展示:

完成数据查询后,将日度数据压缩为月度截面(取每月最后一个交易日),并向前滚动计算下月累计收益作为因子预测的标签:

# ---- 月度截面 ----
df_raw['year_month'] = df_raw['date'].dt.to_period('M')
monthly_dates = df_raw.groupby('year_month')['date'].max().values
df_monthly = df_raw[df_raw['date'].isin(monthly_dates)].copy()

DECAY_HORIZONS = [1, 5, 10, 21, 42, 63]   # 因子衰减分析持仓天数
df_raw_sorted = df_raw.sort_values(['instrument', 'date']).copy()
df_raw_sorted['log_ret'] = np.log1p(df_raw_sorted['daily_return'].clip(-0.99))

for h in DECAY_HORIZONS:
    log_fwd = (df_raw_sorted
               .groupby('instrument')['log_ret']
               .transform(lambda x, hh=h: x.rolling(hh).sum().shift(-hh)))
    df_raw_sorted[f'ret_next_{h}d'] = np.expm1(log_fwd)

# ---- 合并所有期收益到月度截面 ----
ret_cols = [f'ret_next_{h}d' for h in DECAY_HORIZONS]
df_monthly = df_monthly.merge(
    df_raw_sorted[['date', 'instrument'] + ret_cols].drop_duplicates(),
    on=['date', 'instrument'],
    how='left'
)
# 21日收益作为主分析收益
df_monthly['cum_ret_next'] = df_monthly['ret_next_21d']

原本默认的 21 天(约一个月)是主分析周期,用于评估因子在中周期上的预测能力。\n而增加 DECAY_HORIZONS(例如 5 天、63 天等) 是为了研究因子的衰减特性

  • 短期(如 5 天):看因子能否快速捕捉短期定价偏差。
  • 中期(21 天):作为基准,模拟月频调仓的效果。
  • 长期(如 63 天):观察预测力是否衰减、消失甚至反转

注:

前三行结果展示:

1.4 ★★★数据预处理:去极值 + 行业、市值中性化 + Z-score 标准化

步骤 方法 目的
Step 1:去极值 MAD法(截断 median ± 3×MAD 外的值) 消除财务数据极端值对 IC 的干扰
Step 2:行业 + 市值中性化 OLS 同时回归行业哑变量 + log(市值),取残差 同时剥离行业效应与市值效应,测试因子的纯截面预测力
Step 3:Z-score 标准化 截面标准化为均值0、标准差1 使不同因子量纲可比
def winsorize_mad(series, n=3):
    # MAD 去极值:截断超出 median ± n*MAD 的异常值
    valid = series.dropna()
    if len(valid) < 10:
        return series
    median = valid.median()
    mad = (valid - median).abs().median()
    if mad == 0:
        mad = valid.std() * 0.6745   # 退化到正态分布下的 MAD 估计
    upper = median + n * mad
    lower = median - n * mad
    return series.clip(lower, upper)


def zscore_normalize(series):
    # 截面 Z-score 标准化:均值0,标准差1
    valid = series.dropna()
    if len(valid) < 10:
        return series
    mu, sigma = valid.mean(), valid.std()
    if sigma == 0:
        return series - mu
    return (series - mu) / sigma


def neutralize_factor(factor_series, industry_series, log_mktcap_series):
    # 行业 + 市值双重中性化
    # OLS 回归:factor = β_ind * 行业哑变量 + β_mktcap * log(市值) + ε
    # 残差 ε = 剔除行业效应和市值效应后的纯因子信号
    df_tmp = pd.DataFrame({
        'factor':      factor_series.values,
        'industry':    industry_series.values,
        'log_mktcap':  log_mktcap_series.values,
    }, index=factor_series.index).dropna()

    if len(df_tmp) < 10 or df_tmp['industry'].nunique() < 2:
        return factor_series

    # 构建设计矩阵:行业哑变量 + log市值(连续变量)
    dummies   = pd.get_dummies(df_tmp['industry'], prefix='ind').astype(float)
    log_mc    = df_tmp[['log_mktcap']].values
    X = np.hstack([dummies.values, log_mc])
    y = df_tmp['factor'].values
    try:
        beta, _, _, _ = np.linalg.lstsq(X, y, rcond=None)
        residuals = y - X @ beta
    except Exception:
        return factor_series

    result = factor_series.copy()
    result.loc[df_tmp.index] = residuals
    return result

去极值和标准化的原理很简单,此处不再细讲,下面主要讲一下“行业、市值中性化”的处理方式及原理:

中性化是因子预处理中的核心步骤,其目的是剥离因子中由行业属性、市值影响带来的系统性差异,从而获得更纯净的、反映个股自身特征的信号。

数学模型如下:

二、七大因子逐一分析

因子一:市盈率 TTM(PE)

定义:股票价格 ÷ 过去 12 个月每股盈利,反映市场对公司盈利的定价水平。PE 越低,代表股票相对于盈利水平越便宜(价值低估),理论上预期收益越高。

检验结果

中性化后指标: IC 均值 = 0.0529 | ICIR = 0.6995 | IC>0 = 78.1% | t = 7.63

PE 是中性化后 ICIR 提升最显著的因子(0.29 → 0.70),显示原始 IC 中存在大量市值噪声被行业+市值回归有效剔除。

78.1% 的 IC>0 占比意味着每 5 期中有近 4 期方向正确,信号高度稳定。最佳持仓期为 63 天,说明低估值信号需要更长时间被市场定价。

因子二:市净率(PB)

定义:股票价格 ÷ 每股净资产,衡量股票相对于账面价值的定价。PB 越低,股票越接近或低于资产清算价值,安全边际越高。

中性化后指标: IC 均值 = 0.0557 | ICIR = 0.4888 | IC>0 = 61.3% | t = 5.33

PB 是 IC 均值最高的因子(0.0557),在熊市环境中防御性尤为突出(2015 熊市 IC = 0.089,2022-2023 熊市 IC = 0.070)。与 PS 存在一定相关性(r = 0.591),多因子合成时需降低 PS 权重。

因子三:市销率 TTM(PS)

定义:股票价格 ÷ 过去 12 个月每股营业收入,适用于盈利不稳定但营收持续增长的公司(如早期成长股、周期底部公司)。PS 越低代表估值越低廉。

中性化后指标: IC 均值 = 0.0394 | ICIR = 0.4275 | IC>0 = 63.9% | t = 4.66

PS 与 PB 趋势高度一致,且与毛利率 TTM 存在较强相关性(r = 0.598)。在多因子框架中可作为价值因子的补充,但权重应低于 PE 和 PB。

因子四:ROE TTM(净资产收益率)

定义:净利润 ÷ 净资产,衡量公司利用股东权益创造利润的效率。ROE 越高,代表公司盈利能力越强,理论上股票更具吸引力。

中性化后指标: IC 均值 = 0.0172 | ICIR = 0.2277 | IC>0 = 56.3% | t = 2.48

尽管 ICIR = 0.23 低于 0.3 的强效标准,但 t 统计量显著,建议作为弱效因子纳入多因子体系,与价值因子配合使用而非单独使用

因子五:ROA TTM(总资产收益率)

定义:净利润 ÷ 总资产,衡量公司利用所有资产(含债务融资)创造利润的能力,比 ROE 更反映资产使用效率(剔除了财务杠杆的影响)。

中性化后指标: IC 均值 = 0.0132 | ICIR = 0.1721 | IC>0 = 50.4% | t = 1.88

ROA 与 ROE 高度共线(r = 0.861),中性化后 t = 1.88,接近但未达到显著性阈值。IC>0 占比仅 50.4%(接近随机)。与 ROE 保留一个即可,推荐 ROE(信号更强,t = 2.48 vs 1.88)。

因子六:毛利率 TTM

定义:(营业收入 − 营业成本)÷ 营业收入,衡量公司的定价权和产品竞争壁垒。毛利率越高,说明公司拥有更强的品牌溢价或成本控制能力(如消费品、医药)。

中性化后指标: IC 均值 = 0.0044 | ICIR = 0.0771 | IC>0 = 52.1% | t = 0.84

值得注意的是,中性化后毛利率的 IC 从原始的 -0.0034 修正为 +0.0044,方向从反向变为正向,说明原始的"反向效应"确实是市值噪声导致的假象。但 t = 0.84 仍远不显著,衰减分析显示 5 天持仓期时 IC 甚至为负(-0.006),稳定性极差。

因子七:净利润增长率

定义:(本期 TTM 净利润 − 上期 TTM 净利润)÷ 上期 TTM 净利润,衡量公司盈利成长速度。理论上增长越快,未来估值扩张空间越大。

中性化后指标: IC 均值 = 0.0053 | ICIR = 0.0841 | IC>0 = 53.8% | t = 0.92

t = 0.92 仍不显著。净利润增长率的信号稳定性差,最佳持仓期 42 天时 IC 也仅 0.007,对选股贡献非常有限。

三、IC滚动时序分析

目的:分析每个因子的 IC 信号是否稳定,还是具有明显的==时变性和周期性==

图表说明

  • 蓝色柱:月度 Rank IC(正绿负红)
  • 橙色线:滚动 6 期 IC 均值
  • 紫色线:滚动 12 期 IC 均值
  • 绿色虚线(右轴):滚动 12 期 ICIR(±0.3 为参考线)

\

四、因子衰减分析

目的:检验因子预测能力随持仓期延长的衰减规律。

  • 若 IC 在短期(1-5天)最高,随持仓期增长快速衰减 → 因子适合高频换仓策略
  • 若 IC 在中长期(21-63天)依然稳健 → 因子适合月度调仓策略
  • 质量因子往往在长周期表现更好,价值因子在短期可能有反转效应

4.1 各因子不同持仓期 IC 均值

因子 1 天 5 天 10 天 21 天* 42 天 63 天 趋势
市盈率 TTM 0.026 0.035 0.037 0.053 0.066 0.075 ↗ 持续增强
市净率 0.028 0.046 0.043 0.056 0.069 0.079 ↗ 持续增强
市销率 TTM 0.020 0.030 0.027 0.039 0.049 0.058 ↗ 持续增强
ROE TTM 0.005 0.003 0.009 0.017 0.022 0.023 ↗ 缓慢增强
ROA TTM 0.003 -0.002 0.005 0.013 0.017 0.019 短期波动后增强
净利润增长率 0.004 -0.001 0.003 0.005 0.007 0.006 极弱,42天最优
毛利率 TTM -0.002 -0.006 0.004 0.004 0.005 0.005 短期负向,长期微弱正向

4.2 核心发现

  1. 所有有效因子均呈"随持仓期延长而增强"的特征,三个价值因子(PE/PB/PS)在 63 天持仓期时 IC 均值分别达到 0.075/0.079/0.058,显著高于 21 天(月度调仓)的水平
  2. 价值因子不适合高频交易:1 天持仓期 IC 仅约 0.02-0.03,信号在短期极弱,说明价值效应需要时间积累和市场消化
  3. ROE TTM 是典型的"慢因子":1 天 IC 仅 0.005,63 天才到 0.023,适合季度甚至半年度调仓的中低频策略
  4. 毛利率在短期(1-5天)存在反转:1 天 IC = -0.002,5 天 IC = -0.006,说明短期高毛利率公司反而倾向于回调(可能的题材炒作后的均值回归)
  5. 最优调仓频率建议:月度(21天)→ 季度(63天)均适合,尤以季度调仓信号更强

五、牛熊市分段稳定性分析

检验因子在不同市场环境下的表现,是判断其是否真正可用的关键步骤。

  • 价值因子跨周期稳定性显著强于质量因子 ,PE/PB/PS 在全部 6 个市场阶段均保持正 IC,未出现方向反转,是真正意义上的跨周期稳健因子。
  • PE 在熊市中信号最强(IC = 0.123) 2015 熊市期间 PE 的 IC 高达 0.123,为全样本最高单期记录。在市场下行时,低估值股票获得显著相对保护,价值因子的防御性充分展现。
  • ROE TTM 存在明显的周期依赖性 中性化后 ROE 在多数阶段有效(牛市 IC = 0.010,震荡市 IC = 0.031),但在 2022-2023 熊市中出现方向反转(IC = -0.029)。这是 ROE 的核心风险:熊市中高盈利能力公司往往估值更高,下跌幅度反而更大。
  • 质量因子在 2015 熊市"意外有效" 中性化后 ROE/ROA 在 2015 熊市 IC 分别为 0.075/0.069,超过不少阶段的价值因子表现,说明危机后修复期市场对盈利质量的重视度提升。
  • 毛利率全样本最弱 毛利率在 2015 牛市(-0.012)、2022-2023 熊市(-0.007)和 2024 年(-0.000)均表现极弱或为负,是 7 个因子中稳定性最差者。

六、因子相关性矩阵

在将因子合成为多因子模型时,必须先了解因子间的重叠程度,避免引入冗余信息。

高相关因子对

因子对 相关系数 影响
ROE TTM ↔ ROA TTM r = 0.861 高度冗余,二选一(推荐 ROE)
市净率 ↔ 市销率 TTM r = 0.591 存在重叠,合成时 PS 降权
市销率 TTM ↔ 毛利率 TTM r = 0.598 毛利率信息部分已被 PS 捕捉
市盈率 TTM ↔ ROE TTM r = -0.597 价值与质量天然对立,互补性强
市盈率 TTM ↔ ROA TTM r = -0.509 同上

七、综合排名与结论

7.1 七因子综合评分排名

评分机制:ICIR × 10 + IC>0占比 × 5

因子 IC 均值 ICIR IC>0 占比 t 统计量 综合评分 最佳持仓期 判定
市盈率 TTM 0.0529 0.6995 78.1% 7.63 10.90 63 天 ✅ 有效
市净率 0.0557 0.4888 61.3% 5.33 7.96 63 天 ✅ 有效
市销率 TTM 0.0394 0.4275 63.9% 4.66 7.47 63 天 ✅ 有效
ROE TTM 0.0172 0.2277 56.3% 2.48 5.09 63 天 ✅ 有效
ROA TTM 0.0132 0.1721 50.4% 1.88 4.24 63 天 ❌ 无效
净利润增长率 0.0053 0.0841 53.8% 0.92 3.53 42 天 ❌ 无效
毛利率 TTM 0.0044 0.0771 52.1% 0.84 3.38 5 天 ❌ 无效

7.2 核心结论

有效因子(4个)

市盈率 TTM(PE):中性化后最强信号,ICIR = 0.70,78% 的月度方向准确率,跨周期表现最稳健,推荐作为核心因子,最佳配合季度调仓。

市净率(PB):IC 均值最高,熊市防御性突出,熊市 IC 可达 0.07-0.09。与 PE 互为补充,共同构成价值因子体系的核心。

市销率 TTM(PS):有效但与 PB 存在冗余,建议降权使用,主要贡献在于覆盖无法计算 PB 的特殊行业。

ROE TTM:市值中性化后通过显著性检验(t = 2.48)。ICIR = 0.23,属于弱效因子,建议与价值因子配合使用,充分利用 PE↔ROE 的负相关性(r = -0.597)实现因子互补。

无效因子(3个)

ROA TTM:与 ROE 高度冗余(r = 0.861),且信号更弱(t = 1.88),建议舍弃。

毛利率 TTM:短期存在反转效应,全样本信号极弱(ICIR = 0.077),不建议直接使用。若后续研究可考虑改用毛利率同比变化量(Δ毛利率)。

净利润增长率:全样本无显著预测能力(t = 0.92),A 股市场的均值回归效应和"业绩透支"现象削弱了增长率的有效性。建议改用盈利预测修正方向(分析师上调/下调预期)替代。

八、特别提醒

"因子无效" ≠ "因子毫无作用"

报告用 IC、ICIR、t 统计量判定这四个因子无效,这个标准是针对"单因子线性选股能力"的评估。但无效≠没用,原因有以下几点:

8.1 单因子有效 ≠ 多因子组合有效(最重要)

ROA、毛利率、净利润增长率这四个因子的 IC 单独很低,但在多因子模型中可能有增量贡献

原因是:

  • 报告里因子相关性矩阵已经说明这些因子与 PE/PB/PS 存在一定的相关性
  • 在多因子正交化/中性化后,质量因子可能会补充价值因子覆盖不到的信息
  • 实践中 Barra 类风险模型里 ROE、毛利率是必要的风险因子,不是选股因子

8.2 线性无效,不代表非线性无效

IC 本质是线性相关系数(Spearman/Pearson),衡量的是因子与未来收益的单调线性关系。如果某因子与收益的关系是:

  • 分段有效(极高有效,中等无效)
  • 非线性(U 型、阈值效应)

IC 就会被平均掉趋近于 0,但因子本身并非无用。

8.3 在特定市场环境下有效

报告做了牛熊市分段检验,会发现质量因子(ROE/ROA)往往在:

  • 熊市/震荡市中防御性更强
  • 价值风格占优期表现更好

全样本 IC 均值低,可能掩盖了它在特定市场阶段的贡献。

8.4 作为"排除因子"有用(反向过滤)

净利润增长率 IC 为负、方向与预期相反,这本身就是有价值的发现:

  • 可以用它做负向筛选:剔除净利润高增长的"伪成长股"(业绩爆雷预期、高估值透支等)
  • 毛利率因子 IC 为负,可能在 A 股反映了"高毛利行业估值透支"的特征



\

{link}