二machine learning各个方法和在trading上的应用 密金融官网:网页链接 公众号:tankozhou版权:作者 高能物理PHD 潮汐智咖 江海 来源 江海 @知乎专栏呐,... 

呐,当你们看到这么搞个大新闻的题目的时候肯定内心的活动是这样的。

我也一直觉得这个现象挺有意思,后来学了machinelearning之后从统计的角度想了想可能是这个原因:

宏观系统本身非常复杂,变量因子多,即使逻辑线以线性关系为主,但因子和因子之间互相还有correlation和dependence使其结构更加复杂,况且还有人这个非理性的参与者randomly影响,掺入了很多有内部结构的噪音。最重要的是因子的权重还是不断动态变化的,即使报告里说的理由都是对的,但是如果并不是当下主要的driver因子,那结论也会是错的。

大家都喜欢说趋势和周期,但到底是个什么没人说得清楚。

这可能也是为什么国内市场的波动大,波动大并非因为市场经常有分歧,反而是因为市场太容易形成趋势,并且这个趋势很容易就被证伪而戛然而止,所以形成的趋势非常脆弱,一旦不能继续维持之后就会反弹式向反方向运动,即强化版的反身性。

好的trader本身就一直在市场里面,即使对长的宏观因子不甚了解,但像A股这样抓住短期市场情绪的driver因子也够收益了。既能做好交易又能动态抓住长远宏观因子从而抓住大趋势的人就简直是凤毛麟角了,一般也都直接去买方当大佬自己赚钱了。

当然,也不是说报告就不用看了,其实看报告是一个不断丰富自己factorpool的过程,但是怎么判断其权重就得从平时对金融系统的观察和思考里面来了。

市场中每时每刻都有不同的声音,大部分时候其实大家说的都有道理,并且都可以在教科书和历史中找到对应,而最大的问题并非是判断谁对谁错,而是判断当下甚至未来给予每个factor的权重是多少,和历史的最大不同也并非是共有的ingredient不同,而是其配比不同,并且这个配比是动态变化的。我觉得这也是一个trader或者投资经理水平高低的决定性因素了。

分析师(特别是买方!)如果想要以后有更广阔的空间不仅需要了解所有影响的因子,更需要掌握每个时段各个因子的权重,想要做好portfolio还是得对因子和市场同时都理解很深刻才行。

这样的话市场的反应速度也会越来越快,以前传统的方式因为结论总是滞后就越来越没有价值,毕竟策略的时效性在金融市场是很重要的。对于个人而言,如果自己没有相应对数据进行处理的能力(这里不单单包括machinelearning),那么相对其他人的edge就会越来越被限制,直到被市场淘汰。

那也许就有人会问,以后是不是金融领域就全部招程序员和datascientist,不需要基金经理了呢?其实也不是,因为金融的核心还是对市场的intuition,处理数据的技术只是作为增加攻击力的武器,如果仅仅单纯依靠武器很容易伤到自己。想舞倚天剑屠龙刀,那也得有张无忌的内功才行对吧~

说实话...我是故意的。

很多时候用中文很难准确表达一个英文的意思,硬翻译过来反而让理解更加困扰,至少不是那么直观。就拿物理来说,本科时候都是翻译过来的中文教材,很多词本来在英文里面是非常易懂的,但翻译成中文之后就完全搞不懂了。金融和统计也一样,我希望尽量保留原汁原味的知识和这个英文单词的语境。

而且英文这个东西的重要性我也不需要再复述,特别是现在竞争压力最大金融和科技行业本身就是发源于英语国家,想要在激烈竞争中不落后与人,从英文学习到一手的信息是很重要的。如果永远都只读别人翻译成中文的东西(还得依仗别人的心情和信达雅的文学程度),无端的增加了自己的学习难度,并且由于获得的信息一直都是滞后的永远都会处于信息上的劣势。

铺垫完背景,接下来就进入正题咯~

(本文分为三部分)

一.金融和统计背景介绍

二.machinelearning各个方法和在trading上的应用

2.1SupervisedLearning:Regressions

2.2Non-ParametricRegression:K-NearestNeighborandLOESS

2.3TreeBasedMethod(RandomForest和ExtremeGradientBoosting)

2.4Classification(LogisticRegression和SupportVectorMachine)

2.5UnsupervisedLearning(PrincipalComponentAnalysis和期权科普)

三.随便结个尾

1.数学

2.数学

3.牢记第一,第二条

大部分时候我们利用统计方法要做的事情就是,利用Xi去预测Y。也就是属于supervised情况(既有X又有Y)。

这里Y一般是涨跌幅或者涨跌的方向,Xi一般就是对Y起影响作用的因子。

最重要的是我们要先弄清楚我们的Xi是什么,我们要预测的Y又是什么。至于Xi是linear还是quadratic,都仅仅是模型处理的细节。

还有另一部分时候,我们想要了解的是Xi与Xi之间的关系,所以用到的就是unsupervised方法(因为这里没有Y)。

我选了几张图介绍当下BigData和金融方面的背景:

具体金融上的大概分类:

金融市场不同sharpratio程度的因子对应的应用方式:

市场上大部分为人们所知的因子都不能成为可以独立运行的策略(也就是图中的notviableasStandAloneSharp,butviableinaportfoliocontextforquants),因为知道的人越多就越不可能成为可以独立运行的策略,但是能加入策略的因子都是有足够大的sharpratio,然后利用machinelearning的方式(也许是unsupervised的主成分分析的方式)组合起来变成一个更strong的策略。

大概有几步,首先需要得到可靠处理好的data(比如直接从交易所拿到的量价数据etc和做数据清洗之类),

第二步从数据中利用machinelearning得到sharprato足够大的的单个因子或者策略Xi,然后把这些因子组合起来形成策略池。

