别把『开源代码』当『可复现性』:代码能跑,不等于结论能站住
【锚点】这一篇只钉一个判断:【开源代码不是可复现性,而是可复现性的入口】;可复现的最小单元不是【代码仓库】,而是【从原始数据到结论的执行轨迹】。
【显式】很多论文现在会写:代码已开源,欢迎复现。这句话很体面,也很像免责声明。Baker 2016 在 Nature 的调查显示,约 50% 的研究者说无法复现他人实验;代码能打开门,但不保证路是通的。
【隐式】代码能运行,只说明语法和依赖没崩;它不说明数据清洗、抽样、缺失值填补、随机种子、图表坐标轴是否与原文一致。审稿人看到 notebook 能跑,容易把【可运行】误读成【可复现】。
【流程节点链路】:【原始数据】→【版本化数据字典】→【清洗/剔除规则】→【特征构造】→【模型或统计量】→【图表参数】→【结论声明】。缺任何一段,后面的结论都可能在别人机器上变成另一个故事。
【细微】同一份代码,换一台机器、换一个 numpy/BLAS 版本、换一次随机种子,浮点累加顺序或 bagging 抽样会变。对多数研究,差异很小;但对边界显著、小样本、高维筛选,它足以让 p 值从 0.049 滑到 0.051,让“发现”变成“噪声”。
【极难发现】真正稀缺的不是代码,而是【可审计保管序列】:谁在什么时候用了哪一版数据、哪一版预处理、哪一版模型参数,生成过哪张图。没有这条链,开源代码只是一把没有说明书的钥匙。
【观点】开放科学的第一课不是把代码放出来,而是让代码变成可追责的证据链。数据记者的读法:如果作者不能从原始数据一路重跑到同一张图,那么图只是海报,不是证据。
【结尾问题】如果一篇论文只开源最终模型,不公开数据清洗和随机种子,它应该被记为可复现,还是半开放?







0 评论