原创 | 支持向量机在金融领域的应用

2023-10-29 20:30

本文主要是介绍原创 | 支持向量机在金融领域的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

665e45044623918b4ea876619d6dc650.png

作者:金一鸣审校:陈之炎本文约4400字,建议阅读8分钟本文选择一个简单直观的应用实战——根据股价基本 历史数据来预测股市涨跌。

支持向量机(Support Vector Machine, SVM)是一种通过监督学习方式来进行学习的分类和回归模型,在多数情况下,人们都会用这个模型来进行较小规模的二分类任务的求解。支持向量机主要的思想是在特征空间上找到一个与正负样本边界最大的线性分类器,而求解边界最大化的问题从数学的角度来看即是求解凸二次规划(Convex Quadratic Programming)的最优化算法。

1.支持向量机的原理和分类

支持向量机可用于实现多种场景的分类问题,当训练数据线性可分时,利用硬边界最大化实现数据的二分类;另一方面支持向量机在训练数据线性不可分的时候,通过使用核函数(Kernel Function)以及软边界最大化来进行从样本空间的非线性可分到特征空间的线性可分,此算法最精彩和最经典的技巧也在于此。

1.1线性可分支持向量机

假设现在有一堆红球和黑球,对于一个简单的分类问题(如图1.1-1),首先,需要找出一个分离超平面(Hyperplane,在二维坐标轴上可以理解为一条直线)使得红球和黑球能够很好的分开,此时,可以有无数个平面可以作为这个二分类问题的解,所以需要找出一个最优的分离超平面,将分类的错误率降到最低,由此引出了边界最大化的概念,也就是定义正负数据集样本同时到超平面的最大距离为该数据集的最大边界。定义由边界最大化求出的分离超平面为:

a62286cc7b7d0e3817bfeeaf8becb03c.png

64e520e635df9eca6c521dbf28b4a7b4.png

图1.1-1 二分类问题可以有无数条分割线来对其分类

其中x是数据集特征空间的一个特征向量,w是对应的法向量,b可以理解成截距。对

551b88545f66af0759a1ee722a8704aa.png

abaa4937d7771a3a774e8c1d626e7e94.png可以理解成一个分类标签,整个式子就是一个分类器了,计算过程如下:

通过找到最合适的(w,b)也就可以找到唯一边界最大的分离超平面。红球(正样本)也就可以表示成afd466ebd70417b9b8fc4ce7a4c4e66c.png (正样本超平面),同样的黑球(负样本)可以表示成957621ca7e80a12e996dd2e31c5ece47.png(负样本超平面)。因此该问题的决策函数他就是线性支持向量机):

y = sign (x + b)                         1.1. 2

为了求解决策函数,这里需要再引入函数边界和几何边界的概念:

  • 函数边界:一个数据点到超平面的距离|w • x + b|,所以最小函数边界可以表示为:

4c5b77466bab5c9847263261390d3272.png            1.1. 3

df127db8422e369044f877a6198e7ba8.png                      1.1. 4

其中 (1.1.3) 为样本数据点到超平面的边界,注意这里右边式子乘 yi 是因为分类结果是取决于 w · x + b 和分类的标签 yi 两者的符号的一致性。

  • 几何边界:在函数边界基础上抽象成空间上的概念,可表示空间中点到平面的距离。对法向量w加上规范化的限制,这样即使w和b成倍增加也不会影响超平面在空 间中的改变。所以最小几何边界可表示成:

4275a5c1e03c72ba6630b10243763bcf.png         1.1. 5

79f92cc3d78bcf82f0bdb959a2d7e391.png              1.1. 6

其中Yi表示几何边界,其中||w||代表w的范数,这里直接取L2范数,比如对于三维的w,那么:

ce844114e174b2cb74b3112c95246ef4.png

这里找到了到样本点到最小距离的两个分离超平面,接下来求边界函数的最大值,即找到最大边界超平面求解最优化问题:

7e1060d14faec2f56aa8252ba47dd5a1.png

f3344f22048e33c4846b4cae1a27b70a.png    1.1. 7

