1. 程式人生 > 實用技巧 >SQL分析實戰案例

SQL分析實戰案例

第一部分 分析背景及資料說明

1.1 分析背景

中國電商行業經過初期的粗狂式發展,從有貨就能賣的模式逐漸轉變到精細化運營的模式,通過對大量資料進行深入分析,發現數據背後的使用者需求逐漸伴隨在電商運營的工作中。隨著電商行業發展日趨成熟,加上對於資料的重視,資料基礎平臺以及資料庫的完善,所收集到的資料更加完整,對於分析提供了強有力的支援,同時通過資料分析來為企業經營提供決策變得越來越重要,本文在這個背景下,基於電商使用者資料開展分析。

1.2 資料說明

本資料集來源於阿里雲天池競賽平臺,包含了淘寶天貓2017年11月25日至2017年12月3日之間,有行為的約一百萬隨機使用者的所有行為(行為包括點選、購買、加購、喜歡)。

資料來源:

資料說明:

其中Behavior type ,使用者行為型別共有四種,它們分別是

ps: 資料量級達到一億,考慮到電腦效能問題,故提取其中的100萬左右資料作為本次分析的原始資料.

第二部分 分析思路

本次分析的目的是從多個維度分析使用者資料、行為資料、商品資料,發現能夠提升銷售的建議。

針對銷售如何提升提出疑問:

1.哪些商品是熱搜商品?哪些是暢銷商品?熱搜商品是否就是暢銷商品?

2.使用者各個行為型別的佔比是多少?行為之間的轉化率是怎樣的?哪個環節流失比較嚴重?

3.工作日或週末,每天不同時間段對於使用者行為的影響

4.使用RFM方法對使用者進行分類

針對分析目的,採用多維度拆解分析方法對問題進行拆解,並在分析過程中使用漏斗模型、對比分析法、RFM模型分析法、假設檢驗分析方法對流程級業務指標中的問題進行分析。

分析思路如下:

第三部分 資料清洗

3.1 選擇子集

本資料集各欄位均有分析價值,不需要進行本項操作

3.2列名重新命名

通過Navicate 進行操作,不詳細贅述,命名後欄位

3.3刪除重複值

根據欄位內容進行分析後,將UserID,ItemID,TimeStamp設定成聯合主鍵,經驗證,不存在資料重複。

select UserID,ItemID,TimeStamp from userbehavior 
GROUP BY UserID,ItemID,TimeStamp having count(1)>1;

3.4 缺失值處理

select count(UserID),count(ItemID),count(CategoryID),count(BehaviorType),
count(TimeStamp) from userbehavior;

3.5 一致化處理

考慮到要對日期進行詳細分析,但是timestamp格式是時間戳,包含了日期和時間,因此要對該欄位進行拆分並調整成日期和時間格式

新增日期和時間欄位

alter table userbehavior add Date date not null,add Time varchar(10) not null;

更新欄位內容

UPDATE userbehavior set Date = FROM_UNIXTIME(TimeStamp,'%Y-%m-%d'),
Time = FROM_UNIXTIME(TimeStamp,'%k');

經測試發現,時間只記錄了小時,因此提取時間時只制定K

結果如下:

3.6 異常值處理

檢查日期是否在資料集規定範圍內2017-11-25至2017-12-3

SELECT max(Date),MIN(Date) from userbehavior;

發現有異常值資料,對其進行刪除

select count(1) from userbehavior WHERE Date < '2017-11-25'; 

共1099999條資料,異常資料520條

DELETE from userbehavior WHERE Date < '2017-11-25';
select count(1) from userbehavior;

刪除後剩餘

第四部分 資料分析

4.1 使用者行為路徑分析

SELECT BehaviorType,count(1) 行為型別計數 from userbehavior GROUP BY BehaviorType;

發現使用者點選量佔據89.63%,而購買量僅佔所有資料的2.03%,,使用者從瀏覽到購買的轉化率只有2.27%,那是什麼原因導致的轉化率低呢?

使用者來到網站,首先要經過瀏覽主頁,檢視推薦商品或者輸入關鍵字找到自己喜歡的商品,然後加購車或者收藏,最後點選購買,支付等一系列操作,那我們只看到了從瀏覽到購物的轉化率低,具體是哪個環節出了問題,還需要進一步的拆解,運用漏斗分析方法來分析哪個環節轉化率低導致的整體轉化率低。

