在最近一期的《技術演講》中,我們了解瞭如何將從文本挖掘中得出的變量合併到預測模型中,以提高模型性能。 (如果您還沒有觀看演示文稿,您可能需要在繼續閱讀之前先觀看一下。)該案例研究更多地關注文本挖掘而不是預測建模,因此現在讓我們看一下未討論的兩個主要建模步驟:即,驗證模型並對新觀察結果進行評分。
模型驗證
在預測建模中,在使用模型生成預測之前測試模型的準確性至關重要。 我們希望確保我們的模型不會“過度擬合”,準確地捕獲它所訓練的數據,但會對它以前從未見過的數據生成不准確的預測。 一個捕捉過度擬合概念的偉大模因已經在互聯網上流傳了一段時間。

檢查過度擬合的一種方法是留出或“保留”數據的子集,在剩餘數據上訓練模型,然後在保留集上測試模型。 我們在訓練數據和保留數據上測量模型的預測性能,如果我們看到訓練集到測試集的準確性大幅下降,我們就有證據表明我們的模型過度擬合。
我們在案例研究中構建 Bootstrap Forest 模型時實際上使用了這種保留驗證程序,儘管我們掩蓋了它。 下面是驗證過程中的模型擬合測量表。 聯合管理計劃提供了許多用於比較訓練集和測試集性能的衡量標準(如果您好奇,請閱讀它們這裡);我們在演示中看到了測試組的熵 R 方和錯誤分類率。 沒有一項指標顯示從訓練到測試的性能急劇下降(儘管有幾個指標略有下降,這並不罕見),因此我們得出的結論是我們的模型沒有過度擬合。

您可能會注意到一些事情:該表中也有一個“驗證”列。 那是關於什麼的? 實際上,我們將數據分為三個子集:訓練、驗證和測試。 在我們的 Bootstrap Forest 模型中,訓練集用於查找每個決策樹中的最佳分割,而驗證集用於決定何時停止在每棵樹中進行新的分割以及何時停止創建新樹。 也就是說,只要每個新的分割或樹都會提高驗證集的性能,模型擬合算法就會繼續下去。 一旦驗證集的性能趨於穩定,算法就會停止。 (還記得熵 R 方統計量嗎? 這是此過程中使用的驗證統計數據。)算法停止後,將使用測試集評估生成的模型的準確性。 在JMP專業版,所有這一切都是通過在模型規範窗口中指定驗證列來自動發生的,如您所見演示文稿。
並非所有模型都需要這樣的三部分驗證。 只有使用迭代擬合過程和單獨的數據子集(驗證集)的模型才需要決定何時停止擬合。 對於不涉及迭代擬合過程的模型(例如我們可以在此處使用的邏輯回歸),僅需要訓練和測試集。
JMP Pro 有一種簡單的方法來劃分數據以進行模型驗證。 我們使用“創建驗證列”實用程序,該實用程序對數據執行隨機或偽隨機採樣(無替換)來創建每個子集,並將子集記錄在數據表中的“驗證列”中。

在這裡,我們使用分層隨機抽樣來創建子集,這在第二個屏幕截圖頂部的段落中進行了解釋。 我們的一些分類變量存在嚴重不平衡,我們希望避免這樣的情況,例如,測試集中很少或根本沒有嚴重違規行為。 這會產生問題,因為我們需要了解模型在嚴重違規情況下的表現,才能有效衡量模型的準確性。
您可以在下面的交互式分佈報告中看到,我們在三個數據子集中的每個分層列都有匹配的表示。 有了近 40k 行的數據,如果不使用分層,我們很有可能會沒事,但為了安全起見,這並不是一個壞主意。 分層是 Make Validation Column 實用程序可以實現的幾種不同的偽隨機採樣過程之一(請參閱這裡了解更多)。

Make Validation Column 實用程序將名為“Validation”的列放回到我們的數據表中(可在技術演講演示頁面上下載),然後我們將其輸入 Bootstrap Forest 平台以觸發驗證過程。 我們沒有發現過度擬合的證據,因此假設我們對模型的整體準確性感到滿意,我們準備使用它來生成新觀察結果的預測(“評分”)。
對新觀察結果進行評分
想像一下,我們剛剛發布了一組違反建築規範的行為,我們希望為每一個行為分配一個財務處罰概率,我們將用它來衡量財務預測中每項徵收的罰款金額。 例如,如果處罰概率為 0.7 的違規行為被處以 1,000 美元的罰款,則預計將支付 700 美元。 當然,被調查者最終將支付 1,000 美元或 0 美元,但平均而言,在許多違規行為中,我們的預測總和應接近我們的最終收入(我們希望)。 我們從 Bootstrap Forest 模型中獲得懲罰概率,但該模型將主題分析的分數作為輸入。 因此,我們需要通過這兩種模型來運行新的違規行為。 使用一個模型的輸出作為另一個模型的輸入,這並不是一種罕見的做法。
聯合管理計劃可以將模型作為列公式輸出回原始數據表(在建模平台中的紅色三角形選項下),並且它們將在我們添加到表中的任何新數據上運行。 為了對新的觀察結果進行評分,我們只需將新的違規行為添加到表中,主題分數和懲罰概率將通過列公式自動計算。 然後,我們創建一個新的列公式,將罰款概率乘以徵收的罰款金額,然後我們就得到了預計的付款。 下面是我們對 1,000 起新違規行為的預測。 我們預計這些將為我們帶來約 184 萬美元的收入,儘管這一總額的大約三分之一僅由該正尾中最大的 100 筆預計付款所佔。 我們預測的準確性在很大程度上取決於這些違規行為所發生的情況。
(順便說一句:我們已經描述了對觀察進行評分的點擊方式,但是可以通過 JSL(JMP 腳本語言)中的腳本輕鬆實現評分自動化。 該模型還可以使用 Python 或 JavaScript 等語言部署在 JMP 之外,並且 JMP Pro 能夠用其他語言編寫評分代碼。)
這凸顯了也許是最重要的問題:我們的預測到底有多好? 我們有像熵 R 方這樣的擬合統計數據來捕獲模型性能,但是我們真的關心的是財務預測的準確性。 在實踐中,我們會通過為我們的測試集生成收入預測並將其與我們觀察到的實際收入進行比較,將其作為模型構建階段的一部分進行評估。 我們在這裡沒有這樣做,因為不幸的是,可用數據不包含最初徵收的罰款金額,只包含裁決後的最終金額。 (在上面的評分示例中,我們只是出於說明目的想像了一些最初徵收的罰款金額。)
離別的思念
雖然我們已經實現了我們的目標——一個為新違規行為分配經濟處罰概率的模型——但這樣的項目從未真正完成。 隨著時間的推移,新的違法行為類型或趨勢可能會出現,新的政策可能會改變違法行為特徵與罰款支付之間的關係,或者由於執法能力或寬大處理等不可衡量的因素,罰款支付概率可能會隨著時間的推移而發生變化。 下圖中隨時間變化的趨勢可能表明是後者。 (線寬代表每年的違規總數,這清楚地表明我們沒有足夠的 2020 年數據來相信今年的突然上升。)

由於許多可能的原因,隨著時間的推移,我們的模型可能會變得不太準確。 我們應該定期重新調整我們的主題分析和引導森林模型,納入最新的數據(也許會丟棄舊的數據),以確保我們的預測保持準確。
謝謝, @Swalo66 。我很高興您發現它有幫助。