深度学习 A to Z · 3-6

时间序列·股价 — 先从战胜基线开始

要把股价输入神经网络,首先要用窗口切分数据,在不混入未来信息的前提下做归一化,并决定要预测什么(目标值)。本篇用真实的苹果股价 506 个交易日,让最简单的基线“明天 = 今天”、线性模型和 LSTM 以同样的方式(前推验证)一较高下。结果无论好坏都如实呈现。教育用示例,不构成投资建议。

506 天苹果股价(2015-02-17 ~ 2017-02-16)
1.209%基线“明天 = 今天”的预测误差(RMSE)
1.46 · 1.55%LSTM 两个种子的预测误差 — 比基线差
+37.3%如果在测试的 200 天里买入后一直持有
+43.7 → −22.4%p“最好的随机规则”的超额收益:训练 → 测试
2 段可在 Colab 中直接运行的代码
1窗口·目标值

窗口、归一化、目标值 — 把一串数字变成问题

只有一串价格是无法学习的。必须把它变成“看过去 L 天,预测下一天”的问题。窗口每滑动一格,就生成一个(输入,答案)对。

查看的值
窗口长度

为什么用收益率而不是价格,归一化要做到哪一步

价格在不同时期的水平不同(2015 年约 120 美元,2016 年约 90 美元),测试时会出现训练时从未见过的范围。所以要换成每日变化率(对数收益率 = log(今天/昨天) × 100%)。归一化(减去平均值再除以标准差)的基准只在训练区间计算。如果使用整个期间的平均值,测试区间的信息就会漏进训练中(第 4 节的泄漏)。目标值也要先决定:预测“下一天的收益率(数值)”、“涨还是跌(方向)”还是“波动大小”。

2期待与现实

深度学习为何被寄予厚望 — 以及数据先告诉我们的事

神经网络会自己找出多个信号之间的非线性关系。因此,像股价这样由众多因素交织而成的问题,人们对它寄予厚望。但首先要向数据问一个问题:“昨天的收益率和今天的收益率有关系吗?”

谁的自相关
3研究案例

有所改进的案例与没有改进的案例

两项大型研究的结论彼此不同。需要一起看清:在什么条件下有所改进,在什么条件下没有。

案例
4陷阱

四个陷阱 — 泄漏、过拟合、结构变化、交易成本

股价预测中的“惊人成绩”,大多来自这四个陷阱之一。下面用真实数据的数字逐一来看。

陷阱
交易成本(每次切换)
5前推验证

前推验证(walk-forward)— 只用过去学习,一步一步向前

评估方式与实际使用时完全相同。只用截至当天的过去数据训练,预测接下来的几天,等这几天过去后再把它们也加进去重新训练。测试区间必须始终在训练区间之后。

划分方式
6比较

基线 → 线性 → LSTM — 同样的考试,同样的尺子

用前推验证预测了最后 200 个交易日(2016-05-04 ~ 2017-02-16)。策略是“认为会涨就持有,认为会跌就持现金”,每次在持有与现金之间切换都扣除 0.1%。

查看

Colab 代码 — 亲手运行本页内容

两段代码都只使用 Colab 默认安装的库。点击“下载笔记本(.ipynb)”后,在 Colab 中通过文件 → 上传笔记本打开,或者复制后粘贴到新笔记本的单元格中。

代码 1 · 用前推验证评估基线和线性模型对应第 1·4·5·6 节 · numpy, matplotlib · CPU 1 秒 · 需要联网(下载数据)

下载公开 CSV,用前推验证评估 2 个基线和岭回归线性模型,并把扣除交易成本后的策略与买入并持有进行比较。也用数字展示泄漏和过拟合陷阱。想换成自己的数据,修改 PRICE 即可。

运行结果(2026-10-03 运行,numpy 2.4 · CPU)。数据相同时,无论何时运行结果都相同(过拟合实验固定种子 0)。
代码 2 · 用同样的前推验证评估 Keras LSTM对应第 6 节 · tensorflow(Keras), numpy · CPU 约 2~4 分钟

用过去 20 天的收益率预测下一天的 LSTM,每 50 天重新训练一次。2 个种子的结果分别列出。第 6 节的表格直接由这段输出生成。