第三步就是给这些选出来的因子分配动态的权重组合成一个portfolio,可以是简单的线性分配weights,也可以是高维甚至多重嵌套(这里更复杂的combine因子可能就不能用简单的线性supervised和unsupervised模型给weights去操作,我猜可能需要其他的方法)。

最后一步就是看这些合成起来的总因子的回测表现,算出来总的sharpratio。

至于给权重的办法,大概的传统办法就是投资组合,MarkowitzMean-VarianceModel和经过改进更为主观也更flexible的Black-Littermanmodel。

还有的就是动态的投资组合方式,具体我也还在努力啃activeportfoliomanagement那本圣经...也许到时候会写写这方面(如果到时我还活着…)。至于machinelearning来进行动态给权重,我也不甚了解…希望有热心的读者可以指导哈!

下面这张图就是不同machinelearning方法处理不同问题的分类:

下图是bigdata应用在金融上的标准化工作流程~

金融想要解决的问题和其对应的machinelearning方法:

我们可以看到右边有很多的统计方法,每一个都得了解背后的机理,所以这真是一个长期的学习过程呢。

接下来在介绍具体的machinelearning方法和应用之前,需要介绍统计领域一个最最重要的概念,那就是bias和variance和trade-off,换句话说也就是overfitting的问题。

我们用统计方法的一般流程是,首先我们将的dataset分成两部分,一部分是trainingsample,是用来确定(train)model的;另一部分是testsample(或者validationsample),是用来看这个model效果的。

在各个统计方法里面,很难找到一个方法是好到完全dominate其他所有的方法,一般都是各有利弊,主要的原因就是因为我们有bias和variance和tradeoff。

直观一点理解的话,variance代表的是第一步选出来的model对于我们用的trainingsample的依赖性。我们自然是希望从trainingsample中选出的模型能很好的fit整个dataset,但比如我们重新做一次实验,将我们的dataset分成新的trainingsample和testsample,如果从trainingsample得到的model是跟第一次得到的model完全不一样,那么就说明这个model并不能很好的描述我们的数据。这个对于trainingsample的选择的依赖性就是variance,我们是希望它越小越好。

对于bias呢,就是我们得到model之后在testsample上面测试这个model的好坏。一般越是复杂的model,在trainingsample上预测的效果越好(因为overfitting),也就是bias越小。但是同时越复杂的model对于trainingsample数据的依赖性就越强,很可能换一个trainingsample就得到完全不一样的model,这样模型会非常不稳定,因为统计上我们是假设所有的数据是从同一个真实的模型f(x)中产生出来的,我们的任务就是从已有的数据中找到最接近这个真实的模型f(x)的模型。

所以我们希望得到bias和variance之间的平衡点,也就是希望bias和variance之和最小(MSE,MeanSquaredError就是用来estimate他们之和的一个指标)。

我们可以看一张bia和variance直观的图:

图中的点是从真实的modelf(x)产生出来的,我们想做的就是用不同flexibility程度的统计方法去fit这些点,看看哪种方法的拟合效果越好。

右图是flexibility(可以看做对于data的依赖性)为横坐标,他们各自的bias和variance之和也就是MSE为纵坐标。红色那条线就是将模型用在testsample得到的testMSE的结果,我们可以看到是一个U型,也正是说明了bias和variance之间是有一个平衡位置使得MSE最小。linearregression模型(黄色的点)的MSE比较大,因为左图中可以明显看到其对这些点的线性回归效果并不好,但是是不是最扭曲的绿线smoothingspline模型就效果最好呢,也不是,我们可以看到红线上绿色的点的MSE大小随着flexibility的程度又翘上去了,反而是蓝色的模型在bias和variance之间取得了平衡。

至于灰线,它是trainingMSE,我们一般不关心,因为trainingset的信息只是用来获得model的,对于衡量model的预测效果不能提供有用的信息。

所以我们可以看到并不是模型越flexible越扭曲越好,而是需要在bias和variance之间进行一个平衡。

下面还有变化了真实的modelf(x)的情况下,同样用这三种model拟合的MSE结果:

上图是f(x)为非线性model的情况。

我们可以看到如果我们的model跟真实的f(x)的形式越match,那么拟合的效果就好越好。

接下来我们看看理论上公式是怎么推导出bias和variance的(这块儿内容可能需要一定统计知识,如果不感兴趣的也可以跳过,但是想要真的理解这两个东西还是得从最本质的公式入手):

从上面的公式里面我们可以看到看到Bias和Variance分别是代表了什么和是怎么算出来的,其实bias和variance都是针对trainingsample取的期望值。

统计从理论上的做法是假设在dataset之下有一个fundamental的真实modelf(x),然后Y是由f(x)加上一个不可消除irreducible的随机量构成,是符合正态分布的一个随机数。然后我们是想要从datasample中找到一个modelf^hat(x)使其尽量靠近真实的那个modelf(x)。

上面写的MSE其实是expectedtestMSE(注意我是用的箭头,不是等号),就是在我们已有的样本基础上得到的我们的modelf^hat(x)和真实modelf(x)之间的平方差的期望值的估计。求期望呢,实际上是对f^hat(x)求期望,因为整个MSE的式子里面唯一的变量就是我们的modelf^hat(x),而f^hat(x)又是从trainingsample得到的,所以我们对f^hat(x)求期望实际上是对trainingsample的信息求期望。

bias呢,就是真实值f(x)和f^hat(x)的expectation之间的差。所以是基于数据求出来的error。如果过拟合了呢,就会使得这里的error会非常小,也就是bias会很小。

variance呢,是我们模型f^hat(x)本身的expectation和它本身之间的差值的期望值,也就是仅仅跟我们的model选取有关,如果过拟合了trainingsample呢,那么我们选取的model就会非常volatile,也就是这里的variance会非常大。

