返回
<<银万研究
银万研究:量化交易中的XGBoost算法介绍

随着ChatGPT应用越来越多,量化基金规模越来越大,机器学习字眼不断冲击投资者眼球,XGBoost算法作为机器学习的一种优秀算法,在数据科学与工业数据方面运用有非常强的鲁棒性,被一部分人运用与喜爱。

一、机器学习简介

机器学习Machine Learning, ML)是一门涉及多领域交叉学科的学科,包括概率论、统计学、逼近论、凸分析、算法复杂度理论等多个学科。机器学习专注于研究计算机如何模拟或实现人类的学习行为,以获取新的知识或技能,并通过重新组织已有的知识结构来不断改善自身的性能。机器学习被视为人工智能的核心,是使计算机具备智能的基本途径。机器学习算法通常可分为三大类:1)监督学习;2)无监督学习;3)强化学习

1.png

1) 监督学习  

在监督学习中,数据包含带标签的输出(或目标)变量。通过建立监督式机器学习模型,其目标是通过发现或近似数据集中的剩余变量(即特征)来进行输出预测。换句话说,监督学习指的是我们向算法提供一个包含正确答案的数据集,并要求机器通过学习数据中的模式和关联来推断正确答案的计算方法。

2.png

给照片打的标签就是“正确答案”,机器通过大量学习,就可以学会在新照片中认出猫和狗

2)非监督学习
非监督学习方法的目标是在几乎没有人工干预的情况下,识别具有相同或相似模式的数据子组或集群。这种方法有时被称为聚类分析。一些常见的无监督学习方法包括 k 均值聚类、分层聚类、主成分分析和异常检测。简而言之,在非监督学习中,给定的数据集没有所谓的“正确答案”,所有数据都被视为相同。无监督学习的任务是从提供的数据集中挖掘潜在的结构。与监督学习相比,非监督学习方法依赖于未标记的数据,即没有标记的输出。

3.png

把一堆猫和狗的照片给机器,不给这些照片打任何标签,但是希望机器能够将这些照片分分类, 机器可以将猫和狗分开,但是并不知道哪个是猫,哪个是狗。

 

3)强化学习

最后,强化学习是一种独特的方法,它融合了顺序决策过程,可能在某些方面具有监督学习和无监督学习的共同特征。该方法通过反复试验来教导机器从过去的经验中学习,并根据环境调整其行动,最终产生最大的回报。由于强化学习更贴近生物学习的本质,因此有望实现更高层次的智能。其核心关注点在于智能体如何在环境中采取一系列行为,以获取最大的累积回报。通过强化学习,智能体应该能够了解在何种状态下采取何种行为。

 

机器学习一般包括7个实践步骤

4.png

二、XGBoost算法简介

机器学习中的XGBoost算法,它通常用于监督学习

XGBoost是极限梯度提升(eXtreme Gradient Boosting)的缩写。顾名思义,XGBoost是一种在梯度提升(Gradient Boosting)框架下实现的机器学习算法。本质上它还是一个梯度提升算法,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。它是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT(梯度提升迭代决策树)算法并进行了算法和工程上的许多改进。被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。

 

在理解XGBoost之前,让我们先了解一下决策树。

决策树: 顾名思义,决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。比如下图的决策树模型:

5.png

XGBoost的核心思想:

XGBoost通过组合多个决策树来构建一个强大的模型,而且它不仅仅是组合,还引入了梯度提升的思想。不断地进行特征分裂来生长一棵树,每添加一棵树,就是学习一个新函数,去拟合上次预测的残差。

 

比如下面一个例子:预测一家人对电子游戏的喜好程度

6.png

假设我们要预测一家人对电子游戏的喜好程度,考虑到年轻和年老相比,年轻更可能喜欢电子游戏,我们将一个家庭的成员分类为不同的叶子,并在相应的叶子上给他们分配分数。

8.png

模型的预测精度由模型的偏差和方差共同决定,损失函数代表了模型的偏差,想要方差小则需要在目标函数中添加正则项,用于防止过拟合。所以目标函数由模型的损失函数L与抑制模型复杂度的正则项Ω组成

 

XGBoost的目标函数如下图所示:

9.png

XGBoost目标函数是损失函数(红色箭头1)+正则项(红色箭头2)+常数项(红色箭头3)。此外,对于f(x),XGBoost利用泰勒展开三项,做一个近似目的是预测目标误差越小越好,因为XGBoost将多棵树的得分累加得到最终的预测得分(每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差)。

 

