一、專案背景
UserBehavior是阿里巴巴提供的一個淘寶使用者行為資料集,用於隱式反饋推薦問題的研究。
構造推薦系統的關鍵資源是使用者歷史行為資料,具體可分為兩類:顯式反饋和隱式反饋。其中,隱式反饋是指不直接表現使用者傾向的歷史資料,如瀏覽網站、購買商品等。
二、分析思路
2。1 分析目的
透過對資料集中的使用者資料、行為資料及商品資料進行分析,找出各個環節存在的問題,為提升銷 量 提供合理的建議 。
2。2 明確問題
1。 瞭解獲客情況和留存情況
2。 基於漏斗模型分析使用者從瀏覽到購買整個過程的轉化率情況
3。 觀察使用者四種行為的變化趨勢(按天和按小時)
4。 分析瀏覽量、購買量前10的商品以及商品類目,最佳化產品銷售
5。 基於RFM模型對使用者價值進行分析
2。3 分析框架
三、資料說明
3。1 資料來源
阿里雲天池 : 資料集-阿里雲天池 (aliyun。com)
3。2 理解資料
資料集包含了2017年11月25日至2017年12月3日之間,有行為的約一百萬隨機使用者的所有行為(行為包括點選、購買、加購、喜歡)。資料集大小說明:使用者數量(987,994),商品數量(4,162,024),使用者數量(987,994),商品類目數量(9,439),總的淘寶使用者行為記錄數量為1億條(100,150,807)。
資料集的每一行表示一條使用者行為,由使用者ID、商品ID、商品類目ID、行為型別和時間戳組成,並以逗號分隔。關於資料集中每一列的詳細描述如下:
使用者行為型別共有四種,它們分別是:
四、資料預處理
由於資料量級達到一億,考慮到電腦效能問題,故本次選取其中的40萬+的資料進行分析。
4。1 選擇子集
資料集中五個欄位都具有價值,全部保留。
4。2 列名重新命名
原資料集沒有表頭,用sql語句建立表及5個欄位,把淘寶使用者行為資料匯入MySQL資料庫。
4。3 刪除重複值
不存在重複值。
4。4 缺失值處理
不存在缺失值。
4。5 一致化處理
將時間戳整理成日期和小時:
①新增欄位datetime,用函式from_unixtime 把整數型的timestamps改成日期型的timestamps
②新增欄位dates,times,hours
4。6 異常值處理
檢查日期是否在規定範圍內:2017年11月25日至2017年12月3日。
一共刪除異常值184條。
五、資料分析
5。1 獲客情況
按日分析pv、uv、pv/uv:
pv:頁面瀏覽量
uv:獨立訪客數
pv/uv:瀏覽深度
#pv uv pv/uvselect dates, count(*) ‘pv’, count(distinct userid) ‘uv’,round(count(*)/count(distinct userid),1) ‘pv/uv’from user_behaviorwhere behaviortype=‘pv’group by datesorder by dates;
輸出結果(程式碼結果以及Excel圖示):
從上圖可以看出,pv、uv 這兩個指標的變化趨勢幾乎保持一致。在2017年11月25日至2017年12月1日之間,都是較為穩定的,而在2017年12月2日這天開始,pv和uv都不斷增加。我們依此提出以下兩個假設:
假設1
:非工作日的pv和uv會得到大幅度提升。
驗證假設1
:透過檢視日曆發現,11月25日和11月26日也是非工作日,但pv和uv並沒有得到大幅度的提升,所以假設1不成立。
假設 2
:可能是雙十二大促的影響。
驗證假設2
:12月2日和12月3日距離“雙十二”活動較近,可能是雙 12 活動的預熱階段,吸引了一部分新老使用者,故假設2成立。
5。2 留存情況
5。2。1 留存率
留存率 是指在統計週期內,每日活躍使用者數在第N日仍啟動該APP的使用者數佔比的平均值。留存率常反映使用者粘性,當N取值越大、留存率越高時,使用者粘性越高。 (這裡只統計次日留存率)
—— 留存數select a。dates, count(if(datediff(b。dates, a。dates)=0, b。userid, null)) retention_0, count(if(datediff(b。dates, a。dates)=1, b。userid, null)) retention_1from(select userid, dates from user_behaviorgroup by userid, dates) a,(select userid, dates from user_behaviorgroup by userid, dates) bwhere a。userid = b。userid and a。dates <= b。datesgroup by a。dates;—— 留存率select a。dates, count(if(datediff(b。dates, a。dates)=1, b。userid, null))/count(if(datediff(b。dates, a。dates)=0, b。userid, null)) retentionfrom(select userid, dates from user_behaviorgroup by userid, dates) a,(select userid, dates from user_behaviorgroup by userid, dates) bwhere a。userid = b。userid and a。dates <= b。datesgroup by a。dates;
當日活躍人數和次日活躍人數結果如下:
次日留存率結果如下:
5。2。2 跳失率
跳失率是指在統計週期內,僅訪問APP一次的使用者數量佔總使用者瀏覽量的比例。
select count(*) ‘跳失使用者數’ from(select userid from user_behaviorgroup by useridhaving count(behaviortype)=1) a
結果如下:
查詢可得在統計週期內,僅訪問APP一次的使用者數量為0,也就是說跳失率為
0
,說明淘寶有足夠的吸引力讓使用者停留。
5。3 使用者行為漏斗分析
5。3。1 獨立訪客行為漏斗
select behaviortype, count(distinct userid) ‘使用者數’from user_behavior group by behaviortypeorder by userid desc;
結果如下:
從獨立訪客為分析維度,可計算得到,使用者並沒有在點選以後大量流失,APP約有
69.69%
的付費使用者,
使用者付費轉化率相當高
,說明APP可以滿足大多數使用者的需求。
5。3。2 使用者總行為漏斗
select behaviortype, count(*) ‘行為數’from user_behaviorgroup by behaviortypeorder by 行為數 desc;
得出結果:
此時我們不能直接將
購買/收藏加購
作為
收藏加購到購買的轉化率
。 因為 這裡的購買量有些是瀏覽後直接購買的,有些是瀏覽後加購收藏再購買的,如果我們直接 購買/收藏加購 得出轉化率是不夠準確的,所以這裡我們對這段時間 使用者購買行為的行為路徑 進行分析。為此,我們需要對
使用者id和商品id
進行分組,
統計兩者之間的發生的各類行為的數量
,並儲存為檢視以便後面呼叫。
——使用者行為路徑create view user_behavior_view as select userid, itemid,count(if(behaviortype=‘pv’, behaviortype, null)) ‘pv’,count(if(behaviortype=‘fav’, behaviortype, null)) ‘fav’,count(if(behaviortype=‘cart’, behaviortype, null)) ‘cart’,count(if(behaviortype=‘buy’, behaviortype, null)) ‘buy’from user_behaviorgroup by userid, itemid;
結果如下:
為了更好的統計,先將使用者行為標準化,將分組統計的結果進一步處理。
——使用者行為標準化create view user_behavior_standard asselect userid, itemid, (case when pv>0 then 1 else 0 end) ‘瀏覽了’,(case when fav>0 then 1 else 0 end) ‘收藏了’,(case when cart>0 then 1 else 0 end) ‘加購了’,(case when buy>0 then 1 else 0 end) ‘購買了’from user_behavior_view;
——形成購買路徑型別create view user_behavior_path asselect *, concat(瀏覽了,收藏了,加購了,購買了) ‘購買路徑型別’from user_behavior_standard as awhere a。購買了>0;——統計各類購買路徑的數量create view path_count asselect 購買路徑型別, count(*) ‘數量’from user_behavior_pathgroup by 購買路徑型別order by 數量 desc;
—— 建表為購買路徑型別添加註釋create table zhushi(path_type char(4),descriptions varchar(40));insert into zhushi values(‘0001’,‘直接購買了’),(‘1001’,‘瀏覽後購買了’),(‘0101’,‘收藏後購買了’),(‘0011’,‘加購後購買了’),(‘1101’,‘瀏覽收藏後購買了’),(‘1011’,‘瀏覽加購後購買了’),(‘0111’,‘收藏加購後購買了’),(‘1111’,‘瀏覽收藏加購後購買了’);select * from zhushi;
建立檢視儲存
各路徑行為的資料
:
—— 建立檢視存資料create view path_result asselect * from path_count pjoin zhushi zon p。購買路徑型別 = z。path_typeorder by 數量 desc;
分析漏斗轉化率:
在購物環節中收藏和加入購物車都是確定購物意向的行為,沒有先後之分,所以將這兩個環節合併為購物環節中的一步。
—— 統計沒有收藏加購就購買的購買行為數量select sum(buy) from user_behavior_viewwhere buy>0 and fav=0 and cart=0;——- 得出結果 6541—— 求轉化率select 8602-6541 as ‘收藏加購後購買的行為數’;——- 得出結果2061select 10449+23065 as ‘收藏加購總數’;——- 得出結果33514select 2061/33514;——- 收藏加購後購買/收藏加購總數=收藏加購到購買的轉化率 6。15% select 33514/374309;——- 收藏加購總數/瀏覽總數=瀏覽到收藏加購的轉化率 8。95%
我們統計出沒有收藏加購就購買的購買行為數量為6541,將所有的購買行為數(所有的購買行為數前面已求出,為8602)減去6541,就可以求出
收藏加購後再購買的行為數量
為
2061
。根據計算我們可以得出以下結果:
我們只對
左半邊
進行Excel視覺化得到漏斗圖如下:
我們已得出,從瀏覽量到直接購買轉化率是
1.75%
,而瀏覽後有加購收藏行為的購買轉化率是
6.15%
,所以
顧客有收藏加購的行為之後,會提升轉化率
,所以我們需要從產品互動介面、營銷機制等方面讓使用者去多加購,多收藏。
從使用者的行為轉化漏斗圖來看,使用者在瀏覽商品後,進入到加入購物車或收藏商品環節的比例為
8.95%
,在加購收藏商品後進入購買商品的轉化率為
6.15%
;
轉化率都很低
。
針對現狀,這裡提出
兩個假設
:
假設1
。 使用者只是瀏覽商品而不購買商品;
假設2
。 平臺推薦的產品不精準,並非使用者想購買的產品,導致使用者瀏覽後沒有成功轉化。
對於
假設1
:從獨立訪客的分析維度,69。69%的使用者是有購買行為的,與瀏覽到直接購買的轉化率1。75%和瀏覽加購收藏到購買的轉化率6。15%相比高很多,因此不存在大量使用者只逛不購買的行為,所以假設1不成立。
對於
假設2
,我們在商品維度分析給出驗證。
5。4 從時間維度分析使用者行為
5。4。1 按日分析使用者的行為習慣
select dates,count(if(behaviortype=‘pv’, behaviortype, null)) ‘pv’,count(if(behaviortype=‘cart’, behaviortype, null)) ‘cart’,count(if(behaviortype=‘fav’, behaviortype, null)) ‘fav’,count(if(behaviortype=‘buy’, behaviortype, null)) ‘buy’from user_behaviorgroup by datesorder by dates;
從以上資料來看,從11月25日-12月1日之間,各項指標都是比較平穩,而在12月2日-3日之間急劇上升,並達到了最大值。可能是受雙十二預熱活動的影響,導致使用者數急劇上升。
5。4。2 按小時分析使用者的行為習慣
select hours,count(if(behaviortype=‘pv’, behaviortype, null)) ‘pv’,count(if(behaviortype=‘cart’, behaviortype, null)) ‘cart’,count(if(behaviortype=‘fav’, behaviortype, null)) ‘fav’,count(if(behaviortype=‘buy’, behaviortype, null)) ‘buy’from user_behaviorgroup by hoursorder by hours;
經過對一天中使用者行為分佈的視覺化,可以發現每日0點至4點使用者活躍度快速降低,降到一天中活躍度最低值,5點至10點使用者活躍度快速上升,10點至18點使用者活躍度較平穩,但分別在12點及17點略有下降,18點後用戶活躍度開始快速上升,並在20-22時達到一天中使用者活躍度的最高值,這也符合大部分人的作息規律。所以,可以考慮在20-22點這個時間段進行一些促銷活動和商品推薦以提高轉化率。同時,白天10-13點這個時間段的購買比率也是比較高的,瀏覽量高的在晚上21點左右,可能是大家覺得就算晚上購買商品也是第二天發貨,所以有些使用者也會選擇第二天白天進行下單購買。
5。5 從商品維度分析使用者行為
5。5。1 按熱度分類
統計瀏覽量前十和購買量前十的商品品類(熱門品類):
—— 瀏覽量前十的品類select categoryid, count(if(behaviortype=‘pv’, behaviortype, null)) ‘品類瀏覽量’from user_behaviorgroup by categoryidorder by 2 desclimit 10;—— 購買量前十的品類select categoryid, count(if(behaviortype=‘buy’, behaviortype, null)) ‘品類購買量’from user_behaviorgroup by categoryidorder by 2 desclimit 10;
結果如下:
從圖中發現淘寶推薦的品類中有 40% 的商品類目是人們感興趣想購買的。
統計瀏覽量前十和購買量前十的商品(熱門商品):
—— 瀏覽量前十的商品create view popular_items_pv asselect itemid, count(if(behaviortype=‘pv’, behaviortype, null)) ‘商品瀏覽量’from user_behaviorgroup by itemidorder by 2 desclimit 10;select * from popular_items_pv;—— 購買量前十的商品create view popular_items_buy asselect itemid, count(if(behaviortype=‘buy’, behaviortype, null)) ‘商品購買量’from user_behaviorgroup by itemidorder by 2 desclimit 10;
結果如下:
瀏覽量前十的商品的購買量均沒有前十 ,同時,排名前十的商品購買量都在
10以下
,也就是說高瀏覽量和高購買量是兩類不同的商品,所以平臺給予的流量顧客的點選是高的,但是這個產品所產生的銷售沒有,說明平臺推薦的商品有些問題,重點推薦的商品並不是使用者最想買的商品。故
驗證了前面的假設2
,即 平臺推薦的產品不精準,並非使用者想購買的產品,導致使用者瀏覽後沒有成功轉化 。 我們發現2735466、1464116、4145813這三類商品品類購買量比較高,在高需求量的基礎上我們考慮淘寶調整推送機制,增加對這幾類商品的推送,以滿足使用者需求,同時 最佳化使用者搜尋商品的推薦演算法,提升使用者轉化率。
5。5。2 商品銷量分析
—— 商品總數select count(distinct itemid)from user_behavior;———— 211168—— 有購買量的商品數select count(distinct itemid)from user_behaviorwhere behaviortype = ‘buy’;———— 7811——- 各商品的購買量select itemid, count(userid) ‘商品購買量’from user_behaviorwhere behaviortype = ‘buy’group by itemidorder by 2 desc;——- 商品購買量的對應的商品數量,即購買1次的商品有多少。。。select 商品購買量, count(*) ‘商品數’from (select itemid, count(userid) ‘商品購買量’from user_behaviorwhere behaviortype = ‘buy’group by itemid) as agroup by 商品購買量order by 商品購買量;
經統計,本次分析的商品共有211168種,使用者購買的商品共有7811種;
只購買一次
的商品有
7175
種,佔用戶購買商品數的
91.86%
,說明商品售賣主要依靠長尾商品的累積效應,而非爆款商品的帶動。
5。6 基於RFM模型的使用者價值分析
RFM是最近一次消費時間間隔(Recency),消費頻率(Frequency),消費金額(Monetary)這三個指標的縮寫。接下來基於RFM模型對使用者分類,由於我們的資料沒有消費金額這一指標,所以我們只考慮R和F。
分析思路
是 對使用者按照最近一次消費和消費次數分別給予R值和F值的分值,用使用者的平均R值和平均F值將使用者分成四大類。即① 計算最近購買時間以及購買次數;② 建表rfm_model,並將①步得到的資料插入;③ 根據購買次數、最近購買時間對使用者進行分層:新增兩列,對剛才得到的購買次數以及最近購買時間給使用者進行打分;④ 定義兩個變數儲存r和f值的平均值,用它們的平均值將使用者分成四象限;⑤ 將④求出的結果class列插入rfm_model;⑥ 統計各區的使用者數。
# RFM模型—— 1。計算購買次數,最近購買時間select userid, count(userid) ‘購買次數’, max(dates) ‘最近購買時間’from user_behaviorwhere behaviortype = ‘buy’group by useridorder by 2 desc, 3 desc;—— 2。建表儲存資料drop table if exists rfm_model;create table rfm_model(userid int,frequency int,recent char(10));insert into rfm_modelselect userid, count(userid) ‘購買次數’, max(dates) ‘最近購買時間’from user_behaviorwhere behaviortype = ‘buy’group by useridorder by 2 desc, 3 desc;
給R和F按價值打分:
使用者分類:
—— 3。根據 購買次數、最近購買時間 對使用者進行分層—— 新增一列fscorealter table rfm_model add column fscore int;update rfm_modelset fscore = casewhen frequency between 20 and 57 then 5when frequency between 15 and 19 then 4when frequency between 10 and 14 then 3when frequency between 5 and 9 then 2else 1end;—— 新增一列rscorealter table rfm_model add column rscore int;update rfm_modelset rscore = casewhen recent = ‘2017-12-03’ then 5when recent in (‘2017-12-01’,‘2017-12-02’) then 4when recent in (‘2017-11-29’,‘2017-11-30’) then 3when recent in (‘2017-11-27’,‘2017-11-28’) then 2else 1end;—— 4。定義兩個使用者變數儲存r和f值的平均值set @f_avg = null;set @r_avg = null;select avg(fscore) into @f_avg from rfm_model;select avg(rscore) into @r_avg from rfm_model;select *, (casewhen fscore > @f_avg and rscore > @r_avg then ‘價值使用者’when fscore > @f_avg and rscore < @r_avg then ‘保持使用者’when fscore < @f_avg and rscore > @r_avg then ‘發展使用者’when fscore < @f_avg and rscore < @r_avg then ‘挽留使用者’end) classfrom rfm_model;—— 5。將結果class列插入rfm_model表中alter table rfm_model add column class varchar(40);update rfm_model set class = casewhen fscore > @f_avg and rscore > @r_avg then ‘價值使用者’when fscore > @f_avg and rscore < @r_avg then ‘保持使用者’when fscore < @f_avg and rscore > @r_avg then ‘發展使用者’when fscore < @f_avg and rscore < @r_avg then ‘挽留使用者’end;—— 6。統計各區的使用者數select class, count(userid)from rfm_modelgroup by class;
結果如下:
發展使用者和挽留使用者佔比最大,分別佔43。18%和39。12%
六、結論與建議
(1)從使用者行為路徑中發現,使用者瀏覽後直接購買的轉化率較低,而加購收藏後再購買的轉化率有所上升。
建議
:需積極引導顧客加購物車或者收藏寶貝,同時收集使用者畫像,進行精準推薦;對於介面設計應考慮如何互動能夠讓顧客更願意點選。
(2)從日期維度來看,每天的各項指標(pv、cart、fav、buy)都是比較平穩的,而在12月2日和12月3日急速上升,可能是受到雙十二預熱的影響;從時間維度來看,使用者的各種行為活躍度高峰期都在晚間的21點左右,同時白天10-13點的購買比率也是比較高的。
建議
:可以考慮在20-22點這個時間段進行一些促銷活動和商品推薦,此時使用人數最多, 活動容易觸達使用者 。 平臺可以利用這個時間段投放廣告,加大力度宣傳產品,可以根據個性化推薦演算法,向用戶推送使用者喜歡的新品及暢銷品,同時推送商家折扣優惠、直播帶貨及促銷活動資訊, 進而達到促進使用者儘快購買的效果 ;
(3)從熱門品類看,發現淘寶推薦的品類中有 40% 的商品類目是人們感興趣想購買的;從熱門商品看,瀏覽量排名前十的商品均沒有在購買量前十,說明選擇引流的商品不是使用者喜歡的;從商品銷售情況分析,只購買過一次的商品數量有7175種,佔用戶購買商品總數的91。86%,說明商品售賣主要依靠長尾商品的累積效應。
建議
:我們發現2735466、1464116、4145813這三類商品品類購買量比較高,在高需求量的基礎上我們考慮淘寶調整推送機制,增加對這幾類商品的推送,以滿足使用者需求,同時 最佳化使用者搜尋商品的推薦演算法,提升使用者轉化率。 根據購買量高的商品,可重新分配流量以及多推出一些和該類目/商品相關的其他類目/商品捆綁交叉銷售,提高銷量。
(4)從使用者價值看,對使用者進行分類,發現發展使用者和挽留使用者佔比最大,分別佔43。18%和39。12%。
建議
:針對各類使用者進行對應的營銷。對於
發展使用者
,其消費頻率低,但最近消費距離現在時間較短,因此要想辦法提高他的消費頻率,例如 可以透過發放優惠券 、 上新訊息送達等,提高使用者的粘性。 對於
挽留使用者
,最近消費時間距離現在較遠、消費頻率低。這種使用者有即將流失的危險,應採取挽留措施,主動聯絡使用者,明確流失原因,瞭解使用者需求。對於
價值使用者
,消費頻率高且最近消費距離現在時間短,可以其提供VIP服務,提升使用者忠誠度。對於
保持使用者
,最近消費距離現在時間較遠,也就是R值低,但是消費頻次高。這樣的使用者,是一段時間沒來的忠實客戶,可以採取郵件推送、APP推送提醒、促銷活動時簡訊提醒等方式主動和他們保持聯絡,提高其復購率。