實驗設計 (DOE) 的規劃和執行可能是一項複雜的任務,需要多位專家的參與。實驗結束後,分析、解釋和交流結果仍然面臨許多挑戰,尤其是在利害關係人的技術水平參差不齊的情況下。為了簡化此流程並規範我們的工作流程,我們開發了一個腳本,可以自動視覺化 DOE 結果。這個腳本會產生兩個直覺的圖表,有效地傳達實驗結果。
我們的腳本設計靈活,可根據需要添加新的計算和對圖表進行標準化處理。該工具顯著提高了我們的效率,與手動方法相比,每個圖表節省了大約兩個小時。此外,標準化的視覺化格式增強了與非技術利益相關者的溝通,使美國能源部的研究結果更易於理解和獲取。
在NNE,我們幫助眾多客戶進行實驗設計(DoE),用於各種不同的目的,例如穩健性測試、流程改進和驗證。我們經常面臨的一大挑戰是如何將結果有效地傳達給利害關係人。這其中可能存在許多挑戰,因為他們中的一些人可能不像我們一樣精通統計學和數學。
在某些情況下,這甚至可能是一種輕微的數學恐懼症。很多人可能不熟悉 JMP 的介面,所以這可能會讓他們感到有些畏懼,或者僅僅是我們創建的模型的複雜性就可能難以分析或理解。
另一個重要原因是,我們的一些分析工作非常耗時且耗力,而且會讓人感到枯燥乏味。當你感到無聊時,就容易出錯,這可不好。
我們想要發展一種方法,能夠快速且方便地產生圖表。這樣我們就可以向利害關係人展示結果並進行溝通。圖表應該會自動生成,以減少錯誤,而且速度要快,避免我們花太多時間等待結果。此外,由於我們經常使用各種模型,因此該方法也應該能夠處理大量模型。
我們之前已經製作了這些圖表。這仍然花費了很長時間。通常,我們會製作兩個圖表,一個用於視覺化結果的範圍,另一個用於視覺化結果對我們在實驗設計中使用的變數的敏感度。
我們找到了一種自動化分析的方法,將模型匯出到 Python 中進行所需的計算,解決一些全域最佳化問題,然後在 JMP 中視覺化結果,並在 JMP 中對結果進行歸一化,以便進行比較。
您可以在這裡看到其中一張圖。這是我們繪製的極差圖。這裡是靈敏度圖。對於極差圖,我們做了一個小例子。數據來自大豆品種,不同類型的大豆,我們對其作物產量進行了建模,然後繪製了這張圖。
我可以示範一下製作這個圖表的過程。其實很簡單。我們這裡有數據。我們已經建立了一個模型。這裡顯示的就是這個逗號。然後,我們只需在工具中點擊一個小按鈕,它就會運行。對於某些模型,特別是當某些名目變數有很多水準時,計算量可能會比較大。它需要針對每種組合求解一個全域最佳化問題,但即使在資料量較大的情況下,我們也能很快得到結果。
這裡可以看到結果。大概花了20秒左右。接下來,我們可以繪製想要的內容。通常情況下,它會產生一個圖表。您可以根據需要進行自訂。其中一些變數僅用於特定分析。在這裡,我們幾乎可以立即獲得一個圖表,從中我們可以查看想要的內容,並輕鬆地與利害關係人溝通。
例如,對於這個資料集,我們可能想根據季節找到最合適的作物。這裡顯示的點是標稱值。這個值指的是,如果我們選擇這種作物,並且其他所有設定都設為中間值,我們將獲得的產量。這裡的範圍(即長條圖)顯示了該值可以取的範圍。
對於這種作物,其值可能在 4700 到 4000 左右之間。虛線是控制限,即標稱值加減自由標準差,以及本例的目標限和規格限。我們可以立即看出,在第一季,我們有三到四個不錯的候選品種,它們都在我們的控制限範圍內,甚至有一個品種幾乎完全符合目標值。
我們可以把這個放到第二季,雖然第二季的排名通常會稍微低一些,但我們仍然可以找到一些合適的例子。這只是其中一個應用場景。現在我們可以結束這些討論了。因為還有一點,這個場景只有一個輸出變數。
另一種情況是,我們可以有多個輸出,而這些輸出可以有不同的尺度。這裡我們再舉一個例子。這是模擬數據,但基於一個真實案例。我們想要分析一款產品。這是一款工業產品。他們測量了許多維度,我們想找出哪些維度對結果最為關鍵。
這裡我們有兩個解釋變數和五個維度,它們的尺度各不相同。我可以跳過這一步。我們可以再次運行模型。繪製圖表大約需要5秒鐘,現在我們立即得到了結果。我們也可以很快看出不同尺度所帶來的問題,因為如果我們只顯示維度4,就只能看到它的動態變化,因為它比其他維度大得多。我們可以嘗試調整尺度,但可能會遇到相同的問題。維度1和維度2都比維度3大,所以我們一次只能看到一到兩個維度。
我們採取的方法是,對圖表進行某種歸一化處理。例如,我們可以將其歸一化到目標值。這裡,我們把變數放在這裡。現在我們已經進行了歸一化,所以目標值總是零,上限為一,下限為負一。現在我們可以立即看出,對於維度 3,如果我們設定了維度 2,則始終超出規格。
我們可以看到,與規格限制相比,維度 1 和維度 2 的變化幅度並不大。在設定 2 中,維度 2 的變化幅度會很大,具體變化幅度取決於我們的輸入變數。如果採用這種設置,我們就必須非常精確地控制溫度。
如果設定了目標規格限值,這個方法就有效。如果沒有目標規格限值,可以採用其他方法。我們還有另一種方法,它只是根據截距和規格限值進行了歸一化。如果沒有具體的目標值,我們只需要確保資料在規格限值範圍內,而這種方法就是基於此進行歸一化的。我們也可以最後一種方法,根據截距的標準差進行歸一化,這種方法總是有效的,但我們仍然可能會遇到尺度不同的問題。
例如,在這裡我們可以看到,維度 4 與殘差變異數相比相當大,而維度 1 的規格限制與殘差變異數相比並不大。
最後,您可能不僅關心您的數值可以取哪些值,還想知道如何控制這些結果變數。這裡我們還有另一組數據,其中包含卡路里消耗量與年齡、身高、體重、性別等因素的函數關係。我們想知道我作為一個特定因素可以消耗多少卡路里。
我們有了資料集,也導入了模型。我們按下按鈕,幾秒鐘後,就得到了一張圖表。這裡,我們繪製的是靈敏度曲線。什麼是靈敏度曲線呢?它表示結果變數會根據你的名目變數設定以及每個連續變數的變化幅度。
例如,我們可以看到,如果換作是我,如果我進行一些鍛煉,並且多鍛煉一分鐘,我預計會多消耗大約5.5卡路里。如果我增加運動強度,讓心率增加1次/分鐘,那麼我燃燒的卡路里就會增加大約2.5卡路里。
模型中的其他變數在實際應用上可能影響不大。我的年齡可能沒那麼重要……我的體重可能也不那麼重要。當然,這與變數的尺度無關。如果我能讓心率的變化幅度大於持續時間的變化幅度,那麼它仍然可能產生顯著影響。
我們還有另一種歸一化方法,那就是取梯度,取靈敏度,然後乘以範圍的大小……我的心率可以變化多大,持續時間可以變化多大。
我們可以看到,之前心率的影響不大。現在我們可以看到,心率對卡路里消耗的影響可能與運動時長一樣大,因為我可以比調整運動時長更靈活地改變心率。
我們也可以看到,光是在運動過程中,我就能燃燒更多卡路里。透過更劇烈的運動,我預計可以多燃燒大約 60 卡路里。實際上,我們可以看到,當我的體重或年齡改變時,運動效果會有多大差異。我的體重和年齡都可能會改變。這仍然會產生實際影響,而我們之前只關注個體,估計其永久性影響時,無法看到這種影響。
現在我們就把這些都結束吧。回到開頭。我們之前嘗試做的是開發一種自動化的實驗分析方法。現在我們已經有了一個可行的方法。它速度相對較快,而且你可以根據自己想要的圖表樣式進行自訂。差不多就是這樣。