注意:这里为了考虑该式子对于函数边界和几何边界的普适性,几何边界(w,b)可以是函数边界(nw,nb),n是任意倍数,所以,为了方便计算,首先假设边界为1,即Y • ||w|| = 1。可将原式改写成:

5046f7cef6c80372b2764b8f26e0cb38.png

a7d708230f784696a23ae85ea9f95026.png  1.1. 8

由于求2f20612d5632fa007e09478f3d7e6e64.jpeg的问题也就是求b38c37c757743c62e08ef56599b9592f.png所以式子也可以写成:

58a94b46c41b0438ec82423c6c854b85.png

e7a8f954dbb8211146065cda799f880f.png 1.1. 9

ed274e8ad0f62f269ef04ad4b455700e.png

6eaf501445afea58938d17d235750679.png

6aa2ec6b665a846579390959ba69c231.png         1.1. 10

所以当dd22c1f02d62c2fbcd8c340e8ccffc79.png = 1 时,Xi + b>1;当 5a35801c5847632ed02d26a0eeab7b75.png= —1 时,889a454087dcf10a5412bccdc04955e0.png

通过这种凸二次规划方式求出来的最大边界分离超平面是具有唯一性的,另外也可以利用拉格朗日函数(Lagrange function)的方法,通过将原始问题(Primal Problem)转化成对偶问题(Dual Problem):

1268642bfb66ad4e60db9f0615bb6c58.png    1.1. 11

23da0ef1878d38150f2ca5263950a8b5.png6cf1eeacd392375368b41a87c20849a0.png

其中a为所要求解的最优的拉格朗日乘子,对这个问题进行求解(此处省略推导过程)。

1.2线性不可分支持向量机

现实中,很多问题可不仅仅像线性可分那样简单,为此必须采取一些技巧来对更复杂的问题进行求解。通常对求完全解线性可分的支持向量算法叫硬边界(Hard Margin)支持向量机;如果允许一些噪声或者异常数据的分类错误,那么也可以找到一条近似于线性可分的超平面来对数据进行分类,这种对计算非线性可分(接近线性可分的数据,见图1.2-1中(a))的数据的算法叫软边界(Soft Margin)支持向量机。如 果有数据完全不能线性可分(见图1.2-1中(b)),这个时候我们就需要采取一定的转化技巧,也就是利用核技巧来进行分类问题的求解(见图1.2-2)。这节主要介绍一下对数据集线性不可分时应该采取的算法。

b105e8ac85e084bf0f966c7edd683166.png              1fce25befec5b1fd6c75ea6b747f6c8b.png

(a) 近似于线性可分            (b) 完全不能线性可分

图 1.2-1: 现实中各种分类情况

1.软边界支持向量机

对于处理近似线性可分的数据,可以对原来线性可分的最优化问题进行改进,容许一些异常或者例外的数据,这里通过对每一个样本都引人一个松驰变量ξ 来使函数间隔大于等于1,相当于放宽了求解条件,所以将原有约束条件改成:

0769f32995951caf17cbf783ca1c3c2d.png      1.2.12

84ce01d06abe08a6ae65190593f176d4.png

对于目标函数,也同样加上一个惩罚项,得到:

957206c2227e8a55720837f194aa5d62.png                       1.2.13

其中C为惩罚系数,一般取决于实际情况,C的值越大,说明惩罚的强度越大,也说明 对误分类点惩罚越大(可以简单理解成对分类错误宽容度就越差,太大了容易导致过拟合)。最终软边界的原始问题就写成:

d4d7ddc7eacce25f6c7e1c44a78b88f6.png

d41b5a92351a7ae16ca8637fc68ca29d.png    1.2.14

这样原始问题就变成了容许错误分类样本的存在,同样地,这也是一个凸二次规划问题, 最终可以求得(w, b, ξ)的值(这里需要注意的是这次解并不是唯一的)从而得到其中一个超平面,通过新的决策函数:

257764317c3e54946f1d340ecd8dcd69.png