按照行為路徑,使用者在對每款商品總會有以下幾種情況的操作

分析每種情況下的轉化率

建立檢視

create view  user_P  
AS
select UserID, ItemID,
sum(case when BehaviorType = 'pv' then 1 else 0 end) as '點選',
sum(case when BehaviorType = 'cart' then 1 else 0 end) as '加購',
sum(case when BehaviorType = 'fav' then 1 else 0 end) as '收藏',
sum(case when BehaviorType = 'buy' then 1 else 0 end) as '購買'
from userbehavior 
GROUP BY UserID, ItemID;

該表的意思是:使用者在每個商品上的行為記錄,分別包括點選次數,加購次數,收藏次數和購買次數

-- 點選量
SELECT sum(點選) from user_p;

-- 點選--購買--10834

SELECT sum(購買) from user_p
where 點選>0 and 購買>0 and 收藏=0 and 加購=0;

-- 點選--加購--29628
SELECT sum(加購) from user_p
where 點選>0  and 收藏=0 and 加購>0;

-- 點選--加購--購買--3169
SELECT sum(購買) from user_p
where 點選>0 and 購買>0 and 收藏=0 and 加購>0;


-- 點選--收藏--11957
SELECT sum(收藏) from user_p
where 點選>0  and 收藏>0 and 加購=0;

-- 點選--收藏--購買--1044
SELECT sum(購買) from user_p
where 點選>0 and 購買>0 and 收藏>0 and 加購=0;


-- 點選--收藏+加購-1847
SELECT sum(收藏)+sum(加購) from user_p
where 點選>0 and 收藏>0 and 加購>0;

-- 點選--收藏+加購 -- 購買 -- 158
SELECT sum(購買) from user_p
where 點選>0 and 收藏>0 and 加購>0 and 購買>0;

-- 點選--流失--867742
SELECT sum(點選) from user_p
where 點選>0 and 收藏=0 and 加購=0 and 購買=0 ;

計算結果如下圖:

由此我們可以看出,從瀏覽量到直接購買轉化率才1.1%,而瀏覽後有加購行為的購買轉化率是10.7%,有收藏行為的轉化率是8.7%,所以顧客有收藏或者加購的行為之後,會提升轉化率,所以我們需要從產品互動介面、營銷機制等方面讓使用者去多加購,多收藏。同時我們發現瀏覽後加購的轉化率是3.1%,並且加購後到購買轉化率為10.7%是最高的,所以引導加購行為更容易,效率更高。

當然我們也從中發現了一個巨大的問題,就是使用者從點選量到下一層操作中,轉化率都很低,說明出使用者花了大量的時間去瀏覽商品,而真正下單的卻很少,我們也都知道淘寶天貓的大部分使用者都是女性,那女性逛街是非常厲害的,一下午甚至是一天,為什麼呢?是因為女性往往購物不是買自己需要什麼,而是自己喜歡什麼,也就是所謂的閒著沒事瞎逛,所以對於淘寶天貓這種購物平臺,商品的推薦功能顯得尤為重要,如果能夠推薦使用者喜歡的商品,那自然會下單,如果不喜歡也就只能是看看而已。

4.2 轉化率低的原因分析

這裡只是針對平臺問題,提出假設:推薦機制不合理,給使用者推薦的都是不喜歡的商品,造成轉化率低

分析:這裡可以通過分析高瀏覽量商品與高購買量商品之間是否存在高度重合,如果是的,那就說明推薦的商品是使用者喜歡,假設就不成立,如果不是則證明假設成立。

瀏覽量前10的商品類

SELECT CategoryID,count(CategoryID) 點選次數 from userbehavior
where BehaviorType = 'pv'
GROUP BY CategoryID ORDER BY 點選次數 DESC limit 10;

購買量前10的商品類

SELECT CategoryID,count(CategoryID) 點選次數 from userbehavior
where BehaviorType = 'buy'
GROUP BY CategoryID ORDER BY 點選次數 DESC limit 10;

從圖中可以看出點選量高的購買量不一定高

接下來我們細分到每個商品

-- 瀏覽量前10的商品
SELECT ItemID,count(ItemID) 點選次數 from userbehavior
where BehaviorType = 'pv'
GROUP BY ItemID ORDER BY 點選次數 DESC limit 10;