这里的MSE仅仅是针对x0这一个点,真正的MSE其实是应该遍历所有的点,也就是通过无数次随机选取trainingsample得到的distribution,再对这么多trainingsample的distribution求期望得到的值。但在现实中我们不可能做到取无数组trainingset,所以我们只能用sample去estimate整个population的MSE。我们就用testsample中的所有点作为整体MSE的估计值,或者用cross-validation的方式来随机取一定数目的trainingsample和testsample,并且对于这些testsample的testMSE求平均来估计整体的MSE。详细内容可以见《theelementsofstatisticallearning》中的5.5.2和7.3这两节。

并且在实际中因为我们不可能知道产生这些点的真实modelf(x),所以是不可能单独观察bias和variance的,我们能得到的只有他们的和MSE的estimate,也就是那条U型的曲线,从中我们可以找到最低点,也就是bias和variance最平衡的model。

除此了bias和variance的trade-off之外,还有一个trade-off是predictionaccuracy和modelinterpretability。有些复杂的model(比如非参或者deeplearning等等模型)预测起来奇准无比,但是理解起来会不是那么直观,甚至完全不知道内部发生了什么,在应用的时候就会造成困扰,比如别人问你为什么是这个结果的时候我们是说不出个所以然来的,无法令人信服;另一方面,像简单的model比如线性模型就非常好解释是怎么预测的,每一个变量都很直观,但是问题就是很多时候预测效果不好,特别是对非线性的问题。这个也是需要针对实际情况进行取舍。

看到这里是不是已经一脸懵逼了呢~

不要怕!马上就到应用部分了!

每一个方法我都会大概的介绍其数学推导的机理和方向(为了尽量使得每一个方法简洁易懂,所以需要牺牲一定程度的严谨性,希望写的不准确的地方大家见谅),并且加上我自己的理解给出其相应在金融上具体是怎么应用。

首先我们需要知道一些区分统计方法的概念:

一个是parametric和non-parametric,一个是supervised和unsupervised,还有一个是regression和classification,分别是代表了问题的不同的特性或者要求。

parametric和non-parametric的区别是model中有没有参数。

supervised和unsupervised的区别是有没有Y,比如我们只研究Xi之间关系的话就是属于unsupervised。

regression和classification的区别是在有Y的supervised方法下面,Y是定量的(quantitative,比如涨跌幅度)还是定性的(qualitative,比如涨跌方向)。

接下来我们就开始介绍各个不同的统计方法和其应用:

对于supervised方法,我们最重要的就是要弄清楚我们想要predict的是什么,我们有的因子又是什么;也就是分别弄清楚在实际问题里面Y是什么和X是什么。

PenalizedRegressionTechniques:Lasso,Ridge,andElasticNet

对于处理线性的问题,我们可以用ridge还有lasso。

好处是非常易于理解背后的关系,坏处就是对于non-linear的问题fitting效果不好,弱点还有变量Xi数目比较多,或者变量之间有correlation的时候也会效果不好。但是这个是所有regression方法的基础,所以必须掌握。

一般的形式如下:

Xi是变量,是相应变量的系数,是随机的一个不可消除的误差,Y是我们想要预测的目标。

比如一个具体的形式是

这里我们可以看到USEquities和GlobalEquities前面的系数相对其他变量大很多,这就说明了这两个变量对于这个AssetPrice的影响最大,当然USEquities是正面的影响,GlobalEquities是负面的影响。

这里我们就可以发现一个问题,那就是比如像EMgrowth这个变量前面的系数非常小,说明这个因子对于AssetPrice的贡献不大,所以如果依然把这个因子加入model的会就会导致过拟合,因为本来这个因子是不应该在model里面结果我们却放进去了,自然就导致变量更多,model更复杂增加了其对于data的dependence,也就是variance。

当变量比较少的时候我们自然可以手动把这些不需要的因子剔除掉,但是如果变量有成百上千甚至上万的话,人工来选择因子就会非常繁琐,而且还容易造成错误。有没有一种方法可以自动帮我们做这件事情呢?有,就是接下来我们说到的Lasso方法。

然后还有一个方法,就是ridge。唯一不同的地方就在于ridge的penalty函数是系数的平方之和,而不是Lasso里面系数绝对值之和。

但是这里有一个问题,那就是如果有一个因子确实是一个非常强的因子,并且前面系数非常大。如果用Lasso和Ridge的话就会使得其前面的系数减小,那这样的话不是underestimate这个因子的重要性了么?毕竟系数越大的,在这个penalty下面会减小的越多。

对于这个很大系数的主要因子的问题,理论上可以证明出Lasso和Ridge并不会首先将系数大的主要因子系数变为最小,而是首先将不那么重要的因子的系数变小。可以从主观的感觉上面来理解,如果将主要因子的系数降低的话,会造成公式前面那个RSS这一项的值变得很大,这样即使后面penalty会减小,但整体的和不一定会降低,反而可能会升高(毕竟penalty只是一个调节的项,RSS才是想要降低的主体)。但是如果降低的是不那么重要的因子的系数,就会使得前面RSS的值增加不多,但是后面的penalty会降低不少,特别是penalty前面系数a足够大的情况下。所以综合而言,Lasso的作用是把不重要的因子剔除出去(也就是使得其前面的系数变为0)。

Lasso相对于Ridge的优势也正在于可以将主要因子的系数直接降为0,这样也就是一个选因子的model。

关于Lasso和Ridge之间的对比,至于为什么Lasso可以将不重要的因子的系数降为0而Ridge不行,我们可以看下面这个图更加直观:

假设我们只有两个因子X1和X2,他们分别的系数是1和2。然后上面那个椭圆就是前面那个lossfunctionRSS画在1和2的平面上,每一个椭圆代表的是不同的RSS的值,并且椭圆越小的时候RSS越小,也就是我们想要其越小越好。对于Lasso和Ridge,因为前面那一项RSS都是用同一套数据经过同样的leastsquare方法计算出来,所以椭圆的形状对于Lasso和Ridge都是一样的。不一样的仅仅是第二项,也就是阴影的面积。

