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
社区示例

posted @ 2022-03-17 19:14  Lulus  阅读(536)  评论(0编辑  收藏  举报