3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
非常感谢您指出的文档笔误!确实,neutralize 函数文档中的“标准化”应为“中性化”。关于这两个函数在 JoinQuant 平台底层的具体算法,详细解答如下:
standardlize 的具体算法standardlize 函数使用的是 Z-score 标准化(Z-score normalization) 算法,而不是取对数。
具体算法公式:
$$ Z = \frac{X - \mu}{\sigma} $$
参数说明:
axis 参数决定了计算均值和标准差的方向。如果 axis=1(默认),则是对横截面(即同一时间点上的所有股票)进行标准化;如果 axis=0,则是对时间序列(即同一股票在不同时间点上)进行标准化。neutralize 的具体算法neutralize 函数使用的是 基于普通最小二乘法(OLS)的多元线性回归 算法,提取回归的**残差(Residuals)**作为中性化后的因子值。
具体算法逻辑:
假设我们要对因子 $Y$ 进行行业和市值中性化。
构建回归方程:
$$ Y = \beta_0 + \beta_1 \cdot X_{市值} + \sum_{i=1}^{N} \beta_{2,i} \cdot X_{行业_i} + \epsilon $$
ln_market_cap)。求解与提取残差:
平台底层会使用 OLS 拟合上述方程,求出各个 $\beta$ 系数。然后计算出残差 $\epsilon$:
$$ \epsilon = Y - (\hat{\beta_0} + \hat{\beta_1} \cdot X_{市值} + \sum \hat{\beta_{2,i}} \cdot X_{行业_i}) $$
这个残差 $\epsilon$ 就是中性化后的因子值。
参数说明:
how 参数用于指定回归方程中的自变量(即你要剔除的影响因素)。例如 how=['jq_l1', 'market_cap'],底层就会自动获取聚宽一级行业的哑变量矩阵和市值数据作为自变量 $X$ 进行回归。standardlize = Z-score 转换(去量纲,均值0标准差1)。neutralize = OLS 线性回归取残差(剔除共线性,纯化因子)。这两个步骤是多因子模型(Alpha 模型)数据清洗和预处理中最核心的环节。