敏感度分析(sensitivity analysis)
一個模型有許多旋鈕——輸入參數——以及從另一端出來的一個預測。一個自然且重要的問題是:如果我轉動這個旋鈕,答案會移動多少?而哪些旋鈕最要緊?敏感度分析就是對「模型的輸出如何回應其輸入的改變」所做的系統性研究。它告訴你你的結果對哪些輸入是敏感的(所以你應該仔細量測那些),以及對哪些幾乎無動於衷(所以你可以不再為它們操心)——把一個黑盒子變成你能理解、能排優先序的東西。
有兩大類風格。「局部」敏感度分析問的是:在某個特定操作點附近輕推一下,輸出會怎麼變——它本質上是一個偏導數:輸出 Y 對輸入 x_i 的敏感度,就是偏導數 dY/dx_i,常用有限差分估計(把 x_i 擾動一個小量,看 Y 變了多少,相除),或更乾淨地用自動微分或伴隨(adjoint)法。局部分析便宜、且在一點上精確,但只描述了緊鄰的鄰域。「全域」敏感度分析則一次探索整個合理的輸入範圍,問每個輸入對輸出的總變異性貢獻了多少——以變異數為基礎的「Sobol 指標」是標準工具,把輸出變異數分攤給各個輸入及其交互作用。全域方法對帶有大不確定性的非線性模型更誠實,但要花許多次模型執行(往往透過蒙地卡羅取樣)。
敏感度分析是不確定性量化的密切夥伴:UQ 告訴你輸出有「多」不確定,而敏感度分析告訴你「為什麼」——該怪哪些輸入,因而該在哪裡降低輸入不確定性才能最大程度地降低輸出不確定性。它對模型簡化(把不要緊的輸入固定住)、實驗設計(去量測那些要緊的輸入)以及除錯(一個對某個物理上本不該依賴的參數異常敏感的輸出,暗示有臭蟲)都極有價值。誠實的告誡:對一個非線性模型,某一點上的「局部」敏感度可能嚴重誤導——一個在你操作點附近看似不重要的參數,在別處可能佔主導——所以別過度信任單一個導數。而一個有限差分敏感度繼承了慣常的步長兩難:擾動太大,你量到的是非線性而非斜率;太小,捨入誤差會淹沒那個微小的差異。
一個化學產率模型有輸入:溫度 T、壓力 P、催化劑量 c。一個局部分析把每個擾動 1%,發現產率對 T 變了 8%、對 P 變了 0.5%、對 c 變了 3%——所以產率對溫度最敏感。團隊接著精確量測 T,不再為 P 操心。稍後一個全域 Sobol 分析確認 T 解釋了大部分輸出變異數,並有一個單點導數所漏掉的、顯著的 T 與 c 交互作用。
把每個輸入推動輸出的程度排序,顯示出該在哪裡仔細量測、又能忽略什麼。
對非線性模型,某一點的局部敏感度可能誤導——一個在你操作點附近不重要的參數,在別處可能佔主導。有限差分敏感度也面對步長兩難:太大量到的是曲率,太小則淹沒在捨入誤差中。