手把手教你購物籃分析,輕松提升客單價!
購物籃分析,最早是為了發(fā)現(xiàn)超市銷售數(shù)據(jù)庫中不同商品之間的關(guān)聯(lián)關(guān)系。大家經(jīng)常聽到的沃爾瑪超市“啤酒與尿不濕”的案例就是購物籃分析的一個經(jīng)典案例。
購物籃分析的目的在于,通過對用戶消費記錄數(shù)據(jù)的挖掘和分析,找出用戶購買習(xí)慣的一些潛在規(guī)律,從而可以為用戶提供他們想要的搭配或套餐。套餐銷量的提升一般會帶來客單價的提升,從而可以提高公司收益。
本期「數(shù)分實戰(zhàn)派」,我們就來學(xué)習(xí)如何在觀遠BI平臺上做購物籃分析,不論是專業(yè)數(shù)據(jù)分析人員還是業(yè)務(wù)人員都可以輕松學(xué)會,一起來動手“實戰(zhàn)”吧!
01、怎么做購物籃分析?
做購物籃分析一般以訂單(購物小票)為視角,即分析一次購買行為中同時購買商品A與商品B的關(guān)聯(lián)性。通俗地說,也就是用戶購買商品A的行為,是否會對其購買商品B產(chǎn)生影響?
購物籃分析的關(guān)鍵衡量指標(biāo)有3個:支持度、置信度、提升度。要計算這3個指標(biāo),需要4個基礎(chǔ)指標(biāo):商品A的訂單數(shù)、商品B的訂單數(shù)、商品組合的訂單數(shù)、總訂單數(shù)。
以下表格是對這7個指標(biāo)的解釋:

02 ?觀遠BI平臺落地購物籃分析
在觀遠BI平臺上做購物籃分析,可以通過創(chuàng)建卡片做即席分析,也可以使用Smart ETL工具對訂單數(shù)據(jù)做處理后再做購物籃分析。在卡片上做的購物籃分析方案是嘗試驗證性的計算,并且計算復(fù)雜較占用系統(tǒng)資源,因此推薦在Smart ETL中做計算。案例數(shù)據(jù)4萬多行,使用Smart ETL工具3秒鐘就運算完成了。本次內(nèi)容和大家分享如何使用Smart ETL工具做購物籃分析,若有需要了解在卡片上的解決方案,可以訪問觀遠云應(yīng)用市場上的案例庫。
在使用Smart ETL工具對訂單數(shù)據(jù)做處理后再做可視化的展示,可以得到如下的分析結(jié)果:

接著讓我們看一下在觀遠BI平臺做購物籃分析的步驟:
首先,我們使用的數(shù)據(jù)源為最常見的包含日期、門店、商品、訂單號的消費流水?dāng)?shù)據(jù)。

然后,我們使用這份消費流水?dāng)?shù)據(jù)作為輸入數(shù)據(jù)源,在ETL中做數(shù)據(jù)的處理。整個ETL的操作步驟不算復(fù)雜,過程如下圖所示:

03 ?計算邏輯推導(dǎo)
在動手開發(fā)ETL前,我們需要先梳理一下計算邏輯。其實做購物籃分析的4個基礎(chǔ)指標(biāo):商品A的訂單數(shù)、商品B的訂單數(shù)、商品組合的訂單數(shù)、總訂單數(shù),只有商品組合的訂單數(shù)這1個基礎(chǔ)指標(biāo)是比較難算的,是做購物籃分析的難點所在。
我們可以用一份簡單的數(shù)據(jù)來推導(dǎo)下該怎么計算商品組合的訂單數(shù)。例如下表,我們最終需要計算出每個商品組合有多少個訂單數(shù)。

那往回倒推一步,我們要先算出每個訂單都有哪些商品組合。例如下表所示:

