【研报分享】华泰证券-人工智能选股之朴素贝叶斯模型

人工智能
研报分享
华泰证券
朴素贝叶斯模型
标签: #<Tag:0x00007faff7c9cdc8> #<Tag:0x00007faff7c9cc88> #<Tag:0x00007faff7c9cb48> #<Tag:0x00007faff7c9ca08>

#1

摘要:

本报告对朴素贝叶斯模型及线性判别分析、二次判别分析进行系统测试

“生成模型”是机器学习中监督学习方法的一类。与“判别模型”学习决 策函数和条件概率不同,生成模型主要学习的是联合概率分布𝑃(𝑋,𝑌)。本 文中,我们从朴素贝叶斯算法入手,分析比较了几种常见的生成模型(包 括线性判别分析和二次判别分析)应用于多因子选股的异同,希望对本领 域的投资者产生有实用意义的参考价值。

朴素贝叶斯模型构建细节:月频滚动训练,结合基于时间序列的交叉验证

朴素贝叶斯模型的构建包括特征和标签提取、特征预处理、训练集合成和 滚动训练等步骤。我们的模型设置为月频换仓,在每个月月底重新训练并 交叉验证一次。我们采用了一种基于时间序列的交叉验证方法,其核心思 想在于,交叉验证集中的样本在时间序列上始终位于训练集样本之后,验 证时不会用到未来信息。交叉验证结果显示,训练期越长、模型预测效果 越好。最终在每个月底可以产生对全部个股下期上涨概率的预测值,然后 根据正确率、AUC 等指标以及策略回测结果对模型进行评价。

朴素贝叶斯在指数成份内选股效果较好,线性判别分析全 A选股效果较好

对于沪深 300 成份股内选股的行业中性策略(每个行业选 5 只个股),朴 素贝叶斯、线性判别分析和二次判别分析的年化超额收益率分别为 7.69%、 7.89%、6.12%,信息比率为 1.84、1.77、1.50。对于中证 500 成份股内 选股的行业中性策略,三种方法年化超额收益率分别为 9.64%、8.29%、 8.13%,信息比率为 2.14、2.01、1.98。对于全 A 选股的行业中性策略, 三种方法相对于中证500的年化超额收益率分别为18.9%、22.2%、20.1%, 信息比率为 3.00、3.49、3.38。总体而言,朴素贝叶斯在沪深 300 和中证 500 成份内选股表现较优,线性判别分析全 A 选股表现较好。

线性判别分析法的分类效果最佳,其在某种意义下等价于线性回归

经过对比,我们发现线性判别分析法的测试集正确率、AUC 普遍优于其它 算法。通过简单的计算,我们发现股票的特征因子之间存在着相关性,且 对于不同类别的股票这种相关性几乎一致,线性判别分析的假设最符合实 际情况。在二分类问题中,线性判别分析在某种意义上等价于线性回归, 所以这进一步证明了线性回归在多因子选股体系中的优异性。同时,我们 发现虽然高斯朴素贝叶斯的假设在实践中不合理,但其依旧表现出了良好 的分类效果,并且是稳健的,常见的改进方法对结果影响并不大。

风险提示:通过朴素贝叶斯、LDA、QDA 模型构建选股策略是历史经验的总结,存在失效的可能。

本文研究导读:

在华泰人工智能选股系列的第三篇报告中,我们采用固定训练集的方法,系统地测试了包 括线性核、高斯核、多项式核、Sigmoid 核在内的各种核支持向量机模型。支持向量机模 型需要通过网格搜索进行参数寻优,因此计算量比较大。而本篇报告中我们将要介绍的朴 素贝叶斯模型思想相对简洁,没有参数需要调整,计算过程比较高效,它与支持向量机都 是机器学习领域中比较流行的模型。本篇报告我们将高斯朴素贝叶斯模型以及由此衍生的 线性判别分析、二次判别分析模型应用于多因子选股,主要关注如下几方面的问题:

  1. 首先是朴素贝叶斯模型假设的问题。朴素贝叶斯模型被质疑较多的一点就是特征之间 相互独立的假设,现实中,股票的各个特征往往有较高的相关性,并不满足假设。那 我们能不能通过一些手段缓解朴素贝叶斯模型假设带来的估计缺陷?在不符合假设的 情况下,朴素贝叶斯算法分类效果究竟如何?

  2. 其次是方法比较的问题。通过放宽高斯朴素贝叶斯模型的假设,我们可以得到线性判 别分析和二次判别分析模型,本文对这两种方法也进行了研究并比较了三种方法的效 果。究竟哪种方法的假设更符合实际?效果更好?应该通过什么指标进行比较?

  3. 最后是组合构建的问题。在衡量过不同模型的表现之后,应如何利用模型的预测结果 构建策略组合进行回测?各模型在沪深 300、中证 500 和全部 A 股票池内选股效果的 异同是什么? 我们将围绕以上问题进行系统性的测试,希望为读者提供一些扎实的证据,并寻找到有效 的分类方法,能够对本领域的投资者产生参考价值。

