作者:Andrew Udell

根据Kaggle上的Wish的数据集合,这篇文章使用Python演绎了随机森林回归预测商品销量的相关方法,给读者提供了分析和解决此类问题的方法。

数据集合

为了演示随机森林回归这种方法,我们会用到美国目前非常流行的Wish(“美版拼多多”)的电商销售的相关数据集合。这些有关的数据集合都来自Kaggle平台,其中的销售信息只包含夏季服装。而这些信息属性包含了相关产品的说明,用户评价,有无广告宣传,是否在列表中添加了“热销”的标语以及已售出的商品数量等。我们采用了随机森林回归这种方法来预测相关商品的销量。一个精准的、优秀的预测不仅对于管理商品库存的工作人员有着非常大的价值,而且对于商品的销售人员来了解、认识产品在电商平台的表现也起着非常重要的作用。因为工作人员需要提前了解到他们所需要订购或者生产的商品数量和种类。

导入数据和清除

我们全部数据的导入和相关操作都需要使用python以及pandas和numpy库来运用完成。

import pandas as pdimport numpy as np# import the data saved as a csvdf = pd.read_csv("Summer_Sales_08.2020.csv")

我们在前两行分别导入pandas和numpy库。然后我们再把先前保存且重命名为“ Summer_Sales_08.2020”的CSV文件,读入到最后一行,然后再创建一个数据框。

df["has_urgency_banner"] = df["has_urgency_banner"].fillna(0)df["discount"] = (df["retail_price"] - df["price"])/df["retail_price"]

我们将这一列“has_urgency_banner”用来表示商品列表中是否使用了“热销”标签,但是我们发现这里并没有采用我们常用的1和0编码,而是选择了在没有使用标签时进行了留空。我们在观察数据时觉得这一列编码的方式不太恰当。所以我们在代码第一行用0来填充这些空白的地方。我们还需要使用新的一列来计算实际的销售价和建议零售价之间的折扣,我们在之后的代码第二行创建一个名为“折扣”的新一列。

df [“ rating_five_percent”] = df [“ rating_five_count”] / df [“ rating_count”] df [“ rating_four_percent”] = df [“ rating_four_count”] / df [“ rating_count”] df [“ rating_three_percent”] = df [“ rating_three_count“] / df [” rating_count“] df [” rating_two_percent“] = df [” rating_two_count“] / df [” rating_count“] df [” rating_one_percent“] = df [” rating_one_count“] / df [” rating_count“]

其中的原始数据集合包含了好几个专门用于评价商品的列。这些列不仅有平均评分,它还包含了评价总数以及一星到五星不同评价的数量。我们最好先分别计算出不同星级评价数占总评价数的百分比,这样的话,因为我们已经考虑到了评价的总数,我们就可以直接在商品之间进行比较。我们要为数据集中的每种产品给出不同五,四,三,二和一星级评价的百分比。那么我们就在上面用几行代码简洁地创建了五个新的列数,用来表示他们。

ratings = [    "rating_five_percent",    "rating_four_percent",    "rating_three_percent",    "rating_two_percent",    "rating_one_percent"]for rating in ratings:    df[rating] = df[rating].apply(lambda x: x if x>= 0 and x<= 1 else 0)

在本个例案中,在上一步进行计算时,评价数为0的商品便出现问题。我们便发现了在Rating_count == 0的这种情况下,分析数据时会出现问题。为了解决这个问题,我们选择用上面一段代码来遍历了所有新创建的列数,并检验输入的值是否介于0和1之间(包括0和1)。如果不是,则将它们替换为0。然后这个替换便成功解决了问题。

探索数据

import seaborn as sns# Distribution plot on pricesns.distplot(df['price'])

价格分布图,由文章作者进行制作。上面的代码生成了数据集中的全部商品的价格分布图。我们发现其中最明显和最有趣的是,上面没有任何商品的价格为10欧元。这有可能是因为商家为了让他们的产品进入“10欧元及以下”的清单之中,而故意这样做。

sns.jointplot(x =“ rating”,y =“ units_sold”,data = df,kind =“ scatter”)

评分与销量之间关系的散点图。由文章作者进行制作。我们从上图可以观察到,图中显示大多数产品的销量都少于20,000,而少数产品的销量分别达到了60,000和100,000。而上面的销售额数据大部分都是来自由三星到四星半的商品。而上面的散点图呈直线排列的趋势更是证明了销量有可能是估计值而不是实际数值。

sns.jointplot(x =“ rating_count”,y =“ units_sold”,data = df,kind =“ reg”)