一方面我们想要这个椭圆越小越好,最好的情况就是直接缩小成中间的点hat。

另一方面,我们又想要阴影部分的面积最小,因为我们所加的penalty一定程度上就代表了阴影的面积。

所以两个方面的平衡下,我们就需要找到这个椭圆和阴影面积的切点,这样可以使得椭圆足够小,这个阴影的面积也足够小。

现在我们知道了切点是我们需要找的点,这个点的坐标是(1,2)。

我们可以看到Lasso的情况是正方形的阴影面积和椭圆相切,由于正方形是有四个突出的顶点,所以这四个顶点更容易和椭圆相切。而这四个顶点的坐标都在X或者Y的坐标轴上,也就是要么1被留下,要么2被留下,其实这就是为什么可以将被去掉的因子的系数变为0(因为切点在坐标轴上)。

而Ridge的情况是,由于阴影面积是一个圆,所以并没有突出的顶点可以更容易跟椭圆相切,故想要正好相切在坐标轴上是非常困难的,需要RSS的形状满足非常极端的条件才行。

所以如果想要选择因子的时候,我们可以利用Lasso的方法来获得足够重要的因子。

从上面这张图我们可以看到Lasso基本上把真实Actual的主要因子都抓住了,并且给予的系数(权重)基本上和真实值一致。而OLS,也就是最基本的leastsquare的方法(仅仅只有Lasso的第一项)会分配权重给全部的因子,这样就造成了overfiting。也可以看到Lasso里面加上的penalty这一项对于筛选重要的因子的还是很有效的。

下面是penalty因子系数的大小(X轴)和得到的每个因子的系数大小(Y轴),

我们可以看到的值从小到大(X轴从右往左看)的时候,右边的Lassomodel会让不同的因子在不同的时期消失。也就是随着的值增大(也就是penalty的程度越来越大),不断有因子的系数被Lasso归0,也就是剩下的因子的重要性越来越大。最后剩下几个影响非常大的因子。

而左边Ridge的只能让这些因子的系数一起变小,最左边值也就是penalty非常大的时候,几乎所有的因子系数都变成非常小,这样显然不是我们想要的结果。

Bayesian和ridge还有lasso的关系:

ridge还有lasso都可以由贝叶斯推导出来,只是需要改变贝叶斯里面prior的distribution的形式,ridge需要在贝叶斯里面把prior改变成laplacian,lasso需要把prior改变成gaussian。

理论上来说,这两种priordistribution的贝叶斯得出的结果应该是和ridge和lasso的结果一致。

这里用贝叶斯导出的原因是贝叶斯不需要复杂的计算公式,仅仅需要的到P(u|data)之后做simulation,可以直接从generate出来的sample里面得到系数beta的均值和方差,而不需要像frequentist那样用公式来求。(具体公式的推导在附图中)

并且贝叶斯的方法当data足够大的时候,prior的distribution其实重要性会越来越小(我自己也胡乱写了传统统计方法frequentist和下面Bayesian的证明)。不过data的size什么才叫做足够大,这是一个问题。

接下来我们介绍一个利用Lasso的例子,

并且我们选取了4个Xi,就是他们各自过去1M,3M,6M还有12M的收益。

这样我们对每一个Y都有4个Xi作为变量。我们想要预测的Y是此种asset第二天的收益。如果是大于0就做多,小于0就做空。

比如我们现在单独看S&P500。

我们利用的dataset是滚动的500个交易日,也就是对于S&P500有500个data值,每个data的值是一个5维空间内的一个点(Y,X1,X2,X3,X4),也就是(S&P500第二天的收益,S&P500当天之前1个月的总收益,过去3个月的总收益,过去6个月的总收益还有过去12个月的总收益)。我们想要做的就是利用一个Lasso模型去fit得到这500个点,使得其对于这500个点fitting的最好,也就是RSS+penalty的和最小。

这样我们就在5维空间内找到了一条线,根据坐标(X1,X2,X3,X4)还有其系数我们就可以预测出Y,也就是在当天(接近)收盘的时候,算出来S&P500当天之前1个月的总收益,过去3个月的总收益,过去6个月的总收益还有过去12个月的总收益,也就是在5维空间里面加入今天这个点,并且因为是rollingwindow,所以将最初始的第一个点(今天之前的第499天)去掉,得到空间中新的500个点,重新获得一个新的Lassomodel,并且根据这个update之后的model去预测第二天的收益。

具体应用中似乎是3个月重新renewal一次model。也就是并不是每天都会加入一个点再去除最旧的一个点,而是在三个月之内用同一套model结合这三个月每天的(X1,X2,X3,X4)去预测第二天的收益。等到了三个月之后,就一次性加入这三个月所有的点,去除掉最旧的相同数目的点,重新进行建模得到一个新的Lassomodel,然后再用这个model结合接下来三个月每天的(X1,X2,X3,X4)来预测第二天的收益,一直rolling下去。

这里需要注意的是(Y,X1,X2,X3,X4)都需要standardize(具体怎么standardize需要弄清楚,后面很多方法都会预先将Xistandardize),因为我们知道跨度不一样其值也会有不同的scale。

但这里是仅仅用了(X1,X2,X3,X4)作为变量,但实际上我们有4个不同的assetY,S&P500,10-yearUST,USdollar(DXY),还有黄金gold,所以可以将这4个Y的(X1,X2,X3,X4)都设置成共用的16个变量(X1,X2,X3,X4,…X16)。然后用这同一套Xi对这四种asset进行regression,每一种asset就都有一个Lassomodel进行预测。

结果譬如下图,

同样我们可以看到其他asset的结果。

