前言

多因子量化体系在实践不断中形成了诸如 BARRA 模型的标准方法,在以往的研究报告中,有人对此进行了充分的研究其背后的金融理论及检验实践中能否获得有效的 ALPHA 因子。虽然标准化易于理解与管理,但众所周知标准化意味着各种参数的约束,因此 ALPHA 因子的构建参和个人判断,例如以什么标准选择,因子的如何配比等等。随着市场条件的不断变化,我们能够期待这些因子持续有效吗?对此,我们考虑能否充分利用数据的特征不加以主观参数约束,能够自适应地选取有效的因子,对传统多因子模型做出改善。我们自然地想到了机器学习方法。

研究思路解读

该篇文章主要探究了沪深300成分股量化投资策略,该文章的研究思路通过分析多因子特征从而先选择长期优势股,然后在从优势股票中选择短期优势股票。其研究思路可以用论文中的图概括:

基于机器学习的多因子选股模型本质上是一个分类问题。大多数情况下研究的是二分类问题,将股票池中表现好的个股标为类别 1,而表现不好的标类别-1等。建立分类器模型从而描述因子池中各因子与下期收益表现的关系。模型的输出一般表现为预测该样本为某类的概率,或者称为信任得分,信任得分越大则为该类的可能性越大。因此模型的构建主要分为两步:1,根据各股历史下一期收益率划分类标,历史当期因子数据对分类器进行训练得到相关参数。2,代入实际当期各股因子数据对各股进行分类,得到各股的信任得分。那么模型的关键落在:1.特征的提取上,IC因子分析、深度神经网络等,2.分类的选择上:传统的分类器包括决策树分类器,最近邻分类器,神经网络,支持向量机等。

那么利用解决分类问题如何做到选择优势股票组合的?

假设有 30 只股票,两个因子。首先要做的是数据的预处理。

数据预处理

因为绝大多数据机器学习算法对输入数据都比较敏感(要求数据范围在(0,1]),若含有较多的噪声数据易引起过度拟合。由于我们寻找的是强弱势股之间的相对优劣,并不关注数据的绝对大小。因此,我们计算每个股票按某因子的排序然后除以总股票数,这样因子的值归到(0,1]。然后,对下一期收益率从大到小排序,取前 30%作为强势股,后 30%作为弱势股,强势股划分类标为+1,弱势股划分类标为-1;中间百分之 40%的股票排出训练集,因为中间百分之 40%的股票收益并不强势也不弱势,相当于噪声数据。为了充分利用数据,找出相对稳定有效的因子,确保算法的稳定性,我们用过去 12 个月的面板数据来构建训练集。

训练模型选择股票

以沪深 300 指数成份股作为股票池。按照信任得分将股票池的股票分为十档组合,取最高一档作为强势组合,最低一档组合作为弱势组合。这种简单的选股策略,也就是论文中所介绍的思想之一。

为何选择随机森林算法

随机森林是一个元估计器,它适合数据集的各个子样本上的多个决策树分类器,并使用平均值来提高预测精度和控制过度拟合。 子样本大小始终与原始输入样本大小相同,但如果bootstrap = True(默认值),则会使用替换来绘制样本。由于随机决策树生成过程采用的Boostrap,因为袋外样本的存在,因此不需要进行十字交叉测试(节省时间),通过依次对每个特征赋予一个随机数,观察算法性能的变化,倘若变化大,则说明该特征重要,sklearn中会对每个特征赋予一个分数,分数越大,特征越重要,因此,可以根据特征重要性排序,然后选择最佳特征组合;过利用oob对每个特征,迭代进行,评估分数,然后做一个排序,分数越高,特征越重要,然后利用分数由到到低,进行组合,在看模型是否精度是否发生变化,从而选择最优特征组合。这样可以减少IC因子分析代码的实现。从而实现自动特征选择,从而更利用标签分类。其实为了偷懒简单特征处理环节。

调用库实现代码及参数介绍:

class sklearn.ensemble.RandomForestClassifier(n_estimators=10, crite-rion=’gini’, max_depth=None,
min_samples_split=2, min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_features=’auto’,
max_leaf_nodes=None, bootstrap=True,
oob_score=False, n_jobs=1, ran-dom_state=None, verbose=0,
warm_start=False, class_weight=None)  

criterion: ”gini” or “entropy”(default=”gini”)是计算属性的gini(基尼不纯度)还是entropy(信息增益),来选择最合适的节点。

splitter: ”best” or “random”(default=”best”)随机选择属性还是选择不纯度最大的属性,建议用默认。

max_features: 选择最适属性时划分的特征不能超过此值。

当为整数时,即最大特征数;当为小数时,训练集特征数*小数;

if “auto”, then max_features=sqrt(n_features).

If “sqrt”, thenmax_features=sqrt(n_features).

If “log2”, thenmax_features=log2(n_features).

If None, then max_features=n_features.

max_depth: (default=None)设置树的最大深度,默认为None,这样建树时,会使每一个叶节点只有一个类别,或是达到min_samples_split。

min_samples_split:根据属性划分节点时,每个划分最少的样本数。
min_samples_leaf:叶子节点最少的样本数。

max_leaf_nodes: (default=None)叶子树的最大样本数。

min_weight_fraction_leaf: (default=0) 叶子节点所需要的最小权值

