【研报分享】华泰证券-人工智能选股之支持向量机模型

人工智能
研报分享
支持向量机
标签: #<Tag:0x00007fb00898ff70> #<Tag:0x00007fb00898fe08> #<Tag:0x00007fb00898fc78>

#1

摘要:

本报告对各种支持向量机模型以及支持向量回归进行系统测试

支持向量机(SVM)是应用最广泛的机器学习方法之一。线性支持向量机 能够解决线性分类问题,核支持向量机则主要针对非线性分类问题,支持 向量回归能够处理回归问题。本篇报告我们将对包括线性核、多项式核、 高斯核和 Sigmoid 核在内的各种核函数支持向量机以及支持向量回归进行 系统性的测试,并分析它们应用于多因子选股的异同,希望对本领域的投 资者产生有实用意义的参考价值。

支持向量机模型的构建:样本内训练与交叉验证、样本外测试

支持向量机模型的构建包括特征和标签提取、特征预处理、样本内训练、 交叉验证和样本外测试等步骤。最终在每个月底可以产生对全部个股下期 上涨概率的预测值,然后根据正确率、AUC 等指标以及策略回测结果对模 型进行评价。我们还根据模型的预测结果构建了沪深 300 成份内选股、中 证 500 成份内选股和全 A 选股策略,通过年化收益率、信息比率、最大回 撤等指标综合评价策略效果。

高斯核支持向量机选股模型收益和信息比率的表现优于线性回归

对于沪深 300 成份股内选股的行业中性策略(每个行业选 6 只个股) ,高 斯核 SVM 模型的超额收益为 4.9%,信息比率为 1.22。对于中证 500 成份 股内选股的行业中性策略,高斯核 SVM 模型的超额收益为 9.0%,信息比 率为 2.37。对于全 A 选股的行业中性策略,高斯核 SVM 模型相对于中证 500 的超额收益为 21.1%,信息比率为 3.66。总体而言,高斯核 SVM 在 收益和信息比率方面表现不错,各种策略构建方式下都能稳定地优于线性 回归模型;最大回撤方面 SVM 模型相比于线性回归不具备明显优势。

高斯核支持向量机模型预测能力整体强于其他核支持向量机

我们比较了不同核支持向量机的预测能力,发现高斯核 SVM 的测试集正确 率、AUC 和回测表现普遍优于其它核函数。高斯核作为使用最为广泛的核 函数,其优势在于不对原始数据做太多的先验假设。我们的回测结果也印 证了这一点,通过交叉验证集调参,最终得到高斯核 SVM 全 A 选股模型 的测试集正确率为 56.25%,高于线性核(55.66%)、3 阶多项式核 (53.75%)、 7 阶多项式核(50.03%)和 Sigmoid 核(55.66%)。 我们同 时发现支持向量机的回测表现优于支持向量回归。

风险提示:通过支持向量机模型构建选股策略是历史经验的总结,存在失效的可能。

本文研究导读

经典的多因子模型表达式为:

image

多因子模型的本质是关于股票当期因子暴露和未来收益之间的线性回归模型。我们希望引 入机器学习的思想,对传统多因子模型进行优化。在华泰人工智能选股系列的第二篇报告 中,我们使用滚动训练方法,系统地测试了包括线性回归、岭回归、Lasso 回归、弹性网 络、逻辑回归和随机梯度下降法在内的广义线性模型。上述模型的共同点是,它们均属于 线性分类器或回归方法,难以捕捉数据中的非线性特点。支持向量机是应用最广泛的机器 学习方法之一。线性支持向量机能够解决线性分类问题,核支持向量机则主要针对非线性 分类问题,支持向量回归能够处理回归问题。本篇报告我们将支持向量机应用于多因子选 股,主要关注如下几方面的问题:

  1. 首先是模型选择的问题。支持向量机相比于线性回归模型,在性能上是否有提升? 以多项式核、Sigmoid 核、高斯核支持向量机为代表的非线性分类器,相比于以 线性支持向量机为代表的线性分类器在分类表现上是否具有优势?支持向量回归 和支持向量分类器的预测能力是否具有差异?

  2. 其次是参数寻优的问题。支持向量机对参数的依赖程度远远大于广义线性模型。 支持向量机包含两个重要参数:惩罚系数 C 和γ值。在与多因子结合的问题背景 下,参数取值多少最为合理?应该通过什么样的指标确定最优参数?

  3. 最后是组合构建的问题。在衡量过不同支持向量机模型的表现之后,应如何利用 模型的预测结果构建策略组合进行回测?各模型在沪深 300、中证 500 和全部 A 股票池内选股效果的异同是什么?

我们将围绕以上的问题进行系统性的测试,希望为读者提供一些扎实的证据,并寻找到最 优的支持向量机模型,希望对本领域的投资者产生有实用意义的参考价值。

支持向量机介绍

支持向量机(Support Vector Machine,SVM)是应用最广泛的机器学习方法之一。在 20 世纪 90 年代,传统神经网络式微,深度学习尚未兴起,支持向量机由于其极高的预测正 确率,并且能够解决非线性分类问题,成为当时最流行的机器学习方法。支持向量机可分 为线性支持向量机和核支持向量机,前者针对线性分类问题,后者属于非线性分类器。我 们在华泰人工智能系列的第一篇报告对支持向量机作了简单介绍,下面我们将对更多的细 节进行深入探讨。

