購物籃分析 — Python實戰:如何找出商品搭配的總體策略?(附Python程式碼)

陳俊凱
Marketingdatascience
10 min readNov 16, 2020

本次的文章我們將實際應用購物籃分析,帶您瞭解各項產品之間關係,資料集的應用將延續上篇文章整理過後的資料進行購物籃分析,同時考慮購買機率與組合利潤產出最佳的產品搭配組合,藉此找出商品搭配的總體策略。

之前的文章中介紹了購物籃分析與資料整理,想要複習可以點選一下文章連結:

如果想要了解購物籃分析的概念,可以見此文章:你怎麼處理顧客交易資訊?Apriori演算法

購物籃分析 — Python實戰:商務資料結構整理

跟我一起準備進入分析環節吧!!

資料確認

延續上一章節的內容,我們執行cart變數,查看資料結構是否有許多的array,並且將一個購物籃內的商品放置於一個array(如圖一),確認沒問題後就可以進入下一步,使用apriori套件進行購物籃分析。

圖一、購物籃資料示意圖

購物籃分析-apriori

apriori此一套件將會幫我們計算所有array內的產品組合數據support、confidence與lift,再根據我們所設定的條件進行篩選。

將cart變數置於apriori套件內,下一步設定篩選條件-最小支持度(min_support)與最小提升度(min_lift), apriori會將大於等於最小支持度與最小提升度的產品組合選出。

最小支持度數值根據實際情況進而調整。

篩選條件與管理意涵

如果根據公司策略想找尋更多不同種類的產品組合,那麼可將最小支持度降低,此舉將幫助我們找到更多的產品組合。新增的產品組合中若有支持度低但提升度高的組合,即為具有潛力的產品組合。然而,最小支持度過低,容易造成商品組合的決策困難,因為可能在選出的組合中,該商品銷售量最少,但其可能具有不錯的銷售潛力,但卻因支持度太低,而沒有被選為最終的產品組點。本次案例中我們將支持度設為0.03。其必須根據實際情形不同進行更動。

最小提升度設為1.000000001,進而確保所選取出來的商品組合提升度都大於1,產品與產品之間為正相關,做完的apriori分析結果將其型態轉換為dataframe方便我們做之後的資料提取與計算,如程式碼1

程式碼1:

association_rules = apriori(record, min_support=0.003, min_lift = 1.000000001)association_results = pd.DataFrame(association_rules)

藉由apriori計算出各項產品的support、confidence、lift,並且同時篩選,結果如圖二。

圖二、產品組合資料示意圖

分析結果提取

購物籃分析結果中(圖二),我們須將各項產品items、support、confidence與lift提取出來。

首先,判斷items內產品最多的產品組合,藉此才能決定dataframe欄位數量,接者將support放入dataframe,如程式碼2

程式碼2:

thebig = association_results[‘items’].str.len().max()separate = pd.DataFrame(association_results[‘items’].values.tolist(),columns=[ ‘p’+ str(x) for x in range(thebig)])separate[‘support’] = association_results[‘support’].values

接著,提取產品組合內的各項產品與support,如圖三。

圖三、產品組合資料示意圖

下一步需將confidence與lift從association_results[‘ordered_statistics’]中取出,資料結構如圖四

圖四、ordered_statistics欄位內資料範例

我們可以使用str[ ]將其資料提取,需先將series第一項提取,第一項為符合最小支持度與提升度的產品組合,再根據順序提取confidence與lift,如程式碼3:

程式碼3:

separate[‘confidence’] = association_results[‘ordered_statistics’].str[0].str[2]separate[‘lift’]=association_results[‘ordered_statistics’].str[0].str[3]

將產品組合的confidence與lift提取出來,放入dataframe,如圖四

圖四、購物籃分析結果dataframe

產出商業價值💎💎

產出購物籃分析結果後,如何將產品搭配眾多組合中,篩選出最合適的產品組合呢?

一般我們在挑選產品組合,需要符合兩點:

  1. 較高的購買機率
  2. 較高的獲利組合

要從產品組合中挑選最合適的產品組合,可以透過以下步驟:

(一) 篩選相同產品(p0)與其他產品搭配購買機率:將p0相同的產品篩選出來,進行產品搭配之比較。

(二) 利潤計算:使用上一篇文章中利潤dataframe,來計算產品組合利潤,將p0產品與p1產品利潤加總。

上篇文章請參考:購物籃分析 — Python實戰:商務資料結構整理

(三) 產出dataframe並放入各項資訊:將p0、p1、購買機率、提升度、產品組合利潤與潛在產品組合利潤。

潛在產品組合利潤是將購買機率乘產品組合利潤估算該產品組合可以帶來的利潤,其好處是可以將行銷活動次數與機率列入考慮,並將產品組合總利潤產出,公式如下:

潛在產品組合利潤=購買機率×產品組合利潤

產品組合總利潤=行銷活動次數×潛在產品利潤

最後,我們將營業額前三系列產出購物籃清單,進行購物籃分析,根據潛在產品組合利潤進行排序,將不同產品之間的搭配關係產出清單於該系列底下,將以上所解說的步驟放入迴圈,即完成本次購物籃實戰分析,如程式碼4

程式碼4:

for s in top3_series:series_data=alldata[alldata[‘系列’]==s]order_number=np.unique(series_data[‘訂單編號’])os.mkdir(s + ‘商品搭配分析’)for i in order_number:cart =series_data[series_data[‘訂單編號’]==i][‘產品’].valuesrecord.append(cart)print(cart)association_rules = apriori(record, min_support=0.003, min_lift = 1.000000001)association_results = pd.DataFrame(association_rules)# 兩個以上產品組合association_results= association_results[association_results[‘items’].str.len() >1]# 提取rules 中結果thebig = association_results[‘items’].str.len().max()association_results[‘confidence’] = association_results[‘ordered_statistics’].str[0].str[2]separate = pd.DataFrame(association_results[‘items’].values.tolist(), columns=[ ‘p’+ str(x) for x in range(thebig)])separate[‘support’] = association_results[‘support’].valuesseparate[‘confidence’] = association_results[‘confidence’].valuesseparate[‘lift’]=association_results[‘ordered_statistics’].str[0].str[3]# 產出csvfor i in np.unique(separate[‘p0’]):data = separate[separate[‘p0’]==i]# 利潤找尋profit_list=[]for p in data[‘p1’]:cart_profit = profit_df[profit_df[‘產品’]==p][‘利潤’].values+profit_df[profit_df[‘產品’]==i][‘利潤’].valuesprofit_list.append(cart_profit[0])sortval = pd.DataFrame({‘當購買時’:i,‘購買產品’:data[‘p1’],‘機率’:data[‘confidence’],‘提升度’:data[‘lift’],‘產品組合利潤’:profit_list,‘潛在利潤’:data[‘confidence’]*profit_list #多項推廣時})sortval.sort_values(by=[‘機率’], ascending=False , inplace = True)sortval.to_csv( os.getcwd()+’/’+s+’商品搭配分析/’+ s+”_當購買 “+ i +” 時購買以下商品機率.csv”, encoding = ‘utf-8-sig’)

推薦產品組合清單產出如圖五。

圖五、產品搭配分析結果

並且透過最後一行程式碼4中的最後一行,將不同產品組合清單放入不同系列中,也可以直接參考程式碼5

程式碼5:

sortval.to_csv( os.getcwd()+’/’+s+’商品搭配分析/’+ s+”_當購買 “+ i +” 時購買以下商品機率.csv”, encoding = ‘utf-8-sig’)

將不同系列的產品組合放入不同資料夾底下,更方便執行人員查詢。

圖六、產品搭配分析結果

以上即為銷售實戰購物籃篇內容,購物籃分析在商業上的分析相當廣泛,幾乎所有產業都可以使用購物籃分析,只是使用方法的不同,而且購物籃分析的方式也是透過較直觀的邏輯運算,在業界接受度相當高。

希望透過本系列的教學能夠讓你了解購物籃分析如何應用,並且能夠實際應用。

完整程式碼在這裡呦~~

作者:陳俊凱(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)

--

--