其中c4fadb9b4349105562b5d29fe8cefcab.jpeg是新的样本点,y*是新的决策函数,通过软边界的容错技巧,可以求出新的分类结果。

2.核技巧

如果现有的一批数据完全线性不可分,利用上述两种方法肯定是不能解决问题的,为此用到了一个转化的思想。当数据在当前特征空间分布是非线性可分的时候,如果有一个函数可以将数据从低维空间映射到高维空间,那么是不是就可能是线性可分了呢?此时的算法其实就多了一步函数映射的过程,其他步骤依然可以按照之前线性可分问题一样求解。这里定义存在一个函数ϕ(x),可以将原空间线性不可分的数据映射到新空间中,变成线性可分。通过对(1.2.11)进行变形,将核函数引入到对偶问题的式子中,可得:

426ebc6e47c353746c02b73352656e36.png

60c09c71c06d393595164befc3cf5872.png                1.2.15

最后的决策函数为:

faa85cc4ec6a285cf08dfe9ad2c93d9e.png                  1.2.16

若核函数ϕ (xi) ϕ (xj )为正定核,则该对偶问题是凸二次规划问题,也就可以求得最优解。

fdb18955bc3c0a2860940a5057110f3f.png

图1.2-2  二分类问题可以通过核函数转成线性可分

常用的核函数主要有线性核函数(Linear Kernel Function)、多项式核函数(Polynomial Kernel Function) 、高斯(RBF)核函数和sigmoid核函数。在对不同数据集进行使用核函数的时候,需要对数据集的大致特征有所了解。比如特征和数量都比较少的时候首选线性核函数,如果效果不好再换其他核函数;特征数量比较少,样本数量正常的情况下可以选择用高斯核函数,对于每种核函数的选择需要根据数据集来进行选择。

2.支持向量机在金融中的应用

支持向量机(SVM)可以利用核函数的方式把数据从低维映射到高维,既可以应用于分类场景,也可以用来做回归问题,其本身又是求解最优化推导而来,不用担心局部最小值问题,所以在金融领域SVM也是有比较广泛的应用的。从总体来看, SVM在金融时序预测、信用风险评估、选择优质股票等问题上应用效果比较好。

本文选择一个简单直观的应用实战——根据股价基本 历史数据来预测股市涨跌。通过这个简单的例子,可以比较清晰的感受到传统机器学习在实际股市中的作用,加深对支持向量机算法的理解以及现实。

2.1问题理解与数据准备

首先对于预测股市(这里以上证指数为例)涨跌这个问题,可以直接看成是一个有监督学习的分类任务,更具体一点说是一个二分类问题。当股市上涨则属于标签1,下降 则是0。主要的任务是根据股市历史数据作为特征来进行训练,并预测接下来的时间里股市的涨跌情况。

首先加载股票基本数据,为此选择了从2011-01-01到2021-04-30时间段的数据作为这次应用的数据集。其中数据主要的特征有:

Open (当天开盘价)High (当天最高价)

Low (当天最低价)

Volume (当天成交的股票数量)

Money (当天成交的金额)

利用Pandas可以很方便查看数据集的基本结构和属性。

026d8bd0cd234199bc62a915f63d5043.png

表2.1-1 数据格式

读完数据之后,明显可以看到各个列的数据量级是有差异的,比如开盘价(Open) 和钱的总量(Money)。应用的第一步,需要对数据集进行标准化处理。大致了解数据的结构以及数据具体含义情况之后,对数据进行预处理(Preprocessing)。由于各个特征数据的量级以及分布都无法完全一致,会导致在利用机器学习算法训练的时候预估结果不准,所以需要对数据进行预处理,也可以说归一化处理 (Normalization)。主要目的就是把所有数据统一成一个标准,在不改变数据本身意义的前提下,对数据进行一次“美容”。归一化处理之后的数据可以直接输入到机器学习模型中进行训练。在这里将所有数据初始值设为100来进行归一化, 这样不仅可以方便分析数据,也可以方便做图从而看出走势。