线性支持向量机

最大间隔分类

对于任何一种线性分类器,需要解决的核心问题是:如何寻找到最佳的分类边界,将两类 样本区分开来?在图表 1 所示的二维平面中,分类边界是一条一维直线;在三维空间中, 分类边界是一个二维平面;在 N 维度的空间中,分类边界是一个 N-1 维空间。我们将上述 用于分类的一维直线、二维平面和 N-1 维空间统称为分类超平面(Separating Hyperplane)。 那么,线性支持向量机是如何确定最优的分类超平面呢?其遵循的原则是——最大间隔分 类。

以图表 1 为例,样本点包含 x1和 x2两个维度的特征,左右两张图中的黑色直线都可以将 红蓝两类样本区分开,哪种方式更好?直观地看,如果将黑色直线向两侧平移,直到与样 本点相交,可以得到红色和蓝色两条直线,称为最大边缘超平面(Maximum Margin Hyperplane),类似于“楚河汉界”。这条“楚河汉界”越宽,分类的效果应越好,例如图 表 1 左图较右图的分类间隔更宽,左图中的黑色直线更有可能成为最终的分类边界。落在 最大边缘超平面的样本点称为支持向量(Support Vector),支持向量机由此得名。

image

下面我们将最大间隔分类的思想转换为数学语言。二维平面中的任意一条直线均可以表示 为𝑤1𝑥1 +𝑤2𝑥2 +𝑏 = 0的形式,简记为𝒙𝑇𝒘+𝑏 = 0,其中𝒙和𝒘为列向量(𝑥1,𝑥2)和(𝑤1,𝑤2), T 为转置符号,b 为常数。图表 2 中的分类超平面(黑色直线)表示为𝒙𝑇𝒘 +𝑏 = 0,其上 方的最大边缘超平面(红色直线)则相应表示为𝒙𝑇𝒘+𝑏 −1 = 0,即𝒙𝑇𝒘+𝑏 = 1。类似 地,下方的最大边缘超平面(黑色直线)表示为𝒙𝑇𝒘+𝑏 = −1。两个最大边缘超平面之间 的间隔等于2/‖𝒘‖,其中‖𝒘‖为向量 w 的 2 范数,即各元素平方和的平方根。

线性支持向量机的目标是寻找一组直线的参数𝒘和 b,使得分类间隔取得最大值。目标函 数可以写成:

image

约束条件为:𝑦𝑖(𝒙𝑖 𝑇𝒘+𝑏) ≥ 1,表明所有样本均归入正确的类别。其中(𝒙𝑖,𝑦𝑖)表示第 i 个 样本的特征和标签。

image

松弛变量

图表 2 展示了理想的线性可分情形。绝大多数时候,数据中会包含噪音,难以用一条直线 将两类样本完美地区分开来,如图表 3 所示。此时目标函数的约束条件无法满足。为了应 对线性不可分情形,我们引入松弛变量的概念。对每个样本点赋予一个松弛变量的值:如 果该点落在最大边缘超平面正确的一侧,则松弛变量𝜉 = 0;否则,松弛变量的值等于该 点到最大边缘超平面的距离。

图表 3 中,大多数样本点落在最大边缘超平面(红线和蓝线)本方一侧,这些被正确分类 的样本其松弛变量的值𝜉 = 0;少数样本点落在分类边界(黑线)对方一侧,这些错误分 类的样本其松弛变量的值𝜉 > 1,即红/蓝色样本点到红/蓝线的距离;还有部分样本点尽管 落在分类边界本方一侧,但位于“楚河汉界”中,这些虽然分类正确但距离最大边缘超平 面不够远的样本,其松弛变量的值取一个较小的正数0 < 𝜉 ≤ 1。

image

此时我们将线性支持向量机的目标函数改写为:

image

约束条件为:𝑦𝑖(𝒙𝑖 𝑇𝒘+𝑏) ≥ 1− 𝜉𝑖,𝜉𝑖 ≥ 0。其中𝜉𝑖为第 i 个样本的松弛变量,n 为样本个 数。

最小化目标函数的过程,实质上是约束条件下求极值的问题,可以通过拉格朗日乘子法 (Method of Lagrange Multipliers),随后转换为对偶问题(Dual Problem)进行求解。这 里我们省略推导过程,直接给出等价的对偶问题的目标函数:

image

约束条件为:0 ≤ 𝛼𝑖 ≤ 𝐶,∑ 𝛼𝑖𝑦𝑖 𝑛 𝑖=1 = 0。求出二次规划问题的解𝛼 ̂(即拉格朗日乘子), 最终得到分类边界的参数𝒘 ̂ = ∑ 𝛼 ̂𝑖𝑦𝑖𝑛 𝑖=1 𝒙𝑖,判别函数为𝑓(𝒙) = 𝒘 ̂𝑇𝑥 +𝑏 ̂ = ∑ 𝛼 ̂𝑖𝑦𝑖𝑛 𝑖=1 𝒙𝒊 𝑻𝒙+ 𝑏 ̂。当判别函数𝑓(𝒙) ≥ 0时,预测𝑦 ̂ = 1;当判别函数𝑓(𝒙) < 0时,预测𝑦 ̂ = −1。

