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
社区示例
学习技术最好的文档就是【官方文档】,没有之一。
还有学习资料【Microsoft Learn】、【CSharp Learn】、【My Note】。
如果,你认为阅读这篇博客让你有些收获,不妨点击一下右下角的【推荐】按钮。
如果,你希望更容易地发现我的新博客,不妨点击一下【关注】。