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

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

購物籃分析
Photo by: Luke Chesser

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

如果想要了解購物籃分析的概念,可以見此文章:你怎麼處理顧客交易資訊?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][‘產品’].values

record.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’].values

separate[‘confidence’] = association_results[‘confidence’].values

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

# 產出csv

for 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][‘利潤’].values

profit_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’)

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

購物籃分析
圖七、產品搭配分析結果

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

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

完整程式碼在這裡呦~~

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

更多實戰案例及情境好文推薦

回到頂端