朴素贝叶斯模型及其拓展

早在 20 世纪 50 年代,朴素贝叶斯模型(Navïe Bayes)就开始被广泛地研究,并在文本 分类领域得到了大量的应用,比如利用词频作为特征来识别垃圾文件,对新闻进行分类等 等。朴素贝叶斯的思想十分简单,当特征的维度较高时,它 表现出了非常高效的分类效果。 下面我们将对朴素贝叶斯模型以及由此拓展而成的线性判别分析(Linear Discriminant Analysis)、二次判别分析(Quadratic Discriminant Analysis)进行详细介绍。

朴素贝叶斯模型介绍

贝叶斯公式的思想

对于一个分类的问题,我们首先要明确的是:问题是什么?问题是我们得到了一组关于事 物特征的描述,但却见不到事物本身,我们需要利用过去的经验去推测,拥有这些特征的 事物最可能是什么。朴素贝叶斯算法就是利用了贝叶斯公式,在给定事物特征的条件下对 其进行分类的一种算法。

经典的贝叶斯公式如下:

image

𝑃(𝑌|𝑋)是一个条件概率(Conditional Probability),是指在事件X已经发生的条件下,事件 Y的发生概率。它可以由两个事件独立发生的概率𝑃(𝑋)、𝑃(𝑌)和条件概率𝑃(𝑋|𝑌)按上述公 式计算得出。上文所述的事物特征是公式里的X,而我们的目标就是根据X去推测Y所属的 分类。因为Y的类别有很多种可能,所以我们的猜测并不唯一。在给定一个被遮住的动物 拥有四条腿、两个角的条件下,我们既可以猜测它是山羊,也可以猜测它是藏羚羊(当然 也有别的动物品种,这里简化了)。但幸运的是,我们可以利用过去的经验赋予这些猜测 不同的权重,在这个例子里,根据生活经验我们知道这个动物是山羊的概率要远大于藏羚 羊。贝叶斯算法的原则就是:对于给定条件X,我们将Y划分至类别𝑦,𝑦满足𝑦 = 𝑎𝑟𝑔𝑚𝑎𝑥{𝑃(𝑦1|𝑋),𝑃(𝑦2|𝑋)}…𝑃(𝑦𝑛|𝑋)},即选取事件发生可能性最大的类别作为划分结果。

𝑃(𝑌|𝑋)也被称为后验概率(Posterior),那么,我们要怎样计算𝑃(𝑌|𝑋)从而对当前情况完 成分类呢?利用贝叶斯公式我们可以把概率拆分成三部分。对于不同的Y,𝑃(𝑋)的概率是 相同的,因为X单独发生的概率与Y无关。因此,分类问题中我们只需要比较𝑃(𝑋|𝑌) ∗𝑃(𝑌) 的大小而不需要真正计算出准确的概率。我们把𝑃(𝑌)称为先验概率(Prior),即在获得证 据之前推断的概率。通常,我们可以用个人的专业知识预先设定一个主观的先验概率,但 在给定历史数据的情况下,我们也可以简单通过历史数据计算出客观先验概率。比如在之 前的例子中,我们既可以简单认为藏羚羊数量:山羊数量等于 1:10000,即𝑃(𝑌 = 藏羚羊 ):𝑃(𝑌 = 山羊) = 1:10000,也可以花费人力去真实统计世界上两种羊的数量之比来得到准确的先验概率。

“朴素”的假设

朴素贝叶斯之所以“朴素”是因为其把问题简单化了:假设不同特征之间相互独立。因此对 于最后一项 𝑃(𝑋|𝑌),我们可以拆解成P(𝑥1|𝑌)∙ 𝑃(𝑥1|𝑌) ∙…∙𝑃(𝑥𝑑|𝑌)来计算,这样大大降低 了计算概率需要估计的参数数量和估计难度,而且对于多分类问题复杂度不会有很大上升。 朴素的假设自然也会有一些代价,很多时候这样的假设会与问题不符,从而影响分类的准 确性:比如拥有眼睑和拥有眼睛这两个特征之间明显会存在相关性。

朴素贝叶斯在多因子选股中的应用

