随笔

发布时间:2024-07-06  |   来源: 川总写量化

作者:石川

摘要:我们每个人的能力都有限,也终究会停下脚步。但是如果我们把路铺好,就能够让别人走得更远。


最近看到了北大王熙老师说的一段话:


知识的传授不是为了炫技

而是梳理清楚学科里面重要的问题

问题和问题之间的联系

前人是怎么回答的

我们怎么样更好地回答这些问题

并最终学会问更好的问题


看完后感触颇深。这和我一直写公众号的初衷契合,也和我自己涉猎一个领域时的 approach 一致。例如,我的博士论文的文献综述里,最早的参考文献是上世纪 50 年代的。后来有个老教授看了之后,不无感慨的说“现在很少有人读 old papers 了”。


对于任何一个 topic,我们都需要搞清楚其发展的来龙去脉并清晰的展现出来。更重要的是,这种展现不应是文献按照不同 categories 的罗列(尽管很多 review paper 都是这么写的),而是通过主线厘清问题以及解决方法的演进和迭代、不同方法之间的关联。


就以基于多因子模型的实证资产定价为例。如今最新的文章大部分是在这个框架下通过机器学习算法把大量的 firm characteristics 映射到 factor exposure 之中。然而,当我们试图去理解这种做法的时候,先决条件就是首先明白人们是如何走到这一步的。


这就意味着,我们需要从资产定价理论,例如 SDF、APT/ICAPM 说起:APT/ICAPM 提出了使用多因子模型作为实证研究的框架。然而,无论 APT 还是 ICAPM 都没有告诉人们应该用哪些因子。所以,从这里开始,相关的研究就又划分到两个分支。


其一是通过经济学或者金融学理论来提出因子,例如 Fama-French 和 q-factor model 等(它们确实叱咤学术界二十载),而另一个分支则是继承 APT 的思想,以解构 covariance matrix 的 structure 为目标,通过 PCA 来构造 latent factor。而这方面,随着机器学习的发展又换发了青春。比如,传统的 PCA 只关心 central 二阶矩,而不关心一阶矩(average return),所以学界在 PCA 的基础上提出了 RP-PCA;又比如上述方法都仅仅是通过 return 数据来构造因子,而忽视了其他信息,因此在这个动机的趋势下,Instrumented PCA 被提出,它在 return 基础上纳入了 firm characteristics 的信息,且因为后者是随时间变化的,因此还把多因子模型从静态转向了动态。


再比如,随着近年来对模型复杂度和样本外表现关系的重新认知,学界又提出应该尽可能用更丰富的高维信息以及信息和收益率之间的非线性关系(尽管尚有争议)。在这个 trend 之下,人们又从 linear mapping 转向了 nonlinear mapping(例如 Conditional Autoencoder 模型)等等。


你看,这就解释了我们是怎么从 FF3 慢慢的走到今天的。而当这条主线清晰的被展现在人们面前的时候,我们就能更好的理解新模型被提出的动机,以及每个新模型解决了哪些前人遗留的问题。


说到这,我索性歪个楼,简单介绍一篇我个人很欣赏的文章 Kozak (2019)。这篇文章将 kernel trick 巧妙的用在了 PCA 当中,在不增加计算量的同时实现了 managed portfolio 的维数激增,从而提升了 latent factor model 的样本外表现。


简单来说,我们考虑  个 managed portfolios:


 


并以这些 managed portfolios 为 assets、通过 PCA 来构造 latent factors。把  转置再纵向堆叠起来,得到  维矩阵  :


  


为了简单起见,假设  的每一列(即每个 managed portfolio)已经时序上 demean 了,因此它们的 variance-covariance matrix 可以写成:


  


上面就是一般的 PCA,只不过把个股的超额收益率换成了 managed portfolios 的超额收益率。下面是第一个精妙之处:对于 PCA 而言,对  进行特征分解和对  进行特征分解是等价的(因为都是基于原始数据  的 SVD 分解,所以二者之间可以相互转换)。所以,可以把原始问题转化为对  维的矩阵  来进行PCA:


  


其中


  


式中每个  都是一个  维矩阵,其中第  个元素代表  期股票  和  期股票  所有特征取值的內积。可见,在  中,  包含了所使用的协变量的全部信息。更重要的是,无论 managed portfolios 的维数  多大,其中每个  都是  维。


Ok,下面就是第二个精妙之处(kernel trick)。我们可以把  换成原始协变量的非线性函数,即  ,但这可能是非常高维的,从而大大增加计算量。然而,利用 kernel trick,  的计算可以通过 kernel 函数来完成,即  。而  变为


  


这样,就可以在不增加计算量的前提下,把原始协变量增加到更高的维数和更复杂的非线性关系。实证结果显示,以此为前提构造的 latent factors 能够 span 出样本外更好的 SDF。


Beautiful.


老实说,我个人非常喜欢这种 style 的论文,就是它有足够的经济学动机,且 technique 用的恰到好处(而不是无脑模型的堆砌;我不是很理解连渐近性质都没搞清楚的时候非要使用复杂神经网络的做法)。


不过有意思的是,这篇文章到今天还是个 working paper。也许 Kozak(或者学术界?)认为它的 contribution 有限?另外,我自己试过这个方法,但是它的实施上确实还有一些坑。感兴趣的小伙伴请仔细阅读原文。


Sorry! 我 detour 的有点远。让我在回到本文的主题:听王老师的话有感。我希望公众号能一直不忘初心,脚踏实地。毕竟,我们每个人的能力都有限,也终究会停下脚步。但是如果我们把路铺好,就能够让别人走得更远。



参考文献

Kozak, S. (2019). Kernel trick for the cross-section. Working paper.



免责声明:入市有风险,投资需谨慎。在任何情况下,本文的内容、信息及数据或所表述的意见并不构成对任何人的投资建议。在任何情况下,本文作者及所属机构不对任何人因使用本文的任何内容所引致的任何损失负任何责任。除特别说明外,文中图表均直接或间接来自于相应论文,仅为介绍之用,版权归原作者和期刊所有。