ML .NET 預測訂單是否被退貨
場景
根據歷史訂單的退貨情況,預測新訂單是否被退貨
這次利用ML .NET的資料分類
功能,將訂單狀態分為退貨
、不退貨
兩種,計算每筆訂單被退貨、不被退貨的概率
需要注意的是,這裡是文字資料分類,使用資料分類,而之前完成的貓狗分類,需要使用影象分類
資料集
資料來自Amazon Seller - Order Status Prediction
描述:BL(Boss Leathers) 是一家小型皮革製品企業,最近開始在亞馬遜上銷售其產品。 目前,它在印度市場註冊了大約 40 個 SKU。 在過去的幾個月裡,它因退貨而蒙受了一些損失。 現在,BL 尋求幫助來預測新訂單被拒絕的可能性。 這將有助於他們採取必要的行動,從而減少損失。
原始資料
資料如下
列名從左到右依次為唯一的亞馬遜訂單號order_no
、下訂單的日期order_date
、買家姓名buyer
、收貨城市ship_city
、收貨州/聯邦ship_state
、產品的唯一識別符號sku
、產品描述description
、訂購數量quantity
、支付的總金額item_total
、Boss Leathers 承擔的運送物品的費用shipping_fee
、付款方式:貨到付款與否cod
,最後一列是需要預測的結果,訂單狀態(退貨、不退貨)order_status
資料處理
這裡需要對資料做一些處理,
sku可以去掉字首SKU:
item_total和shipping_fee包含了貨幣單位,需要處理成數字
在cod
Not Cash On Delivery
,這樣可以表示cod
是一個列舉型別,包括貨到付款和非貨到付款兩種形式得到了下圖的資料
最後因為ML .NET的自動訓練模型僅支援.csv,.txt,.tsv和SQL Server資料庫,我將.xlsx的檔案格式轉換為.txt
訓練模型
訓練方案選擇資料分類
訓練環境選擇本地CPU
資料
選擇資料檔案,載入資料
設定要預測的列為order_status
設定特徵欄位的屬性
開始訓練
這裡我們選擇的時間越長,ML .NET可能會嘗試更多的演算法
從控制檯可以看出來,10秒的訓練時間,輸出如下
自動選擇SdcaMaximumEntropyMulti
Experiment output folder: ......
| Trainer MicroAccuracy MacroAccuracy Duration #Iteration |
|0 SdcaMaximumEntropyMulti 0.9362 0.6000 1.4 0 |
|1 LightGbmMulti 0.9362 0.6000 1.5 1 |
===============================================Experiment Results=================================================
------------------------------------------------------------------------------------------------------------------
| Summary |
------------------------------------------------------------------------------------------------------------------
|ML Task: Classification |
|Dataset: ......\TrainData\orders_data.txt|
|Label : order_status |
|Total experiment time : 2.88 Secs |
|Total number of models explored: 2 |
------------------------------------------------------------------------------------------------------------------
| Top 2 models explored |
------------------------------------------------------------------------------------------------------------------
| Trainer MicroAccuracy MacroAccuracy Duration #Iteration |
|1 LightGbmMulti 0.9362 0.6000 1.5 1 |
|0 SdcaMaximumEntropyMulti 0.9362 0.6000 1.4 0 |
------------------------------------------------------------------------------------------------------------------
|2 FastTreeOva 0.9362 0.6000 11.1 2 |
60秒的訓練時間,輸出如下
自動選擇FastForestOva
模型
這裡模型生成有點問題,需要手動新增引用Microsoft.ML.FastTree
Experiment output folder: ......
| Trainer MicroAccuracy MacroAccuracy Duration #Iteration |
|0 SdcaMaximumEntropyMulti 0.9362 0.6000 1.3 0 |
|1 FastForestOva 0.9363 0.7625 11.9 1 |
|2 SdcaMaximumEntropyMulti 0.9362 0.6000 2.2 2 |
|4 SdcaMaximumEntropyMulti 0.9362 0.6000 1.2 4 |
|5 SdcaLogisticRegressionOva 0.9362 0.6000 2.5 5 |
|6 LightGbmMulti 0.9362 0.6000 1.4 6 |
|7 SdcaLogisticRegressionOva 0.9362 0.6000 2.6 7 |
|8 FastTreeOva 0.9362 0.6000 11.2 8 |
|9 SdcaMaximumEntropyMulti 0.9362 0.6000 1.3 9 |
|10 LbfgsMaximumEntropyMulti 0.9362 0.6000 2.3 10 |
|11 LbfgsLogisticRegressionOva 0.9362 0.6000 3.4 11 |
|12 LbfgsMaximumEntropyMulti 0.9242 0.5938 2.4 12 |
|13 SdcaMaximumEntropyMulti 0.9362 0.6000 2.0 13 |
|14 LightGbmMulti 0.9362 0.6000 1.6 14 |
|15 SdcaMaximumEntropyMulti 0.9362 0.6000 1.9 15 |
===============================================Experiment Results=================================================
------------------------------------------------------------------------------------------------------------------
| Summary |
------------------------------------------------------------------------------------------------------------------
|ML Task: Classification |
|Dataset: ......\TrainData\orders_data.txt|
|Label : order_status |
|Total experiment time : 49.15 Secs |
|Total number of models explored: 15 |
------------------------------------------------------------------------------------------------------------------
| Top 5 models explored |
------------------------------------------------------------------------------------------------------------------
| Trainer MicroAccuracy MacroAccuracy Duration #Iteration |
|1 FastForestOva 0.9363 0.7625 11.9 1 |
|14 SdcaMaximumEntropyMulti 0.9362 0.6000 1.9 14 |
|13 LightGbmMulti 0.9362 0.6000 1.6 13 |
|12 SdcaMaximumEntropyMulti 0.9362 0.6000 2.0 12 |
|10 LbfgsLogisticRegressionOva 0.9362 0.6000 3.4 10 |
------------------------------------------------------------------------------------------------------------------
|16 FastForestOva 0.9302 0.7316 12.8 16 |
評估
之後有一個簡單的評估功能,可以迅速看一下這個模型的效果如何
最後ML .NET貼心的為我們準備了呼叫模型獲得結果的示例程式碼,讓我們可以快速開發
呼叫模型完成功能
寫一個UI,輸入資料,並預測是否會被退貨
示例程式碼
參考資料
Microsoft.ML.Trainers.FastTree 名稱空間
官方machinelearning-samples
社群示例