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

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

相关文章

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod