1. 引言
股票市场作为经济运行的“晴雨表”,其价格波动受到多元因素交织的影响:从宏观层面看,GDP增速、货币政策调整、通货膨胀率等经济指标会直接对市场预期产生作用;从中观层面看,行业周期的更迭以及产业政策的导向会重塑板块的估值逻辑;从微观层面看,企业的财务表现、重大战略决策、管理层变动等信息会驱动个股价格出现分化。另外,市场参与者的情绪波动、新闻舆情的传播、突发地缘政治事件等非经济因素,会让股价走势更加复杂。因此,股票价格呈现出明显的强随机性、非线性、非平稳性等特征[1] [2],传统基于财务分析或技术指标的预测方法难以有效捕捉复杂的动态规律。
机器学习技术在处理高维数据、识别非线性关系、动态建模等方面具有明显优势,成为突破传统预测方法局限的关键工具。支持向量机[3] [4]、决策树、随机森林[5]、XGBoost [6]等算法借助对历史数据的学习,可自动提取隐含特征、构建复杂预测模型,为解析股价波动的潜在模式提供了新途径。
本文首先收集股票历史交易数据,并通过数据清洗、特征工程等步骤提高数据质量,分别采用支持向量机、决策树、随机森林、XGBoost等四种机器学习算法构建股票价格预测模型,对比分析不同算法在预测股票价格方面的表现差异,最终得到适合于股票价格预测的模型和参数。
2. 数据获取和预处理
2.1. 数据获取
本文采用的股票价格数据主要通过调用Tushare股价数据接口完成。以沪深300指数为例,通过Tushare接口和pandas库,可以方便地获取2020年2月25日至2025年3月1日沪深300指数的日线数据。获取的数据字段说明和部分数据实例分别如表1、表2所示。
Table 1. Data field description
表1. 数据字段说明
名称 |
类型 |
描述 |
ts_code |
str |
Ts指数代码 |
trade_date |
str |
交易日 |
close |
float |
收盘点位 |
open |
float |
开盘点位 |
high |
float |
最高点位 |
low |
float |
最低点位 |
pre_close |
float |
昨日收盘点 |
vol |
float |
成交量 |
Table 2. Partial data examples
表2. 部分数据实例
ts_code |
trade_date |
close |
open |
high |
low |
Pre_close |
Vol |
000300.SH |
20200302 |
4069.66 |
4066.30 |
4126.71 |
4020.91 |
4132.84 |
219,313,559 |
000300.SH |
20200303 |
4091.36 |
4070.10 |
4132.78 |
4061.13 |
4123.85 |
219,369,777 |
000300.SH |
20200304 |
4115.05 |
4084.08 |
4110.53 |
4067.44 |
4073.02 |
182,424,730 |
000300.SH |
20200305 |
4206.72 |
3988.73 |
4031.15 |
3928.07 |
4084.88 |
231,823,115 |
000300.SH |
20200306 |
4138.50 |
3968.84 |
4092.54 |
3968.84 |
3940.05 |
172,475,717 |
000300.SH |
20200309 |
3997.13 |
4125.14 |
4147.65 |
4067.91 |
4069.67 |
208,102,035 |
000300.SH |
20200310 |
4082.73 |
4078.50 |
4115.26 |
4060.73 |
4091.36 |
197,416,402 |
000300.SH |
20200311 |
4028.42 |
4150.21 |
4215.85 |
4127.04 |
4115.05 |
161,656,111 |
000300.SH |
20200312 |
3950.91 |
4158.20 |
4181.31 |
4135.39 |
4206.73 |
157,060,458 |
000300.SH |
20200313 |
3895.31 |
4063.08 |
4063.08 |
3995.13 |
4138.51 |
188,296,722 |
2.2. 数据预处理
首先对数据进行缺失值处理,先使用线性插值法填充,若仍有缺失值则用前向填充。然后针对收盘价和成交量,分别创建滞后1期、3期和5期的新特征列[7],以捕捉数据的历史依赖关系,最后删除包含缺失值的行,以保证数据集的完整性和一致性。最后对特征数据进行标准化处理,并将数据集按8:2的比例划分为训练集和测试集。
3. 模型训练和参数选取
为了有效评估实验的结果,本文选取在股价预测中常用的四个指标:MSE (均方误差)、RMSE (均方根误差)、MAE (平均绝对误差)、MAPE (平均绝对百分比误差) [8],具体公式见(1)~(4):
(1)
(2)
(3)
(4)
3.1. SVM股价预测模型
本文采用径向基函数作为统一核函数,系统剖析惩罚函数参数C的取值对模型性能的影响。实验中设定C = {0.1, 1.0, 10.0}作为对比组,依靠标准化评估指标体系对模型预测效能进行量化分析,实验结果表明,当C = 1.0时,模型在测试集上的综合表现优于C = 0.1的情况,体现出对训练数据噪声的合理鲁棒性。虽然C = 10.0时的评价指标数值优化,显示出更强的训练数据拟合能力,但考虑到惩罚函数取值过大会增加模型过拟合风险,即可能过度捕捉训练数据中的局部噪声特征而降低泛化能力,本文权衡模型拟合精度与泛化性能,最终选定C = 1.0作为最优惩罚函数参数,该选择保证了模型对股价序列趋势特征的有效学习,又凭借正则化约束避免了过拟合问题,为后续股价预测模型的稳定性提供了可靠支撑。不同惩罚函数参数预测结果如表3所示,预测可视化结果如图1所示。
Table 3. Comparison of Predictions for different penalty function parameters
表3. 不同惩罚函数参数预测对比
惩罚函数参数 |
MSE |
RMSE |
MAE |
MAPE |
C = 0.1 |
319223.78 |
564.99 |
510.11 |
14.46% |
C = 1.0 |
284817.18 |
533.68 |
490.84 |
13.87% |
C = 10.0 |
114312.18 |
338.10 |
311.12 |
8.68% |
Figure 1. SVM model prediction results
图1. SVM模型预测结果
3.2. 决策树股价预测模型
Table 4. Comparison of prediction results with different tree depths
表4. 不同树深的预测结果对比
树深 |
MSE |
RMSE |
MAE |
MAPE |
1 |
111761.12 |
334.30 |
274.35 |
7.86% |
2 |
21143.94 |
145.40 |
112.54 |
3.16% |
3 |
9797.65 |
98.98 |
80.22 |
2.23% |
4 |
3255.95 |
57.06 |
42.46 |
1.16% |
5 |
1686.25 |
41.06 |
24.33 |
0.66% |
6 |
1632.80 |
40.40 |
21.42 |
0.57% |
7 |
1576.64 |
39.70 |
20.18 |
0.54% |
8 |
1843.16 |
42.93 |
23.21 |
0.62% |
9 |
1677.96 |
40.96 |
19.54 |
0.52% |
10 |
1643.69 |
40.54 |
19.05 |
0.50% |
在决策树模型中,本文通过调整最大树深,分析决策树模型复杂度与泛化能力之间的平衡关系。实验结果显示,当树深从4层增加到5层时,模型在关键评估指标上呈现出明显优化,这反映出深度的提高让模型可捕捉到股票序列中更为复杂的非线性依赖关系,提升预测精度。当树深超过5层后,随着模型复杂度提升,测试集指标趋于稳定甚至出现微小退化。这说明过度增加树深可能致使模型学习到训练数据中的噪声或者局部异常模式,引发过拟合风险。综合考虑模型预测性能与复杂性,本文选取树深为5作为最优参数,保证模型可充分挖掘股价数据的潜在特征结构,又避免了过拟合问题。前十层树深的预测结果如表4所示,预测可视化结果如图2所示。
Figure 2. Decision tree model prediction results
图2. 决策树模型预测结果
3.3. 随机森林股价预测模型
在随机森林模型参数选取过程中,同样选择固定树深为5,选取树的数量分别为50、100和200进行实验评估。结果表明,当树的数量从50增加到100时,模型性能明显增强;进一步将树的数量提升至200时,尽管各项指标仍有细微优化,但提升幅度极为有限。考虑到计算资源消耗和模型复杂度,选择100作为树的数量参数进行后续预测,既能保证模型具备较高的预测精度,又能在性能提升与资源成本间达到较好的平衡,避免计算效率下降,减少过拟合风险。不同数量的树参数评估指标结果如表5所示,预测可视化结果如图3所示。
Table 5. Comparison of prediction results with different numbers of trees
表5. 不同数量的树预测结果对比
树数量 |
MSE |
RMSE |
MAE |
MAPE |
50 |
1373.80 |
37.06 |
17.75 |
0.478% |
100 |
1350.38 |
36.74 |
17.27 |
0.464% |
200 |
1347.30 |
36.70 |
17.05 |
0.458% |
Figure 3. Random forest model prediction results
图3. 随机森林模型预测结果
3.4. XGBoost股价预测模型
在本次XGBoost模型参数优化过程中,针对最大深度(3, 5, 7)和学习率(0.01, 0.1, 0.2)进行交叉验证,当最大深度为3时,学习率0.01下模型欠拟合严重,0.1和0.2时性能显著提升;最大深度为5时,学习率0.1对应的MSE (1467.85)、RMSE (38.31)、MAE (19.59)和MAPE (0.53%)均为该深度下最优;最大深度为7时,尽管学习率调整能改善性能,但整体指标不如最大深度为5的部分组合。综合考量,选择最大深度为5、学习率为0.1作为后续实验参数,该组合在避免过拟合与欠拟合之间取得平衡,各项误差指标表现最佳,有助于提升股价预测的精准度与模型稳定性。结果如表6所示,预测可视化结果如图4所示。
Table 6. XGBoost parameter cross-validation results
表6. XGBoost参数交叉评估结果
最大深度 |
学习率 |
MSE |
RMSE |
MAE |
MAPE |
3 |
0.01 |
78204.99 |
279.65 |
259.55 |
7.32% |
3 |
0.1 |
1554.85 |
39.43 |
16.79 |
0.45% |
3 |
0.2 |
1551.75 |
39.39 |
20.50 |
0.55% |
5 |
0.01 |
76281.71 |
276.19 |
257.06 |
7.24% |
5 |
0.1 |
1537.76 |
39.21 |
17.87 |
0.47% |
5 |
0.2 |
1467.85 |
38.31 |
19.59 |
0.53% |
7 |
0.01 |
76428.19 |
276.45 |
257.29 |
7.25% |
7 |
0.1 |
1604.46 |
40.05 |
18.75 |
0.50% |
7 |
0.2 |
1606.30 |
40.07 |
20.66 |
0.55% |
Figure 4. XGBoost model prediction results
图4. XGBoost模型预测结果
4. 结果分析
本文采用的四种机器学习算法经过训练,生成各自的评估指标,从评估指标来看,SVM模型的MSE、RMSE、MAE和MAPE均高于其他三种算法,预测效果较差,难以有效捕捉股价数据特征。决策树模型虽优于SVM,但MAE和MAPE仍偏大,预测精度有待提高。随机森林模型的各项指标在四者中最优,借助集成策略有效降低方差,呈现出良好的预测稳定性与准确性。XGBoost模型表现也较为出色,与随机森林接近。综合考虑预测效果与稳定性,随机森林和XGBoost在误差控制与拟合能力上更具优势[9] [10],能为股价预测提供相对可靠的结果。
通过进一步分析,在股票价格预测场景中,SVM、决策树、随机森林与XGBoost的表现差异可能主要源于算法机制与金融数据特性的适配性。SVM擅长高维数据处理,但对参数敏感且难以直接适应股票数据的非平稳时序特性,在市场剧烈波动时泛化能力受限;决策树善于捕捉非线性关系,但单树结构易受市场噪声干扰导致过拟合,且对时序数据波动敏感;随机森林通过集成多棵决策树显著提升了结果的稳定性;XGBoost基于梯度提升框架,通过串行修正误差、正则化剪枝及并行计算,能高效处理高维金融数据(如多因子特征),同时抑制市场噪声,提升对复杂时序关系的拟合能力。
此外,在股票价格预测场景下,可以考虑采用集成方法进一步提升预测能力。集成方法可通过融合不同模型的互补信息进一步降低预测误差,同时也增加了计算复杂度、调参难度,在高噪声、非平稳的金融数据中的过拟合风险与可解释性损失亦不容忽视,需综合权衡利弊。
基金项目
2025年度河北省金融科技应用重点实验室课题:融合时序特征与监管规则量化的证券市场异常交易监测研究(课题编号:2025010)。