1. 程式人生 > 其它 >ML .NET 預測訂單是否被退貨

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,輸入資料,並預測是否會被退貨

示例程式碼

OrderStatusPrediction

參考資料

Microsoft.ML.Trainers.FastTree 名稱空間
官方machinelearning-samples
社群示例