verbose:(default=0) 是否显示任务进程
关于随机森林特有的参数:
n_estimators=10:决策树的个数,越多越好,但是性能就会越差,至少100左右(具体数字忘记从哪里来的了)可以达到可接受的性能和误差率。 
bootstrap=True:是否有放回的采样。  
oob_score=False:oob(out of band,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据。多单个模型的参数训练,我们知道可以用cross validation(cv)来进行,但是特别消耗时间,而且对于随机森林这种情况也没有大的必要,所以就用这个数据对决策树模型进行验证,算是一个简单的交叉验证。性能消耗小,但是效果不错。

n_jobs=1:并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,因为boosting的每次迭代之间有影响,所以很难进行并行化),因为可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job

warm_start=False:热启动,决定是否使用上次调用该类的结果然后增加新的。

class_weight=None:各个label的权重。

讨论QQ:525894654

论文连接:https://xueshu.baidu.com/usercenter/paper/show?paperid=1d140xp0qq4n0ph0jb6c0mg08e295178&site=xueshu_se

实现代码详解下个博客给出

基于随机森林算法的多因子选股方法分析与实现(1)相关推荐

  1. 基于随机森林算法的多因子选股方法分析与实现(2,代码实现)

    摘要 量化投资中经常听到的"多因子模型"是个什么鬼?因子是影响因素的简称,或简单理解成指标.我们都知道股票收益受到多重因素的影响,比如宏观.行业.流动性.公司基本面.交易情绪等等. ...

  2. 数据分析案例-基于随机森林算法的商品评价情感分析

    目录 1.挖掘目标 2.分析方法与过程 2.1总体流程 2.2具体步骤 2.3结果分析 3.结论 摘 要:随着我国的信息化发展速度的加快,时代科技技术的进步以及我国联网设施不断完善.不断普及,网民人数 ...

  3. 【项目实战】基于随机森林算法的房屋价格预测模型

    [博客地址]:https://blog.csdn.net/sunyaowu315 [博客大纲地址]:https://blog.csdn.net/sunyaowu315/article/details/ ...

  4. 动手实操丨基于随机森林算法进行硬盘故障预测

    摘要:业界期望使用机器学习技术来构建硬盘故障预测的模型,更准确地提前感知硬盘故障,降低运维成本,提升业务体验.本案例将使用随机森林算法来训练一个硬盘故障预测模型. 本文分享自华为云社区<基于随机 ...

  5. 基于随机森林算法的贷款违约预测模型研究(Give me some credit)

    本文实验代码github:https://github.com/dengsiying/give-me-some-credit/tree/master 参考链接:从决策树到随机森林 http://www ...

  6. 基于随机森林算法的糖尿病数据集回归

    基于随机森林算法的糖尿病数据集回归 作者介绍 1. 随机森林算法原理 1.1决策树与Bagging 1.2 随机森林算法 2. 实验过程 2.1 糖尿病数据集 2.2 实验过程 2.3 实验结果展示 ...

  7. 基于随机森林算法进行硬盘故障预测

    摘要:本案例将带大家使用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法,来训练一个硬盘故障预测模型,并测试效果. 本文分享自华为云社区<基于随机森林算法进行硬盘故障预测>, ...

  8. 基于随机森林算法的人脸数据集分类

    目录 1. 作者介绍 2. 关于理论方面的知识介绍 随机森林 3. 实验过程 3.1 数据集介绍 3.2 实验代码 3.3 运行结果 3.3 实验总结 参考 1. 作者介绍 李佳敏,女,西安工程大学电 ...

  9. Spark 随机森林算法原理、源码分析及案例实战

    图 1. Spark 与其它大数据处理工具的活跃程度比较 回页首 环境要求 操作系统:Linux,本文采用的 Ubuntu 10.04,大家可以根据自己的喜好使用自己擅长的 Linux 发行版 Jav ...

最新文章

  1. invalid project description._[Project教程] 在Project软件中如何处理加班工时
  2. 12-09关于几种排序方式
  3. android:HTTP通信 .
  4. python在财务上的应用-Python用于财务工作培训
  5. 工程制图 (机件常用的基本表示法)
  6. 自学编程需要注意什么?
  7. 基于知识图谱的小微企业贷款申请反欺诈方案
  8. 【软件质量】软件质量
  9. 基于注解的 Spring MVC 简单入门
  10. 用C++编写银行叫号系统,项目开源,适合零基础小白学习!
  11. 计算机操作系统学习之信号量机制
  12. android各版本市场占有率报告,百度报告:Android市场份额大增
  13. 用计算机弹课间进行曲,课间进行曲(修改稿)
  14. 【已解决】找不到某服务器 IP 地址
  15. C#_WPF中创建二维码、识别二维码
  16. 即日起,发放三种勋章公告。
  17. 托业考试 与 托福考试
  18. 关于module.exports和exports
  19. varint zigzag 编码学习
  20. 分辨率720p,VGA,QVGA,WVGA

热门文章

  1. 【Java学习笔记之七】java函数的语法规则总结
  2. 什么软件可以把照片变成漫画?试试这几款图片处理工具
  3. [4G5G专题-2]:RRU 射频功率放大器PA与低噪声放大器LNA
  4. 激活anaconda环境(是纯纯初学者在学习,最后成功的办法,如有不妥敬请赐教)
  5. ROS话题通信自定义msg实现发送接收(六)c++、python
  6. 转账到支付宝账户(企业支付宝)
  7. 一文了解websocket全双工通信java实现socket地址404问题解决
  8. 如何使用Android Studio来申请百度地图密钥
  9. 同一个局域网怎么传文件
  10. NeuroImage:功能磁共振成像中自发、短暂脑网络相互作用的行为相关性