评价数量和销量之间关系的散点图。由文章作者进行制作。上面的图展现了评价的另一方面。我们从中发现评价数量与产品销量之间存在着松散的正相关关系。而这可能是因为消费者在考虑购买商品时会同时参考总体的评分数据和评价数量,也有可能因为其是热销商品而产生更多的商品评价。但是由于没有相关购买时间和评价时间的数据,在没有相关领域知识和数据的情况下,我们很难辨别其原因。

随机森林回归是什么

总而言之,随机森林回归是一系列决策树的平均结果。而决策树像是我们常用的流程图一样,它提出一些问题并基于这些问题的答案来做出相应的预测。例如,图中预测一个打网球的人是否会去球场的决策树可能会问:下雨了吗?如果是的,球场在室内吗?如果不是,打球的人可以找到其他打网球的人吗?一个简单的决策树。由文章作者进行制作。决策树将会在做出预测之前就回答所有这些相关问题。根据一些领域的专家所说,决策树可能会比其他机器学习更好地模拟出人类的实际行为,虽然它们虽然具有比较容易理解的特点,但它们通常会让数据过于拟合,而这也代表它们通常会在相似的数据集合上得出截然不同的结果。为了解决这个问题,我们选择从同一数据集合中提取多个决策树,然后将其装袋,然后再返回结果的平均值。而这个也被称为随机森林回归。一个简单的随机森林。由文章作者进行制作。我们在上述Wish数据集中,我们在评价中看到了非线性关系。虽然不是强相关,不容易察觉到,但还是比较清楚的看到评分在三颗星以下,四颗半以上的分界线。因为决策树的主要优点是可以对高度非线性的数据进行非常准确的预测。那么我们就可以运用随机森林回归来识别此模式并将其纳入结果当中。然而,在更传统的线性回归中,这只会混淆其预测。除此之外,随机森林回归的分类器效率很高效,此分类器可以处理很多输入变量,还能对这些变量可以进行准确的预测。这是一个功能非常强大的工具,并且不需要太多的代码就可以实现。

随机森林回归的实现

from sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestRegressor# Divide the data between units sold and influencing factorsX = df.filter([    "price",    "discount",    "uses_ad_boosts",    "rating",    "rating_count",    "rating_five_percent",    "rating_four_percent",    "rating_three_percent",    "rating_two_percent",    "rating_one_percent",    "has_urgency_banner",    "merchant_rating",    "merchant_rating_count",    "merchant_has_profile_picture"])Y = df["units_sold"]# Split the data into training and testing setsX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33, random_state = 42)

我们在运行模型之前,要将相关的库引入到前两行。接下来在下面几行创建变量X和Y,然后将数据集合分为训练集和测试集。再将测试集大小赋值为0.33,这可以保证三分之一的数据用于测试数据的准确性,其余的三分之二的数据集将用于训练数据。

# Set up and run the modelRFRegressor = RandomForestRegressor(n_estimators = 20)RFRegressor.fit(X_train, Y_train)

然后,初始化模型并开始运行。在这里我们需要注意的是,其中的n_estimators参数表示要使用的决策树的数量。

# Set up and run the modelRFRegressor = RandomForestRegressor(n_estimators = 20)RFRegressor.fit(X_train, Y_train)

在最后,我们再将新拟合的随机森林回归模型应用在相关的测试数据上,利用其差值生成误差数组。到这里我们就成功啦!

结语

Wish的数据集合就像一块数字的试验田,我们可以用来解决真实世界的实际问题。而随机森林回归是分析此类数据的宝贵工具,它只需进行少量的数据操作,就能拥有非常好的一个效果。

原文链接:

https://towardsdatascience.com/predicting-e-commerce-sales-with-a-random-forest-regression-3f3c8783e49b

