视频:Python对多行业板块股票数据LSTM多任务学习预测:SMA、RSI及K-means聚类实现涨跌趋势与价格联合预测

278 阅读8分钟

全文链接: tecdat.cn/?p=43482

分析师:Junju Zhang

封面

视频

Python对多行业板块股票数据LSTM多任务学习预测:SMA、RSI

视频出处:拓端抖音号

在金融量化领域,多板块股票行情的精准预测一直是行业难点。传统模型往往难以兼顾涨跌趋势判断与价格幅度预测,且在多板块数据处理上存在局限。本报告基于实际业务场景,探索如何帮助客户通过LSTM多任务学习突破这一困境。本报告代码数据已分享在交流群,阅读原文进群咨询、定制数据报告和600+行业人士共同交流和成长。

本次研究聚焦近半年光伏、科技等8个板块的股票数据,从数据爬取到模型部署形成完整实操流程,通过LSTM多任务架构同时实现涨跌分类与价格回归,并结合技术指标优化模型表现,为量化分析提供可落地的技术参考。

多板块股票的LSTM多任务预测实操

项目背景

金融市场对多维度预测工具的需求日益迫切。单一板块的股票预测已无法满足资产配置需求,而多板块数据存在波动特性差异大、关联关系复杂等问题,传统模型难以应对。
LSTM模型在时序数据处理上的优势显著,尤其适合捕捉股票价格的长期依赖关系。本项目针对8大行业板块,构建多任务LSTM模型,同步预测涨跌趋势与未来价格,旨在为投资决策提供技术支撑,提升量化分析的效率与准确性。

数据获取及处理

数据爬取

实操工具:采用Python的Easyquotation库,在VSCode环境下实现多板块数据爬取。
该库专为国内股市设计,支持新浪、腾讯等多渠道数据源,仅需一行代码即可初始化接口:

# 初始化新浪行情接口
stock_quotation = easyquotation.use('sina')

其核心优势在于响应速度快(全市场行情获取约200ms),可批量抓取当前价、开盘价、成交量等12项关键指标,并支持历史K线数据获取。
爬取流程:

  1. 调用stock_quotation.real()方法获取指定板块股票代码的实时数据;
  2. 用pandas将数据结构化,计算涨跌幅、成交量(手)等衍生指标;
  3. 按每日固定时间(如早6点)循环采样半年数据,每次抓取后暂停10秒规避限制;
  4. 用openpyxl将各板块数据存入Excel不同工作表(示例文件:data/板块行情周报.xlsx)。

    图2-1 爬取数据保存文件图示
数据处理
  1. 数据归一化
    采用Min-Max归一化消除量纲差异,公式:x’=(x - x_min)/(x_max - x_min),将特征值映射至[0,1]区间。针对每个板块单独拟合归一化器,避免跨板块数据分布差异的干扰。
  2. 时间序列划分
    按“前80%为训练集、后20%为测试集”的时序顺序切分,测试集起始部分多取w天(w=窗口长度)历史数据,确保每个测试样本能调用完整历史信息,杜绝未来数据泄漏。
  3. 正则化策略
    通过三层防护降低过拟合:①控制LSTM隐藏单元数(32个)与层数(2层);②训练时启用L2权重衰减及早停机制;③对极端波动板块进行样本平衡处理。
  4. 滑动窗口构造
    设置窗口长度w=15天,用t-w至t-1天的特征预测t天数据:
  • 输入:15天归一化特征序列
  • 分类标签:t天收盘价>t-1天则为1(涨),否则为0(跌)
  • 回归标签:t天归一化收盘价
  1. 异常值处理
    用3σ原则与分位数法检测极端值(如涨跌幅超±10%),缺失值直接剔除,确保数据质量。
  2. 特征工程
    引入两类核心指标:
  • 简单移动平均线(SMA):反映中长期趋势,计算公式为指定周期内收盘价均值。
  • 相对强弱指数(RSI):判断超买超卖状态,值>70为超买,<30为超卖。


    图2-2 各板块简单移动平均线可视化
    从图中可见,预测值(橙色线)与实际收盘价(蓝色线)趋势高度吻合,尤其在科技、光伏板块拟合度突出,但消费板块高波动时段存在偏差,后续可引入政策新闻等外部特征优化。

-----------------------------------------------------------------------------------------------------------

相关文章

Python、R用深度学习神经网络组合预测优化能源消费总量时间序列预测及ARIMA、xgboost对比

Python、R用深度学习神经网络组合预测优化能源消费总量时间序列预测及ARIMA、xgboost对比
全文链接:tecdat.cn/?p=38726


构建项目模型

采用两层LSTM堆叠架构,核心参数:隐藏单元32个、输入维度为特征数、输出层分分类(涨跌)与回归(价格)双任务。
模型代码:

