實現(xiàn)數(shù)據(jù)科學(xué)研究結(jié)果可復(fù)制的十條規(guī)則
近年來,有越來越多的跡象表明,科研結(jié)果的可復(fù)現(xiàn)性出現(xiàn)了危機。對心理學(xué)和癌癥生物學(xué)論文的檢查發(fā)現(xiàn),分別只有40%和10%的結(jié)果是可復(fù)現(xiàn)的。
《自然》雜志在2016年對科研人員的調(diào)查結(jié)果顯示:
- 52%的科研人員認為存在嚴重的可復(fù)現(xiàn)性危機
- 70%的科學(xué)家試圖復(fù)現(xiàn)另一位科學(xué)家的試驗,但以失敗告終
2013年,一群科研人員在一篇論文中,講述了可復(fù)現(xiàn)性計算研究的十條規(guī)則。如果遵循這些規(guī)則,應(yīng)該會產(chǎn)生更具可復(fù)現(xiàn)性的結(jié)果。
所有的數(shù)據(jù)科學(xué)都是研究。僅僅因為研究結(jié)果沒有發(fā)表在學(xué)術(shù)論文中,這不會改變我們試圖從龐雜數(shù)據(jù)中獲取洞見的事實。因此,對于任何從事內(nèi)部分析的數(shù)據(jù)科學(xué)家來說,那篇論文中的十條規(guī)則都應(yīng)該引起重視。
規(guī)則1:對于每個結(jié)果,都要記錄它的產(chǎn)生過程
知道研究結(jié)果的產(chǎn)生過程很重要。知道你如何從原始數(shù)據(jù)中得出該結(jié)論,這可以讓你:
- 為結(jié)果辯護
- 發(fā)現(xiàn)錯誤時修改結(jié)果
- 在數(shù)據(jù)更新時復(fù)現(xiàn)結(jié)果
- 提交結(jié)果以供評審
如果你使用一種編程語言(R、Python、Julia、F#等等)來編寫你的分析腳本,那么過程應(yīng)該是清晰明了的,前提是避免了任何的手動步驟。如果使用“鼠標點擊”工具(比如Excel),這會使你更難記錄步驟,因為你必須描述一系列手動操作,而手動操作很難記錄和復(fù)現(xiàn)。
規(guī)則2:避免手動數(shù)據(jù)操作步驟
你可能很想在編輯器中打開數(shù)據(jù)文件,手動修改格式錯誤或者刪除異常值。而且,現(xiàn)代的操作系統(tǒng)使你可以輕松地剪切和粘貼應(yīng)用。然而,你應(yīng)該抵擋住這種走捷徑的誘惑。手動數(shù)據(jù)操作是無法顯示蹤跡的操作。
規(guī)則3:存檔你使用的所有外部程序的準確版本
理想情況下,你應(yīng)該創(chuàng)建一個包含所有腳本運行軟件的虛擬機。這使你可以生成分析生態(tài)系統(tǒng)的快照,輕松實現(xiàn)結(jié)果的可復(fù)現(xiàn)性。
不過,這并不總是可行。例如,如果你使用云服務(wù),或者你分析的數(shù)據(jù)集非常龐大,那么你很難圈定整個環(huán)境進行存檔。另外,商業(yè)工具的使用可能使你難以和其他人分享這樣的一個環(huán)境。
至少,你必須記錄你使用的所有軟件的版本,包括操作系統(tǒng)的版本。軟件的任何細微變化都可能影響到結(jié)果。
規(guī)則4:記錄所有自定義腳本的版本
應(yīng)該使用版本控制系統(tǒng)(比如Git)來記錄腳本的版本。你應(yīng)該標記(快照)多個腳本,并在你產(chǎn)生的任何結(jié)果中索引那個標記。這樣一來,如果你后來決定修改腳本(你肯定會這么做),你就可以及時找到產(chǎn)生特定結(jié)果的確切腳本。
規(guī)則5:盡量用標準格式記錄所有的中間結(jié)果
如果你遵循了規(guī)則1,應(yīng)該就有可能從原始數(shù)據(jù)中重現(xiàn)任何結(jié)果。不過,雖然這在理論上是可能的,但在實踐中存在種種限制。問題可能包括:
缺乏從頭開始運行結(jié)果的資源(比如使用了大量的集群計算資源)
使用了商業(yè)工具,但沒有某些工具的授權(quán)
使用某些工具的技術(shù)能力不足
在這些情況下,從原始數(shù)據(jù)的派生數(shù)據(jù)集著手不失為明智之舉。這些中間數(shù)據(jù)集(比如CSV格式數(shù)據(jù))提供了更多的分析選擇,并且在出錯的時候,更容易識別有問題的結(jié)果,不必重頭來過。
規(guī)則6:對于帶有隨機性的分析,要記錄潛在的隨機種子
數(shù)據(jù)科學(xué)家常常沒有為他們的分析設(shè)置種子值,因此不可能準確復(fù)現(xiàn)機器學(xué)習(xí)研究。很多機器學(xué)習(xí)算法都包含隨機成分,雖然強勁的結(jié)果可能在統(tǒng)計上是可復(fù)現(xiàn)的,但沒什么能比得上與其他人產(chǎn)生的精確數(shù)據(jù)相一致。
如果你使用腳本和源代碼控制,你可以在腳本中設(shè)置種子值。
規(guī)則7:始終保存原始數(shù)據(jù)
如果你使用腳本/編程語言,圖表常常將自動生成。但如果你使用Excel這樣的工具來繪制圖表,請確保你保存了原始數(shù)據(jù)。這使圖表可以復(fù)現(xiàn),也能對圖表背后的數(shù)據(jù)進行更細致的檢查。
規(guī)則8:生成層次分析輸出結(jié)果,使越來越細致的層次可以被檢查
數(shù)據(jù)科學(xué)家的工作是以某種形式總結(jié)數(shù)據(jù),從數(shù)據(jù)中獲取洞見。
不過,總結(jié)也容易導(dǎo)致數(shù)據(jù)誤用,所以應(yīng)該讓相關(guān)方可以把總結(jié)分解成各個數(shù)據(jù)點。對于每個總結(jié)性結(jié)果,要與使用的數(shù)據(jù)聯(lián)系起來,以便對總結(jié)進行推算。
規(guī)則9:把文本陳述和潛在結(jié)果聯(lián)系起來
歸根結(jié)底,數(shù)據(jù)分析的結(jié)果是以文字的形式呈現(xiàn),而文字是不精確的。有時,結(jié)論和分析之間的聯(lián)系很難確定。由于論文常常是科研中最具影響力的部分,因此把論文和結(jié)果聯(lián)系起來至關(guān)重要,由于規(guī)則1的緣故,與原始數(shù)據(jù)聯(lián)系起來也很重要。
這可以通過在文本中添加腳注的方式來實現(xiàn)。腳注引用的文件或URL應(yīng)該包含引出論文中觀察發(fā)現(xiàn)的特定數(shù)據(jù)。如果你無法建立這種聯(lián)系,說明你可能沒有充分記錄所有步驟。
規(guī)則10:公開腳本、過程和結(jié)果
在商業(yè)環(huán)境中,可能不適合公開所有的數(shù)據(jù)。不過,向組織內(nèi)部的其他人公開數(shù)據(jù)是可以的?;谠频脑创a控制系統(tǒng),比如Bitbucket和GitHub,允許創(chuàng)建私密存儲,任何獲得授權(quán)的同事都能訪問。
眾人的審視可以改善分析質(zhì)量,所以分享得越多,你的分析質(zhì)量就可能越高。