-- 購買量前10的商品
SELECT ItemID,count(ItemID) 點選次數 from userbehavior
where BehaviorType = 'buy'
GROUP BY ItemID ORDER BY 點選次數 DESC limit 10;

-- 計算點選量前10的商品的購買量
select * from 
(SELECT itemid,count(BehaviorType) as 購買量
from userbehavior
where BehaviorType = 'buy'
group by itemid ) as a
where itemid in('812879','138964','3845720','3708121','2032668','2331370','2338453','1535294','3031354','4211339');


-- 計算購買量前10的點選量
select * from 
(SELECT itemid,count(BehaviorType) as 瀏覽量
from userbehavior
where BehaviorType = 'pv'
group by itemid ) as a
where itemid in('3122135','3237415','2964774','2124040','1034594','4401268','1595279','1004046','1910706','11517');

最終資料如下表,首先看瀏覽量TOP10的表格,前10瀏覽量的商品對應的購買量幾乎沒有,也就是說平臺給予的流量顧客的點選是高的,但是這個產品所產生的銷售沒有,由於電商業務是以銷售為導向的,所以這些商品並不適合衝量銷售,不應當給予過多的流量支援。

反觀購買量這邊,瀏覽量都是比較低的,並且和前面瀏覽量TOP10裡沒有一個重複的商品ID,也就是說高瀏覽和高購買是兩類不同的商品。

因此可以得出結論:推薦的商品顧客並不喜歡購買,由於高瀏覽量並沒有帶來購買,所以轉化率低。

我們發現2735466、1464116、4145813這三類商品購買量比較高,在高需求量的基礎上我們考慮淘寶調整推送機制,增加對這幾類商品的推送,以滿足使用者需求。

總結:

1.優化推薦機制,把更多流量給到顧客願意購買的商品

2.通過更好的商品推薦,頁面互動,積分會員等功能等降低流失率

3.引導加購,可以加強營銷機制引導顧客加購,比如加購物車聯絡客服領優惠券

接下來從時間維度分析,使用者有何規律可循

4.3 使用者在什麼時候會瀏覽商品

提出假設:使用者在週末購買行為會增加

收集證據:

select Date,count(BehaviorType) as '總數',
sum(case when BehaviorType = 'pv' then 1 else 0 end) as '點選',
sum(case when BehaviorType = 'cart' then 1 else 0 end) as '加購',
sum(case when BehaviorType = 'fav' then 1 else 0 end) as '收藏',
sum(case when BehaviorType = 'buy' then 1 else 0 end) as '購買'
from userbehavior GROUP BY Date;

假設不成立,資料一週內每天的波動也不一樣,但是由於只有一週的資料,所以這樣分析的結果也不具有參考價值。

提出假設:使用者在一天中晚上休息時間點選量會上升

收集證據:

經過對一天中使用者行為分佈的視覺化,可以發現每日0點至3點使用者活躍度快速降低,降到一天中活躍度最低值,4點至10點使用者活躍度快速上升,10點至18點使用者活躍度較平穩,但分別在12點及17點略有下降,18點後用戶活躍度開始快速上升,並在20-22時達到一天中使用者活躍度的最高值,這也符合大部分人的作息規律。所以,可以考慮在20-22點這個時間段進行一些促銷活動和商品推薦以提高轉化率。

此外,可以看出晚上7點到凌晨一點的晚間時間段,使用者的操作行為偏向於瀏覽。使用者在白天特別是在商務10點和下午1點,購買行為比率達到最高,可見,在這一時間段的使用者使用淘寶下單購買商品的意向是最高的。

4.4 基於FRM分析模型的使用者分層

RFM是3個指標的縮寫,最近一次消費時間間隔(Recency),消費頻率(Frequency),消費金額(Monetary)。通過這3個指標對使用者分類。

接下來就需要利用SQL語句,計算每個使用者的最近一次消費時間間隔和消費頻率,消費金額由於資料缺失,暫且不予考慮。

計算最近一次消費時間間隔(R)

R = 資料統計時間 - 使用者最新消費時間

F = 使用者購買次數總和

由於我們使用的是歷史資料,因此,這裡把資料集中最新的時間定為資料統計時間2017-12-3

select UserID,datediff('2017-12-3',max(Date))+1 as R ,count(BehaviorType) as F from userbehavior 
where BehaviorType = 'buy'
group by UserID

給R和F按價值打分

