恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
机器学习股票预测毕设全攻略:从数据清洗到模型验证的完整链路
首页
资讯中心
/
机器学习股票预测毕设全攻略:从数据清洗到模型验证的完整链路
机器学习股票预测毕设全攻略:从数据清洗到模型验证的完整链路
发布时间:2026/9/13 15:52:11
每年到毕业季我都会收到不少学弟学妹关于“机器学习做股票预测”的咨询。这个题目听起来确实很唬人既能体现编程能力又能扯上点金融知识答辩的时候PPT一放LSTM结构图一贴好像就成了一个完整的毕设。但老实说我见过太多在这个题目上翻车的案例有的被导师批“没有创新点”有的被答辩老师问“你的模型和随机猜测有什么区别”还有的干脆卡在数据预处理上一个月都没跑出一个像样的结果。这篇文章我不想整那些虚头巴脑的“学术前沿展望”就实打实地把一套能从头走到尾、能通过答辩的毕设完整链路拆给你看数据从哪来、特征怎么做、模型怎么选、验证怎么做才不会自欺欺人、论文该怎么写才不会被怼。全程会带上我当年踩过的坑和后来复盘得到的经验争取让你少走两个月的弯路。1. 开题之前先想清楚“预测”这两个字到底预测什么1.1 预测涨跌方向和预测价格是两个完全不同的课题这是所有做股票预测毕设的人第一个要理清的问题。很多人上来就说“我要用机器学习预测股票价格”然后打开某平台拿到历史日K线把收盘价当成标签丢给神经网络去回归。这么做的结果往往很惨模型在训练集上拟合得漂漂亮亮但一放到测试集上预测曲线几乎就是前一天价格的平移看起来还挺顺滑实则一点交易价值都没有。为什么会这样因为收盘价序列本身是非平稳的、高度自相关的。今天的价格和昨天的价格本来就差不了太多神经网络哪怕什么都不学直接把昨天的收盘价当作今天的预测值误差就已经很小了。于是模型学到的往往不是市场规律而是“把昨天的值搬过来”这个偷懒技巧。这也是为什么我在带毕设的时候第一件事就是劝退“直接预测原始价格”的方案。那应该预测什么我把几个常见的建模目标整理了一张表你可以根据自己的数据周期和技术栈来选择预测目标类型难度适合毕设的理由次日收盘价原始值回归低实现最快但极容易过拟合答辩时容易被质疑未来N日收益率回归中更符合金融逻辑消除了价格尺度影响可以往下延伸成策略涨跌方向二分类分类中评价指标直观准确率和F1都好讲答辩不易翻车未来N日最高/最低价区间回归高展示工作量足但调参量大时间紧的话不建议我的建议非常明确除非你的题目有硬性要求写“价格预测”否则优先考虑做涨跌方向分类或收益率回归。这两个目标更贴近真实的量化研究逻辑而且在论文里讲“为什么这么定义标签”时你有充足的理论支撑——价格不可直接预测但收益率的可预测性在学术上是有大量实证讨论的。1.2 拿到数据前先确认你的预测“可行性边界”还有一个经常被忽略但会影响整个毕设走向的问题你到底预测的是个股、指数、还是一篮子股票的组合我在实际做的时候发现预测指数比如沪深300、中证500往往比预测单只个股要稳定得多。原因也很好理解个股价格受消息面、资金操纵、极端波动影响太大经常出现莫名其妙的跳空缺口这些噪声对机器学习模型非常不友好而指数是几百只股票按权重加权的结果单只股票的异常波动会被稀释序列的统计特性相对稳定模型的泛化能力也更容易体现出来。如果你的导师要求必须是“个股预测”那我也给个折中思路选取6到10只流动性好、业务相对稳定的大盘股做面板数据这个后面会细说。这样你既满足了“个股”的字眼要求又通过扩大样本量规避了单只股票过拟合的问题。另外一个要提前定下来的参数是预测时间尺度。日线级预测数据最好找、计算量最小、可视化也直观是做毕设最稳妥的选择。分钟级和小时级数据虽然看起来很高级但除了数据清洗工作量暴涨之外你还得处理隔夜跳空、交易时段划分等问题非常消耗时间。除非你自认为精力极其充沛否则我劝你老老实实选日线。这里顺便说一句很多同学喜欢一上来就找“股票数据接口”然后发现要积分要会员心里就开始打退堂鼓。其实不用太焦虑后面我会专门讲数据这一块的解决方案。1.3 提前明确创新点避免被导师一句“这不就是套模型吗”打回毕设答辩最怕听到的问题就是“你这个工作量在哪里是不是调了个包”所以开题阶段就要想清楚论文的卖点是什么。根据我带过项目的经验以下三个方向是最容易在答辩时占据主动的数据层面的创新比如构造了一套结合技术指标和文本情绪的特征体系哪怕只是用爬虫抓了新闻标题做了个简单的情感打分都好过只用OHLCV。模型层面的创新不是让你发明新算法而是做融合或对比。比如把LSTM和XGBoost做Stacking集成或者用Attention机制替换掉LSTM最后几层都属于“结构上的改进”。验证层面的创新用滚动时间序列交叉验证替代传统的随机K折更严谨地评估模型在金融数据上的表现这一点写到论文里答辩老师会觉得你懂行。把这三个方向里占住一个论文的“研究意义”和“创新点”这两节就不会再让你脑袋空空了。2. 数据基建不要一上来就糊特征先解决数据源、清洗、预处理三座大山2.1 数据源到底怎么选免费接口、爬虫、还是手动下载股票数据拿不到是很多毕设卡壳的第一关。我不推荐你去爬那些页面结构一变就挂掉的免费网站更不推荐手工去东财下载Excel那会让你整个人都疯掉。比较稳的方案有这么几个Tushare Pro注册后有一定的积分门槛但基础日线数据对低积分用户也是开放的。优点是数据规范、字段齐全缺点是部分高级接口需要积分需要你在前期花点时间把积分养起来。AkShare开源且完全免费接口覆盖A股、港股、美股、期货、基金日线数据用起来非常顺手。缺点是部分接口本质上是爬虫遇到目标网站改版可能会短暂失效更新速度通常很快但你要有心理准备。我做毕设那会儿主力就是用AkShare至少省下了一周的找数据时间。baostock免费、稳定、不需要注册提供前复权、后复权等处理好的字段对新手极其友好。缺点是数据更新有一定延迟做历史回测完全够用。我的建议是主用AkShare或baostock两者做一个交叉验证。我在实践中发现不同数据源在同一只股票同一交易日偶尔会出现几厘钱的差异这未必是数据错了可能是复权方式或者处理逻辑不同。但为了避免答辩时被追问建议你在论文里固定某一个数据源并注明版本号和获取日期体现学术严谨性。很多同学会问要不要自己写爬虫。说实话如果是为了做一个数据采集模块来体现工作量可以用爬虫爬一些另类数据比如股吧评论、新闻标题作为辅助特征但作为价格数据的主来源我强烈不建议——你花一周清洗出来的数据不可能比现成开源库好几千行维护下来的结果更可靠。2.2 数据清洗最容易丢分也最容易出彩的环节拿到数据后的第一步不是写模型而是把数据整理成模型能吃的样子。这里的核心操作有四步去重和排序把日期设成索引按时间升序排列检查是否有重复的交易日。缺失值处理检查停牌日、未交易日的空值——通常的处理是直接剔除不会用插值去填补交易日缺失因为那会引入未来信息这个下一步展开讲。异常值处理用百分位数截断法或者3倍标准差法处理极端涨跌。比如某只股票某天因为乌龙指出现了一个极其离谱的价格这个值如果不处理会严重干扰归一化的效果、撑爆损失函数。复权处理这一点很多新手会忽略。股票会分红、送股导致历史价格看似“跳空下跌”。如果你直接用原始价格训练模型模型会把这些除权缺口当作真实的下跌信号来学习这是完全错误的。所以你需要统一采用“后复权”或“前复权”的数据让价格序列保持连贯性。注意不同数据源复权字段的命名不一样用之前一定要拿一只大权重股票比如贵州茅台看看连续价格是否平滑有无明显断崖。这个检查10秒钟就能做但能帮你避免后面整个训练过程的隐形污染。2.3 时间序列的数据泄漏问题为什么要“滚动”而不是“乱抽”这可能是整个毕设里最应该讲清楚、却又最多人栽跟头的概念。我之前见过一个同学把全部历史数据随机打乱后做了个80%/20%切分模型准确率高得离谱他兴高采烈地拿给我看我一看过程就让他重做。时间序列数据和横截面数据的根本区别在于你不能随机打乱样本。今天是8月1日你的模型在训练的时候“见过”了8月5日的数据哪怕只是在一个无关的特征上见过它在测试集上做预测时就已经作弊了。这在金融领域有个专门的说法叫“前视偏差”或“数据泄漏”。正确的切分方式只有一种按时间先后顺序拿前面的数据训练、后面的数据验证和测试。比如你有2016到2023年的日线数据可以用2016到2021做训练2022做验证2023做测试千万不要用随机打乱的K折交叉验证去处理时序数据。更严格一点的做法是在训练集和测试集之间加入一个隔离带embargo。比如你预测的是未来5天的收益率如果你的特征里包含了截止到今天t日的信息而标签是t5日的收益率那么训练集最后一条样本和测试集第一条样本之间其实有5天的信息重叠区。物理上严谨的处理方法是把重叠的那几天丢弃。对毕设来说不一定要求你做到这个程度但如果你能在论文里主动提到这个细节并做处理答辩老师会眼前一亮。2.4 用面板数据扩大样本量双索引的构造方式如果只拿一只股票来做假设你有7年日线数据一年240个交易日总共也就1600多条样本。对于深度学习模型来说这个数据量是远远不够的。所以我在毕设里强烈建议采用**面板数据Panel Data**结构同时纳入多只股票数据框变成“日期股票代码”的双索引。这样做的直接好处是样本量翻了几倍你选10只股票7年日线就能得到16000多条样本。不过千万注意面板数据在训练集和测试集切分时必须以日期为唯一维度来切不能以股票为单位切也不能随机切——原理和上面说的一致要保证任意时刻的预测都没有用到未来的信息。选股的标准我在前面提到过流动性好、业务稳定、覆盖不同行业比如银行、消费、科技、医药各来两三只。这样模型学到的不再是某一只股票的特殊规律而是一类市场共有的行为模式泛化性能会好很多。3. 特征工程决定模型上限的不是算法而是你喂给它的信号3.1 基本功技术指标、历史收益、波动率三大类特征特征工程是机器学习毕设里性价比最高的环节。你不用去自己发明特征成熟的量化分析里已经沉淀了大量被验证有效的因子你要做的是把TA们组装起来。我自己的实践里最常用的基础特征体系可以分成三组量价特征开盘价、收盘价、最高价、最低价、成交量、成交额、换手率。这些是模型最直接的输入但注意要转换成收益率或对数收益率的形式而不是用原始数值因为原始价格水平在不同股票之间差异很大。技术指标特征MA5、MA10、MA20、MACD、RSI、KDJ、布林带上中下轨、ATR平均真实波幅。技术指标本质上是量价数据的非线性变换能帮模型捕捉趋势、动量、超买超卖等状态信息。Python里直接用ta或talib库可以一条命令算出来不用自己手写。时序滞后特征过去N天的收益率、过去N天成交量的变化率。这类特征能让模型看到“最近一段时间发生了什么”配合LSTM这类序列模型效果会互补。这里有一条重要经验宁可多放几组候选特征让模型自己挑也别拍脑袋只留三五个。树模型有内置的特征选择能力神经网络也可以用正则化来压制无效特征。你唯一要防的是特征里混入了“未来信息”——凡是只能事后才能知道的量一律不能作为特征。3.2 别再做“全量样本标准化”这种低级错误特征缩放的标准做法是Z-Score归一化这个大家都知道。但放到时间序列里有个细节一旦做错效果会大打折扣——你只能用训练集的均值和方法去缩放测试集。举个例子你用2016到2021年的数据计算均值和方差然后把这个标准化参数应用到2022年和2023年的数据上这是对的。但如果你偷懒把全部数据合在一起算标准化参数那就又把未来信息泄漏进训练过程了。虽然很多公开教程都是这么教的但在金融时序上这么做是不严谨的。实际操作中我推荐对量价绝对值类的特征比如收盘价、成交量使用滚动Z-Score用过去N天的均值和标准差归一化当前值。这样做的好处是让特征值反映的是“当前值相对于近期的偏离程度”对不同股票也有一定的可比性。而像收益率这种本身就有统计平稳性的特征可以直接用全局标准化甚至直接摆在那让模型处理原始值都行。3.3 标签构造从“预测价格”到“预测信号”根据前面定的预测目标我来写一下标签的构造方法这部分代码逻辑直接决定你整个模型学的是什么东西。如果做涨跌方向分类训练标签可以这样构造import pandas as pd import numpy as np # future_return 未来5日的累计收益率 df[future_return] df.groupby(stock_code)[close].shift(-5) / df[close] - 1 # 将未来收益率映射为分类标签上涨、平盘、下跌 def label_ternary(x): if x 0.02: return 1 # 上涨 elif x -0.02: return 0 # 下跌 else: return np.nan # 剔除小涨小跌样本让分类边界更清晰 df[label] df[future_return].map(label_ternary) df df.dropna(subset[label])这段代码有几个细节值得说明shift(-5)表示取未来5个交易日之后的数据作为标签所以最后5行会被填充成NaN必须剔除。我设置了2%的阈值来过滤“小涨小跌”的日子只有波动足够大的样本才进入分类器。这能显著提升训练效率和模型输出的可信度因为贴近0波动的样本本身就是噪声模型学了也白学。如果你做的目标是收益率回归那就直接把这个二分类标签改成连续值就行但在评估时建议增加一个“方向准确率”指标作为辅助——哪怕预测的收益率数值有偏差只要符号正负对得多策略就能赚钱答辩时也更有说服力。3.4 一个容易出彩的特征用新闻情绪做另类因子如果你的论文想体现出一定工作量单纯的技术指标是不够的因为它们本质上都是价格数据的“翻来覆去”很容易被质疑“数学上和信息量上并没有真正增加什么”。这时候引入一个互补数据源会很有帮助。我记得我自己做的那版项目中抓取了东方财富股吧部分热门个股每天前100条帖子标题用SnowNLP打了情感分然后聚合出每日情感均值、情感标准差、积极/消极帖子比例这几个特征。实验结果确实显示加入情绪特征后模型的方向准确率有小幅提升更重要的是论文里多了一个完整的“另类数据获取与处理”章节答辩时老师对我的工作量认可度明显更高了。这个步骤要注意的点有两个一是爬虫要设置好延时和重试机制别把人家服务器搞崩了二是情感词典和打分模型的选择要在论文里交代清楚SnowNLP、BosonNLP、或者大模型API都可以但你必须说明白你的情绪分是怎么从文本到数字的。4. 模型实验从跑通baseline到对比“深度学习”与“传统机器学习”4.1 为什么要先跑一个“弱智”baseline我见过的毕设论文里最常见的问题是“一上来就是LSTM天下第一”。但真正严谨的流程是先建立一个最简单的基准再去比较复杂模型。baseline的意义是提供一个参照系如果复杂模型连最简单的基准都跑不过说明你的特征或者训练逻辑有问题而不是模型不够强。我建议至少建两个baseline随机猜测对二分类任务来说不管特征随便输出概率0.5每次猜上涨准确率大概是50%如果你剔除了一部分样本那有效基准应该是训练集里上涨样本的占比。这是最底线的底线。简单规则策略比如“如果过去5天上涨了就预测未来也会上涨”这种动量规则不需要任何机器学习纯规则就可以实现。如果机器学习模型打不过这个简单的动量策略那你要么特征有问题要么模型训练有问题。在毕设论文里单开一节对比表把“随机猜测”“简单规则”“逻辑回归”“XGBoost”“LSTM”放在一起哪怕结果不理想答辩老师也会觉得你的工作过程是完整的、科学的。4.2 模型家族选择XGBoost、LSTM、Transformer到底选谁对于股票预测这个场景我实际对比下来一般主推三个模型家族它们各有各的定位模型优点缺点适合的毕设定位Logistic回归/线性SVM解释性强训练极快无法捕捉复杂非线性作为baseline论文里体现“从简到繁”的逻辑XGBoost / LightGBM对表格数据极其友好特征重要性可解释对时序依赖的建模能力弱主力模型之一尤其是面板数据下表现稳定LSTM / GRU天然建模序列依赖图很漂亮调参成本高容易过拟合训练慢论文的主打模型用来讲深度学习的“序列建模能力”Transformer/Attention长期依赖建模强热点高数据需求量大日线尺度发挥不明显可选加分项适合作为“前沿尝试”写在展望里如果让我给一个比较省心又能出效果的搭配我会选“XGBoost LSTM”的组合。XGBoost做表格特征的主力预测器LSTM做纯序列特征的预测器然后把两者的预测结果做简单集成平均或Stacking。这套方案我实测下来的效果通常优于任何单一模型而且论文里可以单开一节“多模型集成策略”创新点也稳了。4.3 实验配置损失函数、批量大小、早停这里直接分享一套我实测下来比较稳的训练配置你可以作为调参起点再继续微调。损失函数如果做分类用交叉熵损失如果做回归建议用Huber Loss而不是MSE。因为MSE对异常值太过敏感股票收益率的厚尾分布会让训练不稳定Huber Loss在误差较小时表现为均方误差、误差较大时表现为绝对误差天然抗异常值。优化器与学习率Adam优化器学习率1e-3起步训练过程中如果验证集loss不下降就按0.1倍衰减。这是我调试下来又快又稳的方案。批量大小LSTM设32到64之间批量大小不要过大否则时间序列的动态特征会被一个batch内的多样本“平均模糊”掉。早停法Early Stopping监控验证集loss如果连续10到20个epoch没有改善就停止训练并回滚到验证集loss最小的那个epoch的权重。这一步是防止过拟合最便宜有效的手段比任何正则化都更直接。Dropout与正则化LSTM层之间加0.2到0.3的Dropout全连接层不要太大我一般用32到64个神经元加一层输出因为股票数据的有效信号非常稀疏模型太大只会记住噪声。4.4 特征重要性与模型可解释性论文里的亮点区论文的“实验结果分析”章节如果只是放“测试集准确率A模型57%B模型55%”那会显得非常单薄。我建议你用XGBoost训练完后把feature_importances_属性导出来画一张条形图看看哪些特征对预测贡献最大。我踩过的一个坑是某次实验里“前一天的成交量变化率”成了最重要的特征一开始以为这代表市场情绪信号后来仔细一看这个特征和标签之间其实有某种相关性——除了特征本身的信息含量外我怀疑是数据清洗时没有错开时间窗口导致的。所以遇到异常高的特征重要性一定要追回去检查是不是又制造了前视偏差。如果你用了LSTM这类黑盒模型可以补一个经典的归因图展示分析模型在预测上涨和下跌时分别关注了时间序列上哪几天的价格波动。这听起来很复杂其实用梯度加权类激活映射的一个简化版本就能做画出热力图后贴在论文里视觉冲击力很强。5. 验证与评估别让你的模型在测试集上“自嗨”5.1 一次划分 vs 滚动时间序列验证很多毕设的验证方案是用一次固定的时间切分前80%训练后20%测试然后汇报一个准确率就完了。这种做法的最大问题是结果对切分点极其敏感。你换一个切分的年份指标可能从58%跌到49%而你在论文里只能孤零零地汇报其中一个数这其实很不严谨。比较稳妥且能为论文撑腰的做法是滚动时间序列验证。以年为单位切训练2016-2021验证2022测试2023然后训练2016-2022验证2023测试2024……以此类推每个fold训练集是不断前移的但永远不会用未来数据训练。把每个fold的测试结果求平均得到的指标才更有说服力。这方法有一个额外的好处它可以画出模型在不同年份的表现曲线如果模型在牛熊市里的表现差异很大你论文的“模型在不同市场环境下的鲁棒性分析”一节就有着落了。5.2 别只看准确率方向准确率之外这5个指标更重要做股票预测的分类问题很多人汇报表就一个准确率。但如果样本里上涨下跌分布不平衡准确率会严重失真。我给你两个场景测试集里60%的样本是上涨一个“永远预测上涨”的傻瓜模型就能达到60%的准确率但显然没有任何实用价值。所以必须全维度评估。我每次跑实验都会输出这样一张指标表指标计算公式/含义关注理由Accuracy预测正确数/总数直观但受类别不平衡影响Precision预测上涨中真正上涨的比例判断“预测上涨”的信号是否可靠Recall真实上涨中被预测出来的比例判断“抓行情”的能力F1-Score精确率和召回率的调和平均综合平衡答辩时最好用AUCROC曲线下面积对不平衡类别更稳健排列能力评估这里额外提醒如果你做的是回归任务那对应的评估指标就是RMSE/MAE/MAPE另外一定要加一个方向准确率——预测收益率符号的正确率这个指标和交易策略盈亏直接挂钩论文里讲应用价值时非常好用。5.3 估值层面用“模拟交易”检验模型价值这是整个验证方案里最能拉开差距的一环。你训练出来的模型无论准确率多高都要经过一个简单的模拟交易回测来检验。具体做法是在测试集上模型每个交易日都输出预测信号比如预测明天上涨概率0.55就开多否则空仓或开空。按这些信号计算一个虚拟账户的净值曲线。统计累计收益率、年化收益率、最大回撤、夏普比率这几个核心指标。这样做的意义在于准确率是抽象的但收益曲线是直观的。老师看到一条稳步向上的净值曲线和你看到一张“准确率57.3%”的表格感受完全是两回事。而且回测还可以暴露模型的问题——比如某个模型准确率不错但最大回撤巨大说明它在极端行情下风险控制能力差这种细节在答辩讨论里特别加分。我自己用的回测框架其实很轻量用backtrader在本地跑日线级别策略配置好交易手续费和滑点后模型信号直接作为策略输入。如果你是第一次用这个框架建议先跑一个最简单的“买入持有”策略作为基准再对比你模型的净值曲线。6. 论文写作与答辩怎么把项目工作量“讲”成高分成果6.1 论文的章节骨架怎么搭股票预测毕设的论文结构我建议按照“问题定义—数据与特征—模型设计—实验验证—策略应用”这条逻辑线来走切忌一上来就大篇幅介绍机器学习历史。这里给一份比较流畅的目录参考第一章 绪论研究背景与意义、国内外研究现状、论文的主要工作与结构安排第二章 相关理论基础机器学习基础模型、时间序列分析、深度学习理论只写你实际用到的第三章 数据获取与预处理数据源说明、清洗流程、复权处理、标签构造第四章 特征工程与模型设计特征体系构建、特征重要性分析、模型架构与训练细节第五章 实验设计与结果分析验证方法、评价指标、对比实验、消融实验第六章 基于预测模型的量化策略应用模拟交易框架、回测结果、风险分析第七章 总结与展望结论、创新点、不足与改进方向这套结构的核心逻辑是“每一步都有依据每一处设计都能说清为什么”而不是把一堆代码拼在一起。6.2 实验记录跑模型之前先建一个实验台账这一点我踩过特别深的坑。研二那会儿做项目调参同一个模型跑了二十多个版本参数记在脚本里备注结果Excel表里只记了准确率和loss等过了一周想复现某个结果发现参数和结果根本对不上只能重新跑。毕设的周期比项目更长这个坑会更严重。所以强烈建议你从第一天开始就用一个CSV或Notion表格记录每一轮实验的以下字段时间、数据版本、特征列表、模型类型、关键超参数学习率、层数、dropout等、训练集/验证集/测试集的时间范围、准确率/F1/AUC、备注。到了写论文的时候你只需要稍微整理就能得到一张非常专业的“实验配置与结果总表”放在论文附录里工作量一眼看到底。6.3 答辩现场的“求生”话术最后聊几句答辩相关的话题。答辩老师未必是做量化金融的但他一定懂机器学习和统计。他问你问题通常不是为了挂你而是为了确认这些工作确实是你做的、你确实理解你在做什么。所以只要你的知识覆盖面够全基本不会出大问题。我个人认为最容易被问到也最需要提前准备的三类问题是“你的模型和随机猜测相比提升了多少这个提升是否具有统计显著性”应对办法是提前算好转折点如果你的准确率是55%你可以解释为样本量几千上万时和二项分布随机猜测的置信区间确实有显著差异最好能给出具体p值或者置信区间。“你的模型在实际交易中能用吗为什么没跑实盘”应对办法是坦诚回答毕设重点是验证机器学习方法在金融时序中的有效性而不是实盘交易实盘还要考虑交易成本、冲击成本、流动性、政策限制等大量非模型因素。这个回答既诚实又体现出你的思考深度。“你如何排除数据泄漏”这是一个终极大杀器问题答不好前面全是白搭。所以你在做实验的过程中一定要把训练/验证/测试的时间切分逻辑烂熟于心能够脱口而出“我们的训练集是2016到2021年验证集是2022年测试集是2023年所有标准化参数都只用训练集来拟合标签构造用的是shift之后的数据所以不存在模型看到未来信息的途径。”前面这些内容基本就是我带这一堆毕设项目过程中觉得最核心、最值得写下来的部分。最后再分享一条观察做这个题目决定你论文质量的往往不是模型有多高级而是你在“为什么这样做”上能讲得多清楚。数据为什么这么清洗、标签为什么这么定义、为什么选这个损失函数、为什么用时间序列验证而不是随机切分每一个“为什么”都是一次加分的机会。祝你能顺利把这条链路跑通写出自己真正能驾驭的毕设——毕竟答辩可以靠准备应对但肚子里有没有货自己心里最清楚。