运行结果(2026-10-03 运行,TensorFlow 2.21 · Keras 3.15 · CPU)。数字可能因种子·版本而不同。

AI 应用提示词 — 以这段代码为起点

这是粘贴到 ChatGPT、Qwen、Claude 等 AI 助手中的提示词。点击“复制”时,所选代码会一并附在提示词后面。把〔 〕里的内容换成自己的情况即可。

一并附上的代码

AI 的回答只是起点。它提出的论文·数值·库函数务必对照原文和官方文档核实。如果在竞赛·论文中借助了 AI,请按照主办方和期刊的规定说明使用的事实和范围。

术语表

与正文中黄色虚线下划线相同的词典。整个系列使用统一的写法。点击章节名可跳到首次出现的位置。

类比合集 — 以及类比失灵之处

类比是理解的第一步,但也可能成为误解的种子。果蝇·大脑类比标注了强度。直接 有证据表明实际在做同样的事 · 部分 只有部分性质相似 · 无 尚未发现对应的东西

概念日常类比果蝇·大脑类比类比失灵之处
窗看过去一周的天气,猜明天的天气部分 果蝇也会根据最近几秒的气味变化决定方向天气有物理规律,而股价则是人们的预测本身会改变价格
基线总说“明天和今天一样”的天气预报员无看似简单,却很难战胜。所有模型都必须先战胜它
数据泄漏考试前偷看了答案的学生的分数无大多数情况下,人们并不知道自己看过答案。它会悄悄藏进归一化和特征计算中
过拟合(选择偏差)抛 100 枚硬币,把正面次数多的那枚称作“幸运硬币”无“幸运”在下一次抛掷时就会消失。而实际的策略要识别出这一点要难得多
结构变化用夏装的销售记录预测冬季销售额部分 环境改变时,果蝇习得的记忆也会被重新改写季节可以预测,但市场性质的变化不知何时到来
前推验证每周只看截至上周的记录来预测下一周的模拟考试无与模拟考试不同,无论我的预测对错,市场都不会等我

作者简介与参考文献

E-1 作者简介 · E-2 学术参考文献 · E-3 图片参考资料

E-1 作者简介

Sangsun Ahn(M-Robo 公司代表)

曾任职于韩国电气安全公社、《每日经济新闻》,现创办每日经济外部风投企业 M-Robo 公司并担任代表。M-Robo 公司是由媒体内部创业起步的媒体风投企业,曾为《国民日报》提供机器人记者(StockBot)服务,并在韩国互联网振兴院、韩国言论振兴财团、韩国广播通信电波振兴院等机构开展了多个项目。此后运营自有的 AI 新闻报纸 Money-Robo。任代表期间获得亚洲开放数据黑客马拉松冠军,并因在数据创业领域的贡献两次获得行政安全部长官奖,是人工智能及区块链领域 5 项专利的发明人和注册人。著有《AI 犯罪与自我防御》,并为韩国技术教育大学在线终身教育院开发了金融科技、统计学、人工智能领域的在线学习内容。最高学位为经济学博士(东国大学,微观数理经济学)。目前在国民大学、湖西大学等多所大学讲授数据及人工智能相关课程。详细简历

课程

  • Sangsun Ahn (2025). 《面向商业的数据科学》讲义. 韩国开放网络大学 人工智能融合学科.
  • Sangsun Ahn (2025). [K-数字] 人工智能自然语言处理. STEP(智能职业培训平台), 韩国技术教育大学 在线终身教育院.
  • Sangsun Ahn (2024). [K-数字] 金融科技数据分析基础. STEP(智能职业培训平台), 韩国技术教育大学 在线终身教育院.

STEP 课程直达链接:link.step.or.kr/1qyVoJ · link.step.or.kr/M9na9N · link.step.or.kr/brqEyc
如因网站改版无法顺利访问,请访问 www.step.or.kr。