在对股票进行分类时,为了简化问题,我们先假设只使用过去一年是否分红(分红为 1, 不分红为 0)这一特征进行判断。首先我们把历史数据中的股票分成两类,第一类股票未 来表现好,第二类表现不好。我们可以计算出第一类股票 80%在过去一年进行了分红,第 二类则为 20%。当我们得知一个公司刚刚在过去一年进行了分红,那么我们可以简单认为 公司股票未来表现好和表现不好的概率之比为 4:1,即应被归为第一类。

概括来说,我们有数据集 (𝑥𝑖 (𝑐),𝑦(𝑐)),i = 1,…,d代表的是特征个数,c = 1,…,n代表的是样本个数。此外,k = 1,…,m代表的是股票的类别。通常而言,股票的各个特征(即因子 值)是连续分布的,形态互异,存在一定的偏度(Skewness), 不满足常见的概率分布。 但是,朴素贝叶斯算法的核心是概率的次序而不是准确的概率值,这种估计的偏差在决策 边界上不会产生很大的影响,所以我们可以简单地假设对于𝑦 = 𝑘类的股票,其特征𝒙服从 一个d维联合高斯(正态)分布,即:

image

此外我们也尝试了利用排序信息将特征正态化处理的方法和利用核密度估计(Kernel Density Estimate)来计算概率密度的方法,但效果都不如简单假设正态分布。

我们的目的是计算𝑃(𝑌 = 𝑦|𝑋1 = 𝑥1,𝑋2 = 𝑥2,…𝑋𝑑 = 𝑥𝑑),其中Y和X代表的是所有类别和特 征的集合,𝑦和𝑥代表的是具体的类别和特征。根据贝叶斯公式,有:

image

我们可以利用样本中类别𝑦的数量占样本总数的比值来估计𝑃(𝑌 = 𝑦),最后我们只需要估 计∏ 𝑃(𝑋𝑖 = 𝑥𝑖|𝑌 = 𝑦) 𝑑 𝑖=1 。朴素贝叶斯假设了对于不同的类别Y,特征分布的参数是不同的。 根据极大似然估计法,我们可以得到各个类别特征的参数估计值。

image

在实际估计时我们给方差统一加上了一个极小量,以避免估计过程中的数值计算错误。利 用样本估计的参数,我们可以计算出拥有特征𝒙的股票属于不同类别的对数概率。最后, 我们把每一类的概率标准化,选择概率最大的类作为股票的分类。朴素贝叶斯法计算出来 的概率,本身的实际意义并不多,更为有用的是大小的次序。图 2 是利用朴素贝叶斯法对 模拟数据的分类结果,三种颜色的数据点是模拟产生的三个独立正态分布的数据,三种颜 色代表的区域是利用朴素贝叶斯法对数据点拟合的分类结果。

image

特征的挑选方法

在多因子模型中,股票的特征并不是相互独立的,部分特征之间存在着较高的相关性,比 如净利润和扣除非经常损益后净利润。因为特征独立的假设,两个高度相关的特征在模型 中会被单独引入两次,这样大大提高了这一特征在模型中的重要性,导致模型估计不准确。 对此,我们有三种处理方法: 1. 不做任何处理,选用所有特征。根据 Zhang(2004)的研究,即使特征之间存在着 高度的相关性,其相关性也可能相互抵消从而造成较小的影响。 2. 挑选部分有效的特征,弃掉效果偏弱的特征,缓解特征之间的相关性。 3. 放弃特征之间相互独立的假设,利用历史数据估计特征协方差矩阵𝛴。

接下来我们将对 2 进行分析,之后的部分我们将对 3 进行仔细分析。

序列向前与序列向后法

序列向前法(Langley and Sage,1994)是一种贪心算法,这种算法从空特征集开始,搜 索一个使得分类准确率增加最多的特征,将其加入特征集,然后在剩下的特征中重复搜索 过程,直到正确率没有因为新增加的特征而减少。与序列向前法对应的还有一种序列向后 法(Kittler,1986),即从全特征开始,每次移除使得正确率下降最多的特征,直到特征的 移除对正确率没有明显的影响。当特征的数量较多时,这两种算法都需要大量的时间去搜 索最优解。

主成分分析(PCA)

PCA 经过线性变换,可以把原始数据变换成一组各维度线性无关的表示,因此可以很好地 符合特征之间相互独立的假设。具体而言,我们每期利用训练集的数据对特征进行 PCA 处理,选择包含信息最多的几个特征向量(一般取 15 个左右),利用结果对待分类数据 的特征X进行相同的处理。

Lasso 回归

