因子合成的一些实践和方法
  ELVES 6天前 79 0

#因子合成的实践和方法
使用GPlean训练出来的一些因子表达式存在很高的相关性,当卡掉相关性以后我们要做因子合成来提高信息的有效性,这次介绍一些常见的合成方法。

1.1 因子相关性处理

这一步的核心在于我们如何发现刻画并解决因子间的多重共线性(风格集中暴露)的问题。并最终实现alpha之间相互对冲关系。
首先是识别共线性问题,可以使用VIF检验

VIF检验(方差膨胀因子检验)

VIF(Variance Inflation Factor) 是用于量化回归模型中自变量之间多重共线性严重程度的指标。它衡量了由于自变量之间的相关性,导致回归系数估计的方差(不确定性)增大的倍数。核心思想:如果自变量之间高度相关,模型参数估计的方差会显著增大,导致结果不稳定,难以解释。

那么如何处理共线性问题呢,分为2种:
1、删除变量:移除VIF过高的冗余变量(需结合业务意义)。
2、正交化处理:通过施密特正交或者对称正交删除重复表达信息。

参考代码

# VIF检验 ic_df_pass = ic_df_test[factor_names_pass] VIF = {} for i in tqdm(ic_df_pass.columns.tolist()): y = ic_df_pass[i] x = ic_df_pass.drop(i,axis = 1) VIF[i] = 1 / (1 - sm.OLS(y.astype(float),x.astype(float),hasconst=False, missing='drop').fit().rsquared) VIF = pd.DataFrame([VIF]).T VIF.columns = ['VIF'] VIF.sort_values(by = 'VIF',ascending=False)

1.2 加权等权合成

image.png
上图是生成出来的因子表达式的累计IC图,我们要合成一个因子可以卡一个相关性,如下图:
image.png
得到低相关的因子后,做一个等权操作,参考代码如下:

# 等权 combo_ew = pd.DataFrame() for i in factor_names: df = value_dict_train[i] combo_ew = combo_ew.add(standardize(df),fill_value=0)

image.png
等权可以得到以上效果,我们在做一个IC/IR加权看看。
不同的因子过往预测的能力有所区别,具体体现在IC 或者 IR 的不同上。因此对于模型的贡献权重也应该需要进行调整,给有更高IC 或 IR 的因子更高的权重。
计算方法:滚动过去N期的IC序列计算因子IC mean 或者 IR 表现,作为权重
缺点:不同类型的因子IC 或 IR 上有较大区别。例如基本面因子和量价因子,量价因子的IR普遍偏高。容易高估模型的对于量价因子的权重。
如果做加权,训练的时候一定要做多期滚动,不然会有未来函数。
以下是回测曲线:
image.png

1.3 后续研究方向

1.可以使用聚类算法进行因子分类在合成,比如等权加权
2.使用机器学习进行因子合成

最后一次编辑于 6天前 0

暂无评论

推荐阅读