python量化选股策略_【机器学习】第六课:基于SVM的量化选股策略

导语

接触过机器学习或数据挖掘算法的人都应该知道支持向量机(SVM),支持向量机一经提出就得到了广泛应用。本文主要探讨该算法在金融领域量化投资多因子策略上的应用。在这篇文章中,先是介绍了SVM的基本原理,之后会介绍如何利用python的机器学习库(scikit-learn)来编程实现svm多因子选股策略,主要是通过回测实证来帮助大家更深层次的理解SVM在量化投资领域上的应用。

SVM原理

支持向量机主要分为三类:线性可分支持向量机,线性支持向量机,非线性支持向量机。

1、线性可分支持向量机,又称硬间隔支持向量机

一个数据集是线性可分当且仅当存在一个分隔超平面

f606b8e7aa52b3679c608564a9beb4d5.png将数据集完美分隔,如下图所示:

python量化选股策略_【机器学习】第六课:基于SVM的量化选股策略_第1张图片

如上图所示,存在一个分隔超平面将训练样本集完闰分开,对应的分类决策函数为:

641a351c7b615eb5e198d981be3f3890.png

正如我们所看到的,一个数据集如果是线性可分的,那么就存在无数个分隔超平面可以将其分隔开,如下图所示:

python量化选股策略_【机器学习】第六课:基于SVM的量化选股策略_第2张图片

那么如何找到最优的分隔超平面,这里采用的是最大化样本集到分隔超平面的距离,具体推导可参考李航-统计学习方法这本书。这里直接给出结论:

a6a04ce67758e16fda0a6a8f886a890b.png

922958560d6e48a0ee43f604a01512d7.png

求解带约束的极值问题用拉格朗日乘子法,最终推导公式:

3fed8b4796ff0d5b691c1d8acf0787ac.png

db4577db1a15e349e30067d0126a0357.png

f4105bed494f937829ef96e51b72b5ec.png

求解得到:

3e257f78f66147b668b9b91f561deb4a.png

125dff1cb9596a8167b5714ae07b8984.png

因此就得到了最优分隔超平面:

7710dba28f6436f4770b20d14729cc7d.png

对应的分类决策函数:

9f5aca66cce6cf56a3d1e528376f5d25.png

2、线性支持向量机,又称软间隔支持向量机

相对于线性可分支持向量机,线性支持向量机中数据集中有一些特异点(outlier),因些不存在一个分隔超平面将样本集完美分隔,但是除去这些特异点外,又存在分隔超平面该样本集完美分隔开。

python量化选股策略_【机器学习】第六课:基于SVM的量化选股策略_第3张图片

这里采用的解决方法是对每个样本引进一个松弛变量,这样线性支持向量机的算法推导公式为:

15fd31df892720a94382f316a8a0ef15.png

94d1bd1462563c20e37b28c7bf8144c5.png

b58d00d9257033e713fb1ba103408c50.png

对应的对偶问题:

05b06ef3587472fedcf3e487582ca82a.png

38f711a8be5df1c94c6b3c641710cd95.png

479bc134d2dd6acc4bdf2bece01a493c.png

最终求解:

4d02d713a0cc621139f0ceedf3e74f1b.png

de4cbeb2831f890830cd4e252a970c28.png

这样就可以确定最优分隔超平面与分类决策函数。

3、非线性可分支持向量机

对于线性可分与线性近似可分数据集,我们可以采用线性可分支持向量机与线性支持向量机求解,但现实中,大多数都是线性不可分的情况,那就不得不采用非线性可分支持向量机。它的原理就是将原数据集空间映射到更高维甚至无究维上,使得映射后的数据集在高维(无穷维)空间线性可分。这里映射的技巧就是核函数。

如下图所示,原数据集(左)线性不可分,那么可以通过核函数映射到更高维使其线性可分,如右图所示:

python量化选股策略_【机器学习】第六课:基于SVM的量化选股策略_第4张图片

将核函数应用于支持向量机中求解非线性可分问题算法:

3a2a83d98d3488e593cfe5488e397221.png

7e215e44d712e3485f6c5795785c14a9.png

c92b8b89266f7134cb8b82f109d588fd.png

求得最优解:

94ebe344c28aee5029fb8518a8d0b37f.png

选择其一个满足约束条件的分量,计算

213c6cd9926c9e8d3914b2f84a0f140e.png

最终分类决策函数:

78d92a69870e01b7b170bb56b3f7196c.png

SVM多因子策略研究与实证

策略思想:以季度为单位,选取一些财务因子作为训练样本,对于类别值,如果未来一个季度涨幅超过5%标记为1,反之为-1,然后用支持向量机算法进行训练,预测结果为1且未持仓则买入,预测结果为-1且已持仓则卖出。

特征因子选取:选取2014-06-30(2014年半年报)时刻,沪深300成分股的市盈率、市净率、总市值、流通市值、净资产收益率roe加权、总资产报酬率roa、销售净利率、净利润/营业总收入、息税前利润/营业总收入、基本每股收益同比增长率、每股经营活动产生的现金流量净额同比增长率、营业总收入同比增长率、净利润同比增长率、经营活动产生的现金流量净额同比增长率、应收账款周转天数、应付账款周转天数、存货周转率、应收账款周转率、应付账款周转率、流动比率、速动比率共21个财务因子。

数据标准化:数据标准化方法有很多,本文采用高斯预处理方法,即每个特征因子减去它对应的均值再除以它的标准差((x–x.mean)/x.std)。

参数优化方法:本文使用交叉验证的方法对惩罚参数与径向基函数(高斯核函数)参数Sigma进行优化筛选。交叉验证方法具体为选取的训练样本集分为K份,依次选取其中的K-1份作为训练集,剩下一份作为验证集,通过算法在验证集上的表现进行打分,再对打分进行取平均作为此参数对应的分数,依次选择不同的参数进行打分,确定最终的参数。

回测结果:

初始资金:10000000

回测频率:每天

回测日期:2016-03-01 — 2017-03-01

资金曲线图如下:

python量化选股策略_【机器学习】第六课:基于SVM的量化选股策略_第5张图片

你可能感兴趣的:(python量化选股策略)