Lasso 回归通过引入损失函数,增加稀疏约束,从而可以挑选出相对更为有效的特征,去 掉无用的特征,减少特征数量。具体而言,我们每期对训练集的数据进行 Lasso 回归,固 定惩罚系数,挑选出那些回归后系数不为 0 的特征作为朴素贝叶斯模型的输入特征。

对于一个联合正态分布,当我们的样本量相对特征数量足够大时,要估计其协方差矩阵并 不难。接下来我们选择“正视”特征的相关性问题,使用线性判别分析法和二次判别分析 法来分类。

线性判别分析法(LDA)介绍

线性判别分析法(以下简称 LDA)是高斯朴素贝叶斯法的一个延伸,在其他条件不变的情 况下,LDA 放弃了特征相互独立的假设,转而利用不同类别的协方差矩阵之和来估计特征 之间的相关性。朴素贝叶斯法对不同类别的Y估计了不同的𝛴1,𝛴2 …𝛴𝑘,而 LDA 则假设对 于不同类别的Y,特征的相关性没有明显的差异。比如在男性和女性中,经常跑马拉松和 长跑耐力强这两个特征的相关性基本是一致的。对此我们可以简单地利用全样本数据估计 统一的协方差矩阵𝛴,进而计算联合正态分布的概率。

image

在计算概率时,我们对贝叶斯公式中的后验概率𝑃(𝑦 = 𝑘|𝒙):

image

其中𝜋𝑘 = 𝑃(𝑦 = 𝑘),我们对分式约分后分子取对数,即可得到判别方程:

image

在计算了一组特征对应于𝑘种分类的𝑘个𝛿𝑘(𝒙)之后,我们可以通过:

image

得到最终的概率。因为𝛿𝑘(𝒙)是关于𝒙的一次函数,所以这种方法也是一种线性分类法。值 得一提的是,对于二分类问题,如果两种类别的样本数相等,线性判别分析计算出的排序 结果等价于线性回归(见附录)。

通常而言,协方差矩阵的估计很容易因为存在一些极值而产生偏差,所以我们用了 Ledoit-Wolf 法把协方差矩阵的估计值进行了缩减。图 4 中,我们可以看出经过缩减估计 的 LDA 明显优于普通的 LDA。

image

二次判别分析法(QDA)介绍

不同类别的事物常常有着不同的特征分布。在男性和女性中,去超市购物时购买啤酒和购 买纸尿布的相关性就不同(后者较低),此时 LDA 的假设就会变得不合理。作为改进, 二次判别分析法(以下简称 QDA)假设了类别的不同会导致事物特征的相关性不同。与 朴素贝叶斯相比,QDA 在估计每个类别协方差矩阵时增加了不同特征之间的协方差,而 不是简单设为 0。对不同的Y,QDA 为每个类估计了不同的𝛴1,𝛴2…𝛴𝑘和𝝁1,𝝁2 …𝝁𝑘。

image

与 LDA 类似,我们可以得到如下的判别方程:

image

来估计对应的概率。因为𝛴不同导致𝑃(𝑦 = 𝑘|𝒙)的表达式上下不能约分,QDA 的判别方程 是关于𝒙的二次方程,分类边界是曲线。和线性判别分析类似,在实际计算中我们也对协 方差矩阵的估计进行了缩减处理(下文提到的 LDA、QDA 算法的结果都是经过缩减处理 之后的结果)。QDA 虽然估计了较多的参数,但并不一定比 LDA 的效果好,因为数据减 少参数估计的精确度也下降了。图 6 是 LDA 和 QDA 分类效果的对比,其中星星代表的是 分类错误的样本。我们可以看出当随机产生的两类样本拥有相同的协方差矩阵时,两者效 果几乎一致;当两类样本的协方差矩阵不相同时,QDA 的表现明显优于 LDA。

image

模型测试流程

