隨着機器學習(ML)成為軟件行業的主流,重要的是要了解它的工作原理,並將其置於開發棧中。了解如何為您的應用程序構建ML服務,您可以確定您的ML應用程序中的機會,實施ML,並與您的團隊的ML專業人士清楚溝通。
在整個系列中,我們將構建一個基於信用記錄預測貸款審批的ML服務,創建一個Web服務,並從各種平台使用Web服務。通過這個過程,我們將了解有關構建自定義ML服務的ML工具Microsoft Azure ML Studio。對於系列的第一部分,我們將重點介紹如何構建培訓實驗,了解Azure ML studio的基礎知識,並體驗構建預測模型的過程。
我們開始討論ML與應用程序堆棧的關系。
如果您想了解機器學習的一些核心概念,請查看我之前的文章“ 什么是機器學習”。
大圖
現代應用程序架構通常由多層組成。在基本級別,這些分離位於服務器和客戶端應用程序代碼之間。服務器代碼可以分為附加功能或服務。Azure ML通過Web服務為應用程序提供額外的服務。
Azure ML服務是可以由各種設備和平台使用的REST API和JSON格式的消息。這些Web服務通過專用API密鑰進行安全保護,從而將這些服務暴露給某些客戶端,要求服務器層在客戶端之間進行調解。此外,一些應用程序可能需要在客戶端和服務之間運行的其他進程,驗證或身份驗證。
學習全堆棧
了解ML在應用程序中的作用可能對完整的堆棧開發人員有好處。術語所指的全堆棧開發人員通常負責構建各種應用程序服務。雖然使用Azure ML的開發與編寫代碼不同,開發人員將會發現熟悉的用於編寫SQL和R代碼的概念和工具。
學習Azure ML服務的結構將為開發人員提供與開發團隊溝通的基礎。如果所有參與者了解系統,其輸入和輸出以及平台使用的術語,都有機會提高使用ML構建的服務質量。在ML層進行的設計決策可以將整個應用程序全部影響到用戶界面。
培訓實驗基礎
使用Azure ML是一個非常結構化的過程。我們將首先收集和分析將用於訓練預測模型的數據。接下來,數據必須清除所有異常,丟失數據點和異常值。
一旦准備好數據,我們會將數據分成幾組進行培訓和測試。訓練數據由機器學習算法使用以創建針對測試數據驗證的預測模型。模型完成后,我們可以創建一個預測模型,並生成用於處理數據的Web端點。
要開始使用Azure ML studio創建新的實驗,請單擊,new
然后從菜單中選擇實驗,空白實驗。一旦創建了新的實驗,將顯示一個空的實驗大綱,顯示實驗的基本工作流程。
所示的輪廓是構建模型流程如何的表示。
在整個過程中,我們將從左側的實驗項目中拖動模塊,並將它們放入右側的實驗工作表面。然后將每個模塊連接到其他模塊的輸入和輸出,以執行以下任務:數據清理/轉換,選擇機器學習算法,模型評分和Web端點。運行每個模塊后,可以通過右鍵單擊模塊並從菜單中選擇可視化來顯示輸出。
准備數據
該過程首先分析和清理大量數據。ML依靠大量數據進行分析,以識別模式,更多的數據將產生更好的結果。了解數據很重要,數據點是生成良好預測模型的關鍵因素。這可能需要與應用程序所在領域的專家進行合作。
應准備數據,以便維護相關數據點,並從數據集中刪除無效或丟失的數據。一旦准備好數據,就可以選擇機器學習算法進行訓練。
導入數據
我們開始將數據導入實驗。對於以下示例,我們將使用由超過100,000個貸款記錄組成的數據集。我們將使用貸款數據來預測未來貸款的違法。
要導入數據,我們將使用導入數據模塊。該模塊將簡單地從目標數據源檢索數據並將其加載到實驗中。通過通過HTTP設置數據源的Web網址,數據會從網上下載。在這種情況下,我們將選擇CSV格式,並指定該文件有一個頭。運行實驗將導入數據。
貸款資料分析
我們通過右鍵單擊導入數據模塊並從菜單中選擇可視化來分析數據。在實驗中右鍵單擊任何模塊將允許我們查看模塊的輸出。對於導入數據模塊,我們可以可視化數據並了解每個數據列的各個方面,如:平均值,中值,最小值,最大值和唯一值和缺失值的數量。每個數據點還顯示一個直方圖,可以幫助我們發現趨勢數據和識別異常值。
首先突出顯示“貸款統計”列。此列將貸款確定為“已收費”和“全額付款”。這些值代表貸款的二進制結果,其中“收費”是不期望的結果,“完全支付”是理想的結果。在銀行業務中,這些術語意味着銀行被扣除貸款,可能會損失收入,或貸款全額支付,銀行賺取收入。這一列最終將成為我們試圖預測的價值。
我們需要檢查每一列的統計信息以識別問題,以便可以從數據集中清除。在這個數據集中,我們會發現以下問題:
- 信用評分:信用評分欄中的項目的值超過正常信用評級0-850。這些值在最右邊的數字中有一個額外的零。例如,值為7330,但應為733。
- 當前貸款金額:一些價值似乎最大到99999999,這不是一個現實的貸款價值。這些記錄需要清理。
- 住房所有權:存在重要的描述為有償和家庭抵押貸款。這些值可以合並為“住房抵押”。
- 目的:重復的描述存在於其他和其他。這些可以組合為“其他”。
- 破產和稅務優先權:這些列具有
NA
字符串值,應將其轉換為0,允許將列格式化為整數。 - 當前工作年數:此列包含“n / a”值。這些可以分為現有的“<1年”值。
數據操作
要糾正我們的數據問題,我們將使用SQL查詢。還有其他方法可以處理諸如R腳本和離散數據修改模塊之類的數據,我們將在下面看看。SQL是最全面的堆棧開發人員友好的選項,所以我們從頭開始。
以下SQL腳本將更正以前觀察到的問題。此外,腳本將每個值轉換為適當的數據類型。
SELECT [Loan ID], [Customer ID], [Loan Status], CAST(REPLACE([Current Loan Amount],'99999999',0) AS INT) AS [Loan Amount], [Term], CAST(SUBSTR([Credit Score],1,3) AS INT) AS [Credit Score] /* Clean outlier values of credit score */, REPLACE([Years in current job],'n/a','< 1 year') AS [Years in Current Job] /* Clean n/a values in Years in current job */, REPLACE([Home Ownership], 'HaveMortgage', 'Home Mortgage') AS [Home Ownership] /* combine home ownership: 'HaveMortgage' and 'Home Mortgage' */, CAST([Annual Income] AS BIGINT) AS [Annual Income], Replace([Purpose], 'other', 'Other') AS [Purpose] /* # combine Purpose: 'other' and 'Other' */, CAST([Monthly Debt] AS FLOAT) AS [Monthly Debt], CAST([Years of Credit History] AS FLOAT) AS [Years of Credit History], CAST(REPLACE([Months since last delinquent],'NA','') AS INT) AS [Months Since Last Delinquent], CAST([Number of Open Accounts] AS INT) AS [Number of Open Accounts], CAST([Number of Credit Problems] AS INT) AS [Number of Credit Problems], CAST([Current Credit Balance] AS BIGINT) AS [Current Credit Balance], CAST([Maximum Open Credit] AS BIGINT) AS [Maximum Open Credit], CAST(REPLACE([Bankruptcies],'NA','') AS INT) AS [Bankruptcies], CAST(REPLACE([Tax Liens],'NA','') AS INT) AS [Tax Liens] FROM t1;
缺失數據
隨着數據轉換,我們仍然有一些丟失數據的問題。我們將通過填寫丟失的數據或從集合中刪除數據來解決丟失的數據。要應用這些轉換,我們將使用“轉換為數據集”和“清除缺失數據”模塊。
讓我們從使用“SetMissingValues”操作的“轉換為數據集”模塊填充缺少的值開始。該模塊將使用占位符標記任何缺失值,在這種情況下,我們將替換為0。
接下來,我們將使用“Missing Data”模塊清理缺少的值。缺少數據模塊指定如何處理數據集中丟失的值。我們將使用多個模塊來處理以下每個場景:
-
貸款金額:由於此列中存在大量數據,因此我們可以使用統計算法嘗試估算數據。在這種情況下,我們將使用缺少數據模塊的“使用MICE”替換清潔模式。對於每個缺失值,此選項分配一個新值,該值通過使用統計文獻中描述的方法計算,作為使用鏈接方程或鏈接方程的多重插補的多變量插值。
-
信用評分和年收入:在大多數情況下,信用評分和年收入都在同一行中丟失。最好將它們完全從數據集中刪除。我們將為這些項目應用“刪除整行”清除模式。顧名思義,信用評分和年收入中缺少值的行將被刪除。
-
所有其他人:借助貸款金額,信用評分和年度收入缺失值解決,我們將剩余的任何數據標記為零。再次,我們將使用缺少數據模塊,在這種情況下,我們將使用設置值的“自定義替換值”清除模式
0
。
我們已經學習了使用Azure ML Studio清理數據的一些基本模塊,還有更多的模塊,我們沒有覆蓋。清理數據是在過程中了解的重要步驟,因為數據是我們依賴於我們的模型的基礎。請記住,即使在實驗的培訓階段給出了完美的數據集,該清理和數據操作模塊也可用於從Web端點接收的數據,以及過濾來自用戶或應用程序的數據。
建立模型
訓練機器學習算法對數據的結果是一個模型。為了生成一個模型,我們需要創建兩組准備好的數據,訓練數據和測試數據。這樣可以根據測試數據對模型進行訓練和驗證。該過程產生一個分數,這將有助於確定模型的准確性。模型的期望精度取決於應用程序及其如何使用。
培訓模型在某些方面與在計算機編程中創建單元測試類似,因為模型根據已知的測試數據進行驗證。然而,不是斷言一個簡單的通過或失敗的結果,返回0到1之間的概率。評分模型評估測試數據的許多結果,並提供模型精度的其他指標。
我們使用Azure ML“拆分數據”模塊拆分數據。該模塊將幫助我們將數據分為培訓和測試數據。使用“第一個輸出數據集中的行分數”選項,我們可以決定將多少數據用於培訓或測試。在我們的例子中,我們將把這個數值設置為將0.7
70%的數據提供給培訓。
選擇算法
Azure ML具有來自回歸,分類,聚類和異常檢測系列的大型算法庫。每個設計用於解決特定類型的機器學習問題。為了協助這個過程,Microsoft已經提供了一個備忘單,幫助您為預測分析解決方案選擇最佳的Azure ML算法。您選擇的算法主要取決於您的數據的性質和您想要回答的問題。
對於我們的貸款審批數據,我們將使用兩級升級決策樹模塊。增強的決策樹是良好的通用機器學習算法,對於我們的數據集將很好地工作。值得注意的是,決策樹是內存密集型學習者,可能無法處理非常大的數據集。
我們將通過將“分割數據”模塊的第一個輸出連接到列車模塊的第二個輸入,為實驗添加“火車模型”模塊。接下來,我們需要確定標簽列,這是包含我們想要對模型進行預測的結果的列。對於我們的貸款數據,這是貸款狀態。
為了利用“兩級升壓決策樹”,我們將添加模塊並將其輸出連接到列車模型模塊的第一個輸入。這完成了模型的訓練部分,接下來我們需要評估和評估模型。
得分與迭代
要完成培訓實驗,我們需要對我們的模型進行評分。一旦創建了第一個模型,分數將確定模型的有效性,並可能揭示需要解決的問題。丟失或無效的數據點可能會通過准確度譜線極端的分數顯示出來。即使看起來正常的分數也可能受益於額外的改進,以提高其准確性。使用不同的參數和使用數據問題來對您的模型進行實驗是找到正確模型的過程的一部分。
我們為實驗添加一個“分數模型”模塊。我們將從我們訓練的模型的輸出到第一個輸入,以及從“分割數據”模塊到第二個輸入的驗證數據。這將創建一個包含列的計分數據集scored probabilities
。
得分概率表明相應條目屬於Charged Off
或Fully Paid
類的概率。如果輸入的得分概率大於0.5,則被預測為Fully Paid
。否則,預測為Charged Off
。要查看這些結果,我們可以右鍵單擊該模塊,然后從菜單中選擇“可視化”。
最后,我們將使用“評估模型”模塊評估模型。該模塊將提供模型執行情況的統計分析。二進制分類模型的評估指標有:精度,精度,召回,F1分數和AUC。此外,模塊輸出一個混淆矩陣,顯示真陽性,假陰性,假陽性和真陰性數以及ROC,精度/回歸和提升曲線。
一旦Evaluate Model模塊連接到Score Model模塊的輸出,運行實驗並將Evaluate Model模塊的輸出可視化。
對於本文的范圍,我們將研究曲線下的准確度和面積(AUC)來了解我們的模型的有效性。評估結果表明,該模型的准確度為0.779或77.9%。確定您的模型的准確性是否足夠取決於您的業務需求。例如,我們的模型確定客戶是否符合銀行貸款資格。對於這種情況,准確度分數為79%可能是正確的,但是如果您的模型預測一種葯物是否在患者中有效,則准確性可能需要更高。
接下來我們來看一下AUC。AUC對應於受試者操作特征(ROC)曲線,其包括真陽性率與假陽性率。這個曲線越靠近左上角,分類器的表現越好,這意味着我們有更高的真實陽性率和更低的假陽性率。
如果我們確定分數不足以滿足我們的需求,我們會遍歷清理數據,調整或選擇替代學習算法的過程,並比較以前模型的分數。對於我們的方案,我們將考慮過程完成。我們的模型能夠采取客戶貸款數據的各種因素,並為個人貸款的風險提供合理的預測。通過模型完成,我們可以通過設置Web服務來繼續該過程,以使應用程序能夠利用預測模型。
1、新建workspace
注意,在填寫workspace owner,一定要填寫一個有效的windows live 賬號
進入創建的workspace,界面如下圖所示
2、上傳數據
數據源:http://archive.ics.uci.edu/ml/datasets/Statlog+(German+Credit+Data)
下載名為german.data,該數據用於信用風險的機器學習算法,數據包括20個變量,1000條信用記錄,其中700條問低風險,300條為高風險。注意,由於Azure Machine Learning stidio 只支持csv文件,所以需要把german.data轉化為csv文件。
點擊ML studio下方的"+new"鏈接,按下圖所示將數據已建立好workspace中
3、新建Azure ML的實驗
點擊ML studio下方的"+new"鏈接,選擇Experiment選項,打開如下界面后
第一步,可以給這個實驗添加一個標題,本文命名為"Experiment by Jiahua"
第二步,在左側找到上傳的數據,名字為上傳數據是給定的數據名字,本文為"UCI German Credit Card Data",將數據拖到中間的工作區,然后右側會給出數據的描述信息。數據進入工作區之后,用一個圓角的矩形表示,矩形下有一個圓圈,稱為"output port",將鼠標放在上面並點擊右鍵后,可以進行數據可視化等操作。拖動圓圈,可以指向下一個數據處理操作。
第三步,添加完數據集之后,就需要對數據集進行相應的處理,包括數據預處理,訓練樣本和測試樣本划分,選擇機器學習算法等等,詳細操作課參加官方實例。完成上述操作后,一個可視化的機器學習過程就完成,如下圖所示:
第四步,模型運行。完成上述操作后,就就可以運行程序了,點擊下方的"Run",模型就會運行,每個模塊運行完成之后會在右上方標示一個綠色小勾,如果每個模塊或步驟出錯了,會在同樣的地方出現一個紅色的,鼠標放上去之后就會提示錯誤的類型。
第五步,查看結果,在"Evaluate Model"方框下的圓點處點擊右鍵,選擇"Visualize"即可查看模型運行結果,部分結果如下圖所示:
https://studio.azureml.net/