惩罚系数C

引进松弛变量后,目标函数在原有的基础之上新加入𝐶∑ 𝜉𝑖 𝑛 𝑖=1 一项,即所有样本松弛变量 之和乘以系数 C。这里的系数 C 称为惩罚系数,表示模型对错误分类的容忍度。当 C 取 较大的数时,即使很小的松弛变量𝜉𝑖也会造成很大的损失,因此分类器对错误分类的容忍 度较低,将尽可能保证分类正确,从而导致较高的训练集正确率(如图表 4 左图)。反之, 当 C 取较小的数时,分类器对错误分类的容忍度较高,允许错误分类的存在,分类器倾向 于以最大间隔分类的原则进行分类(如图表 4 右图)。

一般来说,如果惩罚系数 C 取值过大,分类器容易受极端样本影响,造成过拟合的现象, 尽管训练集正确率较高,但是测试集正确率并不高,即较低的偏差(Bias)和较大的方差 (Variance);如果惩罚系数 C 取值过小,分类器会过于不在乎分类错误,训练集和测试 集正确率都将受损,导致较低的偏差和方差。因此,惩罚系数是影响支持向量分类器性能 最为关键的参数之一。实际应用中,通常对惩罚系数 C 进行遍历,选择使得交叉验证集正 确率最高的 C 作为模型最终的参数。

image

支持向量回归

以上我们讨论的线性支持向量机能够解决分类问题。在原有的损失函数之上稍加改动,就 能得到用于回归问题的支持向量回归(Support Vector Regression),其损失函数为:

image

约束条件为: −𝜀 −𝜉𝑖∗ ≤ 𝑦𝑖 −(𝒙𝑖 𝑇𝒘+𝑏) ≤ 𝜀 +𝜉𝑖, 𝜉𝑖,𝜉𝑖∗ ≥ 0。其中𝜀表示预测误差的容忍量, 𝜉𝑖和𝜉𝑖∗代表第 i 个样本的松弛变量。

核支持向量机

非线性分类

线性支持向量机能够处理线性分类问题,然而对于非线性分类问题,我们需要寻找新的解 决途径。图表 5 展示了经典的非线性分类问题——异或问题。左图中的样本点𝒙包含𝑥(1)和 𝑥(2)两个维度的特征。显然,在二维平面内无法找到一条直线将红蓝两类样本区分开来。 接下来我们引入增加维度的思想。在原来的二维特征基础之上增加一个维度,将(𝑥(1),𝑥(2)) 映射到三维特征((x(1))2,(x(2))2,√2𝑥(1)𝑥(2)),如图表 5 右图所示。此时,一个二维分类平 面就可以将变换后的三维空间中的特征区分开来。

image

核支持向量机的核心思想正是将非线性分类转化为线性分类。首先通过非线性映射𝜙把原 始数据𝑥变换到高维特征空间,随后使用线性支持向量机对高维空间下的数据进行分类, 从而解决非线性分类问题: 𝒙 ⟼ 𝜙(𝒙) = (𝜙1(𝒙),…,𝜙𝑘(𝒙),…) 实际应用中,在高维空间下优化对偶问题目标函数的计算量过大,人们使用核函数的技巧, 绕开了高维特征的显式表达,从而巧妙地规避了“维数灾难”的问题。下面我们将对核函 数的概念以及核支持向量机进行介绍。

核函数

将原始数据𝑥通过非线性映射𝜙变换到高维数据𝜙(𝒙)后,线性支持向量机对偶问题的目标 函数为:

image

𝜙(𝒙𝑖)和𝜙(𝒙𝑗)的计算均在高维特征空间进行,计算量巨大。幸运的是,目标函数里的 𝜙(𝒙𝑖)𝑇𝜙(𝒙𝑗)实质上是两个向量的内积,记为〈𝜙(𝒙𝑖),𝜙(𝒙𝑗)〉。而任意一种映射方式𝜙的内积 〈𝜙(𝒙𝑖),𝜙(𝒙𝑗)〉,可以用一个确定的核函数𝐾(𝒙𝑖,𝒙𝑗)加以刻画。核函数的计算只需要在低维 特征空间进行,从而大大减少了运算复杂度。例如,图表 5 中二维平面到三维空间的非线 性 映 射 (𝑥(1),𝑥(2)) ↦ ((x(1))2,(x(2))2,√2𝑥(1)𝑥(2)) 下 的 内 积 可 以 用 核 函 数 𝐾(𝒙𝑖,𝒙𝑗) = 〈𝒙𝑖,𝒙𝑗〉2刻画,证明过程参见图表 6。

image

我们用核函数代替高维特征空间下的内积,得到对偶问题的目标函数:

image

约束条件为:0 ≤ 𝛼𝑖 ≤ 𝐶,∑ 𝛼𝑖𝑦𝑖 𝑛 𝑖=1 = 0。对于一个新的样本𝒙,我们可以计算判别函数 𝑓(𝒙) = 𝒘 ̂𝑇𝒙+𝑏 ̂ = ∑ 𝛼 ̂𝑖𝑦𝑖𝑛 𝑖=1 𝐾(𝒙𝑖,𝒙)+𝑏 ̂。然后根据判别函数𝑓(𝒙)的值大于(或小于)零判 断样本𝒙属于哪个类别。注意到目标函数不包含低维到高维映射方式的显式表达,仅和核 函数的选取有关,因此这种分类器称为核支持向量机(Kernel SVM)。

