作者: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 csv
df = 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 price
sns.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_split
from sklearn.ensemble import RandomForestRegressor
# Divide the data between units sold and influencing factors
X = 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 sets
X_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 model
RFRegressor = RandomForestRegressor(n_estimators = 20)
RFRegressor.fit(X_train, Y_train)
接下來,初始化模型並開始運行。注意,參數n_estimators表示要使用的決策樹的數量。
# Set up and run the model
RFRegressor = 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】至聯繫郵箱,申請白名單授權並按要求編輯。
發佈後請將鏈接反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。
點擊“閱讀原文”擁抱組織