构造多空股票投资组合:一种新的排序学习算法
由crisvalentine创建,最终由crisvalentine 被浏览 120 用户
报告摘要
研究背景
学习排序算法是一类有监督的机器学习算法,基于排序的机器学习算法在文本归纳和机器翻译等领域也表现出了强大的能力。然而在因子投资领域这些排序算法还没有得到人们的足够重视。另外对于IR指标,在多空策略中人们希望排名靠前和靠后的指标都是准确的。
研究现状
将排名框架引入到了多因子策略大多关注于添加可替换因子或构建神经网络。Song将排名进行颠倒,并对模型进行两次拟合,希望两个模型分别能够预测头部和尾部。但是这种方法可能得出在同一时间买卖同一只股票的结果。这样的结果促使本文提出了一种新的学习排序算法,该算法基于头部和尾部一致的排序列表,并且在排序列表中两者同等重要。
损失函数介绍
在多空策略的启发下,考虑到投资组合的收益和损失,本文提出了一种新的替代损失函数ListFold,该损失函数将队列的头部和尾部视为同等重要,并且具有平移不变性以及和0-1损失函数的一致性。
实证研究
数据集包含了中国A股市场3712只股票的631周的数据,其中包含68个因子,样本日期为从2006-12-29到2019-04-19。模型采用了4层全连通神经网络结构,采用ListFold与MLP、ListMLE和Song拟合的List2MLE作为损失函数,分别构造两种不同的多空组合进行比较。一种是做多头部10%的股票,同时做空尾部10%的股票;另一种是做多头部10%的股票,做空所有股票的平均值。对相同投资方向的股票分配相同的权重,每周投入1美元。
对比结果显示,自2016年以来,做空尾部的情况下,ListFold-exp的收益最高,MLP的净值仅为ListFold-exp净值的2/3,ListFold-exp优于List2MLE。做空平均值的情况下,ListMLE和MLP收益甚微,而ListFold仍然能够获得不错的收益。
最后设定年化无风险率为3%,每笔交易的总交易成本为30个基点,所构建的采用ListFold损失函数的模型做空尾部10%股票投资组合表现较好,样本外年收益率38%,夏普比率为2。最后进行了敏感性测试,结果证明策略在回测期市场动荡的环境下表现稳定。
结论
本文在学习排序方法的基础上提出的新的损失函数ListFold,可以被看作是研究非顺序敏感损失函数的一个补充工具,它也可以启发统一pairwise和listwise代理损失函数的框架。此外,本文验证了IC比NDCG类型的排名指标更适合评估alpha策略。
文献来源
文献来源:XIN ZHANG, LANWU and ZHIXUE CHEN, “Constructinglong-short stock portfolio with a new listwise learn-to-rank algorithm (July, 2021)”,Quantitative Finance.
文献亮点:本文提出了组合因子构建多空组合的新思路,在学习排序方法的基础上提出了一种新的损失函数,目的是通过listwise方式选择多空组合对。它具有平移不变和概率可解释的特点。本文构建的模型可以被看作是研究非顺序敏感损失函数的一个补充工具,它也可以启发统一pairwise和listwise代理损失函数的框架。
本文的实证结果显示出排序预测相对于数值预测的优势,还有构建的损失函数特别是ListFold-exp的强大作用。本文还通过经验验证了IC比NDCG类型的排名指标更适合评估alpha策略。
摘要
随着机器学习的快速发展,多因子策略在行业中的应用越加广泛。通常的做法是将多个因子输入到算法中来做横截面收益的预测,并进一步构建多空投资组合。最新的研究不再是预测股票的收益值,而是利用成熟的排序算法来预测股票的未来收益排名。
本文提出了一个损失函数基于排名的全新的listwise排序算法,该损失函数旨在同时强调排名队列的头部和尾部。本文的损失函数用于多空策略具有内在的平移不变性,可以看作是对ListMLE的直接推广。在不同的转换函数下,二元分类损失或排列级别的0-1损失是一致的。作者也给出一个广义的Plackett-Luce模型的概率解释。本文测试了2006-2019年中国A股市场68个因子的数据集,所构建的多空股票投资组合表现较好,样本外年收益率38%,夏普比率为2。
关键词: Learn-to-rank ListMLE多空组合 因子策略 机器学习JEL分类 G11 C45 C53
介绍
主动组合管理最早可以追溯至CAPM模型(Sharpe,1964和Lintner,1965)和Fama-French三因子模型(Fama和French ,1993)的提出。自打诞生以来,关于主动组合管理的价值众说纷纭,褒贬不一。Carhart(1997)代表传统投资理念的巅峰,Carhart并不符合擅长技术分析或者精通消息的基金组合经理的条件,但是Cremer最新发表的文章(Cremeret al.2019)质疑了传统投资理念这个观点,文章认为无论是在择时还是选股上,传统观点都有点落伍。择时主要包括对市场未来走势的预测,预测周期从几毫秒到几个月不等。而选股策略的一个基本的框架是找到各种因子,并将它们组合起来预测下一个时间区间的回报。在Fama和French的启发下,为了获得这种基于横断面预测的回报,投资者可以采用因子多空策略,即做多因子排名靠前的股票,做空因子排名靠后的股票。预测能力强的因子往往是保密的,并悄悄获取不菲的收益。与此同时,各类文献中也提出了许多相对普通的因子(Tulchinsky 2019,Giglio等,2019)。能否从这些相对普通的因子中挖掘出能产生预测能力强的因子,是一个仁者见仁智者见智的问题。本文试图通过一种新颖的学习排序算法来回答这个问题,该方法受到多-空交易行为的启发,旨在直接预测一个横截面上的股票排名列表,而不是传统的股票收益的数值。
学习排序算法是一类有监督的机器学习算法,在信息检索(IR)领域已经被证明是非常成功的。排序算法已成为推荐系统的核心部分,广泛应用于网络搜索、新闻推送、在线购物和广告等领域。基于排序的机器学习算法在文本归纳和机器翻译等领域也表现出了强大的能力。然而,在因子投资领域这些排序算法还没有得到人们的足够重视。尽管已经有许多其他的机器学习算法被用于开发多因子策略(De Prado 2018,Rasekhschaffe和Jones 2019),但是并没有从排名的角度来看待这个问题。对于IR指标一个明显的差别是,在多头策略中人们只关心排名靠前的指标的准确性,但在多空策略中,人们希望排名靠前和靠后的指标都是准确的。为了弥补这一差距,人们需要一种同时强调顶端和底部的学习排序算法。事实上,一些研究人员经将排名框架引入到了多因子策略中,但他们大多关注于添加可替换因子或构建神经网络(Song et al. 2017,Feng et al. 2019, Fang et al. 2020a)。对于满足多空策略的需求,很少有人关注到这一点。在Song et al.(2017)中,作者将排名标签颠倒,并对模型进行两次拟合,希望两个模型分别能够预测头部和尾部。尽管参数调优很麻烦,但是这种方法可能从两个模型得到相反的结果。因此,这种方法不能保证一个连贯的排名,而是可能得出在同一时间买卖同一只股票的结果。这样的结果促使我们提出了一种新的学习排序算法,该算法基于一个一致的排序列表,并且在排序列表中头部和尾部同等重要。
本文并不着重考虑股票的绝对收益,而是侧重于预测收益的相对排名。这一点不仅可以用基金经理跑赢相对指数的目标来解释,也可以通过做出准确价值预测的难度来体现。预测的困难主要来自于输入信息的边界模糊和财务数据的低信噪比。比如一夜之间的突发消息可能会严重影响整个市场,一些不可预测的交易行为影响了股票价格。目前尚不清楚是否有专业人士或因子能够可靠地预测个股的回报,但是我们更倾向于预测股票相对于其他股票或因子模型的走势。Song et al.(2017)、Feng et al.(2019)、Zhu et al.(2011)、Wang and Rasheed(2018) 也认同预测收益排名的观点,并且使用排序信息系数(rank information coefficient, IC)来作为评级指标。
本文的研究结果具有两面性。首先,我们为一个多空策略开发了一个新类型的学习排序损失函数。我们可能是第一个提出了一个基于自上而下和自下而上的学习排序算法框架的多空投资策略。特别地,我们设计了一种新的替代损失函数,并讨论了它的理论特点。我们构造的损失函数由于其对称性质而具有平移不变性,在不同的转换函数下,可以推导出它与二元分类损失或排序的0-1损失相一致,我们还对模型进行了概率解释。其次,我们进行了详细的实证研究,检验我们的模型在中国A股市场的表现:年化收益率为38%,夏普比率为2。可以看出,我们的方法优于多层感知(MLP)、ListMLE和Song两次使用的ListMLE模型。
本文的其余部分组织如下。第2节简要介绍了背景知识,包括多因子策略、学习排序算法框架和ListMLE算法。第三部分给出了我们的模型及其理论分析。第四部分对我们的模型和其他模型在中国A股市场上的应用进行了实证比较。在第五部分,总结了我们的主要内容和未来研究的一些想法。
研究背景
多因子策略
因子是多因子策略的核心。各类已经发表的文献构造了数百种潜在的定价因子(Harvey et al. 2016, Hou et al. 2017),在行业中甚至更多。一类多因子策略是在一个多重测试框架中反复测试这些因子(Feng et al. 2020b),但另一类策略,是从因子库中生成效果更好的因子,因而更受欢迎。因子组合最传统的方法可能是顺序过滤、打分法和线性回归。计量经济学家和统计学家从SVM、Adaboost和图模型等不同模型的角度进一步扩展了线性模型(Liu et al. 2016)。机器学习同样被用来生成因子和构建因子组合。例如,通过文本分析,机器学习能够从新闻中提取情感因子。在构建因子组合方面,这些算法通常将因子视为输入,将收益视为输出,将问题转化为分类或回归问题。
当投资者想要投资估值过高的标的时,多空策略是纯多头投资的一种自然的替代。Jacobs和Levy(1993)研究了多空策略的构建方式、原理和实际收益,以及多空策略在实际运作中产生的问题。如今,对冲基金广泛使用多空策略构建投资组合。另一种比较流行的多空因子的投资方式是先把股票分组,比如总共分成10组,然后做多排名靠前的组,做空排名靠后的组。由于不需要估计因子载荷,分组法受到了人们的欢迎。
学习排序算法概述
学习排序算法源于网页搜索,同时包含了很多以前的方法。它的基本框架是将文本(在本文的场景中是股票)及其特征作为输入,并将基于相关性判断的排名列表作为输出。我们使用一个替代损失函数来学习一个评分函数,它根据文本的特征给每个文本分配一个分数,这样只要我们根据它们的分数对文本进行排序,我们就可以很好地预测它们的排名。计分函数不会因文本而不同。根据损失函数的不同,大多数学习排序算法可以分为点排序、成对排序和列表排序。
为了评估预测结果,特别是关心排名是否正确时,NDCG是最受欢迎的指标,其定义如下:
其中 为预测列表, 表示 位于列表j位置的文本。l代表相关性判断,
是文本的常用评级函数。 是一个位置折扣因子(通常设置为
。位置的k截断意味着我们只关心排名前k个位置的准确性。 是设置NDCG落在[0,1]范围内的归一化值。因此我们可以用1 – NDCG来代表实际的损失。此外,当且仅当两个列表相同时,排列级别0-1的损失达到0。二进制分类损失是首先将排名列表的前50%标记为1,其余为-1。在众多排名指标中,GAUC (Song and Meyer 2015)也考虑了排名列表头部和尾部的准确性,但他的局限性在于只考虑了{1,0,−1}标签的特殊情况。
ListMLE
ListMLE是一种先进的列表学习排序算法,它以自上而下的方式定义基于Plackett-Luce模型的概率分布。其目的是利用一种可能性损失作为替代损失,定义为:
其中 表示标记在第i个位置的分量。x为特征向量,n为样本量,f为打分函数。函数 是将得分映射到 的变换函数。变换函数 通常被认为是线性的、指数的或s型的。为简单起见, 。Plackett-Luce模型的概率解释是Silverberg(1980)给出的花瓶模型比喻。考虑从一个装满彩色球的花瓶里画球。每种颜色的球数与成比例。假设有无限个球,如果需要不合理的比例。在第一阶段,从花瓶中取出一个球c1,这种选择的概率是 。在第二阶段,绘制另一个球,如果它与第一个球的颜色相同,然后把它放回去,并继续尝试,直到选择一个新的颜色c2;第二次选择的概率为 。继续这些步骤,直到每个颜色的球都被选中。颜色序列的概率如式(2)所示。
我们的模型
在本节中,我们提出模型ListFold。在多空策略的启发下,我们提出了一种新的替代损失函数,将队列的头部和尾部视为同等重要的,因为它们都有助于投资组合的收益和损失。为了不失一般性,我们假设给偶数个股票(记录)来排序。
ListFold
对于2n个记录 ,观察排序y和评分函数f,我们尝试将一个排列分解为一个有序的分步骤选择过程:第一个多空记录对,第二个多空记录对,直到第n个多空记录对。我们可以这样定义概率公式:
其中 表示在第个位置观察到的股票的得分, 为转换函数,比如ListMLE。然后将损失函数定义为负对数似然估计:
我们构造的损失函数的考虑类似于ListMLE,它将置换概率分解为逐步条件概率。不同之处在于,对于每一步,我们的目标不是选出一个股票,而是选出得分差异最大的一对股票,并进一步将它们按正确的成对偏好顺序排列。根据前面步骤的正确排序,我们可以将条件概率写成:
这就很自然地解释了 中分母的对称性。而且由于这种对称性,ListFold天生就是平移不变的,而ListMLE只有当是指数时才会是平移不变的。
当 为指数时,我们的损失概率解释可由花瓶模型的自然泛化推导出来。考虑一个投掷飞镖的多级实验。有2n块木板堆在一起。宽度、长度和高度分别为(Wi,Li,1)约束条件为Wi∗Li=1。在第一阶段,A和B同时各自向板的宽度和长度方向随机投掷飞镖。如果他们的飞镖落在同一块木板上,那么把木板放回去,再投一次,否则标记A板为A1, B板为B1。继续进行重复实验,不要把标记的木板放回去,在步骤i中标记木板为Ai和Bi,直到所有的木板都标记好。然后木板序列的概率 : 这是方程(4)中假设 指数和 ,如图1所示。
我们之前构建的损失函数不是对ListMLE的一个简单概括。实际上,一个简单的概括可能是:
这更像是通过反向标记来组合两个ListMLE。这种代理损失与排列级别的0-1损失天然保持一致性。但是Pt并没有定义排列空间上的概率,而我们的推广Pc暗示了一个是 指数的概率模型。
理论分析
在这一部分中,我们讨论了我们的损失函数 和0-1损失的一致性。当 是s型或指数型时,我们将 分别表示为 和 。在开始之前,我们首先花一些精力来理解为什么这是一个新的具有挑战性的问题。在ListMLE之前的工作中,代理损失函数都是顺序敏感的,基本上是说如果我们将任意两个文档的位置向ground truth交换,损失就会减少。order sensitive的正式定义可以在Xia et al.(2008)中找到。顺序敏感性是指只要神经网络在任意两点上学习得更好,损失就会减少。但实际上当有一个更全面的预测会更加令人满意。reduces-if损失承认在股票市场上预测的排名不会完全正确,因此应该愿意允许代理损失,并探索更复杂的模型。从这个角度来看,我们的损失函数是一种异常,可能引发提出替代损失函数的新思路。考虑对四个数字(5,4,1,0)的排列。假设我们从 (1,5,4,0) = 4.78开始,如果我们交换前两个数字,损失实际上会增加: (5,1,4,0) = 6.65,而基本期望值 (5,4,1,0) = 0.65仍然是最小的。
接下来用两个定理分别来描述 和 的一致性。这两个定理试图回答当最小化等式(4)中定义的ListFold时,我们的目标函数是什么样的真实损失。理论分析将帮助我们更好地解释模型输出,并据此构建最优的多空组合。
定理3.1 如果变换函数 为sigmoid,则 ,且 是所有 和 的排列。那么我们的损失 与二分类损失一致。
证明:根据定义 和
的性质,
其中 是一个固定的常数n。由于 是凸函数并且单调递增,对于任何四个分数 ,考虑他们所有的排列 ,我们取其中的两对,考虑损失函数:
为了使损失最小化,需满足a>b,c>d ,否则可以互换头寸来减少损失。因此只需要比较三种情况 : 第一个不等式成立是因为它的凸性,第二个不等式成立是因为它的单调性。对每两对保持使用这一规则,只要排列对在一起 ,损
失是最小的。这n对的排列实际上没有区别。因此 与二分类损失函数一致,但与0-1排列损失函数不一致。
定理3.2 如果变换函数 是指数函数,假设 ,且 是所有的 排列, 是所有 的排列,则表示,损失函数为
在倒序的排列中可得到最小值 。
证明略
从证明中,可以看到有两种方法可以让 在排列空间中减少:
- 将较高的分数放在头部,将较低的分数放在尾部。
- 将小分数差异(较难区分的)成对放在中间。
第二种方法,一方面给证明排列水平0-1一致性带来困难;另一方面,它实际上与股票市场是一致的:股票收益的横断面分布近似正态分布,排在中间的几乎没有差别。从多空的角度来看,对于那些不确定其中一个是否会在回报方面严重影响另一个的股票组合的,将其放在一起。
实证研究
在这一节中,我们探讨了中国A股市场的实证表现。将构建的模型与MLP、ListMLE和Song拟合的两个ListMLE(记为List2MLE)进行比较。由于我们重点关注损失函数,所以接下来将采用相同的神经网络结构和训练方法。MLP代表价值预测,其余的则代表排序预测。MLP的损失函数为:
针对不同的算法,我们构造了相应的多空组合。然后将评价指标作为投资组合绩效的度量。在排序预测方面,还提出了一种广义NDCG评价方法。这块分为三个部分:数据和训练过程的简要总结,网络结构的打分函数以及表现的评价。
数据和训练
我们的数据集包含了中国A股市场3712只股票的631周的数据,其中包含68个因子,样本日期为从2006-12-29到2019-04-19。通过筛选缺失值百分比小于0.1%的样本,我们过滤掉了其中的80只股票。这80只股票大多是沪深300指数成份股,流动性较高。这68个因子如下图所示:
由于数据集的跨度超过13年,接下来以滚动的方式训练模型。我们将每300周作为训练集,接下来的16周作为测试集。我们将数据分成32个小批量数据,每300周执行一次最小最大归一化。最终得到320个周度数据作为从2012-11-30到2019-02-01的测试集。在每次训练过程中,设定每个算法查看1000个小数据集。
打分函数
我们使用4层全连通神经网络学习评分函数f,即网络结构的形状为[68×136 ×272×34×1]。在每层中都嵌入一个ReLU层作为激活函数,同时为了这些因子相互作用,以生成更多的特征,我们扩展了隐藏层中的特征的维度。对于所有的样本,打分函数都是相同的,比如 的参数都相同。如图3所示:
在确保模型不会使用未来信息的基础上,将每周作为独立样本,在时间轴上,神经网络不会生成新的特征,这使我们能够在训练过程中无缝地进行小批量数据的交叉训练。在实践中,只需将这些信息作为时间序列因子输入,就可以将模型推广到沿时间轴的维度。
组合表现
为了评估模型,首先查看投资组合样本外的表现。然后我们从排序的角度进行评价,希望它能帮助我们更好地分解利润,通过IR指标来衡量模型的效果。
度量投资组合
在得到排序预测的基础上,我们构建了两种策略。一种是做多头部10%的股票,同时做空尾部10%的股票。另一种是做多头部10%的股票,做空所有股票的平均值。对相同投资方向的股票分配相同的权重。每周投入1美元,没有交易费用。样本外净值曲线在图4中绘制,以平均值作为基准。
图4展示了做空尾部10%的股票模型中排序对投资组合的贡献。在相同的神经网络、相同的数据和相同的训练程序下,回测区间内ListFold-exp的收益最高,MLP的净值仅为ListFold-exp净值的2/3,ListFold-exp优于List2MLE。
图5展示了做空所有股票的平均值模型中排序对投资组合的贡献。对比图4和图5,我们发现ListFoldexp和ListFold-sgm在long leg上表现更好,几乎所有listFold-exp和MLP之间的超额收益都来自long leg。自2016年以来,如果ListMLE和MLP做空平均水平则收益甚微,而ListFold的两种策略仍然能够获得不错的收益。一种可能的解释是,机器学习算法在此之后涌入了中国A股市场。
设定年化无风险率rf为3%,每笔交易的总交易成本为30个基点(如税费、价差交叉和卖空成本),最终得到了平均值、标准差、夏普比率和最大回撤指标。此外还计算了平均交易成交量(简称TRV),即连续两周持仓的非重叠股票比率。如下图所示,第一块数据显示做空尾部股票的策略,第二块数据对应做空平均线的策略。
所有这些策略由于其多空性质而具有较低的波动性,其中ListFold-exp优于List2MLE,但其换手率略高。
排序指标
对于排序指标,我们使用Spearman的 ,NDCG。我们还提出 作为的一种概括,它同时强调头部和尾部:
定义3 被定义为NDCG@k和反向标记NDCG@-k的平均值:
尽管LisMLE具有很高的NDCG,但它的NDCG@8在我们的数据集中并不那么好。List2MLE则选取了ListMLE的long leg和ListMLE-rvs的short leg,因此其NDCG±8实际上是最低的。此外,IC指标与pnl的表现比较接近,也反映了IC指标在业界的受欢迎程度。
鲁棒性
在这一部分中,我们首先检验了仓位截止参数k的鲁棒性,即我们决定在投资组合中做多和做空的头部部分k和尾部部分k。对于不同的模型,我们绘制了不同数量股票的多空组合的热力图。列代表不同模型,行代表仓位截止参数k。
例如,在第8行中,我们做多头部的8只股票,做空尾部的8只股票。每个单元格中的数字是在没有交易费用的情况下从样本中获得的平均周回报(bps)。这个值越大,颜色就越靠近暖色调。
如果我们的预测完全符合ground truth,可以预期,当k从1到80时,投资组合的PNL逐渐向0下降。图7生动地展示了ListFold-exp的优势。四种排序方法都对k具有鲁棒性。如果LS-1到LS-8的值近似减小,我们也可以通过给先例对分配更大的权重来提升pnl。除此之外,我们还注意到ListFold-sgm在所有五种车型中长-短-40性能最好,性能稳定。这与ListFold-sgm与二进制分类丢失是一致的事实是一致的。因此,如果一个人的任务是做多50%,做空50%,那么ListFold-sgm应该是一个不错的选择。
接下来,我们研究了小批量排序方法的稳健性。我们在不同的小批量尺寸下训练模型,并保持模型始终查看1000批。表4总结了以bps计算的平均周收益。总的来说,小批量的小批量不适合ListFoldexp和ListFold-sgm,因为它不是凸的。虽然一个更复杂的损失函数通常需要更多的数据,但早期停止规则也是必要的。
最后,我们想提到的是,我们的策略不限于每周的方式或80支股票。它可以无缝地传输到从业者自己的因素数据集。我们模型的高夏普比率也鼓励在实际生产中使用杠杆。由于中国a股市场在我们的测试期经历了一个非同寻常的牛市-熊市循环,我们的策略已经证明了其对市场动荡的稳定期。
结论
本文提出了组合因子构建多空组合的新思路。在学习排序方法的基础上,我们提出了一种新的损失函数,目的是通过listwise方式选择多空对。它具有平移不变和概率可解释的特点。对于不同的变换函数,它和二分类损失函数或排列水平的0-1损失函数相一致。我们的模型可以被看作是研究非顺序敏感损失函数的一个补充工具,它也可以启发统一pairwise和listwise代理损失函数的框架。
我们对中国A股市场的实证研究结果表明,6年来年化收益率达到38%,夏普比率为2。它不仅展示了排序预测相对于数值预测的优势,而且还展示了我们的损失函数,特别是ListFold-exp的强大作用。我们从财务和排名的角度对不同模型进行了全面的评估。结果表明,我们提出的损失函数比其他函数有明显的优势。本文研究的一个副产品是,我们通过经验验证了IC比NDCG类型的排名指标更适合评估alpha策略。
在未来的研究中,特别是在理论分析方面,值得进一步研究ListFold-exp的一致性,更一般地,对导致不同实际损失函数的不同变换函数进行刻画。以从业者的角度来看,在他们自己的因子库或神经网络模型上尝试ListFold也是值得的。事实上,考虑到做空通常更昂贵的事实,一个人可能希望尾部排序的正确率相对于平均更高。因此,将ListFold与其他损失函数结合起来,或者在当前架构中添加神经网络模块(如辅助任务),可能也是很有意思的领域。