任意一种映射方式都对应一个确定的核函数,理论上任何满足一定数学性质的核函数都可 以成为核支持向量机的核函数。在实际应用中,通常使用线性核、多项式核、Sigmoid 核 和高斯核,具体的函数表达式如图表 7。其中线性核等价于线性支持向量机。d 阶多项式 核本质上将 m 维空间映射到𝐶(𝑚 +𝑑,𝑑)维空间。Sigmoid 核相当于多层神经网络。高斯核 较为特别,通过指数函数的泰勒展开可以证明,高斯核相当于将原始数据映射到无穷维空 间。

image

不同核函数的分类性能和分类边界不尽相同。图表 8 展示了对同一组数据使用不同核函数 的分类表现。线性核的分类边界为直线,多项式核、Sigmoid 核和高斯核的分类边界在高 维空间中为超平面,在原始空间中为曲线。线性核、低阶多项式核和 Sigmoid 核计算速度 快,不容易过拟合,但是在复杂分类问题下表现不佳。高阶多项式核和高斯核的优点是能 够求解复杂的边界,对训练样本的分类能力强大,缺点是计算速度缓慢,并且可能导致过 拟合。实际使用中需要根据数据自身的特点,选择最合适的核函数。

image

γ 值

之前我们介绍了影响支持向量机性能的重要参数——惩罚系数 C,这里我们介绍另一个核 支持向量机的重要参数——γ值。如图表 7 所示,多项式核、Sigmoid 核和高斯核的核函 数都包含γ值一项。γ决定了原始数据映射到高维数据后,在高维特征空间中的分布。γ 越大,样本在高维空间中的分布越稀疏,样本之间间隔越远,更容易被分类边界区分开来, 因而训练集正确率更高,也更容易导致过拟合。

图表 9 展示了γ值对高斯核支持向量机分类结果的影响。左图中的γ值较小,分类边界较 为简单,分类器基本能够区分三类样本,然而无法正确判别部分极端样本。右图中的γ值 较大,分类边界极为复杂,分类器学习了更多极端样本,训练集正确率非常高,但是出现 了过拟合。实际应用中,过小和过大的γ都会使得分类性能受损。通常对γ进行遍历,选 择使得交叉验证集正确率最高的γ作为模型最终的参数。

我们可以同时对惩罚系数 C 和 γ 值进行遍历,在 C 和 γ 组成的二维参数矩阵中,依次 检验每一对参数的效果。这种方法称为网格搜索(Grid Search),网格搜索较为费时,但 是能够得到全局最优的参数。随后我们将逐一测试各种核函数的支持向量机,同时使用网 格搜索等方法进行参数寻优。

image

模型评价指标

在人工智能系列第一篇报告中,我们介绍了常见的模型评价指标。对于分类问题,除了分 类正确率(Accuracy)之外,召回率(Recall,又称敏感度 Sensitivity)、精确率(Precision)、 虚报率和特异度(Specificity),都是衡量模型好坏的常用指标,详细定义如图表 10 所示。

在众多模型评价指标中,正确率概念清晰并且计算简便,使用较为广泛。然而在一些特定 场景,正确率并不是最好的指标。以多因子选股的支持向量机模型为例。我们可以得到股 票下期上涨或下跌的预测值𝑓(𝒙),表示样本到分类超平面的距离,是一个连续值。我们以 0 作为分类阈值,对𝑓(𝒙)进行二值化处理,得到预测的分类标签𝑦 ̂,随后和真实的分类标 签𝑦进行比较,计算正确率、召回率、虚报率等各项指标。

在实际应用中,我们的目标不仅仅是对股票进行正确分类,更多的时候是希望选择预测值 最高,即上涨可能性最大的一小部分股票进行投资。更切实际的做法是设定一个更严格的 分类阈值,例如以+1 作为分类阈值,此时预测上涨的股票数将变少,虚报率降低,然而召 回率也随之降低,正确率未必上升。通俗地说,当法律更严格时,抓住的坏人更多,错杀 的好人也更多,社会风气并不一定会更好。由此可见,当我们侧重于某一类别的样本,或 者两类样本数量不均等时,正确率、召回率、虚报率并不是稳定的评价指标,其具体大小 不仅取决于分类器性能,还和分类阈值密切相关。

是否有一种评价指标和分类阈值的选取无关,从而忠实地反映分类器性能呢?接受者操作 特征曲线(Receiver Operating Characteristic Curve,ROC 曲线)的曲线下面积(Area Under Curve,AUC)是一个较好的选择。ROC 的思想是对所有分类阈值可能的取值进行 遍历,每一个分类阈值计算对应的虚报率和召回率,以虚报率为横轴,召回率为纵轴,将 所有点顺次连接可以得到一条曲线,如图表 11 所示。

image