c0eb90246845ba274ecdb061618fe461.png

表2.1-2 数据可视化

2be3946bc8f9b0e3f6e76f8421a2ca53.png

图2.1-1  归一化之后各个列的数据走势图

从图中可以看到,股市在2015上半年达到顶峰,然后立马又极速下跌,之后几年都处于震荡状态,最近几年总体趋势是向上的。另一方面,各个指标之间基本走势也是比较相似,其中成交的金额是整体波动比较小的一个指标。接下来,需要再做一个计算前后两天涨跌幅的计算,来代替之前的绝对值数据。并对收盘价涨的标记为正样本,跌的标 记为负样本。这样构造好的数据就可以直接作为机器学习的标准输人数据。

009f6f2eff939c2df2aacef291d0c8d2.png

表2.1-3 数据预处理

数据全部处理好之后,进行训练数据和测试数据集的分割,这里随机抽取总体数据的30%作为测试集。X_train表示训练集的训练数据,y_train表示训练集的标签,X_test 表示测试集的训练数据,y_test表示测试集的标签。到这里完成了整个流程的第一步。

f4624942a9837696481c42254f165be6.png

表2.1-4样本数据构造

2.2 支持向量机的应用

数据集处理好了之后,第二步,利用现有的机器学习库一一sklearn可以方便地帮助我们直接使用这个算法。一方面SVM算法本身实现的步骤比较多,如果自己手动实现会比较费时间,实际应用中,更多的是直接调用这个包中的方法。

3bc782b99a5076e3c9d1dc957ef15531.png

表 2.2-5  SVM模型的核心代码

这里的SVC就是指SVM算法的方法函数,直接利用SVC的fit方法把训练数据放进去进行训练,这里的kernel指的是核函数,这里先用最简单的线性核函数进行计算,之后会再对比一下其他核函数的效果。

2.3测试与效果评估

该问题是典型的二分类问题,并且该数据集的正负样本分布还比较均匀,在这里可以采用准确率的指标来对这次模型效果进行判定。

80f12ab9492be143f50978a64b2c902d.png

表 2.2-6: SVM 模型评估

这里补充一下另外用rbf核函数进行训练得到的结果

172cbee6f4af06b2aaa3314e4531470c.png

表 2.2-7: rbf核函数SVM模型的核心代码

通过使用两种不同核函数可以看出对于该数据集,采用线性核函数具有更好的效果。

2.4回顾与总结

回顾:本次实验通过使用不同核函数的svm算法来对股市涨跌进行预测,实验表明:利用线性核的svm效果较好,准确率能达到66.3%。

总结:通过本次svm在股票数据中的案例可以看出,一方面,通过对金融数据的获取和处理,利用机器学习的手段的确可以来预估一些比较金融场景下的问题。另一方面,本次实验效果比较一般,主要原因可能是数据的特征还是远远不足以预估A股这样波动比较大的市场,实际的量化交易中会利用很多更有效的特征来进行细化的分析和预估,比如在特征中加人日线的一些数据, 新闻数据的一些特征等。如果想要达到实际应用的效果,需要结合更多的特征,进行更加细化的分析才能预测更加精准。最后还是需要说明一下,股市预测可以预测长期的走势, 但是短期的预测基本是不可能的,预测时间期限越长,预测的难度也越低。

编辑:于腾凯

校对:林亦霖

数据派研究部介绍

数据派研究部成立于2017年初,以兴趣为核心划分多个组别,各组既遵循研究部整体的知识分享实践项目规划,又各具特色:

算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;

调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;

系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;

自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;

制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;

数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;

网络爬虫组:爬取网络信息,配合其他各组开发创意项目。

点击文末“阅读原文”,报名数据派研究部志愿者,总有一组适合你~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

未经许可的转载以及改编者,我们将依法追究其法律责任。

0f4c66ca6a62beba9c7abb75e0dd34ec.png

d7504c20ba99279245810a5a4b8476d5.png

点击“阅读原文”加入组织~

这篇关于原创 | 支持向量机在金融领域的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303193

相关文章

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件