如图表 7 所示,朴素贝叶斯及 LDA、QDA 模型的构建方法包含下列步骤:
1. 数据获取:
a) 股票池:全 A 股,剔除 ST 股票,剔除每个截面期下一交易日停牌的股票,剔除 上市 3 个月以内的股票,每只股票视作一个样本。 b) 滚动回测区间:2007-01-31 至 2017-07-31。
c) 数据区间:1998-04-31 至 2017-07-31。
2. 特征和标签提取:每个自然月的最后一个交易日,计算之前报告里的 70 个因子暴露 度,作为样本的原始特征;计算下一整个自然月的个股超额收益(以沪深 300 指数为 基准,若没有沪深 300 指数,则选择全部股票的平均收益为基准) ,作为样本的标签。 因子池如图表 8 所示。
3. 特征预处理: a) 中位数去极值:设第 T 期某因子在所有个股上的暴露度序列为𝐷𝑖,𝐷𝑀为该序列 中位数,𝐷𝑀1为序列|𝐷𝑖 −𝐷𝑀|的中位数,则将序列𝐷𝑖中所有大于𝐷𝑀 +5𝐷𝑀1的数 重设为𝐷𝑀 +5𝐷𝑀1,将序列𝐷𝑖中所有小于𝐷𝑀 −5𝐷𝑀1的数重设为𝐷𝑀 −5𝐷𝑀1; b) 缺失值处理:得到新的因子暴露度序列后,将因子暴露度缺失的地方设为中信一 级行业相同个股的平均值。 c) 行业市值中性化:将填充缺失值后的因子暴露度对行业哑变量和取对数后的市值 做线性回归,取残差作为新的因子暴露度。 d) 标准化:将中性化处理后的因子暴露度序列减去其现在的均值、除以其标准差, 得到一个新的近似服从N(0,1)分布的序列。
4. 滚动训练集和交叉验证集合成:以 T 月月末为例,从第 T-n(n = 6,12,18,24,36,48,60 尽可能长)期至第 T-1 期的特征和标签作为训练样本。在每个月末截面期,选取下月 收益排名前 30%的股票作为正例(y = 1),后 30%的股票作为负例(y = -1)。将 n 个 月的
样本合并成为训练集。交叉验证集为全部的训练集,详见下文。 5. 样本内训练:使用朴素贝叶斯模型、LDA 模型、QDA 模型对训练集进行训练。同时, 我们采用线性回归模型作为统一对照组。 6. 交叉验证比较模型:使用交叉验证的结果比较模型并进行滚动期的选择。
7. 样本外回测:以 T 月月末截面期所有样本预处理后的特征作为模型的输入,得到每个 样本的预测概率,将预测概率视作合成后的因子,进行单因子分层回测。回测方法和 之前的单因子测试报告相同,具体步骤参考下一小节。
8. 模型评价:我们以分层回测的结果作为模型评价指标。我们还将给出测试集的正确率、 AUC 等衡量模型性能的指标。


模型测试结果与方法比较

时间序列数据的交叉验证

传统机器学习的交叉验证是在样本中随机选取一定比例作为训练集,余下的样本作为交叉 验证集。当样本是时间序列数据时(例如股票数据),数据前后次序之间的关联会对结果 产生一定的影响。如果某个月的数据一部分被分进了训练集,另一部分被分进了验证集, 则会出现用同月的规律预测同月结果的“作弊”行为。因此,本文采用了一种基于时间序 列的交叉验证方法,具体算法如图 9 所示:

image

简单来说,如果样本的长度为 4 个月,我们就先将第 1 个月的数据作为训练集,第 2 个月 的数据作为验证集,进行测试。然后将第 1、2 个月的数据作为训练集,第 3 个月为验证 集,以此类推,最后以 1、2、3 个月的数据作为训练集,第 4 个月作为验证集,再将所有 的指标结果取平均数。图 10 是两种交叉验证的方法应用于三种算法的效果比较,我们可 以发现,对于时间序列的交叉验证方法,随着滚动回测的样本月数增加,分类正确率也逐 渐增加,这与我们的直觉——数据越多模型越准确相符。对于普通的交叉验证方法,结果 则出现了逆转,不符合现实规律。因此本文在对方法进行比较时,采用的是基于时间序列 的交叉验证方法。

训练期的选择

通常而言,对于朴素贝叶斯及其衍生的算法,用作训练的数据越多,训练效果越好。为了 验证这个假设,本文研究了滚动回测中训练期长度对分类结果的影响,分别选取长度为 6、 12…48、60 个月进行比较。结果如图表 11 所示:随着训练期的长度增加,分类的正确率、 AUC(AUC 的具体定义请参考华泰金工研报《人工智能选股之支持向量机模型》)也缓慢 得到了增加,并且这种变化非常稳定,在三种模型中都得到了印证。

在最终回测过程中,本文滚动回测训练期选择每期能获得的最大数据,即对于 T+1 期,训 练期的长度为第 1 至 T 期,如图 12 所示。因为股票的特征之间存在明显的相关性,而且 不同类别的股票协方差矩阵基本一致,所以 LDA 模型的假设最符合实际的情况。从表中 我们也可以发现,LDA 的分类效果要明显优于朴素贝叶斯和 QDA。QDA 在数据量小时表 现较差,但随着数据量的增加,QDA 的表现逐渐“赶上”朴素贝叶斯,这也与算法的逻 辑相符:QDA 需要估计的参数最多((𝑑(𝑑 +1)/2+𝑑) ∗𝑚),所以对数据量的要求最大。

