基于支持向量回归模型的选股策略
由bq20kttn创建,最终由bq20kttn 被浏览 26 用户
前面我们已经学习过了机器学习的树模型和神经网络模型,这些都是量化选股的主流模型。但是在监督学习中,还有一种很主流的学习方式,即支持向量机,本文则是基于支持向量回归模型开发的选股策略。
一、支持向量机
支持向量机(SVM)是应用最广泛的机器学习方法之一。在20世纪90年代,传统神经网络式微,深度学习尚未兴起,支持向量机由于其极高的预测正确率,并且能够解决非线性分类问题,成为当时最流行的机器学习方法。支持向量机可分为线性支持向量机和核支持向量机,前者针对线性分类问题,后者属于非线性分类器。
1.最大分割间隔\n线性支持向量机以寻找能线性区分两类样本的最优分类超平面为核心,遵循最大间隔分类原则。如图,左右两图中的黑色直线均可作为区分两类样本的分类超平面,将黑色直线向两侧平移至与样本点相交,得到红色和蓝色的间隔边界,两条边界之间的距离即为分类间隔;左图的分类间隔明显宽于右图,更大的间隔意味着模型对样本扰动的鲁棒性更强、泛化能力更优,因此左图的黑色直线是更优的分类超平面,而落在间隔边界上的样本点即为支持向量,其位置唯一决定了最优超平面的构建。\n
- 松弛变量
松弛变量是为了应对现实数据里的噪音和不完美情况,它让模型不用强求把所有样本都完美分开,而是允许一定的 “容错空间”。如图,大部分样本都在安全的分类间隔里(松弛变量为 0);有些样本没被分错,但跑到了间隔中间(松弛变量是 0 到 1 之间的小正数);还有少数样本被完全分错(松弛变量大于 1)。通过这种方式,模型可以在 “分类间隔尽量大” 和 “错误尽量少” 之间找到平衡,更贴近真实场景。松弛变量的引入,让模型在追求最大间隔的同时,可容纳一定的误分类与样本间隔侵占,是软间隔支持向量机的核心设计。\n
- 惩罚系数C
惩罚系数 C 是用来控制模型对分类错误的严格程度,核心是在 “分类正确率” 和 “分类间隔宽度” 之间做权衡。如图,当 C 取较大值(左图 C=100)时,模型对错误分类的容忍度极低,会尽可能保证所有样本被正确分类,代价是分类间隔变得很窄,容易过拟合;当 C 取较小值(右图 C=0.1)时,模型对错误更宽容,会优先追求更宽的分类间隔,允许少量样本被分错,这样模型更简单,泛化能力可能更强,但训练时的正确率会稍低。
4.核函数
核函数是支持向量机用来解决非线性分类问题的核心工具。当低维空间中的数据无法用直线分开时,核函数可以将数据映射到高维空间,让数据在高维里变得线性可分,再用线性支持向量机完成分类;更巧妙的是,它不需要显式地进行高维映射,仅通过低维空间的计算就能得到高维空间的内积,避免了高维计算的复杂度。
如图表 8 所示,不同核函数的分类表现差异明显:
- 线性核(Linear):分类边界是直线,仅适合数据本身线性可分的场景,计算速度最快。
- 多项式核(Polynomial):分类边界是曲线,阶数越高(如 7 阶对比 3 阶),边界越复杂,能拟合更弯曲的分界,但高阶容易过拟合。
- Sigmoid 核:分类边界类似简单神经网络的非线性映射,适合部分非线性问题,但稳定性稍弱。
- 高斯核(RBF):分类边界是平滑的曲线,能处理非常复杂的非线性情况(相当于映射到无穷维空间),是最常用的核函数,但也容易过拟合。
实际应用中,需根据数据特点选择核函数:线性核适合简单线性问题,高斯核适合复杂非线性场景,多项式核介于两者之间,同时要在拟合能力、计算速度和过拟合风险之间做权衡。
5.支持向量回归
支持向量回归(SVR)是支持向量机(SVM)从分类任务到回归任务的延伸,其核心逻辑是将 SVM “最大化分类间隔以区分两类样本” 的目标,转化为 “构建 ε- 容忍带以拟合连续标签” 的目标,样本落在容忍带内无损失,偏离带外则按偏离程度计算损失,同时保留 SVM 的支持向量、核函数、惩罚系数等核心框架,以此实现对连续值(如股票收益率)的预测。
二、策略步骤搭建
1. 数据准备与预处理
(1)训练数据准备(2023.01.01-2024.12.31)
数据范围:全市场非 ST、非停牌、无风险警示、上市满 252 天且流通市值超 5 亿的股票。
特征工程:构建基本面、量价、技术面三类共32个核心特征,对特征执行极值截断、空值剔除处理。
特征预处理:对训练集进行标准化,为避免特征之间的共线性,对32个特征进行主成分分析(PCA),得到16个维度转换后的新特征
标签定义:以股票未来 20 日收益率作为模型训练标签,建立特征与未来收益的映射关系。
(2)测试数据准备(2025.01.01-2026.01.18)
特征数据:与训练阶段一致的核心特征,保持数据口径统一;特征预处理基于训练集拟合标准化规则,避免数据泄露。
2.模型训练与预测
(1)模型训练参数
模型类型:支持向量回归(SVR),采用高斯核(RBF)处理非线性关系。
核心参数:惩罚系数 C=1.0,gamma=scale,损失容忍度 epsilon=0.1,最大迭代次数 3000。
SVR_PARAMS = {
"kernel": "rbf", # 高斯核/RBF核
"C": 1.0, # 惩罚系数
"gamma": "scale", # 核函数参数
"epsilon": 0.1, # 损失容忍度
"max_iter": 3000 # 最大迭代次数
}
(2)收益率预测
将测试阶段预处理后的特征数据输入训练好的 SVR 模型,输出每只股票未来 20 日收益率预测值。
3.选股与交易执行
选股规则:基于收益率预测值,筛选排名前 10 的股票构建持仓组合。
调仓周期:每 20 个交易日调仓一次。
仓位管理:目标持仓 10 只股票,等权分配仓位(单股权重 10%)。
交易成本:买入成本 0.03%,卖出成本 0.13%(最低 5 元)。
基准指数:沪深 300 指数(000300.SH)。
三、回测结果
模型训练时间为 2023 年 1 月 1 日 - 2024 年 12 月 31 日,回测时间为 2025 年 1 月 1 日 - 2026 年 1 月 18 日。
四、注意事项
- SVR 在捕捉非线性关系上表现较好,但对大样本训练效率偏低,泛化能力弱于 LightGBM 等树模型。
- 模型核心参数(如惩罚系数 C、损失容忍度)建议通过贝叶斯或其他方法进行参数优化,避免手动设置导致的效果偏差。
- 本文用的SVR回归模型,可切换为SVM分类模型(SVC)预测股票涨跌,适配 “选股” 的分类需求,如何调用可以求助于大模型。
- 可与趋势跟踪、行业中性等策略组合,分散单一模型的风险,提升策略整体稳定性。
策略源码:
\