论文与报告

  • Sangsun Ahn (2025). 利用国民养老保障面板数据的家庭支出预测模型研究:基于人工智能模型的方法. 《未来社会》, 16(2). 原文
  • Sangsun Ahn (2025). 利用国民养老保障面板数据的家庭支出预测模型研究:人工智能方法. 国民养老保障面板学术会议报告资料(2025.05.13), 国民年金公团 国民年金研究院. 报告资料
  • Sangsun Ahn (2025). 基于 SNS 文本的可疑毒品交易检测算法研究:以模式与语境分析为中心. 《未来社会》, 16(1). 原文
  • Sangsun Ahn (2024). 面向金融领域异常检测模型安全的基于统计的对抗性数据应对方案:实证分析与模拟结果. 《未来社会》, 15(3). 原文
  • Sangsun Ahn (2024). 利用人工智能、基于虚拟角色特性的 SNS 帖子检测解决方案. 2024 Summer Newmedia Party 海报发表(2024.06.19), 首尔媒体研究生院大学.
  • Sangsun Ahn (2024). 利用工伤面板数据的机器学习模型. 第 10 届工伤保险面板学术会议海报发表(2024.05.17), 劳动福利公团 劳动福利研究院.
  • Sangsun Ahn (2024). 虚拟资产时间序列数据的分析与预测:时间序列模型与人工智能模型的比较及改进建议. 《未来社会》, 15(1). 原文

E-2 学术参考文献

  1. [R1] Gu, S., Kelly, B., & Xiu, D. (2020). Empirical asset pricing via machine learning. The Review of Financial Studies, 33(5), 2223–2273. doi:10.1093/rfs/hhaa009 — 第 3 节(树模型·神经网络表现最好,神经网络多空组合的样本外夏普比率为 1.35)
  2. [R2] Makridakis, S., Spiliotis, E., & Assimakopoulos, V. (2020). The M4 Competition: 100,000 time series and 61 forecasting methods. International Journal of Forecasting, 36(1), 54–74. — 第 3 节(6 种纯机器学习方法全部表现不佳,冠军是统计与机器学习的混合方法)

E-3 数据与图表参考资料

  • 股价数据:Plotly 示例数据集 finance-charts-apple.csv(GitHub plotly/datasets)。使用的是含分红调整的收盘价(AAPL.Adjusted)

给教育者的提示

这是为讲师、实务 OJT 负责人和辅导老师准备的教学运营指南。时间为估计值,请根据实际课堂调整。为避免本篇被理解为投资推荐,请在课程开始和结束时明确说明“教育用示例,不构成投资建议”。

对象想预测需求·销售额·传感器·价格等时间序列的大学生·从业者,金融科技入门者
先修知识平均值·标准差,3-2 的过拟合与验证,3-7 的 LSTM
学习目标① 用窗口·归一化·目标值把时间序列变成学习问题 ② 用数字说明泄漏·过拟合·结构变化·交易成本 ③ 用前推验证以同一把尺子比较基线与模型
预计时间阅读 40~50 分钟 · 演示 20 分钟 · Colab 实践 30 分钟(代码 1 10 分钟,代码 2 运行 4 分钟 + 解读 15 分钟)

三种教学方案

讲授型 50 分钟

以概念为主

导入 5 分钟(开篇的“LSTM 比基线差”)→ 第 1·2 节 15 分钟 → 第 4 节四个陷阱 15 分钟 → 第 5·6 节 10 分钟 → 检测题 5 分钟。

实务 OJT 90 分钟

以业务应用为主

为本团队的预测对象(需求·销售额等)确定基线 15 分钟 → 把第 4 节改成本团队数据的泄漏检查表 25 分钟 → 把本团队的时间序列放进代码 1 35 分钟 → 讨论结果报告方式 15 分钟。

一对一辅导

按水平安排进度

入门者只看第 1·4·6 节。中级者让他们亲手跟一遍代码 1 的前推验证循环,并亲自确认把标准化基准换成整个期间时数字会如何变化。

各节教学要点