当分类阈值取最小值时,对应于 ROC 曲线右上角的点。此时分类标准最为宽松,所有样 本均标记成正例,召回率和虚报率都等于 1。当分类阈值取最大值时,对应于 ROC 曲线 左下角的点。此时分类标准最为严格,所有样本均标记成负例,召回率和虚报率都等于 0。 真正反映分类器性能的点在 ROC 曲线的中段。理想的情形是当分类阈值取一个合适的值 时,召回率尽可能高,而虚报率尽可能低,ROC 曲线靠近左上角。反之,对于一个随机 反应的分类器,召回率和虚报率同步提升或降低,此时 ROC 曲线与对角线重合。

我们将 ROC 曲线的形态特征总结为一个指标——ROC 曲线下覆盖的总面积 AUC,AUC 的值在 0.5 到 1 之间。分类器性能越好,ROC 曲线越接近左上角,AUC 的值接近 1;分 类器性能越差,ROC 曲线越接近对角线,AUC 的值接近 0.5。总的来说,AUC 避免了分 类阈值对评价指标的干扰,适用于侧重某一类别的样本,或者两类样本数量不均等的情形, 比传统的正确率等指标具有更强的普适性。我们在后续的测试中,将使用 AUC 作为调参 的主要依据。

支持向量机模型测试流程

image

如图表 12 所示,支持向量机模型的构建方法包含下列步骤:
1. 数据获取:
a) 股票池:沪深 300 成份股/中证 500 成份股/全 A 股。剔除 ST 股票,剔除每个截 面期下一交易日停牌的股票,剔除上市 3 个月内的股票,每只股票视作一个样本。
b) 样本内区间:2005-01-31 至 2011-12-31 共 72 个月末截面期。 c) 样本外区间:2011-01-31 至 2017-04-28 共 76 个月末截面期。 2. 特征和标签提取:每个自然月的最后一个交易日,计算之前报告里的 70 个因子暴露 度,作为样本的原始特征;计算下一整个自然月的个股超额收益(以沪深 300 指数为 基准),作为样本的标签。因子池如图表 13 所示。
3. 特征预处理:
a) 中位数去极值:设第 T 期某因子在所有个股上的暴露度序列为𝐷𝑖,𝐷𝑀为该序列 中位数,𝐷𝑀1为序列|𝐷𝑖 −𝐷𝑀|的中位数,则将序列𝐷𝑖中所有大于𝐷𝑀 +5𝐷𝑀1的数 重设为𝐷𝑀 +5𝐷𝑀1,将序列𝐷𝑖中所有小于𝐷𝑀 −5𝐷𝑀1的数重设为𝐷𝑀 −5𝐷𝑀1;
b) 缺失值处理:得到新的因子暴露度序列后,将因子暴露度缺失的地方设为中信一 级行业相同个股的平均值。
c) 行业市值中性化:将填充缺失值后的因子暴露度对行业哑变量和取对数后的市值 做线性回归,取残差作为新的因子暴露度。
d) 标准化:将中性化处理后的因子暴露度序列减去其现在的均值、除以其标准差, 得到一个新的近似服从N(0,1)分布的序列。
e) 主成分分析:为避免特征之间的共线性,对 70 个标准化处理后的因子暴露度进 行主成分分析,得到 70 个维度转换后的新特征。 4. 训练集和交叉验证集的合成:
a) 分类问题:对于支持向量机模型(以下简称 SVM),在每个月末截面期,选取下 月收益排前、后 30%的股票分别作为正例(𝑦 = 1)、负例(𝑦 = −1)。将 72 个 月样本合并,随机选取 90%的样本作为训练集,余下 10%样本作为交叉验证集。
b) 回归问题:对于支持向量回归模型(以下简称 SVR), 直接将 72 个月的样本合 并成为样本内数据,同样按 90%和 10%的比例划分训练集和交叉验证集。
5. 样本内训练:使用 SVM 或 SVR 对训练集进行训练。SVM 选取五种不同类型的核函 数:线性核,3 阶多项式核,7 阶多项式核,Sigmoid 核以及高斯核。SVR 选取高斯 核。同时使用上一篇报告中的 12 个月滚动回测的线性回归模型作为统一对照组。全 部模型如图表 14 所示。
6. 交叉验证调参:模型训练完成后,使用该模型对交叉验证集进行预测。选取交叉验证 集 AUC 最高(SVM)或 IC 值最高(SVR)的一组参数作为模型的最优参数。
7. 样本外测试:确定最优参数后,以 T 月月末截面期所有样本(即个股)预处理后的特 征作为模型的输入,得到每个样本的 T+1 月的预测值𝑓(𝒙)(判别函数值,即样本到分 类超平面的距离),可以根据该预测值构建策略组合,具体细节参考下文。
8. 模型评价:评价指标包括两方面,一是测试集的正确率、AUC 等衡量模型性能的指标; 二是上一步中构建的策略组合的各项表现(包括年化超额收益率、信息比率等等)。


image

支持向量机模型测试结果

核支持向量机

惩罚系数 C 和γ值是支持向量机模型最重要的两个参数。我们希望同时对 C 和γ值进行 遍历,找到全局最优解。参数寻优最常用的方法是网格搜索。下面我们以高斯核 SVM 模 型(全 A 选股)为例,展示网格搜索的过程。取 C = (0.01, 0.03, 0.1, 0.3, 1, 3, 10),γ = (1e-4, 3e-4, 1e-3, 3e-3, 0.01, 0.03, 0.1, 0.3, 1),测试每一组 C 和γ值,得到交叉验证集的 AUC 值,结果如图表 15 所示,全局最优解为 C=1,γ=0.01。我们同时在图表 16 中展示了交 叉验证集和测试集的正确率、AUC 和预测值与收益相关系数的详细结果。

