Pablo Zavala · AI 安全评估 · 研究工程

Reddit新闻标题与道琼斯波动率

这是一份Carnegie Mellon大数据课程notebook,追问每日Reddit新闻标题中的词语能否预测道琼斯指数。在3,183个经筛选的词语中,配合Benjamini-Hochberg假发现率(FDR)控制的边际回归,只留下恰好一个对收益具有预测力的词,damn,notebook把这个幸存词解读为极小的预测能力,而非真正的发现;波动率则留下12个词,并带有真实的持续性。加入前一日的波动率,能把lasso从零个被选中的词,提升到样本内R²为0.262,这是一堂关于多重检验与混淆因素的精炼一课。

在3,183个标题词、10% FDR水平下,收益率只留下一个幸存词(damn,p = 1.0262e-05),而波动率留下12个词;加入前一日波动率,能把lasso从零个被选中的词,提升到样本内R²为0.262。

公开notebook仓库

证据来自对一份数据截止到2016年7月1日的已执行notebook所做的样本内分析;出于许可原因,源CSV文件留在公开仓库之外,因此重新运行需要先从Kaggle下载数据,再加上README中记录的那些派生词文件。

角色: 独立完成的课程作业:稀疏文本流水线、配合FDR的边际筛选、lasso与double lasso、自助法(bootstrap),以及结果解读。

评估卡

主要产出

样本
一个已执行的Jupyter notebook:3,183个经筛选的词,对齐1,988个交易日
评估器
边际OLS p值、q = 0.1的Benjamini-Hochberg FDR、带时间序列切分的LassoCV、double lasso、自助法(bootstrap)
结果
收益率只留下一个FDR幸存词,波动率则留下12个词;前一日波动率承载了大部分可预测的信号。
边界
在一份截止于2016年7月1日的单一数据集上的样本内拟合。

证据等级

样本
包含已执行notebook与README的公开仓库
评估器
已保存的单元格输出与单元格源代码,无需运行即可核查
结果
每一个公开数字都能追溯到notebook中打印出的输出或已提交的单元格源代码。
边界
出于许可原因,源CSV文件留在仓库之外;重新运行需要先从Kaggle下载,再加上两个通过课程获取、而非公开下载的词文件。

所属机构

样本
Carnegie Mellon课程项目
评估器
notebook作者信息行与文件日期
结果
2025年春季研究生课程作业;文件系统日期显示,该notebook写于2025年2月26日,图表导出于2025年3月29日。
边界
课程讲义、题目要求与评分背景信息保持不公开。

页面更新时间

样本
2026年7月
评估器
网站内容台账
结果
条目于2026年7月9日根据原始已执行notebook撰写。
边界
数字反映的是notebook已保存的输出,而非一次全新的重新运行。
包含样本、评估器、结果与边界的评估维度。
维度样本评估器结果边界
主要产出一个已执行的Jupyter notebook:3,183个经筛选的词,对齐1,988个交易日边际OLS p值、q = 0.1的Benjamini-Hochberg FDR、带时间序列切分的LassoCV、double lasso、自助法(bootstrap)收益率只留下一个FDR幸存词,波动率则留下12个词;前一日波动率承载了大部分可预测的信号。在一份截止于2016年7月1日的单一数据集上的样本内拟合。
证据等级包含已执行notebook与README的公开仓库已保存的单元格输出与单元格源代码,无需运行即可核查每一个公开数字都能追溯到notebook中打印出的输出或已提交的单元格源代码。出于许可原因,源CSV文件留在仓库之外;重新运行需要先从Kaggle下载,再加上两个通过课程获取、而非公开下载的词文件。
所属机构Carnegie Mellon课程项目notebook作者信息行与文件日期2025年春季研究生课程作业;文件系统日期显示,该notebook写于2025年2月26日,图表导出于2025年3月29日。课程讲义、题目要求与评分背景信息保持不公开。
页面更新时间2026年7月网站内容台账条目于2026年7月9日根据原始已执行notebook撰写。数字反映的是notebook已保存的输出,而非一次全新的重新运行。

