实现数据科学研究成果复制的十大法则
在一篇论文中,一组研究人员描述了再现性计算研究的十条规则。如果遵循这些规则,应该会产生更多可重复的结果。
所有的数据科学都是研究。不能因为研究成果没有发表在学术论文上,这就改变不了我们试图从浩如烟海的数据中获得真知灼见的事实。因此,对于任何从事内部分析的数据科学家来说,那篇论文中的十条规则都应该认真对待。规则1:对于每一项成果,重要的是记录其产生过程,了解研究成果的产生过程。了解如何从原始数据中得出这一结论,可以让您:捍卫结果,在发现错误时纠正结果,在数据更新时重现结果,并提交结果以供审查。如果你用的是编程语言(R,Python,Julia,F#等。)要编写您的分析脚本,过程应该是清晰的,前提是避免任何手动步骤。如果使用“鼠标点击”工具(如Excel),会增加你记录步骤的难度,因为你要描述一系列手工操作,很难记录和重现。规则2:避免手动数据操作步骤。您可能希望在编辑器中打开数据文件,手动更正格式错误或删除异常值。此外,现代操作系统使你可以很容易地剪切和粘贴应用程序。然而,你应该抵制走捷径的诱惑。手动数据操作是不能显示痕迹的操作。规则3:存档你使用的所有外部程序的精确版本。理想情况下,您应该创建一个包含所有运行软件的脚本的虚拟机。这允许您生成分析生态系统的快照,并轻松实现结果的可重复性。然而,这并不总是可行的。例如,如果您使用云服务,或者您分析的数据集非常大,您很难定义整个环境进行归档。另外,商业工具的使用可能会让你很难和别人分享这样的环境。至少,你必须记录下你使用的所有软件的版本,包括操作系统的版本。软件的任何细微变化都可能影响结果。规则4:记录所有定制脚本的版本应该使用版本控制系统(比如Git)来记录脚本的版本。您应该标记(快照)多个脚本和索引,以标记您生成的任何结果。这样,如果您决定稍后修改脚本(您肯定会这样做),您可以及时找到产生特定结果的确切脚本。规则5:尽量用标准格式记录所有中间结果。如果遵循规则1,应该可以从原始数据中重现任何结果。然而,虽然这在理论上是可能的,但在实践中有各种限制。问题可能包括:缺乏使用商业工具从零开始运行结果的资源(例如,使用大量集群计算资源),但没有某些工具的授权,使用某些工具的技术能力不足。在这些情况下,明智的做法是从原始数据的派生数据集开始。这些中间数据集(如CSV格式数据)提供了更多的分析选项,出错时更容易识别出有问题的结果,不必从头再来。规则6:对于具有随机性的分析,要记录潜在的随机种子数据,科学家往往不会为他们的分析设置种子值,因此无法准确再现机器学习研究。很多机器学习算法都包含随机成分。虽然强有力的结果可能在统计上是可重复的,但没有什么能与他人产生的精确数据相匹配。如果使用脚本和源代码控制,可以在脚本中设置种子值。规则7:总是保存原始数据。如果使用脚本/编程语言,图表通常会自动生成。但是如果使用Excel之类的工具绘制图表,请确保保存好原始数据。这样可以复制图表,并更仔细地检查图表背后的数据。规则8:生成层次分析流程输出结果,以便可以检查越来越多的详细级别。数据科学家的工作是以某种形式总结数据,并从数据中获得洞察力。但是,汇总很容易导致数据误用,所以应该允许相关方将汇总分解为数据点。对于每个汇总结果,它应该与用于计算汇总的数据相关。规则9:将文本陈述与潜在结果联系起来。归根结底,数据分析的结果是以文字的形式呈现的,但文字是不准确的。有时候,结论和分析之间的联系很难确定。因为论文往往是科研中最有影响力的部分,所以把论文和成果联系起来非常重要,而且因为1的规则,所以把论文和原始数据联系起来也非常重要。这可以通过在正文中添加脚注来实现。脚注中引用的文件或URL应包含论文中观察到的具体数据。如果你不能建立这种联系,你可能没有完全记录所有的步骤。规则10:公开脚本、流程和结果可能不适合公开业务环境中的所有数据。但是,向组织内的其他人披露数据是可以的。基于云的源代码控制系统,如Bitbucket和GitHub,允许创建私有存储,任何授权的同事都可以访问。公众监督可以提高分析的质量,所以你分享的越多,你的分析质量可能就越高。