对于处理非线性的问题,一个是可以用高阶的linearregression,另一个就是用非参方法KNN之类。

非参方法好处就是如果fundamental的model是非线性,效果会比较好。坏处就是如果model本身是线性的,就容易造成overfit,并且KNN对于outlier的点非常敏感。

这里我们用KNN的方法来择时。(也就是选择历史上类似宏观情况的regime,然后平均一下收益率作为预测值)

具体是这么工作的:

我们有7个类别的indicator,然后用这样一个7-d的vector来表示宏观经济的位置regime(或者说是在7-d空间内的一个点)。

具体怎么构建的这7个indicator可以参照如下slides:

所以这7个indicator就是我们的7个Xi,构成了一个7维空间,并且由于每个月都有这7个indicator的值,所以都可以用这个空间里的一个点表示。

我们想要预测的Y就是20个riskpremia的每一个。

或者可以这么说,每一个月作为一个观察。然后每一个观察包含了这7个Xi和Y(20个riskpremia的每一个)的值。并且我们用Xi的7维空间来区分regime。仅仅是画点上去,而不是像之前的regression一样想要用一条线去fit,这里获取Y的方法是将想要预测点周围的K个点对应的Y取平均值。

我们将过去的10年每个月都可以画在这7-dindicator的空间中,每一个月都可以被这个空间内的一个点所代表其宏观情况。这样当下这个月也可以画在同样一个空间里,找到其最近的K个点。当然K也可以用其他的值,这样就是average一下附近的K个点的每一个riskpremia的return,这样我们可以得到这个点周围附近K个点(也就是历史上类似宏观情况的K个月)这20个riskpremia每一个的平均值,(这个地方距离是standardize之后的距离还是直接用原indicator的scale呢?),这样就找到了历史上最接近现在这个月宏观经济情况的K个月的20个riskpremia每一个的平均值。

根据那个月之后的一个月的20个riskpremia(此时S=20的情况下)的表现情况(如果20个riskpremia是daily的数据,那么就用average来得到一个月每天的平均值,其实也可以直接加起来看每个月的总收益?),并且将其排序,选择其中一部分然后平均分配资金,来决定当下这个月的下个月投在这20个riskpremia上的fundingdistribution。

这里有一个问题就是,因为不能单纯看20个riskpremia的收益大小来选取(不然就全部投给预期收益最高那个riskpremia了)。我猜测可能还需要看组合起来看总体的sharpratio值。所以这样排列下来仅仅只能找到最高收益的那个riskpremia,而不是找到最好的sharpratio。所以需要看这些20个riskpremia的subset的组合情况,得到最好的sharpratio。

但是问题在于,怎么将这些S个riskpremia策略组合在一起得到最好的sharpratio?这个可能就需要看回测的结果了。(但是怎么回测这20个riskpremia所有subset的可能性?)

是不是还涉及到给weight的问题呢?

这里似乎就是直接给予这些不同的riskpremia策略相同的weights,也就是将funding直接均分给不同的策略。但是其实可以用machineleanring来给不同的策略分配不同的weights来改进。

这些细节的问题我也没有一个确定的答案,可能需要问JPM具体做这个策略的人了...

这就是具体的结果。

左边的图的列向量是选择K从0到25,横向量是选择riskpremia的个数。方框中的数值就是sharpratio。从这张图看来,确实是需要对所有的组合进行回测。但这里每一行似乎仅仅区分了riskpremia的个数,而不是每一个单独不一样的riskpremia?(想要弄清楚,可能需要看看JPM的riskpremia是怎么构建的了,应该都是independent,所以并不能单纯以个数来作为loop的条件?)

这里的右图就是单纯给这S个riskpremia(S=20所有都用)平均分配资金,也就是红线。然后就是利用这7个indicator预测的各个riskpremia进行排列组合,选出sharpratio最高的再平均分配资金。

首先介绍treebasedmethod的基础,也就是regressiontree。

给定很多变量Xi,它的原理就是取遍所有Xi和每一个Xi所有的值,找到一个让全局的RSS(ResidualSumofSquares是一个指标,用来描述预测的Y和实际的Y之间的差距的平方和,也就是预测的效果好坏)最小的某一个Xi的某一个值,这里就算是一个internalnode。

这样,Xi的这个值将所有的点分成了两个区域,每一个区域的点所estimate的值就是这整个区域所有点的平均值。

再同样的过程,得到一个让这一步全局RSS最小的Xi的一个值(这里Xi可以跟上一步的Xi是同一个变量)。

同样的过程不断进行下去,一直到某一个条件停止。比如RSS到达某一个值,或者某一个区域的点小于5之后,等等。

记住,这里的RSS是全局的RSS,也就是所有区域的RSS总和,而不仅仅是所分开区域的RSS之和。

同理,这里需要一个penalty函数。因为树越深其实越overfit(可以想象当树深到极致就是每个区内只有一个点),所以给目标函数RSS加上一个additional的alpha*树的深度,使得其总和达到最小。

合适alpha值的选取就需要通过cross-validaiton来得到,同时可以得到的也有tree的深度。这样一个model就选出来了。

regressiontree应用的示意图如下:

regressiontree的好处就是非常容易理解,因为每一个node的Xi取值都一目了然。但是不好的地方就是它对于outliers非常敏感,因为outliers会极大的增加RSS这个指标,所以很容易被影响。

RandomForest:

randomforest的意思就是,在上面的regressiontree的基础上,我们再利用bootstrap来产生数量为B的testdatasets(也就是bagging的model)。对于每一个dataset我们可以利用一个regressiontree去fit。所以对于每一个观察,我们都可以得到B个prediction的值。接着我们就把这些值average一下,就得到了我们最终的estimate。这样的好处就是可以降低variance,因为我们用了很多的sample一起求出的平均值,而不是像decision/regression/classificationtree那样一次性的estimate。

