🚀 AI 一键生成 joinquant 策略代码
立即体验

joinquant 因子中性化:如何配置 neutralize 函数的 how 参数剔除行业与市值影响

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 因子中性化:neutralize 函数的 how 参数配置行业与风险因子

Question: 在 joinquant 中做因子中性化时,如何指定同时剔除申万一级行业和市值的影响?

解决方案

在 JoinQuant(聚宽)平台中,进行因子中性化处理主要通过 jqfactor 模块中的 neutralize 函数实现。若要**同时剔除申万一级行业和市值(风险因子)**的影响,可以通过配置 how 参数传入包含相应因子名称的列表。


1. 核心解答:how 参数配置

在调用 neutralize 时,将 how 参数设置为 ['sw_l1', 'market_cap'](或使用风格风险因子 ['sw_l1', 'size'])即可同时剔除申万一级行业和市值的影响。

from jqfactor import neutralize

# 假设 data 为待中性化的因子 Series 或 DataFrame(index 为股票代码)
# 剔除申万一级行业(sw_l1)与市值(market_cap)的影响
neutralized_data = neutralize(series=data, how=['sw_l1', 'market_cap'], date='2023-01-01')

2. neutralize 函数关键参数说明

  • series / data: pd.Seriespd.DataFrame,待中性化的因子序列,索引(index)必须为股票代码(如 '000001.XSHE')。
  • how: 字符串列表(str list),指定中性化时作为回归自变量的因子。支持:
    • 行业分类代码: 'sw_l1'(申万一级)、'sw_l2'(申万二级)、'jq_l1'(聚宽一级,默认)等。
    • 市值/财务因子: 'market_cap'(市值)、'ln_market_cap'(对数市值)等。
    • 风格风险因子: 'size'(市值因子)、'beta''momentum''liquidity' 等。
  • date: 字符串格式日期(如 '2023-01-01'),指定用于获取行业与市值数据的时间点。注意避免使用当天实时日期,防止因财报数据未更新返回 NaN。
  • axis: 默认为 1(仅当输入为 DataFrame 时生效),表示沿行方向(对单日多只股票)做中性化;若为 0 则表示沿列方向。

3. 完整代码示例

以下是在研究环境或单因子分析中,获取沪深300成分股因子数据并进行中性化处理的完整示例:

import pandas as pd
import numpy as np
from jqdata import get_index_stocks
from jqfactor import get_factor_values, neutralize

# 1. 设置目标日期与股票池
target_date = '2023-05-10'
stocks = get_index_stocks('000300.XSHG', date=target_date)

# 2. 获取原始因子值(例如:Skewness60 个股收益60日偏度)
factor_dict = get_factor_values(
    securities=stocks,
    factors=['Skewness60'],
    start_date=target_date,
    end_date=target_date
)
raw_factor = factor_dict['Skewness60'].iloc[0]  # 转为以股票代码为 index 的 Series

# 3. 进行因子中性化:剔除申万一级行业(sw_l1)和市值(market_cap)的影响
neutralized_factor = neutralize(
    series=raw_factor,
    how=['sw_l1', 'market_cap'],
    date=target_date
)

# 查看中性化前后的数据对比
df_compare = pd.DataFrame({
    'Raw': raw_factor,
    'Neutralized': neutralized_factor
})
print(df_compare.head())

4. 注意事项与常见问题

  1. 默认参数: 如果不传 how 参数,neutralize 默认使用 ['jq_l1', 'market_cap'](聚宽一级行业 + 市值)。
  2. 缺失值处理: 如果传入 date 当天的数据包含 NaN,回归时将直接忽略对应记录或返回原始数据,建议提前对因子进行极值与缺失值预处理(如使用 winsorize 去极值)。