image

对于其它模型,我们采用相同的方法进行参数优化。下图展示了 Sigmoid 核 SVM 模型(全 A 选股)的参数优化过程。其余模型将不再赘述。

image

模型正确率与 AUC 分析

下图展示了高斯核 SVM 模型(C=1,γ=0.01)和第二篇广义线性模型报告中表现最好的 SGD+hinge 损失模型(12 个月滚动训练)每一期测试集的正确率和 AUC 随时间的变化 情况。高斯核 SVM 模型样本内训练集和交叉验证集合正确率分别为 65.4%和 58.3%,AUC 分别为 0.718 和 0.621。样本外平均正确率为 56.3%,平均 AUC 为 0.585。SGD+hinge损失模型样本外平均正确率为 55.7%,平均 AUC 为 0.581。两种方法分类表现基本相近, 高斯核 SVM 模型稍有优势。

image

image

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

我们在每个截面上,将高斯核 SVM 模型(C=1,γ=0.01)对全部个股下期涨跌的预测值 与因子池中各个因子值之间计算 Spearman 相关系数,查看模型预测值与各个因子值之间 “真实的”相关情况,如下图所示。我们发现,与线性模型类似,预测值与反转、波动率、 换手率、技术等交易类型因子关联性较为紧密,与基本面类型因子关联性较弱。不过与线 性模型的对应图表相比,下图中的每一行(对应一个固定的因子)颜色更加均匀、波动更 小。是因为我们本文中所讨论的模型在样本外回测区间中每个截面期都只改变输入的因子 值、不改变因子的使用方式;而线性回归模型每个截面期都重新回归拟合参数,相当于改 变了因子的使用方式——这也是本文中模型与线性回归模型的一个关键的区别点。我们也 可以换一种说法,线性回归模型依赖于动态的因子收益动量效应,其预测值与因子间的相 关性会波动更大一点。

分层回测分析

依照因子值对股票进行打分,构建投资组合回测,是最直观的衡量因子优劣的手段。SVM 属于分类器,最终在每个月底可以产生对全部个股下月上涨或下跌的预测值(即到分类超 平面的距离);SVR 属于回归模型,在每个月底可以产生对全部个股下月收益的预测值。 因此可以将两者都看作一个因子合成模型,即在每个月底将因子池中所有因子合成为一个 “因子”。接下来,我们对该模型合成的这个“因子”(即个股下期预测值)进行分层回测, 从各方面考察该模型的效果。仿照华泰单因子测试系列报告中的思路,分层回测模型构建 方法如下:

  1. 股票池:全 A 股,剔除 ST 股票,剔除每个截面期下一交易日停牌的股票,剔除上市 3 个月以内的股票。
  2. 回溯区间:2011-01-31 至 2017-05-31。
  3. 换仓期:在每个自然月最后一个交易日核算因子值,在下个自然月首个交易日按当日 收盘价换仓。
  4. 数据处理方法:将支持向量机模型的预测值视作单因子,因子值为空的股票不参与分层。
  5. 分层方法:在每个一级行业内部对所有个股按因子大小进行排序,每个行业内均分成 N 个分层组合。如图表 14 所示,黄色方块代表各行业内个股初始权重,可以相等也可以不等(我们直接取相等权重进行测试),分层具体操作方法为 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

这里我们将展示高斯核 SVM 模型(C=1,γ=0.01)的分层测试结果。

下图是分五层组合回测绩效分析表(20110131~20170531)。其中组合 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 的 净值近似核算的。

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

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

image

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

构建策略组合及回测分析

支持向量机核函数比较

我们比较了高斯核、线性核、3 阶多项式核、7 阶多项式核、Sigmoid 核五种不同的核函 数。五种方法均包含惩罚系数 C;高斯核、多项式核和 Sigmoid 核还包含参数γ值。我们 对 C 和γ进行遍历,选取交叉验证集 AUC 最高的 C 和γ组合作为最终选定的参数。同时 以上一篇报告 12 个月滚动回测的线性回归模型作为统一对照组。

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

对于沪深 300 成份股内选股的行业中性策略,当每个行业选股数大于等于 10 只时,除了 7 阶多项式核以外,其余 SVM 模型的年化超额收益率、信息比率和 Calmar 比率均高于统 一对照组的线性回归模型,超额收益最大回撤小于线性回归。其中高斯核和 3 阶多项式核 表现最好。对于沪深 300 成份股内选股的个股等权策略,当总选股数大于等于 100 只时, 高斯核和 3 阶多项式核的年化超额收益率和信息比率高于线性回归。

对于中证 500 成份股内选股的行业中性策略,当每个行业选股数介于 5~10 只之间时,除 了 7 阶多项式核以外的 SVM 模型年化超额收益率、信息比率和 Calmar 比率均明显高于 线性回归模型。其中高斯核、3 阶多项式核和 Sigmoid 核表现最好。对于中证 500 成份股 内选股的个股等权策略,当总选股数大于等于 100 只时,除了 7 阶多项式核以外的 SVM 模型年化超额收益率、信息比率和 Calmar 比率均明显高于线性回归模型,超额收益最大 回撤小于线性回归。