結果:

select *,
(case when R<=2 then 4
 when R between 3 and 4 then 3
when R between 5 and 7 then 2
when R between 8 and 9 then 1 end) as Rscore,
(case when F between 1 and 6 then 1
when F between 7 and 12 then 2
when F between 13 and 18 then 3
when F>=19 then 4 end)  as Fscore
from 
(select UserID,datediff('2017-12-3',max(Date))+1 as R ,count(BehaviorType) as F 
from userbehavior 
where BehaviorType = 'buy'
group by UserID) m

計算Rscore和Fscore均值

使用者分類

select 使用者分類,count(UserID) as '人數' from
(select userid,
(case when RScore>'3.0533' and FScore>'1.1043' then '重要價值使用者'
      when RScore>'3.0533' and FScore<'1.1043' then '重要發展使用者'
      when RScore<'3.0533' and FScore>'1.1043' then '重要保持使用者'
      when RScore<'3.0533' and FScore<'1.1043' then '重要挽留使用者'
 else 0 end) as '使用者分類'
from 

(select *,
(case when R<=2 then 4
when R between 3 and 4 then 3
when R between 5 and 7 then 2
when R between 8 and 9 then 1 end) as Rscore,
(case when F between 1 and 6 then 1
when F between 7 and 12 then 2
when F between 13 and 18 then 3
when F>=19 then 4 end)  as Fscore
from 
(select UserID,datediff('2017-12-3',max(Date))+1 as R ,count(BehaviorType) as F 
from userbehavior 
where BehaviorType = 'buy'
group by UserID) m) n)f
group by 使用者分類; 

如下圖:

可以發現使用者集中在重要發展使用者和重要挽留使用者上。

對於佔比較大的重要發展使用者,其消費頻率低,但最近消費距離現在時間較短,因此要想辦法提高他的消費頻率。

對於重要挽留使用者,最近消費時間距離現在較遠、消費頻率低。這種使用者有即將流失的危險,需要主動聯絡使用者,調查清楚哪裡出了問題,並想辦法挽回。

對於重要價值使用者,消費頻率高且最近消費距離現在時間短,需要給其提供VIP服務。

對於重要保持使用者,最近消費距離現在時間較遠,也就是R值低,但是消費頻次高。這樣的使用者,是一段時間沒來的忠實客戶,可以採取郵件推送、APP推送提醒、促銷活動時簡訊提醒等方式主動和他們保持聯絡,提高復購率。

第五部分 結論與建議

結論

1.流量高的商品並不是購買量高的商品,高流量的商品購買量低導致了整體的流量轉化率低,也就是推薦展示的邏輯並沒有以銷售為導向。

2.從使用者行為路徑中發現,使用者瀏覽後直接購買的轉化率較低,而通過加購,收藏等行為後購買的轉化率會提升,故需要引導顧客積極加購或者收藏,且對比轉化率後發現加購物車所帶來的轉化是最好的。

3.使用者主要集中在重要發展使用者和重要挽留使用者,兩者加總佔用戶數的91%

建議

1.建議演算法部門優先展示購買量TOP10的商品類給顧客,例如2735466、1464116、4145813等,如果說瀏覽量高的商品是新品或者近期主推的商品,是否可以考慮和TOP10購買的商品按照類目合理搭配銷售,提升轉化率和連帶率。

2.需積極引導顧客加購物車或者收藏寶貝,對於介面設計部門是考慮如何互動能夠讓顧客更願意點選,對於運營部門,可以設定機制引導,例如加購聯絡客服送5元無門檻優惠券,加購送小樣贈品等的機制來引導。

3. 淘寶的使用者搜尋商品的時間段主要在下午6點至晚上11點,也就是大多數人下班後休息的時間。建議運營部門在這個時間段多策劃一些營銷活動,提高轉換率。

4.對於重要發展使用者,其消費頻率低,但最近消費距離現在時間較短,因此要想辦法提高他的消費頻率,通過CRM的紅包發放、會員權益獎勵、簡訊提醒優惠等方式提升消費頻率。

5.對於重要挽留使用者,最近消費時間距離現在較遠、消費頻率低。這種使用者有即將流失的危險。建議通過APP推送、簡訊和郵件等形式發放有償問卷主動聯絡使用者,調查清楚哪裡出了問題,制定相應的挽回策略。

小彩蛋,使用者行為的流程