然后randomforest又加了另外一项,也就是限制每一个node可以选取的Xi的数目。比如一共有p个Xi,但是我们可以规定每个node只能randomly选取sqrt(p)的Xi。这样的好处就是为了防止一个factordominates,不然就会导致这B个tree的correlation非常大,即使求平均值也起不到降低variance的作用。

具体我们可以看如下的例子:

我们利用randomforest的model来预测。

首先我们利用bootstrap构造100个testdatasets,然后针对每一个dataset去fit一个regressiontree。并且每一个tree的每个node处,一般每次只能randomly选择sqrt(14)=3factors。但是这里我们用OOB这个方式来判断每个node处可以选择Xi的个数(得到的是14个全部可以用),并且每个tree的深度也是由OOB这个最小值来确定。

接着我们对于每一个股票都有100个prediction的值,然后average,得到我们最终的estimate。

这里的一个问题也是同样,我们是不是需要将股票的收益向右位移一个单位,使得这14个riskfactorsXi所对应的Y是下一个月的收益。毕竟如果放在同一个月,那就不存在预测的问题了,因为都是同时发生,而不是用一个去预测接下来即将发生的另一个。

另一张图就是策略的回测结果,通过对于这1400个股票的预测值进行排序,我们就可以得到每一个quantile(一共分为5个quantiles)的股票basket。

ExtremeGradientBoosting

boosting的原理就是慢慢学习,也就是先给一个不太准确的estimate,然后用真实值减去这个estimate得到residual/error,接着用regressiontree去fit这个剩余的residualerror得到这个residual的estimate,再用上一层residual减去这个estimate得到下一层的residual,然后进行K次(即一共用K个tree去fitK层的residual),实质上是从一层一层的residual里面不断缓慢提取信息不断加到之前的estimate上面,使得最终得到一个总的好fitting。boosting指的是一类方法,而不是一个方法。ExtremeGradientboosting是boosting中一个的方法。

首先我们有8个Xi,也就是8个宏观的factor,

Oil,Gold,Dollar,Bonds;economicsurpriseindex(CESIUSD),10Y-2Yspread,IGcredit(CDXHG)andHYcreditspreads(CDXHY)

然后我们要做的事情就是,用这8个Xi,还有extremegradientboosting的model去预测每一个Yi的表现。

这里extremegradientboostingmodel里面的参数是,5-fold-cross-validation来确定tree的数目为30,也就是经过30次的从residual里面extractinginformation。并且每个regressiontree的深度为7,也就是每个tree被分为了7+1=8个区域。

有了这个extremegradientboostingmodel不断的iterate(30遍,每一遍的tree的深度是7)来不断extract信息给想要估计的那个estimate函数f^hat之后,f^hat确定了下来。在同样给定了这个想要预测的observation的8个Xi的值(也就是这个8维空间内的一个点)之后,就可以经过这个model得到我们想要的预测值Yi。

这里应该是用的每天的涨跌幅(里面有说rebalancedailyatmarketclose)。因为对于同一个Yi来说,比如我们预测energy这个sectorETF的涨跌幅。我们每一天都有这8个macro的factor的一个值,这样一天在这个8维空间上来说就是一个点,252天的话就是有252个点。这样才能开始利用boostingtree来划分区域进行预测。甚至都不一定是daily的数据,可以是更小级别的数据,这样点(信息)也就更多了,model的预测也更加贴近真实的model。然后利用这252个点来建立model,建立之后预测energyETF的涨跌幅。

有一个问题就是,同样我们这里可能需要将energyETF的向右位移一个单位,也就是将第二天的energyETF作为这一天的Yi,这样8个Xi预测出来的结果也是第二天的energyETF的涨跌幅。(但这里还有一个问题就是为什么是位移一个单位,也许这些macrofactor传导给ETF是有不同时滞的,所以每个Xi甚至都需要不同的位移)

然后根据long-short策略,每天我们可以预测出这9个ETF的涨跌幅度,将其排序,做多前三个,做空后三个,形成了一个策略。

除此之外,我感觉还可以用另一种方法。那就不用位移,直接将当天的ETF涨跌幅看做是Yi。这里的一个assumption就是市场是有效的,macrofactor的变化可以马上传导给ETF的价格。这样的话我们就可以通过预测的值,看如果当天实际并没有达到这个涨跌幅(在快收盘的时候检查condition),我们可以进去统计套利,也就是赌其一定会往那个涨跌幅移动。

也可以将其量化变成相差多少个sigma(假设围绕预测值是一个normaldistribution,其mean就是预测的值,width可以取历史上面的error是不是都一样,如果是近似flat可以直接用这个constant作为error,如果不是的话可以继续分析其error的结构),大于两个sigma的时候进去开仓bet会继续往预测的方向走,不一定是同方向,如果涨跌幅走过了2个sigma那就是bet其一定会reversion(后续部分请参考下条)

