3092 2

[交易策略] 如何利用机器学习科学决策选股? [推广有奖]

  • 0关注
  • 4粉丝

本科生

83%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
1228 点
帖子
47
精华
0
在线时间
107 小时
注册时间
2017-7-13
最后登录
2019-5-22

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

原文来自:MindGo量化社区-【机器学习】如何科学决策?

http://quant.10jqka.com.cn/platform/html/article.html#id/88229420

【导语】在前面的系列文章中,我们已经介绍了随机森林算法,随机森林算法实际上是由成百上千的决策树组成的。决策树顾名思义就是帮助我们做出决策的工具,它的形状大多表现为一棵树。这回让我们来看看决策树是如何决策,他能够被用在量化投资的哪些方面?另外,通过本文策略与《【机器学习】机器学习中的集体智慧》的对比,也可以体验到集成学习的强大。

如何决策?

  下面这张图给出了一棵训练好的决策树,它的作用是判断一个人是不是一名程序猿(好吧,其实我也是一名程序猿,这里绝不是在黑程序猿,只是为了说明程序猿都很可爱)。

  那么,通过下面这棵决策树,我们可以知道,要判断一个人是不是一只程序猿,我们首先观察是不是男性?如果不是男性,那么一定不是程序猿。如果是男性,我们再看他是不是戴眼镜?程序猿这种生物常年面对显示器,戴眼镜是大概率事件。好,如果他戴眼镜,那么我们再看他是不是经常穿T恤,你知道的,程序猿时间少,什么简单来什么。他竟然也经常穿T恤,我们接着看他是不是经常穿拖鞋,如果的确穿拖鞋,那么几乎快要断定他是个程序猿了,最后我们看看他是不是背双肩包,双肩包可是笔记本的标配。如果这一系列条件他全部满足了,那么我们就判断他是一名程序猿。整个过程也正像图中所示的那样。

决策树-如何判断程序猿.png

  这里有必要科普一下“树”。树是一种数据结构,它是由若干个节点构成的,之所以叫做树,主要是因为它长得像树,看起来就像是一棵倒过来的“树”,根在上,树枝在下,当然了,要是你乐意,完全可以把它画成正着的树。只是从习惯上来说,以这样倒挂的形式更常见,且在应用中也更加实用。每个节点都可以有上层节点,也叫作“父节点”,或者是下层节点,叫做“子节点”。那么很容易看出,根节点没有父节点,叶节点没有子节点。在决策树中,每个叶子节点就代表了一种决策,比如在上面的例子中,叶子节点就代表了是Or不是程序猿。除了根节点和叶节点以外的所有节点都叫做分支节点。在决策树中,分支节点表示的是一种决策条件,比如上面例子中,“是不是背双肩包”就是位于分支节点的一个决策条件。决策树的目标就是为了训练出一棵具有泛化能力的能够判断未知样例的树。

决策树的生成?

  总的来说,决策树的训练过程很像种子的发芽过程(下图)。刚才我们已经知道,每个分支节点都代表了一个决策条件,那么实际上,决策树的生成过程中,如何确定分支节点的决策条件,并且如何根据决策条件进行划分是两个最关键的问题。