了解了如何优化和计算XGBoost,但是树的具体结构是怎样的呢?一棵树的生成过程是从一个节点开始,不断进行二分裂,最终形成整棵树。在XGBoost的原始论文中,作者提出了一种分裂节点的方法:采用贪心算法枚举所有可能的树结构。通过不断枚举不同树的结构,利用打分函数找到最优结构的树,然后将其加入模型,反复执行这一过程。这个搜索过程采用贪心算法,即选择一个特征进行分裂,计算损失函数的最小值,然后选择另一个特征进行分裂,得到另一个损失函数的最小值……一直枚举完所有可能性后,选择效果最好的分裂方式,将树进行分裂,从而得到小树苗。

 

知道了XGBoost的工作原理,那XGBoost具体工作可分为模型的训练和预测两个阶段:

训练阶段

初始化模型:XGBoost首先初始化一个弱的回归树作为初始模型,将其预测值作为基准。

迭代优化:

通过多次迭代,每次迭代都训练一颗新的树来纠正前面模型的错误。具体步骤如下:

计算残差(Residuals): 计算当前模型对于每个样本的预测值与实际值之间的残差。

构建回归树: 基于残差,训练一颗新的回归树,该树的叶子节点包含了样本的残差的累积。

计算树的输出: 计算新树的输出,将其加到前面模型的输出上。

更新模型: 通过学习率(通常是一个小的正数)乘以新树的输出,得到一个权重,然后将这个权重加到前面模型上。

正则化:为了防止过拟合,XGBoost在每次迭代时都会引入正则化项,考虑到新树的复杂度。这通过控制每个叶子节点上分数的大小来实现。

重复迭代:不断重复迭代,每一轮都在之前模型的基础上构建新的树,逐步改善模型的拟合能力,直至达到设定的迭代次数或模型性能收敛。

预测阶段:

得到训练好的XGBoost模型后,可以用于新数据的预测:

对于回归问题,预测值是所有树的输出的加权和。

对于分类问题,XGBoost使用逻辑函数将输出转换为概率,然后根据设定的阈值进行分类。

 

XGBoost之所以成为机器学习领域中备受推崇的算法,有很多原因:

1)高性能: XGBoost在性能上做了很多优化,采用了并行计算和缓存优化等技术,使得其在大规模数据集上训练速度快,内存利用率高。

2)强大的预测能力: XGBoost通过集成多个决策树,采用梯度提升的策略,能够很好地捕捉数据的复杂关系,从而在预测任务中表现优秀。

3)正则化机制: XGBoost引入了正则化项,防止模型过度拟合,提高了泛化能力,使得在新数据上的预测更为准确。

4)处理缺失值的能力: XGBoost能够自动处理特征中的缺失值,无需事先进行填充或删除,减轻了数据预处理的负担。

5)对异常值的鲁棒性: XGBoost对于异常值的存在具有较强的鲁棒性,不容易受到极端值的干扰。

6)在数据竞赛中的表现: XGBoost在众多数据科学竞赛中屡次获胜,成为Kaggle等平台上的宠儿,证明了其在实际问题中的有效性。

 

总体而言,XGBoost在性能、鲁棒性和灵活性方面都表现出色,因此成为了许多数据科学家和机器学习从业者的首选算法之一。华泰证券、中信建投等金工都有把XGBoost应用到A股的持续性研究,并且相关研究显示回测与仿真相关收益都很优秀。

 

 

参考资料

[1] 陈天奇论文原文XGBoost: A Scalable Tree Boosting System》

[2] 华泰证券人工智能选股周报:《今年XGBoost表现最好》

[3] Common statistical concepts in the supervised Machine Learning arena

(https://doi.org/10.3389/fonc.2023.1130229)

[4] 机器学习–machine learning

(https://easyai.tech/ai-definition/machine-learning/)

[5] 深入理解XGBoost,优缺点分析,原理推导及工程实现

(https://blog.csdn.net/Datawhale/article/details/103725122)

[6] 终于有人说清楚了--XGBoost算法

(https://www.cnblogs.com/mantch/p/11164221.html)

[7] 超详细解析XGBoost 

(https://zhuanlan.zhihu.com/p/562983875)

[8] XGBoost详解原理篇

(https://blog.csdn.net/weixin_55073640/article/details/129519870)

[9] xgboost的理解

(https://zhuanlan.zhihu.com/p/75217528)