為了深入了解工業酵母產品在特定客戶條件下的效能,Novonesis 的應用研發團隊擅長產生富有洞察力的資料集,用於篩選適合客戶規模的優質酵母候選產品。科學家經常運用統計學方法來解決與廣泛和具體的客戶場景相關的複雜問題。
將貝葉斯方法引入 Python 庫顯著提升了我們計算模型和基於機率進行資料決策的能力,即使在無法獲得傳統統計顯著性結果的情況下也是如此。此外,JMP 18 的新功能實現了與 Python 的無縫集成,使我們的科學研究人員能夠在 JMP 中產生大型資料集並解答客戶的特定問題。透過利用應用研究數據、客戶試用數據和先驗信息,我們正致力於基於充分的資訊和貝葉斯統計來建立決策模型,而非依賴統計上不顯著的趨勢。這種方法旨在更全面地理解和量化性能,最終實現更明智的決策。
大家好,我叫馬特‧沃茨,是Novonesis公司的高級科學家,主要從事生質能源研發工作。我們這裡的生物能源計畫主要就是將玉米轉化為乙醇。我的工作是負責酵母和損傷酵素的研發,這些酵素能夠提高生產效率,並為我們的客戶帶來盡可能高的產量。
今天,我很榮幸能和大家聊聊我們如何運用貝葉斯分析或統計學來輔助我們做出數據驅動的決策。我們會先簡單介紹貝葉斯統計學的背景知識。對我來說,它也比較新,是我過去一年一直在學習的領域。我當然不算這方面的專家,但我一直在不斷探索學習。 JMP18 版本進一步增強了 Python 整合。我們將探討一些我在整合過程中學到的經驗和發現,以及它如何改進,當然也包括一些最初遇到的困難。
貝葉斯統計學入門。它的核心在於利用機率陳述來做出更明智的數據驅動決策。它的優勢在於能夠利用先驗知識進行估計。例如,你可以根據先驗資訊(例如乙醇濃度永遠不會低於零)來約束不同的變數。這在建構模型時至關重要,而貝葉斯統計學恰恰擅長處理這類問題。
我引用了理查德·麥克爾雷斯(Richard McElreath)的一門課程,叫做《統計學的重新思考》(Statistical Rethinking)。連結在幻燈片的右下角。雖然連結無法點擊,但希望你能看到。課程很短。這門課對我理解貝葉斯統計非常有幫助,我們接下來會從這門課中選取一個例子,來示範貝葉斯的工作流程,這有助於你理解運用貝葉斯方法時需要注意的事項。
接下來我們將探討如何計算地球表面被水覆蓋的比例。我們將遵循貝葉斯工作流程,具體步驟請參見右側。你可以把它想像成藝術家。藝術家不會直接從一張白紙畫出一隻完整的貓頭鷹。他們需要經過一系列步驟來添加細節。他們先畫出形狀,然後是線條,接著是眼睛結構、羽毛等等。
在考慮貝葉斯工作流程時,這一點至關重要。第一步是定義一個生成模型或因果模型,用於選擇陸地或水域。我們可以直接使用地球儀,並選取多個樣本,這些樣本基本上代表了陸地或水域。工作流程的第二步是定義一個估計值。這裡的估計值是地球表面被水覆蓋的比例是多少?第三步是更深入地了解情況。我們將開發一個統計模型,透過應用多個陸地或水域樣本來產生該比例的估計值。
這就是貝葉斯方法真正困難所在,因為你可能需要針對每個估計值使用不同的統計模型。你必須精通統計模型,了解它們的意義,以及它們如何協同作用來提供所需資訊。我一路走來找到了很多不同的資源來幫助我,稍後我會詳細介紹其中一些。
在第三步,我們基本上要測試……實際上,是在第四步。在第四步,我們將添加更多細節。我們將使用生成模型來測試統計模型。這基本上就是我們一開始所做的,即直接選取地球。我們將把這些樣本輸入統計模型,看看是否能得到相同的地球表面被水覆蓋的比例。如果有效且合理,那麼我們就可以對統計模型進行多次採樣。
通常,我們會對多個鏈執行 10,000 次這樣的操作,從而得到後驗分佈。這個後驗分佈可以幫助我們計算地球表面被水覆蓋的機率。我們可以查看這張圖表,可以看到最高機率表明地球表面被水覆蓋的面積為 75%,這非常棒,因為它直觀地展現了模型。在這些工作流程中,理解測試過程至關重要。你必須記錄你的工作,這不僅可以減少錯誤,還能確保結果的可重複性,並方便其他人理解你的工作。
我們之前簡單討論過後驗分佈的概念,但它究竟是什麼呢?後驗分佈是指後驗機率的分佈。這就牽涉到貝葉斯機率論了。後驗機率的計算方法是將似然值乘以先驗機率,也就是先驗資訊除以你在實驗中實際測量到的證據或指標。
您可以看到圖中紅色部分所示的分佈情況,它幫助我們理解地球表面被水覆蓋的機率高達75%。這些機率陳述正是我在開頭提到的,它們有助於我們做出數據驅動的決策。以上是對貝葉斯方法的一些簡要介紹。但在這裡,我想重點談談我在JMP和Python整合過程中遇到的學習曲線。過程中既有陡峭的上升,也有低谷,遇到了一些痛點和困難,但最終我發現,在JMP中使用Python有很多好處,尤其是在將JSL和Python腳本合併在一起時。
我沒時間把整張投影片都講完,但其實我只是想推薦 PyMC。這個 Python 函式庫不僅在貝葉斯分析的程式碼中至關重要,而且它的網站也提供了大量統計模型範例,可用於各種測試和其他用途。此外,它還會引導你使用另一個視覺化軟體(我們稍後會介紹),它可以幫助你在編寫演算法或其他類似程式之前,對模型進行充分的測試,從而得出最終結果。
PyMC 是專為 Jupyter Notebook 而生的,徹頭徹尾的 Jupyter Notebook。所以人們會問我:「為什麼要用 JMP 的 Python 解釋器來做這件事?」歸根結底,是為了降低同事們的啟動成本。我們公司一直在使用 JMP,而且是全程使用。如果我們能在 JMP 中實現只需點擊一下就能完成的操作(後端是 Python),那麼我的同事們就能使用這個新工具來輔助他們做出未來的決策。這基本上就是我們開始這項工作的原因。
在 JMP 中使用 Python 程式設計。視覺化是 JMP 最吸引我的地方之一。你可以查看數據,探索數據。但我覺得這方面也比較繁瑣,因為 Python 本身有很多函式庫可以用來做視覺化,但在 JMP 裡卻用不了。你基本上只能上傳圖片。我們這裡寫了一些程式碼,可以根據這些函式庫提供的資訊產生數據表,方便你探索數據,但我覺得這部分還是有點難用。
另一方面,JMP 在使用者輸入方面確實很有幫助,例如列列表或判斷使用者是否要繼續執行腳本。這些都只是彈出窗口,用戶可以直接與之交互,而無需費力地去弄清楚需要在程式碼中輸入什麼、如何命名列等等。
最後,我發現真正受益匪淺的是,正如我之前提到的,將 JSL 整合到 Python 腳本中。現在,我們不僅可以顯示圖像的面板框,還可以在圖像下方添加描述,幫助使用者理解他們正在查看的內容。至少在我看來,這些都是非常棒的進步。
現在進入今天討論的重點——腳本。首先,我們要選擇一些會影響觀察結果的因素。我們這裡觀察的結果是乙醇產量。這裡使用的是JMP軟體中的一個發酵過程範例資料集,所以任何人拿到腳本後都可以直接使用這個資料集。
首先,貝葉斯工作流程的核心仍然是反覆測試。我們將比較模擬數據和觀測數據,看看我們選擇的統計模型是否有效。結果顯示,它確實有效。它與觀測數據吻合良好,且偏差不大。
然後我們就可以測試模型了。我們可以查看模型中的單變量參數,看看它們的密度分佈如何。如果它們重合,那就表示模型運作良好。我們可以使用軌跡圖(trace plots),這是另一個名為 rvs 的 Python 函式庫的功能,可以幫助我們實現這一點。
最後,我們做的最後一個測試是能量圖,觀察這個無U型轉彎採樣器,這是得出答案的主要演算法。同樣,我們觀察這些曲線,這些分佈是否彼此重疊,它們確實重疊了。
接下來是最後一部分,也就是最終的資料集。這非常重要,因為我想展示 JMP 如何處理擬合模型。使用標準最小平方法,我們發現儲槽液位和空氣對乙醇產量都有顯著影響。如果我們採用貝葉斯方法,也會得到相同的結果。儲罐液位和空氣的影響都很顯著,而且它們的影響值都遠大於零。
但貝葉斯方法的妙處在於,它能讓你更深入地了解其中的奧妙,那就是我們可以看到正負效應。這裡,由於液位數值較大且為負值,這意味著液位越高,乙醇含量越低。由於空氣數值較大且為正值,這意味著空氣液位越高,乙醇含量越高。
身為發酵科學家,我不太認同最後的結論。當然,這只是一個樣本資料集,但令人欣喜的是,我們從兩種方法中都得到了相同的結果,而且貝葉斯方法還提供了額外的信息,有助於我們做出未來的決策。如我的職位名稱所示,我們在諾維信(Novozymes,或稱為Novonesis)公司負責酵母相關的決策。
我們選擇了一個虛構人物作為產品名稱,於是就有了克林特耶斯特伍德 (Clint Yeastwood)。透過貝葉斯分析,我們能夠做出機率陳述,從而幫助我們進行決策。根據貝葉斯分析,克林特耶斯特伍德 (Clint Yeastwood) 的乙醇含量在 78% 的情況下比 BadFerm 高出 1.1%。這對我們推動產品研發至關重要。
總而言之,今天我們討論了JMP中的Python整合以及貝葉斯方法的探索。希望我們能激發大家的探索潛力,鼓勵大家嘗試新的思考方式,但切記要隨時堅持測驗、測驗、再測試。貝葉斯方法需要測試,需要撰寫文檔,這樣不僅你自己理解,也能讓你的同事或其他相關人員理解你的工作內容。
最後,一切都與決策有關。希望透過這些內容,您能夠做出數據驅動的決策,我們也希望能夠幫助您開拓思路,發現新的可能性。非常感謝您今天的聆聽。希望這對您有所幫助。請訪問網站,所有腳本和資訊都在那裡。如果您遇到任何問題,請隨時與我聯繫。謝謝。