决策树生成.png

  我们想象一下,为了让分类效果能够更好,实际上我们的目标是让分类结果中,每一类样本的纯度更加高,尽量使得真实同一类的样本分入同一类,让不同类的样本分到不同的类别中。事实上后面提到的两种属性划分依据核心的思想都是这一条。

  1.信息熵和信息增益

  相信大家在高中物理都学习过“熵”的概念,当时留给我最深刻的印象就是,熵代表着一个系统的混乱度。熵越大,则代表这一个系统的混乱度越高,反之,则代表这个系统的混乱度低,更加有秩序。通过下面这两张图能够更好的记忆。。

  首先,我们可以给原始的训练数据计算一个信息熵,随后,尝试不同的属性作为划分依据,比如我们依次使用“是否戴眼镜”、“是否穿拖鞋”作为划分依据,并计算划分之后新的信息熵,两者相减就可以得到通过这个属性的划分所带来的“信息增益”。经过一轮对所有属性的遍历,我们就可以得到每个属性的信息增益,只要从中选取信息增益最大的作为划分属性即可。之后,我们只需要在每个分支节点执行这个过程就可以迭代地得到一棵完整的决策树了。

  但是,显然,利用信息增益来作为划分依据是由缺陷的。举个简单的例子,我们强行把每个人单独分成一类,那么由于每一类里的纯度都是100%,会得到一个非常大的信息增益。换句话说,信息增益会“偏袒”取值更多的属性。如果你把每个人的身份证号也作为一个属性,那么信息增益算法会毫无犹豫的选择它作为首个划分属性。

  在发现这样的弱点以后,基于信息增益率的算法被提出(C4.5),简单来说,信息增益率既考虑了属性划分得到的信息增益,也考虑了属性本身可取值的个数。但是信息增益率本身更加青睐可取值数目较少的属性。所以,最后采取了一个综合方案,同时考虑信息增益和信息增益率,根据两者的综合表现来选取划分的属性。

  2.基尼指数

  基尼指数直观上来说,反映了数据集中任意两个样本,他们的类别不一致的概率。所以很容易可以得到,基尼系数越小,则类内纯度越高的结论。所以,与信息增益类似的,我们也是迭代地选择能够让划分后的基尼指数最小的属性作为划分属性。

化繁为简

  前面之所以简单介绍了以下树的概念,就是为了这里做铺垫的。既然是一棵树,那就可以做修剪,剪去繁杂的多余的树枝。当决策树的分支过多,结构过于复杂的时候,往往也是过拟合的时候。这个时候,通过修剪掉一些冗杂的树枝,就可以很好的避免过拟合。这里主要有两种方法,预剪枝和后剪枝。

  预剪枝:顾名思义,就是预先剪枝,它是指在决策树每一步划分的过程中就确认是否有必要进行划分。如果划分后的泛化性能还不如不划分,那么在该节点就不会进行划分。由于决策树生成的过程是自上而下的,因此也可以看成是“自上而下”的剪枝方法。

  后剪枝:意思很明确,指的是在决策树生成完毕后再进行剪枝。对于每个分支节点,考虑如若将该节点替换成叶节点,能否带来泛化性能的提升,若能,则将该节点一下的树枝替换为叶节点。

  判断泛化性能是否提高也比较简单,只要事先预留一部分数据作为验证集,我们观察剪枝之后的性能在验证集上是否获得提升即可。

策略思路

  最后,我们来看一看基于决策树的量化选股策略表现怎么样。

  代码与使用随机森林的时候几乎是一致的。思路如下:

  我们以2017年6月1日调仓日为例说明。

  1.首先获取调仓日前一个月月初(2017年5月1日)的公司财务指标,并计算每只股票从前一个月月初到月末(2017年5月1日至2017年5月30日)的涨跌幅;

  2.将涨跌幅处理为标签,涨跌幅为“+”则赋予一个“
1”的标签,为“-”则赋予一个“-1”的标签。

  3.标准化。在这里使用了StandardScaler作为标准化器;

  4.将标准化后的公司财务指标和对应每家公司的涨跌标签作为输入进行训练;

  5.获取上月月末的公司财务数据(2017年5月30日),使用训练好的随机森林分类器进行预测,并在6月1日开盘进行调仓,持有所有预测为“1”的股票。

净值.JPG

  从结果来看,决策树的表现不如随机森林。确实也在一定程度上说明了单决策树分类器的性能不如自带集成学习的随机森林分类器。对于利用分类方法来选股的关键在于要提高分类器的准确性,要提供分类器的分类准确能力,必须要挖掘有效的属性,需要消耗较多的时间在训练分类器上。如果核心的分类器能有不错的性能,那么可以期望每个调仓日都能选出一批上涨概率较大的标的,也可以有一个较高的预期收益。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
fulifu 发表于 2018-8-13 19:54:30 |只看作者 |坛友微信交流群
学习学习,正准备用学习决策树。

使用道具

藤椅
何大鱼头 发表于 2018-8-14 16:29:47 |只看作者 |坛友微信交流群
刚开始学习怎么把ML和量化结合

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 14:02