image

朴素贝叶斯因子的选择

在介绍部分,本文讨论了缓解朴素贝叶斯算法独立性假设的几种方法,接下来,我们对这 些算法进行了比较,主要采用的比较标准是交叉验证集和样本外的分类正确率和 AUC。 从图表 13 中我们可以看到,Lasso、全因子、序列向后这三种方法的表现几乎一致,PCA、 序列向前法则明显劣于其余的几种方法。值得一提的是,序列向前法和序列向后法很容易 陷入局部最优的情况,从而效果不佳。对于序列向前法,每次挑选出来的因子个数大致在 20 个以内,对于序列向后法,每次剔除的因子个数在 5 个以内。不同的挑选方法虽然缓 解了独立性的假设,但却损失了信息,所以分类结果并没有明显的提升。因此,在本文的 回测过程中,对于朴素贝叶斯算法我们简单选择了所有特征,不进行挑选。

模型正确率与 AUC 分析

下图展示了朴素贝叶斯、LDA、QDA 和第二篇广义线性模型中的线性回归模型(滚动训 练窗口期同本文:即使用所能利用的最大数据集)每一期测试集的 AUC 随时间的变化情 况。四种模型测试集平均 AUC 分别为 0.588,0.580,0.582,0.584。从图表 14~16 中可 以看出,三种方法的 AUC 波动方向基本与线性回归一致,因为 LDA 模型与线性回归十分 类似,所以两者的 AUC 变化接近重合。朴素贝叶斯和 QDA 的 AUC 则略低于线性模型, 且波动较大,总体而言不如 LDA。

image

模型预测值与各因子相关情况

我们在每个截面上,将朴素贝叶斯模型对全部个股下期涨跌的预测值与因子池中各个因子 值之间计算 Spearman 相关系数,查看模型预测值与各个因子值之间“真实的”相关情况, 如。仿照华泰单因子测试系列报告中的思路,分层回测模型构建方法如下:

分层模型回测

依照因子值对股票进行打分,构建投资组合回测,是最直观的衡量指标优劣的手段。一般 测试模型构建方法如下:

  1. 股票池:全 A 股,剔除 ST 股票,剔除每个截面期下一交易日停牌的股票,剔除上市 3 个月以内的股票。
  2. 回溯区间:2007-01-31 至 2017-07-31。
  3. 换仓期:在每个自然月最后一个交易日核算因子值,在下个自然月首个交易日按当日 收盘价换仓。
  4. 数据处理方法:将朴素贝叶斯的概率视作单因子,因子值为空的股票不参与分层。
  5. 分层方法:在每个一级行业内部对所有个股按因子大小进行排序,每个行业内均分成 N 个分层组合。如图表 18 所示,黄色方块代表各行业内个股初始权重,可以相等也 可以不等(我们直接取相等权重进行测试),分层具体操作方法为 N 等分行业内个股 权重累加值,例如图示行业1中, 5只个股初始权重相等(不妨设每只个股权重为0.2), 假设我们欲分成 3 层,则分层组合 1 在权重累加值 1/3 处截断,即分层组合 1 包含个 股 1 和个股 2,它们的权重配比为 0.2:(1/3-0.2)=3:2,同样推理,分层组合 2 包含个 股 2、3、4,配比为(0.4-1/3):0.2:(2/3-0.6)=1:3:1,分层组合 4 包含个股 4、5,配比 为 2:3。以上方法是用来计算各个一级行业内部个股权重配比的,行业间权重配比与 基准组合(我们使用沪深 300)相同,也即行业中性。
  6. 评价方法:回测年化收益率、夏普比率、信息比率、最大回撤、胜率等。

image

这里我们将展示朴素贝叶斯模型的分层测试结果。

下图是分五层组合回测绩效分析表(20070131~20170731)。其中组合 1~组合 5 为按该 因子从小到大排序构造的行业中性的分层组合。基准组合为行业中性的等权组合,具体来 说就是将组合 1~组合 5 合并,一级行业内部个股等权配置,行业权重按当期沪深 300 行 业权重配置。多空组合是在假设所有个股可以卖空的基础上,每月调仓时买入组合 1,卖 空组合 5。回测模型在每个自然月最后一个交易日核算因子值,在下个自然月首个交易日 按当日收盘价调仓。