图表32展示了全A选股策略的回测结果。对于全A选股的行业中性策略和个股等权策略, 高斯核、线性核和 Sigmoid 核的年化超额收益率和信息比率优于线性回归模型,但是超额 收益最大回撤都明显高于线性回归。

总的来看,不同核函数 SVM 模型的表现差异较大。从收益的角度看,高斯核 SVM 的表现 最好,其次是 3 阶多项式核和 Sigmoid 核,在各种策略构建方式下都能稳定地优于线性回 归模型;7 阶多项式核表现最差,其余核函数 SVM 模型和线性回归差距不大。从回撤的 角度看,SVM 模型相比于线性回归不具备明显优势,很多时候回撤会大于线性回归。



支持向量机与支持向量回归比较

我们同时测试了支持向量机的拓展形式——支持向量回归(以下简称 SVR)。我们选择之 前表现最好的高斯核作为 SVR 的核函数,对 C 和γ进行遍历,选取交叉验证集 IC 值最高 的 C 和γ组合作为最终选定的参数。同时以高斯核 SVM 模型,以及 12 个月滚动回测的 线性回归模型作为统一对照组。

图表 33 展示了沪深 300 选股模型和中证 500 选股模型的结果。图表 34 展示了全 A 选股 模型的结果。高斯核 SVR 模型仅在中证 500 成份股内选股的个股等权策略中表现略有优 势,其余时候均弱于高斯核 SVM 模型以及线性回归模型。

高斯核支持向量机模型选股策略详细分析

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

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


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

image

总结和展望

以上我们对包括线性核、多项式核、高斯核和 Sigmoid 核在内的多种核函数支持向量机以 及支持向量回归进行了系统的测试,并且利用支持向量机模型构建沪深 300、中证 500 和 全 A 选股策略,初步得到以下几个结论:

一、SVM 具备不错的预测能力。我们以 2005-2010 年的因子及下期收益作为样本内集合, 2011 年至今的数据为样本外测试集,高斯核 SVM 全 A 选股模型交叉验证集正确率为 58.3%,AUC 为 0.621,样本外测试集平均正确率为 56.3%,平均 AUC 为 0.585。SVM 模型的预测正确率和AUC和上一篇报告广义线性模型中表现最好的SGD+hinge损失模型 相近。

二、我们分别以沪深 300、中证 500 和全 A 股为票池,利用高斯核 SVM 模型构建选股策 略。对于沪深 300 成份股内选股的行业中性策略,高斯核 SVM 模型的超额收益不高,在 2%~5%之间,信息比率在 0.8~1.2 之间,在收益端和回撤端的表现仍略优于线性回归模 型。对于中证500成份股内选股的行业中性策略,高斯核SVM模型的超额收益在4%~10% 之间,信息比率在 1.8~2.4 之间,Calmar 比率在 1.2~3.0 之间,表现远优于线性回归模型。 对于全A选股的行业中性策略,高斯核SVM模型相对于中证500的超额收益在20%~22% 之间,超额收益最大回撤在 7%~10%之间,信息比率在 3.6~4.2 之间。总体而言,高斯核 SVM 在收益和信息比率方面表现不错,各种策略构建方式下都能稳定地优于线性回归模 型;从回撤的角度看,SVM 模型相比于线性回归不具备明显优势,很多时候回撤与线性 回归持平甚至大于线性回归。

三、我们认为 SVM 模型回撤大于线性回归的原因可能在于:对于线性回归我们采取的是 滚动训练集的方式,即以 T-12 月到 T-1 月的信息预测 T 月;而对于 SVM 我们采取的是固 定训练集的方式,以 2005~2010 年的信息预测 T 月。当市场风格发生切换时,由于滚动 训练集包含了最新的信息,因而能够相对迅速地适应新的市场环境。而固定训练集预测的 方式无法对模型进行调整,如果市场风格和 2015~2010 年相差较大,那么模型很难有好 的表现。

以上仅是我们的猜测,事实上我们可以从图 19 和图 20 展示的预测正确率及 AUC 变化情 况窥见端倪。2017 年以来,SVM 模型的预测正确率和 AUC 持续降低,5 月底截面期(对 应于 6 月表现)的正确率低于 50%;相反地,SGD+hinge 模型(广义线性模型,和线性 回归接近)的预测正确率在 2 月底截面期(对应于 3 月表现)下降至 50%,但是此后逐 步上升,表现出对新的市场风格的适应。

这里我们并非想评判两种模型构建方式孰优孰劣。对于固定训练集的方式,模型能够更充 分地挖掘训练集内部的规律,当市场环境和训练集接近时,模型的表现会更好;当市场环 境和训练集出现背离时,模型的表现将不尽人意。而对于滚动训练集的方式,其核心假设 是因子存在动量效应,一旦动量效应失效,滚动训练模型的表现也将受损。

由此我们也可以推知,对于固定训练集的机器学习模型,训练集的选择至关重要,需要尽 可能囊括市场风格的各种可能性。训练集时间长度不能过短,并且应包含至少一个经济周 期,我们选择 2005~2010 年作为训练集正是出于上述考虑。然而类似 2014 年 12 月以及 2017 年上半年市场风格巨变的情况在历史上发生的次数不多,在训练集时间段中没有出 现过,因此固定训练集的模型出现较大回撤在我们的预料之中。