所以計算商品組合的訂單數(shù)這個指標(biāo)的關(guān)鍵是要窮舉出每個訂單有哪些商品組合。窮舉的過程其實類似于我們高中時候?qū)W的排列組合問題。
以上表中的訂單4為例,一共有A,B,C,D 4件商品。
????1.?我們可以先分別取2種商品放到2個盒子里面:盒子1放商品1 -> 盒子2放商品2,但商品2是所有商品里面除了商品1外任意的商品。這樣一共有12種排列的可能性。
????2.?然后我們把2個盒子里面的商品放入1個大盒子里面,再做去重,只保留含有相同商品的大盒子的其中1個。通過去重后,我們得到了6種商品組合。
通過這份簡單數(shù)據(jù)的邏輯推導(dǎo),我們把一個看似復(fù)雜的計算商品組合的問題回歸到了先排列再去重的計算組合的數(shù)學(xué)問題。窮舉了兩兩商品的組合,其實用這個解題思路,也可以解決3件商品組合、4件商品組合的問題。

04 ?ETL開發(fā)實現(xiàn)
接下去就是在觀遠BI平臺上實現(xiàn)這個計算邏輯。
????????STEP 1 ?數(shù)據(jù)去重和過濾
???????添加篩選條件過濾數(shù)據(jù)源,例如日期大于等于2021-01-01。
???????使用分組聚合對訂單號和商品做去重,將訂單號、商品ID、商品名稱拖入維度欄。
???????添加計算字段:商品種類數(shù)。
????? ??COUNT([商品ID]) OVER(PARTITION BY [訂單號])
???????添加篩選條件,過濾商品種類數(shù)大于等于2。
????????STEP 2??計算兩兩商品組合的訂單數(shù)
???????添加計算字段:商品序號列表。
????array_sort(collect_list([商品ID]) over(partition by [訂單號]))——羅列一個訂單內(nèi)的所有商品ID,并排序
???????添加計算字段:商品B列表。
????filter([商品序號列表], x -> x<>[商品ID])——過濾掉商品A的ID就是商品B的列表
???????添加計算字段:商品B序號。
????explode([商品B列表])——展開商品B序號
???????添加計算字段:商品組合。
????array_sort(array([商品ID],[商品B序號]))——使用array函數(shù)創(chuàng)建商品組合的數(shù)組(將2個盒子里面的商品放入1個大盒子里面),并使用array_sort函數(shù)對數(shù)組做排序
???????使用分組聚合對訂單號和商品組合做去重,將訂單號、商品組合拖入維度欄。
???????添加計算字段:商品A序號。[商品組合][0]
???????添加計算字段:商品B序號。[商品組合][1]
???????使用分組聚合計算商品組合的訂單數(shù),將商品A序號、商品B序號拖入維度欄;訂單號拖入數(shù)值欄,聚合方式設(shè)置為去重計數(shù),別名為商品組合的訂單數(shù)。
????????STEP 3?關(guān)聯(lián)得到商品A名稱、商品A的訂單數(shù)、商品B名稱、商品B的訂單數(shù)、總訂單數(shù)

????分支1:
???????使用分組聚合計算商品的訂單數(shù),將商品ID、商品名稱拖入維度欄;訂單號拖入數(shù)值欄,聚合方式設(shè)置為去重計數(shù),別名為訂單數(shù)。
???????添加關(guān)聯(lián)數(shù)據(jù),商品組合的商品A序號 關(guān)聯(lián) 商品ID。重命名,得到商品A名稱、商品A的訂單數(shù)。

? ????????添加關(guān)聯(lián)數(shù)據(jù),商品組合的商品B序號 關(guān)聯(lián) 商品ID。重命名,得到商品B名稱、商品B的訂單數(shù)。
????分支2:
???????使用分組聚合計算商品的訂單數(shù),聚合方式設(shè)置為去重計數(shù),別名為訂單數(shù)。
???????添加關(guān)聯(lián)數(shù)據(jù),常數(shù)字段a 關(guān)聯(lián) 常數(shù)字段a。重命名,得到總訂單數(shù)。

最后保持并且運行ETL,我們就算出了4個基礎(chǔ)指標(biāo):商品A的訂單數(shù)、商品B的訂單數(shù)、商品組合的訂單數(shù)、總訂單數(shù)。然后使用ETL輸出的數(shù)據(jù)集新建卡片,計算商品組合的支持度、置信度、提升度,就可以得到我們想要分析結(jié)果啦!