使用 ML.NET 进行保险价格预测
此前通過多篇文章已充分介紹過,ML.NET是一個開源的跨平臺機器學習框架,特別適合 .NET 開發人員。它允許將機器學習集成到 .NET 應用中,而無需離開 .NET 生態系統,甚至擁有 ML 或數據科學背景。ML.NET?現有的各種內置模型訓練器可用于圖像檢測、音頻檢測、基于文本的場景、情緒分析、銷售預測、電影推薦、異常檢測等等。隨著 ML.NET 的普及,越來越多的案例也證明了它走進了實際生產環境,能夠解決豐富的機器學習場景問題了。本文的案例來自 Chandra Kudumula 的工作分享,Chandra Kudumula 是一名高級程序員兼分析師,擁有超過十二年的 IT 經驗。他成功地在金融、博彩和保險服務等多個領域設計并開發了各種高可擴展和高可用的企業應用程序。本文跳過機器學習基礎知識和算法類型,以一個控制臺程序的完整代碼編寫過程為案例,重點展示他如何使用 ML.NET 來預測保險價格。
大多數傳統保險公司是雇用精算師來計算保險費。精算師是商業專業人士,他們使用數學和統計數據來評估財務損失的風險,并根據年齡和性別等因素/特征預測保險費和索賠的可能性。它們通常會生成一種稱為精算表的東西,提供給保險公司的承保部門,該部門通過輸入條件數據來設置保險費。保險公司相當一部分工作是依賴專業人士計算和編寫所有程序,但使用機器學習變得更加簡單。機器學習允許程序從一組數據中學習,以找出特定的問題特征。ML 會關注性別、吸煙、兒童人數和地區等不同因素,以找到總體最高的醫療費用,并根據需求使用特定算法確定價格,比如吸煙者和孩子較多的客戶往往醫療費用較高,因此這些群體的保費將更多。隨著 ML 訓練越來越多的數據,ML 程序在預測確切價格方面變得更加聰明和敏感。最后,您需要調用一個交互程序,根據提供的輸入因素為特定人員計算保險費,而不需要自己編寫所有這些程序。ML 程序查看提供的所有數據集以及訓練學習,最終將提供一個機器學習模型,您可以在應用程序中使用。例如模型會認為保險價格取決于各種特征,如年齡、保險類型、所需保險金額、性別、體重指數 (BMI)、地區以及吸煙等特殊因素,如果您想要預測保險價格,在應用程序中輸入這些因素的值就能獲得結果。
機器學習工作流程
ML 工作流有三個關鍵步驟:
準備數據。加載數據庫或CSV文件的數據。提取/識別與您將要解決或預測結果的問題相關的關鍵特征(輸入和輸出參數)。
構建和訓練ML模型。在這里,您可以評估不同的算法、設置參數并查看哪個模型最適合您的方案。
模型準備好后,請在應用程序中使用模型。
?
?
?
預測保險價格/保費的 ML.NET
價格預測根據一些輸入數據(如年齡、性別、吸煙、體重指數 (BMI)、兒童數量和地區)確定保險價格。價格預測是機器學習回歸任務的一個例子,該任務可以預測數字相關的問題。
對保險費的預測如下。你有一些特征輸入(年齡,性別,吸煙等),進入訓練過程。這些特征可以確定溢價金額的高或低。例如,年輕人不太可能需要醫療照顧,所以他們的保費通常更便宜,吸煙者的保費也更高。標簽輸出是您想要預測的價格,這是調用機器學習模型的結果。
下圖是保險數據的示例,該示例是模型的輸入和輸出:
如何開始與 ML.NET
從 ML.NET 開始有三種方法
API 模型:您可以通過API開始 ML.NET,并以 C# 或 F# 編寫代碼
GUI 模型:在 Visual Studio 中使用 ML.NET模型構建器。
CLI 模型:對于像 Mac 和 Linux 這樣的跨平臺開發,請使用 ML.NET CLI。
讓我們開始以 API 模型使用 ML.NET 框架預測保險費。
我使用 Visual Studio 2019 創建一個控制臺應用程序。請確保您擁有最新版本的VS,并且安裝了 .NET 5 SDK。
打開 Visual Studio 創建一個新項目->選擇C#控制臺應用程序。
提供項目名稱
?
?
從下拉中選擇目標框架并按下"創建"按鈕。
?
?
創建控制臺應用程序。
?
?
需要ML模型的樣本/測試保險數據。從 https://www.kaggle.com/mirichoi0218/insurance 下載insurance.csv文件數據,并將文件復制到控制臺項目中。您可以使用列標題(年齡、性別、BMI 等)查看數據,并在打開文件時通過逗號將其分離。
?
?
從NuGet安裝所需的ML包。在"解決方案資源管理器"中,右鍵單擊項目并選擇"Manage ?NuGet 包"。
?
?
安裝 Microsoft.ML 包。
?
?
還要安裝Microsoft.ML.AutoML包。此包通過自動定位最佳功能工程、模型和超參數來優化數據集的 ML 管道。
注意:我使用此包來找出價格預測的最佳算法。如果您熟悉或決定轉到特定算法,則不需要此包。
?
?
添加代碼
已完成的Program.cs文件可以在這里找到。首先添加所需使用語句:
?
?
?
添加ModelInput和ModelOutput類到Program.cs。該類包含與輸入數據文件insurance.csv的標題匹配的屬性。
?
?
在程序類中,添加兩個常數,和 H。第一個包含數據集的路徑:后者包含在培訓完成后保存模型的路徑。TRAIN_DATA_FILEPATHMODEL_FILEPAT
?
?
創建實例是所有 ML.NET 操作的初始化步驟。它提供加載和準備數據、訓練、評估和模型預測的所有所需組件。有一個可選參數稱為種子。默認情況下,種子值為空,MLContext環境不確定,輸出會跨多個運行時變更。如果您提供固定數值,則MLContext環境將保持變化是確定的,結果在多個MLContext運行中是一致的。
?
?
創建MLContext實例后,您需要使用此類加載數據,以創建在數據、加載、保存、緩存、篩選、隨機和拆分輸入數據上的DataOperationsCatalog組件。但這不是模型訓練管道的一部分。
從CSV文件加載數據。提供所需的輸入參數,如 CSV 文件是否有標題、使用什么符號來分離數據等。
?
?
數據已加載,但需要清理或轉換模型可以理解的輸入數據。
?
?
輸入數據是分類數據。分類數據只不過是包含標簽值的變量,而不是數字值。輸入數據"性別"和"區域"具有標簽值,您需要將其轉換為數字值,并且可能的值數通常僅限于固定集。例如,區域數據只有兩個值,即東南或西北。
此外,吸煙者列包含"是"或"否",但這些數據需要轉換為真或假。
以下是使用"TransformsCatalog"轉換吸煙者列和分類數據列的代碼:性別和區域。最后,將所有輸入列串聯在一起。
?
?
ConversionTransforms:提供操作列表,將數據從一種類型轉換為另一種類型。包括是對真,否對假。
Append:通過將另一個估計器附加到此估計器的末尾創建一個新的估算鏈。
CategoricalTransforms:創建分類數據轉換組件的實例,您將使用它們轉換分類數據,如性別和區域。
ColumnConcatenate:這將將一個或多個輸入列串聯到新的輸出列中。
您需要在 AutoML 的幫助下找到性能最好的模型。以下是探索多個模型的代碼。更長的訓練時間使 AutoML 能夠探索更多,并為機器學習模型提供更高的精度。
?
?
?
運行實驗
運行實驗后,AutoML 探索了不同的模型。以下是顯示評估模型并建議最佳模型的控制臺輸出窗口:基于輸入數據的價格預測的LightGbm 回歸。
?
?
?
要打印平均指標,添加此功能:
?
?
構建模型
現在,我有最好的價格預測算法,我會使用這個算法的代碼,并建立模型。以下是創建、訓練、交叉驗證和保存模型的代碼片段。
測試模型
現在,模型被創建、訓練并保存到 Zip 文件中。通過傳遞樣本數據測試訓練好的模型。以下是使用預測引擎加載模型并預測結果的代碼片段。
?
?
運行模型后,以下是控制臺窗口上的預測輸出。
?
?
總結
您已經看到使用 ML.NET 使用 API 框架進行價格預測是多么容易。同樣,您可以使用GUI(模型構建器)或CLI模型來獲得相同的結果。
引用
https://dotnet.microsoft.com/apps/machinelearning-ai/ml-dotnet
https://www.kaggle.com/mirichoi0218/insurance
https://www.investopedia.com/ask/answers/09/calculating-premium.asp
https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/
https://github.com/jwood803/MLNetExamples/blob/master/MLNetExamples/AutoML/Program.cs
總結
以上是生活随笔為你收集整理的使用 ML.NET 进行保险价格预测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hello Blazor:(2)集成Ta
- 下一篇: 面向.NET开发人员的Dapr- act