下面四个图依次为:

  1. 分五层组合回测净值图。按前面说明的回测方法计算组合 1~组合 5、基准组合的 净值,与沪深 300、中证 500 净值对比作图。
  2. 分五层组合回测,用组合 1~组合 5 的净值除以基准组合净值的示意图。可以更 清晰地展示各层组合在不同时期的效果。
  3. 组合 1 相对沪深 300 月超额收益分布直方图。该直方图以[-0.5%,0.5%]为中心区 间,向正负无穷方向保持组距为 1%延伸,在正负两个方向上均延伸到最后一个频 数不为零的组为止(即维持组距一致,组数是根据样本情况自适应调整的)。
  4. 分五层时的多空组合收益图。再重复一下,多空组合是买入组合 1、卖空组合 5 (月度调仓)的一个资产组合。多空组合收益率是由组合 1 的净值除以组合 5 的 净值近似核算的。

下图为分十层组合回测时,各层组合在不同年份间的收益率及排名表。每个单元格的内容 为在指定年度某层组合的收益率(均为整年收益率),以及某层组合在全部十层组合中的 收益率排名。最后一列是分层组合在 2007~2017 的排名的均值。

下图是不同市值区间分层组合回测绩效指标对比图(分十层)。我们将全市场股票按市值 排名前 1/3,1/3~2/3,后 1/3 分成三个大类,在这三类股票中分别进行分层测试,基准组 合构成方法同前面所述(注意每个大类对应的基准组合并不相同)。

下图是不同行业间分层组合回测绩效分析表(分五层)。我们在不同一级行业内部都做了 分层测试,基准组合为各行业内该因子非空值的个股等权组合(注意每个行业对应的基准 组合并不相同)。

构建策略组合及回测分析

我们比较了朴素贝叶斯、LDA、QDA 三种不同的算法。其中朴素贝叶斯选用的是全部特 征,LDA 和 QDA 在估计协方差矩阵时进行了缩减处理。我们每期的样本是所能获得的最 大数据集,同时以人工智能系列报告二中的线性回归模型(滚动训练窗口期同本文:即使 用所能利用的最大数据集)作为统一对照组。

首先,我们构建了沪深 300 和中证 500 成份内选股策略并进行回测,各项指标详见图表 27。选股策略分为两类:一类是行业中性策略,策略组合的行业配置与基准(沪深 300、 中证 500)保持一致,各一级行业中选 N 个股票等权配置(N=2,5,10,15,20);另一类是 个股等权策略,直接在票池内不区分行业选 N 个股票等权配置(N=20,50,100,150,200), 比较基准取为 300 等权、500 等权指数。两类策略均为月频调仓,个股入选顺序为它们在 三种模型中的当月的预测概率顺序。

对于沪深300成份股内选股的行业中性策略,LDA和朴素贝叶斯在多项指标上均优于QDA 和线性回归。对于不约束行业中性的等权配置策略,朴素贝叶斯模型出现了较大的回撤, LDA 模型表现最佳。对于中证 500 成份股内选股的行业中性和个股等权策略,LDA 和朴 素贝叶斯表现相似,在各项指标上均优于 QDA 和线性回归。

图表28展示了全A选股策略的回测结果。对于全A选股的行业中性策略和个股等权策略, LDA 和线性回归模型在各项指标上总体而言优于 QDA 和朴素贝叶斯,QDA 则略优于朴素 贝叶斯。

总体来看,在全 A 选股中,LDA 模型表现最佳;在沪深 300 和中证 500 选股中,朴素贝 叶斯模型和 LDA 模型有不错的回测表现。



朴素贝叶斯模型选股策略详细分析

下面我们对策略组合的详细回测情况加以展示。因为篇幅有限,我们根据上面的比较测试 结果,选择朴素贝叶斯模型选股策略。图 29 中,我们分别展示了沪深 300 成份股内选股 (基准:沪深 300)、中证 500 成份股内选股(基准:中证 500)、全 A 选股(基准:中证 500)策略的各种详细评价指标。

观察下面的图表可知,对于朴素贝叶斯模型(NB)沪深 300 成份股内选股行业中性策略 来说,随着每个行业入选个股数目增多,年化收益率在下降,夏普比率、信息比率先升后 降,最优每个行业入选个股数目在 4~6 个左右;对于朴素贝叶斯模型中证 500 成份股内 选股行业中性策略来说,随着每个行业入选个股数目增多,年化收益率在下降,Calmar 比率、信息比率先升后降,最优每个行业入选个股数目在 6 个左右;对于朴素贝叶斯模型 全 A 选股行业中性策略来说,随着入选个股总数目增多,年化收益率先升后降,信息比率 却在上升,最优每个行业入选个股数目在 8~16 个左右。


