我们如何发现这个公开数据集存在严重的批次混杂
先说结论
我们的模型在 62 名被试上达到 88.7% 准确率、AUC 0.950。
但一个完全不看脑电数据、只使用“这段录音是哪天录的”的模型,就能达到 AUC 0.892。
两者只差 0.05。这意味着:当前这个准确率无法排除“模型学到的是采集批次差异,而不是抑郁病理”。
事情是怎么被发现的
最初我们只是想核对一下数据完整性。解析 181 个 EDF 文件的头部字段时,注意到记录标识里带着采集日期,于是顺手统计了一下两组的时间分布:
| 采集月份 | HC | MDD |
|---|---|---|
| 2011-07 | 5 | 0 |
| 2011-08 | 14 | 0 |
| 2013-01 | 53 | 0 |
| 2013-04 | 2 | 15 |
| 2013-05 | 3 | 38 |
| 2013-06 | 3 | 19 |
| 2013-07 | 6 | 23 |
| 合计 | 86 | 95 |
健康对照集中在 2011 年夏天和 2013 年 1 月,患者集中在 2013 年 4–7 月。 全部 42 个采集日里,只有 2 天两组都有数据,且合计只有 5 个 HC 文件和 5 个 MDD 文件。
也就是说,“组别”和“采集批次”在这份数据里几乎完全共线。
三个对照实验
为了量化这个问题的严重程度,我们做了三组实验。
对照一:只用采集时间戳
把每个被试最早一次采集的时间戳当作唯一特征,跑同样的 5 折交叉验证:
| 输入 | 交叉验证 AUC |
|---|---|
| 仅采集时间戳 | 0.892 |
| 采集时间 + 性别 | 0.885 |
| 仅性别 | 0.484 |
| 随机猜测 | 0.500 |
对照二:只用 1 个全局幅度标量
把“全体通道、全体频带的平均功率”压成一个数字,作为唯一特征:
- 被试级准确率 77.4%
- AUC 0.817
95 维特征只把它从 0.817 推到 0.950。
对照三:抹掉整体幅度
把每个片段的 95 维特征减去自己的均值(等价于除以几何平均功率),彻底删掉“整体信号大小”这个信息:
- AUC 仍有 0.948
这一条是好消息:说明通道 × 频带的空间-频谱模式本身确实携带信息,不全是幅度假象。
排除了哪些其他可能
| 检查项 | 结果 | 结论 |
|---|---|---|
| 采集时长差异 | 仅用片段数预测组别 AUC 0.460 | 两组时长无系统差异 |
| 文件大小差异 | AUC 0.392 | 无系统差异 |
| 设备是否不同 | 两组用的是同一台设备(序列号一致) | 不是设备不同 |
| 标签是否错标 | 跨组别波形重复 0 对 | 没有 HC/MDD 混淆 |
| 是否只是碰运气 | 置换检验 p = 0.0099 | 关联是真实的 |
| 是否伪迹造成 | 完整做 ICA 去伪迹后,基线 AUC 反而略升 | 不是伪迹问题 |
诚实的结论
模型学到的信号是真实存在的,其中既包含可能与抑郁相关的脑电模式,也包含了无法与采集批次分离的技术差异。
在当前数据集上,没有任何统计手段能把这两者分开 —— 因为批次与标签完全共线。
这不是模型或代码的问题,是数据集设计层面的问题。
下一步
- 向数据方索取批次元数据(设备增益、电极批次、操作人员、被试人口学与量表)
- 做批次校正(ComBat)或留一批次交叉验证,报告跨批次的真实性能
- 在批次问题受控之前,不把准确率解释为诊断能力
我们把这件事写出来,是因为它比多报几个百分点的准确率重要得多。