学习
实践
活动
工具
TVP
写文章

机器学习项目:使用Python进行零售价格推荐

编译:yxy

出品:ATYUN订阅号

日本最大的社区购物应用Mercari遇到了一个问题。他们希望向卖家提供定价建议,但这很难,因为他们的卖家能够在Mercari上放置任何东西。

在这个机器学习项目中,我们将建立一个自动建议正确的产品价格的模型。我们提供以下信息:

train_id – 列表的ID

name – 列表的标题

item_condition_id – 卖方提供商品的情况

category_name – 种类的列表

brand_name – 品牌名称

price – 该商品的售价。也就是我们预测的目标变量

shipping - 如果运费由卖方支付,买方支付0

item_description – 商品的完整描述

EDA

数据集可以从Kaggle下载(文末链接)。为了验证结果,我只需要train.tsv。让我们开始吧!

随机将数据拆分为训练集和测试集。我们只对EDA使用训练集。

((1185866, 8), (296669, 8))

价格

物品价格总体左倾(left skewed),绝大多数物品售价10-20。然而,最昂贵的商品定价在2009。所以我们会对价格进行对数变换。

运费

超过55%的物品运费由买家支付。

运费如何与价格相关?

如果卖家支付运费,平均价格为22.58

如果买家支付运费,平均价格为30.11

我们对价格进行对数转换后再次进行比较。

当买家支付运费时,平均价格显然会更高。

种类名称

种类名称列中有1265个唯一值

十大最常见的种类名称:

商品情况与价格

每个商品状态id的平均价格都不大一样。

经过以上的探索性数据分析,我决定使用所有的特征来构建我们的模型。

LightGBM

LightGBM是一个使用基于树的学习算法的梯度提升框架。具有它被设计成分布式且高效性的,它的优点包括:

更快的训练速度和更高的效率

更低的内存使用率

更高的准确性

支持并行和GPU学习

能够处理大规模数据

因此,我们要尝试一下。

常规设置:

我们必须修复的列中缺失值:

有5083个商品没有种类名称。

有506370个商品没有品牌名称。

有3个商品没有描述。

LightGBM的助手函数:

删除price = 0的行

合并训练和新的测试数据。

训练准备

计算矢量化名称和种类名称的列。

TF-IDF Vectorize item_description列。

标签二值化brand_name列。

为item_condition_id和运费列创建虚拟变量。

创建稀疏合并。

删除文档频率

从稀疏合并中分离出训练和测试数据。

为lightgbm创建数据集。

将我们的参数指定为dict。

当我们处理回归问题时,使用“regression”作为应用程序。

使用“RMSE”作为度量,因为这是一个回归问题。

“num_leaves”= 100,因为我们的数据相对较大。

使用“max_depth”以避免过拟合。

使用“verbosity”来控制LightGBM的冗余度(

“learning_rate”确定每棵树对最终结果的影响。

训练开始

训练模型需要参数列表和数据集。训练需要一段时间。

预测

评估

预测的rmse是:0.46164222941613137

Kaggle:https://www.kaggle.com/tunguz/more-effective-ridge-lgbm-script-lb-0-44823

Github:https://github.com/susanli2016/Machine-Learning-with-Python/blob/master/Mercari%20Price%20Suggestion%20Lightgbm.ipynb

数据集:https://www.kaggle.com/saitosean/mercari

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180808B1DM1W00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券