章节停下来提问的问题操作提示
1 窗口·目标值“直接输入价格会有什么问题?”按 价格 → 收益率 的顺序点击
2 期待与现实“方向和波动大小,哪个更容易预测?”按 收益率 → 绝对值 的顺序点击,比较超出色带的柱子数量
3 研究案例“两项研究的结论为什么不同?”并排比较数据规模和问题类型这两行
4 陷阱“试了 100 个再挑出一个,它的成绩可信吗?”按 过拟合 → 交易成本(0 → 0.3%)的顺序查看
5 前推验证“为什么不能随机打乱划分?”交替点击两种方式
6 比较“LSTM 比基线差。可以试着改变什么?”按 RMSE → 策略收益 的顺序查看

常见误解 Top 5

误解正确解释要展示的场景
LSTM 专攻时间序列,所以比基线强在线索很少的问题上很难战胜基线。在这个实验中,LSTM 比基线差第 6 节
方向命中率 55% 就能赚钱如果猜错时亏得多,就会亏损。还需要考虑交易成本,并与持有做比较第 6 节的基线一行(55.0%)
回测表现好,实战中也会好多次尝试后挑选,结果就会混入偶然。市场的性质也会变化第 4 节 过拟合·结构变化
归一化用全部数据做一次就行基准必须只在训练区间计算。否则未来信息会泄漏第 1 节,第 4 节 泄漏
神经网络对股价预测毫无用处在大数据·多信号·横截面问题上,有研究显示出改进。条件很重要第 3 节

检测题(点击展开解析)

Q1. 对 505 个收益率使用 5 天窗口,能得到多少个(输入,答案)对?

505 − 5 = 500 个。

Q2. 测试 200 天、每 20 天重新训练一次,总共要训练几次?第一次训练有多少对?

10 次。第一次训练有 500 − 200 = 300 对,最后一次有 480 对。

Q3. 策略买卖了 40 次,交易成本每次 0.1%,被成本吃掉的收益是多少?

40 × 0.1 = 4%p(按对数收益近似)。

Q4. 从 100 个随机规则中挑出训练区间最好的一个,结果训练区间超额 +43.7%p,测试区间 −22.4%p。这说明了什么?

多次尝试后挑出的结果是迎合了偶然,所以在新的区间无法重现(过拟合·选择偏差)。测试区间只能在最后使用一次。

Q5. 基线“明天 = 今天”的预测误差比 LSTM 小。报告中应该怎么写?

如实写出结果:“在这份数据(1 只股票、506 天、信号为过去收益率)和这个设置(窗口 20 天、每 50 天重新训练、40 个轮次(epoch))下,LSTM 未能战胜基线(RMSE 1.462%·1.550% 对 1.209%)。”接着说明可以尝试改变的条件以及推广的局限。

Colab 作业

基础

把代码 1 的 ridge_fit 中的标准化基准(mu, sd)改为整个期间(全部 X)后重新运行。记录 RMSE 和策略收益如何变化,并用两句话写出为什么这属于泄漏。

挑战

把代码 2 的目标从“下一天的收益率”改为“下一天收益率的绝对值(波动大小)”。基线设为“过去 20 天的平均绝对值”。结合第 2 节的自相关,用 3 个以上的种子报告在波动预测上 LSTM 能否战胜基线。

难度调整与延伸学习

入门者跳过第 2·3 节也不会打断思路。第 4 节的过拟合和第 6 节的表格一定要看
进阶让学员调查多次尝试的回测成绩应如何校正(多重检验)。调查到的论文要查阅原文确认
延伸学习Sangsun Ahn,《面向商业的数据科学》讲义(数据科学概论)· STEP [K-数字] 金融科技数据分析基础(与本篇直接相关)· STEP [K-数字] 人工智能自然语言处理(与 3-5·3-8 相关)
讲师用资料检测题的评分标准和作业参考答案可在教师用答案页面(3-6)查看

辛苦了!

你已读完「3-6 时间序列·股价」篇。实验室的成员们各用一句话为你总结。

博士
博士我们用真实股价做了先从战胜基线开始的实验。
  • 必须先战胜最简单的基线“明天 = 今天”
  • 在这个实验中,LSTM 的预测误差比基线大
  • 始终检查泄漏·过拟合·结构变化·交易成本(教育用示例,不构成投资建议)
助手
助手LSTM 输给基线了……
果蝇研究员
果蝇研究员如实记录结果,才是真本事。