随机森林回归 python_用随机森林回归预测“美版拼多多”商品销量相关推荐

  1. 独家 | 用随机森林预测“美版拼多多”商品销量

    作者:Andrew Udell 翻译:王闯(Chuck) 校对:廖倩颖 本文约2200字,建议阅读8分钟 作者基于Kaggle上的Wish数据集,用Python演示了随机森林回归预测商品销量的方法,对 ...

  2. Python实现Stacking回归模型(随机森林回归、极端随机树回归、AdaBoost回归、GBDT回归、决策树回归)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 Stacking通常考虑的是异质弱学习器(不同的学习算法被组合在 ...

  3. 基于python的随机森林回归实现_PYTHON | 随机森林实战(代码+详解)

    大家好,我是菜鸟君,之前跟大家聊过R语言的随机森林建模,指路 R语言 | 随机森林建模实战(代码+详解),作为刚过完1024节日的码农算法工程师来说,怎么可能只会用一种语言呢?今天就来说说Python ...

  4. 基于python的随机森林回归实现_随机森林理论与python代码实现

    1,初品随机森林 随机森林,森林就是很多决策树放在一起一起叫森林,而随机体现在数据集的随机采样中和特征的随机选取中,具体下面再讲.通俗的说随机森林就是建立多颗决策树(CART),来做分类(回归),以多 ...

  5. 随机森林回归算法讲解

    随机森林(Random Forest)是一种基于集成学习的机器学习算法,被广泛用于回归问题.它通过使用多个决策树对数据进行建模,并将它们的预测结果进行集成,从而提高了模型的性能和稳定性.在本教程中,我 ...

  6. 五、实例:在波士顿房价数据集上用随机森林回归填补缺失值

    在波士顿房价数据集上用随机森林回归填补缺失值 点击标题即可获取源代码和笔记 一.引入 我们从现实中收集的数据,几乎不可能是完美无缺的,往往都会有一些缺失值.面对缺失值,很多人选择的方式是直接将含有缺失 ...

  7. Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格

    1.前言 目的: 本文通过多元线性回归与随机森林算法预测笔记本新品的发售价 工具: 语言:Python 3.8 软件:Jupyter Notebook 库:pandas.numpy.matplotli ...

  8. 【skLearn 练习】随机森林回归填补缺失值

    文章目录 随机森林回归填补缺失值 ♦导入需要的库 ♦导入数据集 ♦构建缺失值 ♦缺失值填补 ① 均值mean填补 ② 使用0值填补 ③ 使用随机森林回归填补 ⑴ 缺失值数目排序索引 ⑵ 遍历索引填补空 ...

  9. 【数据挖掘算法分享】机器学习平台——回归算法之随机森林

    随机森林回归算法是决策树回归的组合算法,将许多回归决策树组合到一起,以降低过拟合的风险.随机森林可以处理名词型特征,不需要进行特征缩放处理.随机森林并行训练许多决策树模型,对每个决策树的预测结果进行合 ...

  10. 基于蜣螂算法改进的随机森林回归算法 - 附代码

    基于蜣螂算法改进的随机森林回归算法 - 附代码 文章目录 基于蜣螂算法改进的随机森林回归算法 - 附代码 1.数据集 2.RF模型 3.基于蜣螂算法优化的RF 4.测试结果 5.Matlab代码 6. ...

最新文章

  1. 三星android获取root权限,三星G9250(S6 Edge公开版全网通 Android 5.1)获取ROOT权限详解教程...
  2. [网络安全提高篇] 一〇五.SQL注入之揭秘Oracle数据库注入漏洞和致命问题(联合Cream老师)
  3. 多线程循环输出abcc++_C ++循环| 查找输出程序| 套装5
  4. 快速的利用 Express 框架实现一个 Rustfull 接口的后端 Server
  5. 用户 sa 登录失败。_Sqlserver2008R2特定用户只能查看管理指定的数据库
  6. mysql可视化创建外键说明_关于使用可视化图形工具navicat for mysql来创建外键的步骤...
  7. 如何用计算机声卡录声音,教你Win10怎么录制电脑内部声卡播放的声音-电脑怎么录音...
  8. 物联那点事儿之自制网络温湿度计(arduino+点灯科技篇)
  9. 度分秒怎么计算加减乘除?
  10. spring-rabbitmq Direct reply-to 模式
  11. android p适配三星s86,感受三星S8屏幕震撼 先过APP适配这道坎
  12. 前端框架,库,组件,插件,控件的理解
  13. js抓取字符串中的电话号码
  14. 手机加上芯片可看免费电视 明年国内将上市(图)
  15. 网文版ChatGPT来了:大模型辅助写作,澜舟和中文在线联手出品
  16. 【Pr剪辑】Pr下载链接,基础操作,渲染1080视频,视频导出,音频导出,视频变速和合并
  17. 2021丨边缘计算领域值得关注的新书
  18. Matlab-提取前景
  19. 自动挡汽车驾驶技巧大全
  20. WinRAR免费版 v5.04 官方简体中文版

热门文章

  1. extract-text-webpack-plugin---webpack插件
  2. android详细信息java.util.ConcurrentModificationException变态
  3. awk和perl对多文本进行统计(求他们的并集,并且如果前三列相同第四列的数字相加,第五列信息合并)...
  4. JS拖动技术--- 关于setCapture
  5. [转]java面试笔试题大汇总 ~很全面
  6. 【VC++类型转换】string转换为CString
  7. Python字符串加密
  8. android自定义软键盘
  9. mdac版本过低怎么解决_工业铝型材硬度过低怎么解决
  10. MAC环境配置SDK