# LSTM多任务模型实现
class StockLSTM_MultiTask(nn.Module):
 def __init__(self, feature_num, hidden_size=32, layers=2, task_count=8):
 super(StockLSTM_MultiTask, self).__init__()
 # LSTM主体层
 self.lstm = nn.LSTM(feature_num, hidden_size, num_layers=layers, batch_first=True)
 # 分类任务输出(8个板块,每板块2类结果)
 self.classifier = nn.ModuleList([nn.Linear(hidden_size, 2) for _ in range(task_count)])
 # 回归任务输出(8个板块,每板块1个价格预测)
 self.regressor = nn.ModuleList([nn.Linear(hidden_size, 1) for _ in range(task_count)])
def forward(self, x):
 # x形状:[批量, 时间步, 特征数]
 lstm_output, _ = self.lstm(x)
 # 取最后一个时间步输出
 final_output = lstm_output[:, -1, :]
 # 生成分类与回归结果
 class_result = [fc(final_output) for fc in self.classifier]
 reg_result = [fc(final_output) for fc in self.regressor]
 return class_result, reg_result

优化策略:

  • 特征缩放:价格类用对数缩放,涨跌幅归一化至[-1,1]
  • 推理加速:采用TorchScript静态图优化,CPU多线程并行计算
  • 收敛优化:用K-means将涨跌幅聚类为高/中/低风险三类,辅助模型快速收敛

项目模型评估指标计算

  1. 分类任务指标
  • 混淆矩阵:直观展示各板块涨跌预测的正误分布
  • 准确率、召回率、F1值:综合评估分类效果
  • ROC AUC:衡量模型区分能力,值越接近1效果越好


    图3-5 光伏、电子、金融、科技分类ROC AUC曲线图

    图3-6 消费、新能源汽车、医疗、医药生物分类ROC AUC曲线图
  1. 回归任务指标
  • 均方误差(MSE):衡量预测价格与实际值的偏差
  • 根均方误差(RMSE):MSE的平方根,更贴合实际价格波动感知


    图3-7 各板块收盘价回归预测图
    表3-1 评估指标汇总表
    板块名称准确率 召回率 F1值ROC AUCMSE RMSE
    光伏0.9891 0.9861 0.98610.98860.0773 0.2781
    科技0.9891 0.9894 0.98940.98910.0602 0.2454
    医疗0.9565 0.9457 0.95600.95650.1757 0.4192
    医药生物1.0000 1.0000 1.00001.00000.0840 0.2897
    电子0.9728 0.9500 0.96820.97920.0700 0.2646
    金融0.9837 0.9583 0.97870.07930.0793 0.2815
    消费0.9457 0.9506 0.93900.12980.1298 0.3602
    新能源汽车0.9457 0.9082 0.94680.94830.1133 0.3366
    总计0.9728 0.9597 0.96980.97170.0987 0.3142
    评估结论:模型在医药生物、科技等板块表现优异,分类准确率超0.98,回归RMSE低于0.3;消费板块因波动性大,误差略高,但整体仍优于传统单任务模型。

结论

本项目构建的LSTM多任务模型实现了多板块股票涨跌与价格的联合预测,核心优势体现在:

  1. 多任务架构同时输出两类关键指标,满足投资决策的多维度需求;
  2. 结合SMA、RSI等技术指标与K-means聚类,提升模型对市场规律的捕捉能力;
  3. 经8大板块数据验证,整体准确率达0.9728,具备实际应用价值。
    需注意的是,股票市场受政策、突发事件等多种因素影响,模型预测结果仅作技术研究参考,不构成任何投资建议。

参考文献

  1. 何雪锋,周洁,陈德光,廖海.自然语言处理的深度学习模型综述[J].计算机应用与软件.2025
  2. 数量技术宅.免费、开源的股票爬虫Python库:Easyquotation[N].股票数据爬虫进阶:免费、开源的股票爬虫Python库,实测真香 - 数量技术宅 - 博客园
  3. Machine Learning.机器学习概念[J].developers.google.com/machine-lea…
  4. 马占辉.基于LSTM网络的中长期水文流量预测技术研究[J].中国水运.2025
  5. 马建阳.基于多任务学习的数据分类方法研究[D].北京交通大学.2018

封面

关于分析师

在此对 Junju Zhang 对本文所作的贡献表示诚挚感谢,他拥有信息与计算科学专业背景。擅长 Matlab、Python,专注于数理金融、数据采集、数学建模等领域。Junju Zhang 在数据处理与分析领域积累了丰富经验,,曾任赛迩科技数据分析师,尤其在利用数理方法解决金融数据问题、搭建数据采集与建模体系方面具备扎实的专业能力,为本文的数据分析与模型构建提供了重要支持。