本文共 4861 字,大约阅读时间需要 16 分钟。
作者:Andrew Udell
翻译:王闯(Chuck)
校对:廖倩颖
本文约2200字,建议阅读8分钟
作者基于Kaggle上的Wish数据集,用Python演示了随机森林回归预测商品销量的方法,对于读者分析和解决此类问题是很好的借鉴。
照片来源rupixen.com
为了演示随机森林回归,我们这里会用到当下非常流行的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)
虽然Rating_count == 0的情况下,但在分析数据时会出现问题。在本例中,在上一步进行计算时,评价数为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”)
评价数量和销量之间关系的散点图。图由作者制作。
此图展示了评价的另一面。评价数量与产品销量之间存在着松散的正相关关系。这可能是因为消费者在考虑购买商品时会同时参考总体评分和评价数量,或者是因为畅销产品自然会产生更多评价。
由于没有关于购买时间和评价时间的额外数据,在没有额外领域知识的情况下很难辨别其相关原因。
简而言之,随机森林回归是一系列决策树的平均结果。决策树就像流程图一样,它提出一些问题并根据这些问题的答案做出预测。例如,试图预测一个网球玩家是否会去球场的决策树可能会问:下雨了吗?如果是的,球场在室内吗?如果不是,玩家可以找到玩伴吗?
一个简单的决策树。图由作者制作。
然后,决策树将在做出预测之前回答所有这些问题。尽管比其他机器学习技术更容易理解,而且据一些专家称,决策树比其他机器学习更好地模拟实际的人类行为,但它们通常会使数据过拟合,这意味着它们通常会在相似的数据集上得出截然不同的结果。
为了解决此问题,从同一数据集中提取多个决策树,然后装袋(bagged),并返回结果的平均值。这被称为随机森林回归。
一个简单的随机森林。图由作者制作。
它的主要优点是可以对高度非线性的数据进行准确的预测。在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数据集就像数字试验田,可以用来解决真实世界的实际问题。随机森林回归只需进行很少的数据操作,已被证明是分析此类数据的宝贵工具,效果显著。
原文标题:
Predicting e-Commerce Sales with a Random Forest Regression
原文链接:
https://towardsdatascience.com/predicting-e-commerce-sales-with-a-random-forest-regression-3f3c8783e49b
编辑:于腾凯
校对:龚力
译者简介
王闯(Chuck),台湾清华大学资讯工程硕士。曾任奥浦诺管理咨询公司数据分析主管,现任尼尔森市场研究公司数据科学经理。很荣幸有机会通过数据派THU微信公众平台和各位老师、同学以及同行前辈们交流学习。
翻译组招募信息
工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。
你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。
其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。
点击文末“阅读原文”加入数据派团队~
转载须知
如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。
发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。
点击“阅读原文”拥抱组织