决策树算法: 量化选股案例
来源:Stata与风险管理
作者:首都经济贸易大学金融学院田文涛
邮箱:tianwentao1999@163.com
什么是决策树
- 如何做决策
eg:是否学习[1]? 二食、三食or华侨? If-Then算法? - 决策树是仿树结构来进行决策的
解决什么问题
- 分类问题
- 训练集、测试集(7:3、6:4)
sklearn
学习训练生成模型测试集验证 - 评估指标:
混淆矩阵 | 预测为正样本 | 预测为负样本 |
---|---|---|
实际为正样本 | True Positive (TP) | False Negative (FN) |
实际为负样本 | False Positive (FP) | True Negative (TN) |
准确率(ACC)
精确度(PPV)
召回率(TPR、Recall)
特异度(TNR)
有关“树”的基本概念
- 节点
根节点
内部节点
叶节点 - 深度
如何构造“树”——三要素
- 属性构造
- 离散变量
二元属性
多元属性 - 连续变量
序数属性
- 指标度量
- 信息熵
的值越小,代表该样本集的纯度越高。
- 信息增益
说明
-- 假设属性有个可能取值,用对样本集进行划分,就会产生个分支节点,是第个分支所包含的样本。从而计算出用属性对样本集进行划分所获得的信息增益。
-- 信息增益越大,用属性对样本进行划分的纯度越高。
--选择信息增益最大的属性进行划分。
- 基尼系数
基尼系数越小,纯度越高。
举例:
label=0:5个,label=1:5个
label=0:2个,label=1:8个
label=0:0个,label=1:10个
- 模型生成
- 在第一级节点,寻求某个特征,按照该特征的标准(熵或者基尼系数)进行分组,分组后得到的纯度最大
- 完成第一级节点,在第二级节点上按照类似的思路找特征
- 直到最后一个节点,分类完毕
算法实现
- 手动造轮子
- 导入包
- 数据清洗
数据集划分 - 函数定义
信息熵、信息增益、基尼系数 - 结果输出
- 调包侠
- 核心算法:
from sklearn.tree import DecisionTreeClassifier
tree=DecisionTreeClassifier(max_depth=2,criterion='gini')
tree.fit(X,y)
print("准确度:",tree.score(X,y))
- 相关参数:
max_depth
criterion - 具体实例(鸢尾花数据集)
from sklearn.datasets import load_iris,load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
import pydotplus
iris = load_iris( )
clf = DecisionTreeClassifier( )
clf_iris = clf.fit(iris.data,iris.target)
dot_Data = export_graphviz(clf_iris,out_file=None)
graph_iris = pydotplus.graph_from_dot_data(dot_Data)
graph_iris.write_pdf("./load_iris.pdf")
量化案例:股票购买投资策略[2]
-
数据
说明:标黄的为测试集,标红的为模型训练结果。
- 代码展示:
userpath('D:\4-Project\决策树模型\DecisionTree2Demo')%设置路径为存放CSV的位置
TrainInput=readtable('TrainInput.csv');%录入训练集的输入部分
TrainOutput=readtable('TrainOutput.csv');%录入训练集的输出部分
TestInput=readtable('TestInput.csv');%录入测试集的输入部分
TestOutput=readtable('TestOutput.csv');%录入测试集的输出部分
S=fitctree(TrainInput,TrainOutput,'MinParentSize',3);%建立模型,并存入S
view(S,'Mode','Graph')%绘制决策树
InvestStrategy=S.predict(TestInput);%使用刚才建立的模型预测股票涨跌,涨就是买,跌就是卖,因此构建了一个投资策略
ActualPriceChange=table2cell(TestOutput);%转化TestOutput的数据格式(table格式)并存入变量ActualPriceChange(cell格式)
confusionmat(ActualPriceChange,InvestStrategy)%计算拟合值和真实值的混淆矩阵
-
结果展示:
混淆矩阵 | 预测为正样本 | 预测为负样本 |
---|---|---|
实际为正样本 | 3 | 0 |
实际为负样本 | 1 | 1 |
总结
- 决策树定义
- 决策树用途
- 决策树构造
- 决策树量化应用
决策树前沿发展
- 经典决策树:CLS、ID3、C4.5和CART树(李强,2006)
- 决策树组合:RF(随机森林)、ET(极端随机树)、GBDT(梯度提升决策树)、XGB和LGB(李想,2017)
- 神经网络:神经支持决策树(Wan A, et al,2020)
研究发现在保留决策树可解释性的同时取得了当前神经网络才能达到的准确率,比其他基于决策树的图像分类方法高出了大约14%。
总结
- 决策树定义
- 决策树用途
- 决策树构造
- 决策树量化应用
- 决策树前沿发展
-
案例来源于CSDN ↩