THE END
1.DeepL博客我们将为你更新我们的想法&创新为DeepL Voice 欢呼:即时语音翻译 终于等到了 DeepL Voice。从在线会议到面对面交流,了解实时、安全的人工智能语音翻译如何为您的业务带来变革。 作者:DeepL Team 2024年9月11日 人工智能通信工具推动零售业增长,实现全球成功 立即通过 DeepL 的《零售业管理指南》,了解如何实现全球业务的飞跃式增长。 https://www.deepl.com/blog
2.论文翻译DeepLearningdeeplearning学术写作翻译【论文翻译】Deep Learning Yann LeCun? Yoshua Bengio? Geoffrey Hinton 深度学习 Yann LeCun? Yoshua Bengio? Geoffrey Hinton Abstract Deep learning allows computational models that are composed of multipleprocessinglayers to learn representations of data with multiple levels of abstraction. These https://blog.csdn.net/diaokui2312/article/details/107746725
3.DeepLearning教程翻译米罗西非常激动地宣告,Stanford 教授 Andrew Ng 的 Deep Learning 教程,于今日,2013年4月8日,全部翻译成中文。这是中国屌丝军团,从2月20日战役打响之日,经过 50 天的团结奋战,取得的全面彻底的胜利。 此次战役的巨大胜利,之所以令人激动,有三方面的原因。 https://www.cnblogs.com/zhehan54/p/7083402.html
4.Bengio授权北京大学张志华老师团队负责翻译的《DeepLearningDeep Learning 中文翻译 就经过3多个月,我们终于完成了翻译草稿。当然这是草稿中的草稿,我们会不断改进,就像梯度下降一样,要迭代好几轮才能找的一个不错的解。 目前的版本是直译版,尽可能地保留原书中的每一个字。 如 Inventors have long dreamed of creating machines that think. This desire dates back tohttp://www.360doc.com/content/16/1222/21/20558639_616920451.shtml
5.[DeeplearningAI笔记]序列模型3.6Bleu得分/机器翻译得分指标即如果机器翻译的长度大于人工翻译输出的长度,BP=1,而其他情况下 BP 的定义会遵从一个式子,从而减小 Bleu 得分的值。 Bleu 得分是一个单一实数评价指标,其在机器翻译和图片描述中应用广泛,用以评价机器生成的语句和实际人工生成的结果是否相近。 参考资料 https://cloud.tencent.com/developer/article/1679650
6.2神经网络与深度学习(NeuralNetworksandDeepLearning)《神经网络与深度学习》 NeuralNetworksandDeepLearning https://nndl.github.io/ 邱锡鹏 xpqiu@ 2020 年3 月7 日 序 很高兴为邱锡鹏教授的《神经网络与深度学习》一书写个序. 近年来由于阿尔法围棋战胜人类顶级高手新闻的轰动效应,让人工智能一 下子进入了寻常百姓家,成为家喻户晓的热词. 阿尔法围棋之所以能取得https://max.book118.com/html/2021/0710/8060137027003120.shtm
7.GitHubexacity/deeplearningbookDeep Learning 中文翻译 在众多网友的帮助和校对下,中文版终于出版了。尽管还有很多问题,但至少90%的内容是可读的,并且是准确的。 我们尽可能地保留了原书Deep Learning中的意思并保留原书的语句。 然而我们水平有限,我们无法消除众多读者的方差。我们仍需要大家的建议和帮助,一起减小翻译的偏差。 https://github.com/exacity/deeplearningbook-chinese/
8.《DeepLearning》中文印前版开放下载,让我们向译者致敬机器之心在众多网友的帮助和校对下,草稿慢慢变成了初稿。尽管还有很多问题,但至少 90% 的内容是可读的,并且是准确的。我们尽可能地保留了原书 Deep Learning 中的意思并保留原书的语句。 然而我们水平有限,我们无法消除众多读者的方差。我们仍需要大家的建议和帮助,一起减小翻译的偏差。 https://www.jiqizhixin.com/article/2647
9.完整的深度学习论文导引https://github.com/songrotek/Deep-Learning-Papers-Reading-Roadmap 深度学习基础及历史 1.0书 [0]深度学习圣经★★★ 本吉奥,Yoshua,Ian J. Goodfellow和Aaron Courville。“深入学习”。麻省理工学院出版社(2015年)。 https://github.com/HFTrader/DeepLearningBook/raw/master/DeepLearningBook.pdf 1.1报告https://www.douban.com/note/632733952/
10.deeplearningai官网,专注于人工智能领域的在线课程学习平台《神经网络与深度学习》(Neural Networks and Deep Learning):由 deeplearning.ai 提供的免费课程,介绍了神经网络和深度学习的基本概念和原理。 《深度学习入门:基于Python的实践》(Deep Learning for Coders):由 fast.ai 提供的课程,着重于以实践为导向的深度学习入门,帮助学习者快速掌握深度学习的实际应用。 https://feizhuke.com/sites/deeplearning-ai.html
11.科学网—综述:自主式水下机器人的路径规划算法Deep Learning Based Hand Gesture Recognition and UAV Flight Controls Bin Hu, Jiacun Wang. http://www.ijac.net/en/article/doi/10.1007/s11633-019-1194-7 https://link.springer.com/article/10.1007/s11633-019-1194-7 中文导读: 美国蒙莫斯大学:基于深度学习的手势识别及无人机控制 https://blog.sciencenet.cn/blog-749317-1240442.html
12.DeepLearning(吴恩达)深度学习概论第一周 神经网络导论(Introduction to Deep Learning) 1.2 什么是神经网络(What ) 由例子引入:房子价格的估计 简单的神经网络:由一个神经元组成,输入x,经过神经元,输出y ReLU函数(Rectified Linear Unit):线性整流函数 ,作为神经元的**函数。 基本的神经网络:通过输入不同的特征(x1,x2,x3,x4),通过神经网络,https://www.pianshen.com/article/44731049011/
13.数据驱动软测量深度学习调研(QingqiangSunandZhiqiangGeA Survey on Deep Learning for Data-driven Soft Sensors (Qingqiang Sun and Zhiqiang Ge, Senior Member, IEEE) 本文是来自浙江大学葛志强教授团队21年的一篇关于深度学习软测量的综述,文章详细总结了当前深度学习在软测量领域的各项工作以及未来的研究热点及展望。 https://www.jianshu.com/p/95f3d67d40f9
14.什么是深度学习(DeepLearning)深度学习(Deep Learning)是机器学习的一个子集,而机器学习是人工智能的一个分支,它使计算机能够从数据中学习并执行通常需要人类智能才能完成的任务。深度学习使用人工神经网络,一种受人脑结构和功能启发的算法,可以从大量数据中学习并进行预测或分类。 深度学习的工作原理 https://www.tuidog.com/8481.html
15.DeepLearningDataSynthesisfor5GChannelEstimationsimParameters = hDeepLearningChanEstSimParameters(); carrier = simParameters.Carrier; pdsch = simParameters.PDSCH; Create a TDL channel model and set channel parameters. To compare different channel responses of the estimators, you can change these parameters later. channel = nrTDLChannel; channelhttps://www.mathworks.com/help/5g/ug/deep-learning-data-synthesis-for-5g-channel-estimation.html
16.哪五本机器学习的免费电子书,最受KDnuggets读者喜爱?雷峰网No.4 《深度学习》(Deep Learning) 该书由 Goodfellow、Bengio 和 Courville 一同合著,很快就要出版,不过在官网上有免费的电子版本。这本书的目标读者是学习机器学习专业的本科生及研究生,或是那些已经开始进军深度学习及人工智能产业的人。如果你是一名缺乏机器学习或统计学背景的软件工程师,但希望快速入门并在工作https://m.leiphone.com/category/ai/zmZZQlszC88HtL7e.html
17.学术长安华山论剑:“深度学习与大数据感知”国际研讨会专家观点对传统的解决方法中的种种问题,刘康老师指出“我们可以看到,基于Deep Learning的技术用分布式的知识表示形式能够有效改善传统符号处理中的语义鸿沟问题,而基于Deep Learning的端到端的知识问答系统能使得复杂的问答过程可学习,同时基于深度学习的文本生成是完成自然问答的有效途径。”至于基于深度学习的知识问答还存在的问题https://see.xidian.edu.cn/html/news/8904.html
18.最强通用棋类AI,AlphaZero强化学习算法解读Recall that systems like DeepBlue would rely on a human-defined “evaluation function”, which would take as an input the board state and output the “value” of the state. Nowadays, it’s extremely easy for DeepLearning models to take as an input an image and classify it as a dog orhttps://www.flyai.com/article/770
19.8个学习AI的网站(免费自学人工智能必备)学吧导航DeepLearningAI网站也是由人工智能和机器学习领域的权威吴恩达教授创建的在线学习平台,该网站提供与深度学习相关的各种课程和资源,深度学习是机器学习的一个子领域,专注于人工神经网络和深度神经网络。课程设计为初学者和有经验的实践者都可以使用,分为入门、中级、高级三个层次,涵盖一系列与深度学习有关的主题,包括神经https://www.xue8nav.com/2090.html
20.时代周刊揭晓全球100位AI人物!多位华人上榜AI领袖吴恩达(DeepLearning.AI创始人) 早在2012年,斯坦福大学教授吴恩达(Andrew Ng)向谷歌领导层提交了一份提案。他认为,谷歌应该利用大量的计算能力,在海量数据上训练神经网络,这是一种受大脑结构启发的人工智能系统。 他认为,这样有可能创造出通用人工智能(AGI)。十年前,这种讨论话题可能会给你贴上怪人的标签。吴恩达表示http://www.bianews.com/news/details?id=163787
21.15个开源的顶级人工智能工具51CTO博客Deeplearning4j是一个 java 虚拟机(JVM)的开源深度学习库。它运行在分布式环境并且集成在 Hadoop 和 Apache Spark 中。这使它可以配置深度神经网络,并且它与 Java、Scala 和 其他 JVM 语言兼容。 这个项目是由一个叫做 Skymind 的商业公司管理的,它为这个项目提供支持、培训和一个企业的发行版。 https://blog.51cto.com/u_16161240/6655120
22.全球AI网站汇总思维导图模板DeepAI DeepAI 提供了一套使用 AI 来增强您的创造力的工具。为天生具有创造力的人类提供的人工智能人民网AIGC-X 传播内容认知全国重点实验室、中国科学技术大学、合肥综合性国家科学中心人工智能研究院该工具在一个易于使用的应用程序中提供自动字幕、字幕翻译、配音、AI画外音、录音和文本生成。 httpshttps://www.processon.com/view/6459dd33b32d8e579cd939cc
23.15款热门的开源人工智能软件控件新闻它的过人之处在于:无论是只有CPU工作,还是单科GPU,或是或多颗GPU,亦或是多台机器配备多颗GPU工作,它的性能都十分优秀。虽然微软主要用它进行语音识别的研究,但它还可以进行机器翻译、图像识别、图像抓取、文本处理、语言识别与语言建模等工作。 3.Deeplearning4jhttps://www.evget.com/article/2016/9/18/24919.html
24.RegressionandClassificationCourse(DeepLearning.AI)Learn the fundamentals of machine learning with Andrew Ng in this updated 3-course Specialization by DeepLearning.AI and Stanford Online. Build and train models using Python, NumPy, and scikit-learn for real-world AI applications. Ideal for beginners.https://www.coursera.org/learn/machine-learning
25.Python实现简单的机器翻译模型希望对初入NLP/DeepLearning的童鞋有所帮助~ 废话不多说,直接进入正题~~~ 相关文件 百度网盘下载链接:https://pan.baidu.com/s/1y3KcMboz_xZJ9Afh5nRkUw 密码: qvhd 参考文献 官方英文教程链接: http://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html https://m.w3cschool.cn/article/7456423.html
26.实践NLP领域的Transformer在机器翻译上的应用更多CV和NLP中的transformer模型(BERT、ERNIE、ViT、DeiT、Swin Transformer等)、深度学习资料,请参考:awesome-DeepLearning 更多NLP应用模型(BERT系列等)请参考:PaddleNLP 2. Transformer 原理解读 Transformer 是论文 Attention Is All You Need 中提出的用以完成机器翻译(Machine Translation)等序列到序列(Seq2Seq)学习https://aistudio.baidu.com/aistudio/projectdetail/2311016