如何检查这项工作

平坦对尖峰

两张直方图承载着核心发现。收益率的逐词p值均匀分布,这正是噪声的特征;而波动率面板则在接近零的位置堆积。Benjamini-Hochberg把这种视觉上的对比转化为具体计数:一个幸存词,对十二个幸存词。

数字可追溯到已提交的单元格

本页引用的每一个数字,都出现在该notebook已保存的单元格输出或已提交的单元格源代码之中,因此读者无需运行任何代码,只需打开文件,就能核实每一项主张。

读者核查提示

打开已提交的notebook,对照其已保存的输出与单元格源代码核对每一个被引用的数字;这项核查仅凭文件本身就能完成。完整的重新运行则需要全部四个输入CSV文件:RedditNews.csv与DJIA.csv可通过README中的Kaggle链接获取,而WordsFinal.csv与WordFreqFinal.csv,也就是README所描述的、由课程提供的派生文件,需要通过课程本身获取,而非公开下载。还有一点提醒:存档的那次运行中,有些单元格并非按顺序执行,因此一次干净的重新运行才是公平的检验。

案例研究

问题

把数以千计的标题词逐一对照市场结果做筛选,单凭运气就必然会产生看似有效的赢家,因此这项分析必须把经受住筛选纪律考验的信号,与从筛选关卡中溜过的噪声区分开来。

背景

该notebook把1,989个交易日的DJIA价格,最新日期为2016年7月1日,与每日Reddit国际新闻标题配对,构建出一个稀疏的逐日逐词计数矩阵,并把5,271个候选词筛选到3,183个。

方法

边际OLS回归对每个词打两次分:一次针对每日收益率,一次针对对数最高最低价波动率;q = 0.1的Benjamini-Hochberg设定发现门槛;带时间序列切分的LassoCV负责联合选择;一个double lasso针对1,429个被选中的词语控制变量,重新估计波动率的持续性;一次30次重抽样的自助法(bootstrap)探测惩罚强度的稳定性。

结果

收益率的表现就像噪声:3,183个词中有121个落在p = 0.05以下,p值直方图保持平坦,FDR门槛只留下恰好一个词,damn,p = 1.0262e-05。波动率留下12个词,领头的是tunisia、georgia和terror,但前一日波动率胜过它们所有:仅用词语的lasso把每一个系数都清零,而加入这一个自回归项之后,产生了六个被选中的系数、样本内R²为0.262,以及一个0.442的持续性系数,double lasso把它修剪到0.313。

边界

一切都停留在对单一数据集的样本内分析;根据已保存的执行计数,存档的那次运行中有些单元格并非按顺序执行;该notebook把这项练习当作特征选择方面的课程作业来对待,而不是一个可交易的发现。

证据

公开仓库中提供了这份已执行的notebook,其已保存的输出与单元格源代码包含了每一个被引用的数字,外加一份指向Kaggle源数据的README,该数据出于许可原因留在仓库之外。

关键结果

  • 3,183个词中恰好有1个在10% FDR下对收益率存活:damn,p = 1.0262e-05,被解读为极小的预测能力,而非真正的发现
  • 12个词在同一门槛下对波动率存活,截断点为p = 0.00035710,领头的是tunisia、georgia和terror
  • 仅用词语的lasso把两个目标的每一个系数都清零;前一日波动率把样本内R²从0.0提升到0.262,并产生六个被选中的系数
  • double lasso相对1,429个词语控制变量,把波动率持续性从朴素的0.647修剪到0.313(标准误0.0355)
  • 30次重抽样的自助法把lasso惩罚强度钉在0.0001的网格下限上,离散度为零,这是一个带有警示意味的方法论结果

方法

  • 稀疏文本特征化
  • 边际筛选
  • Benjamini-Hochberg FDR
  • 带时间序列交叉验证的Lasso
  • Double lasso
  • 自助法重抽样