融合动态新闻情感与TEGRU模型的股票价格预测实践

发布时间:2026/5/27 0:54:12

融合动态新闻情感与TEGRU模型的股票价格预测实践 1. 项目概述当新闻情绪遇见深度学习在金融市场的波涛汹涌中每一位参与者——无论是机构操盘手还是个人投资者——都在寻找那个能穿透市场噪音、窥见未来价格走势的“水晶球”。传统的技术分析依赖移动平均线、MACD、RSI等指标已经为我们服务了几十年。然而市场并非由冰冷的数字完全驱动它同样被海量的文本信息所塑造一份突如其来的财报、一则政策变动的新闻、甚至社交媒体上的集体情绪都可能引发股价的剧烈波动。过去我们尝试将新闻情感量化为“正面”或“负面”的简单标签然后扔进预测模型。但这种方法存在一个根本性的缺陷它忽略了信息的时效性和演变过程。一条三个月前的利好消息对今天股价的影响微乎其微而一条昨天发布的、语气微妙的行业评论其影响力可能远超我们的想象。如何让模型像一位经验丰富的交易员一样不仅读懂新闻的“内容”更能理解其随“时间”演变的“语境”和“置信度”成为了一个关键挑战。这正是我们这项研究的起点。我们不再满足于静态的情感分类而是构建了一套动态的、考虑时间序列的新闻情感量化系统。同时我们深知再好的特征也需要强大的模型来消化。因此我们设计了一种名为Transformer Encoder Gated Recurrent UnitTEGRU的混合神经网络架构。它结合了Transformer在捕捉全局依赖和重点信息上的优势以及GRU在处理序列动态变化上的特长专门用于攻克股票价格预测这一难题。更关键的是我们引入了一个新的评估指标——Accuracy Mean Absolute Percentage Error (AcMAPE)它不仅仅看预测价格准不准更关心预测的“方向”对不对因为对投资者而言看错涨跌趋势带来的损失远比价格预测有几块钱的误差要严重得多。本文将带你深入这个项目的核心。无论你是对量化交易感兴趣的开发者还是希望理解前沿AI如何应用于金融领域的研究者或是寻求更稳健投资策略的实践者你都将看到我们如何一步步从原始新闻文本和交易数据中提炼出有效的信号并构建一个能兼顾精度与趋势判断的预测框架。我们会拆解每一个技术环节分享实验中的得失并坦诚讨论模型的局限与未来的可能性。2. 核心思路与技术架构拆解2.1 问题定义与核心挑战股票价格预测本质上是一个多变量时间序列回归问题。我们的目标是利用截至时间点t的所有可用信息预测未来某个时间点如t1的股票收盘价。这里的“可用信息”是核心我们将其分为两大类定量技术指标源自历史交易数据如价格、成交量、以及由此衍生的动量、波动率、趋势等指标。这部分数据是结构化的、连续的。定性新闻情感源自新闻标题或内容反映了市场情绪和基本面预期。这部分数据是非结构化的、离散的且与时间强相关。核心挑战在于二者的融合如何量化情感简单的“正面/负面”二分类丢失了大量信息。我们需要一个能反映情感强度、且随时间演变的连续指标。如何对齐时序新闻的情感影响具有时效性和累积性模型必须理解情感指标在时间轴上的序列模式。如何有效建模模型需要既能从高维、可能共线的特征中提取关键信息Transformer所长又能记忆并理解序列的长期动态GRU所长。2.2 整体架构蓝图我们的解决方案是一个端到端的流水线主要分为三大模块其工作流程如下图所示概念示意[新闻文本数据流] - [动态情感量化引擎] - [情感指标] ↓ [历史交易数据] - [技术指标扩展] - [特征筛选] - [特征融合] - [TEGRU预测模型] - [明日收盘价预测] ↑ [时间序列对齐]模块一动态新闻情感量化引擎这是项目的创新点之一。我们摒弃了训练一个“一劳永逸”的情感分类模型。因为语言在演变市场关注点在迁移去年的“元宇宙”和今年的“人工智能”在情感表达上可能截然不同。我们采用主动学习Active Learning策略按月训练和更新模型。具体流程是以当月模型预测下个月新闻数据并计算模型对每条新闻分类结果的“置信度”这里用信息熵衡量。将那些模型“不确定”熵值高的新闻样本自动加入下个月的训练集。迭代此过程让模型持续吸收新的、令其困惑的语言模式从而保持对当前市场语言的敏感度。对于每条新闻我们进行方面情感分析。例如对于新闻“公司A发布超预期财报但行业监管政策收紧”模型会分别判断“公司A”公司层面和“行业监管”宏观层面的情感倾向。最终我们不是输出一个笼统的情感标签而是生成一系列每日情感指标例如当日所有新闻的“公司层面”平均正面置信度当日“宏观层面”的最大负面置信度当日“行业层面”的最小正面置信度 这样我们就得到了35维5个方面 × 7个统计量的动态情感特征它们是与股价数据在时间上严格对齐的数值型时间序列。模块二混合特征工程与筛选技术指标方面我们使用TA库从基础的“开-高-低-收-量”数据中扩展出43个常用指标如RSI、布林带、MACD等。此时特征总数膨胀到43个技术指标 35个情感指标 78维。高维特征必然伴随多重共线性问题会导致模型不稳定、过拟合。我们采用方差膨胀因子VIF进行特征筛选。这是一个迭代过程计算所有特征的VIF值移除VIF最大值通常5或10本研究采用5重新计算直至所有剩余特征的VIF均低于阈值。值得注意的是我们对每只股票独立进行此过程因为影响不同股票的关键因子可能完全不同。例如科技股可能对“创新”方面的新闻更敏感而银行股则对“利率”方面的新闻反应更大。模块三TEGRU预测模型这是模型架构的核心创新。Transformer在NLP和视觉领域大放异彩其多头注意力机制能有效捕捉特征间的复杂关联。但对于时间序列预测纯粹的Transformer有时会忽略严格的顺序依赖性。GRU作为RNN的变体天生为序列建模而生能很好地捕捉时间步之间的依赖关系。TEGRU的设计思想是“各取所长分工协作”Transformer编码器作为“特征萃取器”输入层将多特征时间序列进行嵌入。多头注意力层让模型可以同时关注不同特征在不同时间点上的重要性。例如它可能学会在财报季更加关注“公司”方面的情感指标而在市场恐慌时更关注“市场”波动率指标。GRU层作为“序列模式识别器”编码器输出的、已经过注意力加权的特征序列被送入GRU层。GRU的更新门和重置门机制会学习如何结合新的特征信息与历史记忆状态从而捕捉价格运动的趋势和周期模式。输出层最后通过一个全连接层输出对下一个时间点收盘价的预测值。这种“Transformer特征提取 GRU序列建模”的级联结构比单独使用任一模型或简单堆叠在理论上更能精细地处理金融时序数据的复杂特性。3. 数据准备与情感量化实战3.1 数据集构建双线并进新闻数据线 我们爬取了印尼领先财经媒体Kontan从2017年1月到2022年3月的新闻标题覆盖投资、金融、工业、国内、国际五个类别。原始文本数据需要经过清洗小写化、去除HTML标签、日期等和分词。最大的挑战在于情感标签的获取。由于缺乏高质量印尼语情感标注数据我们采用了一个巧妙的“迁移标注”方案使用翻译API将印尼语新闻标题翻译成英语。使用在英文情感分析任务上表现卓越的预训练模型siebert/sentiment-roberta-large-english准确率约93.2%为翻译后的标题打上“正面/负面”标签。将这些标签作为印尼语原文的“伪真实标签”用于后续模型训练。注意这种方法基于“优质翻译能保留核心情感”的假设。虽然会引入翻译误差但在缺乏资源的情况下这是获取大规模标注数据的一种有效折衷方案。我们后续的主动学习过程也在一定程度上能修正和适应这些初始标签的噪声。股价数据线 使用yfinance库获取了8只印尼证券交易所股票的日级交易数据。股票选择兼顾了两种类型高市值蓝筹股如BBCA中亚银行、TLKM印尼电信。这类股票走势相对稳健是检验模型基础能力的试金石。高波动性股票如INDX、SMMT选取期间内涨幅最高的股票。这类股票受消息面影响大是检验情感特征有效性的理想对象。3.2 主动学习模型构建让模型“与时俱进”我们选择了在印尼语任务上表现最好的预训练模型indobenchmark/indobert-base-p2作为基础模型。分别训练两个模型一个用于方面分类5类一个用于情感分类2类。主动学习的月度更新流程如下初始化用2017年1月的数据训练初始模型M1。预测与评估用模型M1预测2017年2月的数据并为每条预测样本计算置信度熵值H(X) -Σ p_i log2(p_i)。熵值越高代表模型越“不确定”。样本选择计算2月份所有预测样本的平均熵值作为阈值。将所有熵值高于此阈值的样本即模型不确定的样本加入训练集。模型更新用扩充后的训练集1月数据 筛选出的2月不确定样本训练新模型M2。循环迭代用M2预测3月数据重复步骤2-4直至生成2022年2月的模型。实操心得阈值动态性使用月度平均熵作为阈值是合理的因为它能自适应模型在不同时期的表现波动。在初期数据少时模型不确定性高阈值也高会筛选更多样本后期模型稳定阈值降低筛选更精准。数据效率通过这种方式我们成功将训练数据量平均减少了约60%。这意味着模型始终用“最值得学”的数据进行更新极大提升了训练效率并避免了在大量“简单”样本上的过拟合。标签校正主动学习过程也是一个对初始“翻译标注”噪声进行清洗的过程。模型在迭代中会逐渐学习到更符合印尼语语境的情感表达修正早期翻译带来的偏差。3.3 情感指标生成从分类到量化对于每一天我们使用当月的主动学习模型对该日所有新闻进行方面和情感分类。对于每一个方面如“公司”我们不再仅仅统计正面新闻条数而是利用模型输出的置信度分数即属于某一类的概率值生成7个统计量该方面平均置信度该方面正面情感平均置信度该方面负面情感平均置信度该方面正面情感最大置信度该方面负面情感最大置信度该方面正面情感最小置信度该方面负面情感最小置信度例如“公司方面正面情感最大置信度”为0.95意味着当天最利好的那条公司新闻模型有95%的把握认为它是积极的。这个指标比简单的“有3条正面新闻”包含了更强的信号强度信息。最终5个方面 × 7个指标 35维的每日情感指标时间序列就生成了与股价数据在日期上严格对齐。4. TEGRU模型实现与训练细节4.1 模型架构代码级解析以下是使用TensorFlow/Keras框架构建TEGRU核心部分的概念性代码关键参数已内联说明import tensorflow as tf from tensorflow.keras import layers, models def build_tegru_model(input_timesteps, input_features, d_model64, num_heads4, gru_units50): 构建TEGRU模型。 参数: input_timesteps: 输入时间步长回溯期如20天 input_features: 输入特征维度如技术指标情感指标总数 d_model: Transformer内部表示的维度 num_heads: 多头注意力的头数 gru_units: GRU层的神经元数量 # 输入层 inputs layers.Input(shape(input_timesteps, input_features)) # --- Transformer Encoder 部分 --- # 1. 特征嵌入与位置编码 # 由于是数值特征我们使用一个全连接层进行初始嵌入替代NLP中的词嵌入 x layers.Dense(d_model)(inputs) # [batch, timesteps, d_model] # 添加位置编码让模型感知时间顺序 positions tf.range(start0, limitinput_timesteps, delta1) position_embedding layers.Embedding(input_diminput_timesteps, output_dimd_model)(positions) # 将位置编码广播到batch维度并相加 x x tf.expand_dims(position_embedding, axis0) # 2. 多头自注意力层 attention_output layers.MultiHeadAttention( num_headsnum_heads, key_dimd_model // num_heads )(queryx, valuex, keyx) # 自注意力 # 残差连接与层归一化 x layers.LayerNormalization(epsilon1e-6)(x attention_output) # 3. 前馈网络 ffn_output layers.Dense(unitsd_model * 4, activationrelu)(x) ffn_output layers.Dense(unitsd_model)(ffn_output) # 残差连接与层归一化 encoder_output layers.LayerNormalization(epsilon1e-6)(x ffn_output) # --- GRU 解码部分 --- # 将Transformer的输出作为GRU的输入序列 gru_output layers.GRU(unitsgru_units, return_sequencesFalse)(encoder_output) # --- 输出层 --- # 预测下一个时间点的收盘价单值回归 outputs layers.Dense(units1)(gru_output) model models.Model(inputsinputs, outputsoutputs) return model # 示例假设我们使用20天回溯期筛选后剩下15个特征 model build_tegru_model(input_timesteps20, input_features15) model.summary()关键参数选择背后的逻辑d_model64这是一个平衡计算复杂度和表征能力的折中值。对于金融时序特征特征间关系复杂但维度适中64或128是常见的起始点。num_heads44个头可以让模型同时从“不同特征子集的关系”、“不同时间步的滞后效应”、“波动模式”、“趋势模式”等多个角度关注输入序列。gru_units50GRU单元数需要足够捕获序列动态但过多易过拟合。50是一个在实验中对中等长度序列如20-100步表现稳定的经验值。4.2 特征工程与模型训练流程数据标准化对于每个股票单独对训练集进行Z-score标准化减去均值除以标准差并使用相同的参数标准化验证集和测试集。这是处理金融数据不同量纲如价格和成交量的必需步骤。序列构建对于每个时间点t我们使用[t-lookback1: t]时间窗口内的所有特征技术情感来预测t1时刻的收盘价。lookback回溯期是一个超参数我们在{5, 10, 20, 50, 100, 200}中进行网格搜索。训练配置损失函数均方误差MSE。这是回归问题的标准损失能有效惩罚大的预测误差。优化器Adam学习率初始设为1e-4并配合ReduceLROnPlateau回调函数在验证损失停滞时自动降低学习率。早停使用EarlyStopping回调耐心设置为20个epoch以验证集损失不再下降为停止条件防止过拟合。批大小32或64取决于数据量。4.3 对比实验设计为了全面评估TEGRU的有效性我们设计了五组特征场景进行对比实验场景编号特征描述缩写目的1仅使用昨日收盘价预测今日收盘价UNI基线模型检验模型处理纯序列的能力2使用原始5个技术指标OHLCVOTI检验模型处理多变量基础指标的能力3使用扩展后的43个技术指标ETI检验模型处理高维复杂技术特征的能力4使用昨日收盘价 35个情感指标CAS隔离检验新闻情感特征的单独影响力5使用扩展技术指标 情感指标ETS全特征场景检验综合效果在每种场景下我们都将TEGRU与原始的Vanilla Transformer、Informer、FEDformer等先进时序Transformer模型进行对比。所有模型使用相同的训练/验证/测试集划分按时间顺序最后20%数据作为测试集并使用相同的超参数搜索空间以确保对比的公平性。5. 实验结果分析与深度解读5.1 预测精度对比TEGRU为何胜出我们使用**均方根误差RMSE和平均绝对百分比误差MAPE作为主要评估指标。下表汇总了TEGRU模型在ETS全特征**场景下相对于表现次优的基线模型FEDformer的性能提升百分比负值表示TEGRU误差更小即更优股票代码类型RMSE提升 (%)MAPE提升 (%)关键发现BBCA大盘蓝筹-12.5%-15.8%对于走势稳定的大盘股TEGRU能更精准捕捉其长期趋势。BBRI大盘蓝筹-18.2%-23.1%提升最显著表明该银行股价格可能对综合特征技术情感模式特别敏感。TLKM大盘蓝筹-9.7%-11.5%稳定提升验证了架构的普适性。BMRI大盘蓝筹-14.1%-19.3%情感特征CAS场景对其预测帮助极大说明市场新闻对该银行关注度高。ASII大盘蓝筹-10.3%-13.6%中等程度提升。INDX高波动股5.2%8.7%TEGRU表现不如FEDformer。这类股票可能受极端事件、市场情绪驱动更强其序列模式更复杂或非线性更强FEDformer的频率增强分解机制可能更适合捕捉其剧烈波动。SMMT高波动股3.8%6.1%同上TEGRU在此类股票上优势不明显。HITS高波动股1.5%2.9%微弱劣势接近持平。核心结论对于大盘蓝筹股TEGRU在绝大多数情况下显著优于其他Transformer变体。这证明了“Transformer特征提取 GRU序列建模”的混合架构在分析受多种因素基本面、技术面、市场情绪综合影响、且趋势相对明确的资产时具有强大优势。GRU层有效地整合了Transformer提取的丰富特征并将其转化为连贯的序列预测。对于高波动、小盘股TEGRU的优势减弱甚至消失。这可能是因为此类股票的价格序列噪声极大趋势性弱更像随机游走。FEDformer内置的序列分解季节性、趋势组件可能更擅长从嘈杂序列中分离出可预测的模式成分。这提示我们没有放之四海而皆准的“银弹”模型模型选择需与资产特性相匹配。5.2 情感特征的价值何时有用通过对比UNI仅价格、ETI仅技术和CAS价格情感、**ETS全特征**场景的MAPE我们可以评估情感特征的价值股票类型情感特征影响力可能原因分析高波动股 (INDX, SMMT)显著正面这类股票市值小易受消息面驱动。新闻情感特别是“公司”和“投资”方面的引入为模型提供了价格技术面之外的关键增量信息显著提升了预测精度。大盘蓝筹股 (BBCA, TLKM)轻微正面或中性这类股票体量大走势更多由宏观环境、行业政策和公司长期基本面决定对日常新闻的短期情绪冲击相对“免疫”。情感特征带来的信息增量有限有时甚至可能引入噪声。部分金融股 (BMRI, BBRI)较为正面金融股对宏观经济新闻、政策变动“国家”、“金融”方面敏感。情感指标有效捕捉了这类信息因此贡献度高于其他蓝筹股。重要心得情感分析不是“万金油”。它的效用高度依赖于投资标的的特性。在构建量化策略时对于小盘股、题材股加大情感特征的权重对于指数ETF或超级大盘股则可以适当降低其权重甚至主要依赖技术指标。5.3 AcMAPE一个更贴近实战的评估视角传统的MAPE只衡量价格预测的百分比误差。假设模型预测某股明日上涨1元实际涨0.1元MAPE很大预测下跌1元实际跌0.1元MAPE同样很大。但在实际交易中前者预测上涨实际微涨的方向是对的可能带来盈利后者预测下跌实际微跌方向是错的可能导致亏损。AcMAPE指标的精妙之处在于它将趋势分类的准确率纳入了惩罚项。计算公式为AcMAPE ( (1 - 趋势准确率) * 2 ) ( MAPE / 100 )趋势准确率将预测价格变化涨/跌与实际价格变化涨/跌进行比较得到的分类准确率。惩罚机制如果趋势预测错误准确率低(1 - Accuracy) * 2项会急剧增大导致AcMAPE值飙升。这意味着一个方向预测错误但价格误差小的模型其AcMAPE可能远高于一个方向预测正确但价格误差稍大的模型。实验结果揭示的风险 我们发现在某些场景下如UNI场景模型可能获得很低的MAPE如1.19%但其AcMAPE却很高如1.02对应趋势准确率仅50%。这相当于一个“精确的错误”——它完美地预测了收盘价却完全搞错了是涨是跌。对于趋势交易者而言这种模型是灾难性的。给实践者的启示 在评估和选择预测模型时绝不能只看MAPE或RMSE。必须引入像AcMAPE这样能反映方向预测能力的指标。在训练时甚至可以尝试将AcMAPE或其变体作为损失函数的一部分直接优化模型的方向预测能力从而构建出对实际交易更有价值的模型。5.4 最佳参数与过拟合陷阱通过网格搜索我们为每只股票找到了在ETS场景下的TEGRU“最佳”参数主要看lookback回溯期股票代码最佳 Lookback适用特征类型现象分析BBCA200单变量(UNI)超长回溯期对稳定大盘股有效说明其趋势性强依赖长期历史模式。BBRI20多变量(ETS)中等回溯期结合多特征效果最好说明其价格受中期约一个月多维因素影响。INDX5-10多变量(ETS)很短的回溯期印证了其短线交易属性价格主要受近期事件驱动。一个关键警告 在追求最佳参数时我们极易掉入过拟合的陷阱。特别是在使用大量特征如78维和复杂模型时模型可能会“记住”训练集中特定的噪声模式而在未知的测试集上表现糟糕。避坑指南严格的时间序列交叉验证永远不要随机划分训练测试集。必须按时间顺序划分用过去的数据训练预测未来的数据。我们的实验采用滚动窗口验证。观察验证集损失曲线如果训练损失持续下降而验证损失早早就开始上升这是过拟合的典型信号。必须依靠早停法。参数搜索的保守原则对于金融数据更简单模型、更短的回溯期、更少的特征往往比复杂配置更具鲁棒性。从简开始逐步增加复杂度并密切关注验证集性能。6. 项目复现指南与扩展思考6.1 一步步复现核心流程如果你想在自己的数据集上复现或借鉴此项目可以遵循以下步骤数据获取股价数据使用yfinance(Python库) 或AKShare (适用于A股) 获取日线数据OHLCV。新闻数据可通过财经网站API如东方财富、新浪财经或爬虫获取。关键是确保新闻有准确的时间戳。情感量化流水线预处理清洗新闻文本去重、去除无关字符、分词。基础标注如果没有标注数据可借鉴我们的“翻译-英文模型标注-回传”策略或使用中文金融情感词典进行初步标注。构建主动学习模型选择预训练模型如中文的bert-base-chinese或finbert。划分时间窗口如按月实现上述的主动学习循环。保存每个月的模型用于生成对应月份新闻的情感指标。生成指标对每日新闻使用当月模型计算各个方面的7个统计量形成情感指标时间序列。技术指标扩展使用TA-Lib或pandas-ta库从OHLCV数据计算数十个常用技术指标。特征工程对齐确保股价数据、技术指标、情感指标的日期索引完全对齐。合并将所有特征合并为一个大的DataFrame。筛选对每只股票独立进行VIF特征筛选去除共线性强的特征。建模与训练数据标准化按股票代码分组对训练集进行标准化并应用相同变换到测试集。序列生成根据选择的lookback参数创建监督学习序列样本。模型构建参考前文的TEGRU架构代码使用PyTorch或TensorFlow实现。训练使用早停和学习率衰减耐心训练。评估务必计算AcMAPE。你可以先实现一个计算趋势准确率的函数再结合MAPE进行计算。对比不同特征场景、不同模型、不同参数下的结果。6.2 常见问题与排查问题1情感指标与股价相关性很低甚至为负。排查检查新闻与股价的日期对齐是否准确新闻发布时间 vs 股价收盘时间。考虑引入时间滞后例如将当天新闻情感用于预测次日或第三天的股价。检查情感分类模型在金融领域的有效性通用情感模型可能不适用考虑使用金融领域预训练模型或自己标注数据微调。问题2模型在训练集上表现很好在测试集上暴跌。排查这是典型的过拟合。首先检查数据划分是否违反了时间序列原则未来数据泄露到了训练集。其次大幅减少特征数量VIF阈值调至更严格如3缩短lookback降低模型复杂度减少d_model、gru_units。增加Dropout层。问题3AcMAPE始终很高趋势预测不准。排查股价变化本身预测难度极大。尝试将预测目标从“具体价格”改为“价格变化率”或“涨跌分类二分类”。在损失函数中加入对方向错误的惩罚如自定义损失函数。考虑引入更多能反映市场情绪和动量的技术指标如ADR、ATR、资金流向等。6.3 未来改进方向本次研究为我们打开了多模态金融预测的一扇门但仍有很长的路要走新闻数据源的深化目前仅使用新闻标题。标题虽然凝练但信息量有限。未来应整合新闻正文、分析师报告、社交媒体舆情如股吧评论并进行更细粒度的实体识别具体公司、产品、人物。主动学习的频率提升月度更新可能无法捕捉市场的快速变化。可以探索周度甚至日度的增量学习或在线学习机制让模型对突发新闻反应更敏捷。AcMAPE作为损失函数这是一个极具潜力的方向。直接以AcMAPE或类似的“方向准确率”相关指标作为优化目标训练出的模型可能在实际交易中表现更稳健。但这需要解决自定义损失函数在深度学习框架中的可微性问题。多任务学习同时预测价格、波动率、交易量甚至涨跌方向。多个相关任务共享特征提取层Transformer Encoder可能通过知识共享提升主任务价格预测的性能。可解释性分析利用Transformer注意力权重的可视化分析模型在做出预测时更关注哪些特征、哪些时间点的信息。这不仅能增加模型信任度还能为人类交易员提供决策洞察。股票预测是一个充满魅力的“皇冠上的明珠”问题。本研究验证了融合动态新闻情感与深度学习时序模型的可行性并强调了评估指标与实战结合的重要性。它不是一个终点而是一个新的起点。希望这套方法论和其中的实践经验能为你探索自己的AI量化之路提供一块坚实的垫脚石。记住在市场中永远保持敬畏模型是工具风控才是生命线。

相关新闻