四、我们比较了不同核支持向量机(SVM)以及支持向量回归(SVR)的预测能力。绝大 多数时候,高斯核 SVM 的测试集正确率、AUC 和回测表现优于其它核函数,也优于 SVR。 高斯核作为使用最为广泛的核函数,其优势在于不对原始数据做太多的先验假设。高斯核 SVM 假设原始数据线性可分,换言之因子和收益率之间存在线性关系。多项式核和 Sigmoid 核 SVM 假设因子和收益率之间存在相应的非线性关系。而高斯核 SVM 不依赖任 何前提假设,理论上可以拟合任意特征到标签的映射关系。

我们的回测结果也印证了这一点。通过交叉验证集调参,我们最终得到高斯核 SVM 全 A 选股模型的测试集正确率/AUC 分别为 56.25%/0.6214,高于线性核(55.66%/0.5831), 3 阶多项式核(53.75%/0.6062), 7 阶多项式核(50.03%/0.5902)和 Sigmoid 核 (55.66%/0.6090)。

我们也观察到SVM分类器的回测表现优于SVR回归模型。在上一篇广义线性模型报告中, 我们发现过类似的现象,分类器的表现优于回归模型。可能的原因在于,对原始收益率进 行二值化处理,分成正例和反例后,尽管损失了部分信息,但同时消除了收益率信息中包 含的大量噪音,使得模型能够更准确地捕捉数据中蕴含的规律。

五、在我们的测试中,核支持向量机相较于广义线性模型中表现最好的 SGD+hinge 模型, 并没有展现出非常明显的优势。原因可能在于,相比于广义线性模型,核支持向量机的强 项在于处理非线性数据。而我们使用的因子都是经验证过的、与收益具有显著线性关系的 特征,正好是广义线性模型擅长的领域。未来当我们挖掘更多具有非线性特性的因子时, 核支持向量机应有用武之地。

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

风险提示:通过支持向量机模型构建选股策略是历史经验的总结,存在失效的可能。

附录

PCA 是否必要

使用支持向量机进行分类时,是否有必要预先对数据做主成分分析(PCA),是一个有争 议的问题。支持的一方认为 PCA 具有两个重要作用。首先对于高维数据,SVM 计算相对 缓慢,如果使用 PCA 进行降维处理,提取解释方差最多的前几个主成分作为新的特征, 将大大加快运算速度;其次原始数据往往存在共线性问题,而 PCA 可以将原始特征转换 为相互正交的新特征,从而避免共线性。

反对的一方则提出两个观点。首先 PCA 作为一种降维方法,尽管保留了解释方差最多的 主成分,但是毕竟损失了一部分信息,当样本量或特征数并不是特别大时,这种牺牲准确 性换取效率的方法是否值得?其次,有人认为 SVM 目标函数的等价形式中已经包含 L2 正则化项(详细证明过程请参考上一篇广义线性模型报告“损失函数”一节),可以有效 解决共线性问题,因此没有必要做 PCA。

在本篇报告的测试环节,我们在 SVM 训练前对数据进行了 PCA 处理,并且保留所有主成 分,相当于保留原始数据的全部信息。同时由于我们的因子数并不多,因此无论是否做 PCA,对运算效率的影响不大。因此我们最为关心的问题是,PCA 后保留全部主成分的 预处理方式,对分类效果是否有影响?做不做 PCA 的结果是否存在差别?

这一问题很难从理论上得到解释,目前也没有相关文献支持。我们尝试以实例的形式探索 这个问题。我们首先生成了一组二分类数据,两个维度𝑥1和𝑥2存在正相关关系。随后分别 使用高斯核、线性核、3 阶多项式核以及 Sigmoid 核 SVM 对原始特征𝑥1和𝑥2进行分类。 接下来对原始特征进行 PCA,转换为𝑧1和𝑧2两个相互独立的主成分,并使用上述四种核 SVM 对新特征𝑧1和𝑧2进行分类。

下图左边一列展示了不做 PCA 的分类结果,中间一列展示了进行 PCA 的分类结果。可以 发现两种预处理方式对分类结果没有影响。在我们的多因子选股模型中,下期收益的预测 是以样本点到分类超平面的距离,即决策函数值的形式给出的,因此我们还需要考察两种 预处理方式下决策函数的值是否存在差异。下图右边一列中,每个点的横坐标代表不做 PCA 时的决策函数值,纵坐标代表进行 PCA 后的决策函数值。可以发现,对于高斯核和 线性核,两种预处理方式的决策函数值完全相同;而对于多项式核和 Sigmoid 核,决策函 数值发生了细微的变化,而这种变化可能是不保序的(如右下角 Sigmoid 核的情形),因 而对选股结果可能造成微小的影响,但总体而言差异并不大。

由此我们得到初步的结论:对于线性核和高斯核 SVM,是否做 PCA 对分类结果和决策函 数没有任何影响,可以舍去 PCA 这一步。对于多项式核和 Sigmoid 核 SVM,两种预处理 方式对分类结果无影响,然而在决策函数值上存在微小差异,因此也可以考虑不做 PCA。

image
image