我们有选择性地展示三个策略的月度超额收益图:

image

总结和展望

以上我们对包括朴素贝叶斯、线性判别分析法以及二次判别分析法在内的三种生成模型进 行了系统的测试,并且利用三种方法构建沪深 300、中证 500 和全 A 选股策略,初步得到 以下几个结论:

一、朴素贝叶斯模型具备不错的预测能力。我们以第一期(1998 年)至 T-1 期的因子及 下期收益作为样本内集合,T 期样本外测试集,朴素贝叶斯模型样本外测试集平均正确率 为 55.6%,平均 AUC 为 0.580。朴素贝叶斯模型的预测正确率和 AUC 和之前报告广义线 性模型中表现最好的 SGD+hinge 损失模型相近。

二、我们分别以沪深 300、中证 500 和全 A 股为票池,利用朴素贝叶斯模型构建选股策略。 对于沪深 300 成份股内选股的行业中性策略,朴素贝叶斯模型的超额收益在 4.7%~8.8% 之间,信息比率在 1.25~1.99 之间,各项指标均优于线性回归模型。对于中证 500 成份股 内选股的行业中性策略,朴素贝叶斯模型的超额收益在 4.8%~10.2%之间,信息比率在 1.56~2.23 之间,Calmar 比率在 1.29~2.33 之间,在年化收益、信息比率上优于线性回归 模型。对于全 A 选股的行业中性策略,朴素贝叶斯模型相对于中证 500 的超额收益在 18.9%~20.1%之间,超额收益最大回撤在 7.1%~8.6%之间,信息比率在 2.54~3.59 之间, 表现不如线性回归。总体而言,朴素贝叶斯模型在沪深 300、中证 500 成份内选股优于线 性回归,全 A 选股则不如线性回归。

三、文中 LDA 模型总体表现略优于线性回归,我们认为这主要是在估计协方差矩阵时进 行缩减处理提升了模型性能导致的。同时,因为我们更关心模型预测的次序而不是具体的 数值,所以标签化和去掉中间样本的处理在一定程度上有利于模型效果的提升。朴素贝叶 斯模型在沪深 300 和中证 500 选股的策略中表现良好,我们认为这主要是因为样本数量 减少后线性模型估计协方差矩阵的准确性下降导致的。朴素贝叶斯模型需要估计的参数很 少,受样本量减少的影响也较小。

四、我们比较了朴素贝叶斯、LDA、QDA 模型的预测能力。绝大多数时候,LDA 模型的 测试集正确率、AUC 和回测表现优于其它模型。LDA 模型考虑了特征的相关性,并且假 设不同类别Y的特征相关性相同,这种假设最符合实际情况,因此效果也明显优于另两种 方法。QDA 的假设最为详细,但因为需要估计的参数最多,所以会导致估计上的偏差影 响结果。当特征数目不多且数据量较多时,LDA 有着绝对的优势,但随着特征数目的增加, 朴素贝叶斯因为其简洁的假设会有更好的效果。

五、在一定条件下(二分类、两类样本数目相等),LDA 模型的结果其实等价于线性回归 模型的排序效果。因此,本文也间接证明了对股票进行标签化处理并且使用较长的数据进 行线性回归(数据增加可以减弱因子多重共线性)在实践中十分有效。朴素贝叶斯和二次 判别分析两种非线性模型在效果上不如线性回归,但朴素贝叶斯模型的计算速度快于 LDA, 适用于特征数量较多的情况。

六、在我们的测试中,我们比较了不同训练期长度对模型分类效果的影响。我们发现训练 期越长,效果越佳,且这种现象在三种模型上都得到了印证。因此,我们认为采用 3 年、 5 年滚动等常见的方法可能因为数据不足不能让模型效果达到最优。在最终的回测中,我 们的训练期长度是所能取到的最长长度。这种方法不仅包含了过去的数据,也可以不断添 加最新的数据,是一种比较好的选取训练集的方式。

通过以上的测试和讨论,我们初步理解了朴素贝叶斯、LDA、QDA 模型应用于多因子选 股的一些规律。接下来我们的人工智能系列研究将继续探索随机森林、神经网络等机器学 习方法在多因子选股上的表现,敬请期待。

附录

LDA 与线性回归

事实上,对于二值且两类样本数目相同的分类问题,当我们对y进行特殊的标签化后,可 以证明 LDA 与线性回归是等价的,下面我们给出证明。在前文中,我们可以知道 LDA 的 判别方程为:

风险提示:通过朴素贝叶斯、LDA、QDA 模型构建选股策略是历史经验的总结,存在失效的可能。