前言
作为一名量化交易的爱好者和学习者,我一直在探索如何能够更高效地进行因子研究和策略开发。通过这次内测,我从一个完全不了解因子分析的小白,到现在能够独立搭建因子分析工作流,这个过程让我收获颇丰。今天想在这里分享我的完整体验过程和一些心得体会,希望能给同样对量化感兴趣的朋友们一些参考。
一、什么是因子挖掘?为什么重要?
在正式分享体验之前,我想先聊聊我对因子挖掘的理解。因子挖掘是量化投资中的核心环节之一。简单来说,因子就是能够预测股票未来收益的某种指标或特征。比如我们常说的「动量因子」,就是基于股票过去一段时间的涨幅情况来预测其未来表现。
一个好的因子可以帮助投资者:
- 选股:从几千只股票中筛选出最有潜力的标的
- 配置:决定不同股票应该分配多少权重
- 择时:判断市场整体走势,做出买卖决策
传统的因子研究需要编写大量代码、处理数据、回测验证,门槛较高。而PandaAI提供的因子挖掘功能,通过可视化的方式让这个过程变得简单许多。
二、初识工作流界面
打开PandaAI的工作流编辑器,第一感觉是界面很清晰。左侧是节点库,分类做得很好:
- 01-基础工具:包含公式输入、Python代码输入等
- 02-特征工程:特征工程构建
- 03-机器学习:LightGBM、XGBoost、CNN、LSTM等11种模型
- 04-因子相关:这是本次的重点,有12个节点
- 05-回测相关:股票回测、期货回测等
我注意到因子相关节点特别丰富,包括:
- 线性因子构建
- 因子分析
- 因子大赛参赛节点
- 多因子合并
- 因子相关性分析
- 因子构建(机器学习)
不仅支持股票还有专门的「因子分析(期货)」.
三、我的实操体验
第1步:构建基础工作流
我先创建一个空白工作流,然后向AI助手描述了我的需求:
“请帮我创建一个因子分析工作流:公式输入节点使用 rank(close)/rank(volume) 作为动量因子,然后连接线性因子构建节点,标的为沪深全A,时间范围近1年,最后连接因子分析节点进行分析”
等待一会,就能生成一个完整的工作流了,非常简单,最终成功生成了完整的工作流:公式输入 → 线性因子构建 → 因子分析 → 因子分析.结果如下图:
1. 公式输入节点
这是起点。我在这里输入因子计算公式,比如 rank(close)/rank(volume)。这个公式的逻辑很直观:计算收盘价的排名除以成交量的排名,本质上是考察「价升量涨」的股票是否还有上涨动力。
2. 线性因子构建节点
这个节点负责将公式计算的因子值转化为可分析的格式。需要设置:
- 标的池:沪深全A(约5000只股票)
- 时间范围:近1年
3. 因子分析节点
这是核心节点。我设置了三个关键参数:
- 调仓周期:设置为5天,表示每5天重新计算因子并进行分组调仓
- 分组数量:设为5组,每组约1000只股票
- 因子方向:这个参数比较关键,后面会详细说
4. 因子分析结果节点
点击左上角的[启动工作流],没一会就能运行完整个工作流,点击查看因子分析结果,可以查看很多内容,比如展示了分层收益曲线和IC指标等。
第2步:理解三大参数
在实际操作中,我逐渐理解了这三个参数的含义:
调仓周期
就是多长时间调整一次持仓。设置5天意味着每5天会根据最新因子值重新分组并调仓。这个周期:
- 越短,交易越频繁,成本越高
- 越长,可能错过短期机会
- 需要在成本和收益之间找平衡
分组数量
把股票分成多少组。这里设的是5组,每组大约1000只。分组数量的意义:
- 分组越多,每组差异越明显
- 分组越少,每组股票越多,差异可能被平均
因子方向
这是一个新手容易忽略的参数。它影响结果展示:
- 选择0:展示第一组(因子值最小)的表现
- 选择1:展示最后一组(因子值最大)的表现
它还会影响IC值的符号,所以设置错了方向,分析结果可能完全相反。
第3步:解读分析结果
工作流运行后,我学会了看两个关键指标:
分层曲线
这是我判断因子好坏的主要依据。如果各组曲线从高到低排列清晰(比如第一组收益最高,第五组最低),说明因子有很好的分层能力,选出来的股票确实有差异。
IC均值
IC(Information Coefficient)衡量的是因子预测能力:
- IC > 0:因子为正向(因子值越大,未来收益越高)
- IC < 0:因子为负向(因子值越小,未来收益越高)
如果发现IC为负,曲线走势也不对,可以调整因子方向。
调整因子方向
有两种方法:
- 在公式前加负号,如
-rank(close)/rank(volume) - 修改因子分析节点的「因子方向」参数
我一般用第一种方法,直接在源头调整更彻底。
第4步:构建多因子组合
单因子往往只能捕捉市场的一部分特征,所以我尝试了多因子组合,继续跟AI助手沟通,让其给我修改工作流,
1. 准备多个单因子
“给我改为多因子:- 动量因子:
rank(close)/rank(volume)再给我增加两个因子,你给我向下,反正要稳定的,请注意3个因子作为3个输入.不是一个公式输入,而且每个因子后面接一个权重节点,自定义权重:动量因子:0.5 价值因子:0.3 质量因子:0.2,后面要接入合并因子,将所有带权重的因子连接至因子合并节点,生成复合因子值。同时也要有因子相关性分析:将合并前的多个单因子值连接至因子相关性分析节点,查看因子间的相关系数矩阵,避免多重共线性.将合并后的因子值连接至因子分析节点进行回测,得到复合因子的表现”
新生成的多因子工作流如下图:
注意哈,如果不接权重节点,默认等权相加。
2. 相关性分析
这是我觉得很实用的功能!把各单因子接到「因子相关性分析节点」,可以看到相关系数矩阵。
为什么要做这个?因为如果两个因子相关性很高(比如都反映市场流动性),放在一起没什么额外价值,还增加复杂度。通过这个分析可以避免无效的因子堆砌。
第5步:尝试机器学习
平台支持LSTM、XGBoost等机器学习模型挖掘非线性因子,这让我很感兴趣。
这个我是克隆了官方的XGBoost的示例工作流,如下图:
基本流程:
- 准备基础数据:输入
close、volume、turnover等特征 - 连接因子构建节点作为特征工程,指定训练集时间范围
- 接机器学习模型节点,设置参数
- 模型自动训练,输出预测值作为非线性因子
- 最后接因子分析节点评估
我从节点上修改不同的参数,然后进行多次回测.结果不错,如下图:
非线性因子可以捕捉线性方法难以发现的规律,比如特征之间的交互效应。虽然这次还没深入尝试,但已经列入学习计划。
第6步:参加因子大赛
完成了以上步骤后,如果发现自己的因子收益以较好,还可以把我们的因子提交到因子大赛,可以赢取丰厚的大奖哦.
首次提交需要提交个人信息(需要审核),之后就可以提交自己的因子了.需要注意,要在工作流中添加一个[因子大赛参赛节点],具体请看下面步骤:
参赛流程:
- 选择表现最好的分组(夏普比率最高的)
- 在[线性因子构建]节点后连接「因子大赛参赛节点」
- 确保参赛节点的参数与[因子分析]节点的参数一致
- 运行确保无报错
- 在因子大赛页面提交