1、分析環境
數據來源:阿里雲天池。
分析軟件:sql + Excel
資源鏈接:
navicat premium15 mac版本,下載鏈接在這里http://www.pc6.com/mac/111878.html,拿走不謝,12版本有bug,深受其苦。
使用的postgresql數據庫,下載鏈接在這里https://www.runoob.com/postgresql/mac-install-postgresql.html,請叫我雷鋒
2、項目背景簡介
(一)項目背景
經歷過互聯網流量粗放式增長的紅利年代,在行業天花板高度有限的增長空間下,對現有存量的精細化運營成為營銷和運營人員的普遍共識,而對於精細化運營的最好詮釋莫過滿足用戶和消費者的個性化需求,與用戶一同成長,從而獲得一種長期持久的生命力,在互聯網年代,消費者也同時擁有用戶兩重身份,盡管在一定程度上延長購買決策流程,並可能在任何一個環節跳出或流失,但也留下清晰的數字軌跡,而作為一個數據分析師可以通過數據的分析與反饋捕捉出關鍵的決策信息,在運營人員的干預下,為下一次的成交鋪墊了可能。本次分析將以淘寶用戶行為數據進行分析,為制定精細化的用戶運營策略提供參考。
(二)數據來源與介紹
數據介紹如下
(三)項目目的
本次分析以淘寶用戶消費行為為核心概念,順着誰(who)、在什么時候(when)、在哪兒(where)、買了什么(what)、怎么買的(how)的思路,同時結合現有的數據資料,構建出消費主體緯度、消費時間維度、消費商品維度、以及消費動作四大維度,試圖對消費者在2017年11月25日至2017年12月3日之間的消費行為模式進行分析呈現,試圖回答以下幾個問題:
1、時間維度:消費者在不同時間尺度下的行為規律是什么?——目的:根據消費者的活躍周期采取相應的營銷策略,時空即場景,是行為發生的重要兩個維度,本次分析中,只有時間數據。
2、商品維度:現階段各類商品的銷售狀況如何?消費者對哪類商品需求量最大?商品的類型可以划分為哪些?——采用象限划分法——策略驅動
3、動作維度:根據用戶的淘寶使用行為又可細分為頁面瀏覽行為和下單購買行為,瀏覽行為對應流量指標,可通過pv、uv、跳出率等進行測量,下單行為對應購買指標,通過支付率、復購率、回購率等指標進行測量,從瀏覽到下單的過程,可通過漏斗模型分析轉化率——目的:將分析所得數據與往日相關數據指標進行對比,找出存在異常的環節。——漏斗模型,流程推演
4、消費者主體緯度:除了年齡、性別這類人口統計學指標,在消費者行為學中,更為重要的是消費者行為相關的指標,在這里,主要采用rfm模型對消費者進行分類,針對不同類型的消費者采取相應的營銷策略,因此可以再針對各類消費者的消費行為進行分析,找到各類型消費者的一個典型消費畫像,采取更精准的營銷策略。——多維度法:精細化驅動
(四)數據導入
1、創建database,點擊表格,導入數據
2、在這里注意,源數據中沒有字段名,同時源數據量過大,在這里只選擇了前100w條數據
3、在這里navicat會自動匹配合適的數據類型,可改可不改,后面還可以重新更改
4、導入成功
3、數據清理
(一)列名重命名
命名盡量一目了然又簡潔,因為本次分析中只有一個表,也沒有設置主鍵
(二)重復值查看
消費者每一次行為都是獨一無二的,因此要對全部的字段進行分類匯總顯示,結果顯示沒有重復數值。
SELECT * FROM userbehavior GROUP BY user_id,item,category,behavior,time HAVING count(user_id)>1;
(三)缺失值處理
因為count不會把null計算在內,因此本次數據的質量較高,沒有空值,空值的處理一般是刪除,取平均值等
SELECT count(user_id),count(item),count(category),count(behavior),count(time) FROM userbehavior;
(四)時間格式轉換:時間格式轉換學習
在時間格式轉換這里遇到了一些trouble,心態一度崩潰,原本打算采用update 語句對數據庫中的time進行更新,同時新增加兩列分別為date,及hour,date是從時間戳中截取出來的yyyy_mm_dd部分,hour即從時間戳中截取出來的hour部分
首先是發現時間為unix時間戳類型,但是悲催的是postgresql中好像不支持將數據設置成這種類型,也就意味着后續操作都無法進行,wtf,整個人暴走,查遍全網沒有找到解決方法,當然重新換個數據庫比如mysql,那可能心態更會爆炸……
……
好,既然無法直接在navicat中將數據格式設置為時間戳類型,那只能走曲線救國路線(此處@某人,說改成自己會寫的語法來實現,啟發了我)
首先將time數據老老實實設置為varchar類型,嘗試利用to_timestamp(text, text)將字符串轉換成時間戳類型,有點不可思議,竟然成功了,令人感動
SELECT TO_TIMESTAMP(time) as T FROM UserBehavior ;
這就給我接下來新的思路,既然這樣可以的話,想起來學過的視圖,不如創建一個新的視圖,作為一個臨時表,之后的查詢都可以在這個表上進行。
CREATE VIEW ub_new(new_id,new_item,new_category,new_behavior,new_time,new_date,new_hour) AS SELECT user_id,item,category,behavior,TO_TIMESTAMP(time),to_char(TO_TIMESTAMP(time),'yyyy-MM-dd'),EXTRACT(HOUR FROM TO_TIMESTAMP(time)) FROM UserBehavior;
emmmm,其實找到這個解決辦法,花了兩個小時的時間……一直在糾結在postgresql中unix時間戳格式如何設置或者轉化,太難了。主要是對navicat的使用和視圖還不熟練,只掌握了基礎的語法,能夠完成語句的編輯,但一些好用的工作技巧還需要探索。
(五)異常值處理
由於數據集時間范圍為2017-11-25至2017-12-3,因此需要對不在該時間范圍內的異常數據進行過濾。
SELECT * FROM ub_new WHERE new_date < '2017-11-25' or new_date > '2017-12-03';
有1389條不符合要求的數據,刪除之后,還剩余999530條數據
DELETE FROM ub_new WHERE new_date < '2017-11-25' or new_date > '2017-12-03';
4、數據分析
-
分析框架
(一)時間維度
1、消費者每日的消費行為變化趨勢
SELECT new_hour,count(DISTINCT new_id), SUM(CASE WHEN new_behavior = 'pv' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'cart' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'fav' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'buy' THEN 1 ELSE 0 END) FROM ub_new GROUP BY new_hour
從消費者每日行為數據來看,數據較為符合用戶的日常作息規律,白天整體較為活躍,凌晨2——5點進入低谷。
白天時段9—18點,用戶總數波動較小,且整體維持在較高水平,說明在不同時段,不同的用戶都有其淘寶瀏覽及購物的需求,應當再根據用戶的類型進行精細化運營
從18點——22點,用戶淘寶瀏覽及購物出現一個小高峰,說明下班后及睡前是用戶偏愛購物的時段,在這一時段,可以相應推出的營銷活動來吸引用戶的關注,提高用戶的下單率。
2、2017年11月25日至2017年12月3日期間,消費者行為數據
SELECT new_date,count(DISTINCT new_id), SUM(CASE WHEN new_behavior = 'pv' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'cart' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'fav' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'buy' THEN 1 ELSE 0 END) FROM ub_new GROUP BY new_date
在11月25日——12月3日的統計窗口內,1月25-26日與12月2-3日為周末
各項指標在12月2日和12月3日出現了顯著的增長,但對比上一個周末,排除休息的因素,猜想應該與雙十二的活動預熱相關。
(二)商品維度
1、商品銷量排行前10
SELECT new_item,COUNT(new_item) AS amount_sales FROM ub_new WHERE new_behavior = 'buy' GROUP BY new_item ORDER BY amount_sales DESC LIMIT 10;
2、根據瀏覽量維度和下單量維度對商品類型進行象限划分
由於諸多原因,在這里將各類商品的瀏覽量、加購量、收藏量和購買量創建視圖
CREATE VIEW ub_category(category,pv_total,cart_total,fav_total,buy_total) AS SELECT new_category, SUM(CASE WHEN new_behavior = 'pv' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'cart' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'fav' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'buy' THEN 1 ELSE 0 END) FROM ub_new GROUP BY new_category
在此視圖上進行操作,在這里想根據瀏覽量和下單量兩個維度對商品進行划分,因為不同商品之間瀏覽和購買的差異較大,因此根據二八法則來進行象限的划分
因此buy_total=3以及pv_total=70為划分界限,
buy_tota>3以及pv_total>70為高瀏覽量高銷量產-A類產品(流量品類)
buy_tota<=3以及pv_total>70為高瀏覽量低銷量產品—B類產品(白嫖品類)
buy_tota<=3以及pv_total<=70為低瀏覽量低銷量產品—C類產品(冷宮品類)
buy_tota>3以及pv_total<=70為低瀏覽量高銷量產品——D類產品(寶藏品類)
SELECT SUM(CASE WHEN pv_total > 70 AND buy_total > 3 THEN 1 ELSE 0 END), SUM(CASE WHEN pv_total > 70 AND buy_total <= 3 THEN 1 ELSE 0 END), SUM(CASE WHEN pv_total <= 70 AND buy_total <= 3 THEN 1 ELSE 0 END), SUM(CASE WHEN pv_total <= 70 AND buy_total > 3 THEN 1 ELSE 0 END) FROM ub_category
總體看來,全部商品類型中有80%為C類和D類,A類和B類共計占20%
A類產品高流量、高銷量的流量品類,在日常生活中對應高頻、低價類商品,針對此類商品事宜采取日常促銷策略,同時在產品設計和價格上進行適當的組合和設計,推出滿足不同人群不同場景使用需求,追求規模化效應,屬於主打品類。逛優衣庫、名創優品的感覺
B類產品屬於高流量、低銷量品類,將其稱為白嫖品類,因為光看不買。可能對應高價,低頻類產品,消費者需要多次瀏覽、不斷進行對比、查看評論等方式進行消費決策,
究其原因,可以從to b和to c兩個維度進行分析,對於商家來說,可能是因為投入了大量的營銷精力,吸引了不少消費者到達商品詳情頁,可能是目標消費者不精准、產品本身的質量、價格等因素,使得成交量偏低,對於消費者來說,可能是超過消費范圍, 類似逛verymoda、拉夏貝爾、only類,品牌溢價較高、性價比相對不高的品牌
C類產品低流量、低銷量,冷宮類產品,就是大家平時看的少,買的也少,對於商家b端而言:可能由於自身生產規模較小,產品又不是剛需,或是缺乏競爭力和明確的定位,同時缺乏引流成本,更無法以銷促產,不能形成良性循環,生命垂危,針對此類產品要么抱大腿,傍大款,合並形成規模化生產,降低價格;要么破釜沉舟,改良產品,增加推廣。類似逛商場里的不知名小店,風格混亂、性價比一般、設計過時、過段時間就快關門。當讓也存在另一種可能就是那種低價低頻的產品,比如比較小眾又低廉的產品:老鼠葯~、危險的化學葯品
D類產品,稱之為寶藏品類,流量低,銷量高,有兩種原因,首先是產品比較小眾,但是消費者精准且購買力比較強,類比逛奢侈品店,可以適當增加對精准人群的促銷,也有可能是產品處於市場導入期,缺乏市場推廣,此時就需要增加流量投入,促進銷售
(三)動作維度
1、流量指標
1.1 pv、uv、下單量、pv/uv
SELECT count(DISTINCT new_id), SUM(CASE WHEN new_behavior = 'pv' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'buy' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'pv' THEN 1 ELSE 0 END)/count(DISTINCT new_id) FROM ub_new
11.25-12.3日期間:
總訪客數UV為9739
頁面總訪問量PV為895636
總下單量為20395
人均訪問次數為91次
1.2跳失率:瀏覽單頁面即退出的用戶/全部訪問用戶
SELECT COUNT(*) from (SELECT new_id ,COUNT(*) FROM ub_new WHERE new_behavior = 'pv' GROUP BY new_id HAVING COUNT(*) = 1) as t
一次瀏覽就跳出頁面的人數共計有7人,累計7次,跳出率=7/9739,可見跳出率非常低,說明網頁內容和體驗較好
2、購買指標
2.1成交率:下單用戶在總的客流量中的占比。
20395/895636 = 2.27%
2.2復購率:復購率是一段時間內多次消費的用戶占總消費用戶數比。
首先求出在11.25——12.3這段期間內同一類產品消費次數大於1的用戶的數量
SELECT COUNT(*) FROM (SELECT new_id,COUNT(new_id) FROM ub_new WHERE new_behavior = 'buy' GROUP BY new_id HAVING COUNT(new_id) > 1) as t
說明在11.25——12.3這段時間內用戶的復購率為4429/20395=21.7%,這個數據需要同往日相似時段進行對比才能做出比較合理的分析。
另外在本次是將消費者購買任何一類產品都計為一次購買,反應消費者對平台或者物流的信任認可程度。但不能較好的反應對某類產品的忠誠度。
2.3回購率:回購率率是一段時間內消費過的用戶,在 下一段時間內仍舊消費的占比。
本次分析的總時間一共為為9日,將11.25—11.28,以及11.30—12.3作為兩個時間窗口進行計算
SELECT new_id,COUNT(new_id) FROM (SELECT DISTINCT(new_id) FROM ub_new WHERE new_behavior = 'buy' AND (new_date BETWEEN '2017-11-25' AND '2017-11-28') UNION SELECT DISTINCT(new_id) FROM ub_new WHERE new_behavior = 'buy' AND (new_date BETWEEN '2017-11-30' AND '2017-12-03')) as t GROUP BY new_id HAVING COUNT(new_id)>1
結果顯示為空,說明不存在在這兩個時間窗口產生回購行為的客戶,因為時間間隔較小,本次統計實際意義很小,僅僅作為sql語句練習。
3、轉化率:常用漏斗模型:首頁—商品詳情頁—加入購物車—提交訂單—支付訂單
3.1 pv——cart——buy轉化漏斗
SELECT count(DISTINCT new_id), SUM(CASE WHEN new_behavior = 'pv' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'cart' THEN 1 ELSE 0 END), SUM(CASE WHEN new_behavior = 'buy' THEN 1 ELSE 0 END) FROM ub_new
3.2獨立訪客轉化漏斗
SELECT new_behavior,COUNT(DISTINCT new_id) FROM ub_new GROUP BY new_behavior
(四)主體維度
1、rfm模型分層模型
rfm模型是衡量客戶價值和客戶創利能力的重要工具和手段從 最近一次消費 (Recency)、消費頻率 (Frequency)、消費金額 (Monetary)三個維度對客戶價值進行衡量,但是數據集中不包括money維度,因此主要從f和r兩個維度進行分析
1.1最近一次消費 (Recency)維度分析
首先計算不同消費者最近一次的消費間隔
SELECT new_id,MIN((DATE'2017-12-03'-DATE(new_date))) FROM ub_new WHERE new_behavior = 'buy' GROUP BY new_id
代碼的意思是:取出有下單行為的消費者最近一次的消費者間隔
在這里需要的注意的是,不能按照間隔去對消費進行計數匯總,因為會把有多次購買的用戶重復計數
第二步對不同類型的消費者的消費頻率進行打分:
0-2計為3分
3-5計為2分
6-8計為1分
SELECT SUM(CASE WHEN min >= 0 AND min <=2 THEN 1 ELSE 0 END) , SUM(CASE WHEN min >= 3 AND min <=5 THEN 1 ELSE 0 END) , SUM(CASE WHEN min >= 6 AND min <=8 THEN 1 ELSE 0 END) FROM R_table
然后按照0-2,3-5,6-8進行維度划分,依次命名為賦予3分,2分及1分
由圖可知,半數多用戶會在購買2天內再次消費
1.2消費頻率 (Frequency)維度分析
首先計算不同用戶的購買頻率
CREATE VIEW F_table AS SELECT new_id,COUNT(new_id) FROM ub_new WHERE new_behavior = 'buy' GROUP BY new_id
結果發現,最高消費頻率為72次,最低為1次,將其分為1-9,10—19,20—29,30—39,40—49,50—72 共計6個區間,分別記分為1,2,3,4,5,6
SELECT SUM(CASE WHEN count >= 1 AND count <=9 THEN 1 ELSE 0 END) AS F_1, SUM(CASE WHEN count >= 10 AND count <=19 THEN 1 ELSE 0 END)F_2, SUM(CASE WHEN count >= 20 AND count <=29 THEN 1 ELSE 0 END)F_3, SUM(CASE WHEN count >= 30 AND count <=39 THEN 1 ELSE 0 END)F_4, SUM(CASE WHEN count >= 40 AND count <=49 THEN 1 ELSE 0 END)F_5, SUM(CASE WHEN count >= 50 AND count <= 72 THEN 1 ELSE 0 END)F_6 FROM f_table
由圖表可知,越97%的消費者只產生了1-9次購買行為
1.3用戶打分及分層
首先給兩個維度分別賦分
--F維度打分 CREATE VIEW F_score AS SELECT new_id,count, (CASE WHEN count >= 1 AND count <=9 THEN 1 WHEN count >= 10 AND count <=19 THEN 2 WHEN count >= 20 AND count <=29 THEN 3 WHEN count >= 30 AND count <=39 THEN 4 WHEN count >= 40 AND count <=49 THEN 5 ELSE 6 END) AS F_s FROM F_table --R維度打分 CREATE VIEW R_score AS SELECT new_id,min,(CASE WHEN min >= 0 AND min <=2 THEN 3 WHEN min >= 3 AND min <=5 THEN 2 ELSE 1 END) AS R_score FROM R_table
對用戶進行綜合打分並進行分層
SELECT SUM(CASE WHEN rf BETWEEN 2 AND 3 THEN 1 ELSE 0 END), SUM(CASE WHEN rf BETWEEN 4 AND 5 THEN 1 ELSE 0 END), SUM(CASE WHEN rf BETWEEN 6 AND 7 THEN 1 ELSE 0 END), SUM(CASE WHEN rf BETWEEN 8 AND 9 THEN 1 ELSE 0 END) FROM rf
易流失用戶和挽留用戶占據了大部分比例,針對這類人群可以采取主動拉取的策略,通過活動促銷、優惠券、團購、設計產品組合等方式來進行。
分類效果不是很好,因為基本上仍未將用戶很好的區分開,顆粒較粗。同時兩個維度的權重也有所不同,因此對用戶分值進行直接相加也不盡合理。
5、結論及建議
(一)從時間維度來看:
以小時為尺度,針對淘寶這個app而言,用戶的購買場景隨時隨地都在發生,除了深夜凌晨休息時段,白天用戶的購買行為較為隨意,在夜晚迎來一個小高峰,但是因為是統計的每小時的總訪客數、頁面訪問量、購買總數等數據,實際上針對不同的用戶來說,其購物習慣也會存在差異,而利用這些數據構建的模型並不能很好的提供足夠的信息來反映某類產品或者某類用戶的購買行為,難以提供較為精准化的運營意見。
以天為尺度,用戶的購買行為存在周末與工作日的區別,同時用戶行為也會收到節日促銷的顯著影響,因此策划合理的活動促銷,是當下電商運營的主要手段,因此對數據分析師而言,更應該能夠針對每次活動的數據進行精細化的分析,為下次活動促銷提出行之有效的改進建議,提升活動運營效果,形成一個增長閉環。
(二)從商品維度來看:
從商品銷售排行的結果來看,在窗口時間內,銷量排行前十的商品也僅有17個,啊,多么得令人震驚,當然也有可能是這部分數據的問題,但是也充分說明,盡管一個爆款商品的出現是能夠憑借一己之力拉動市場的大部分營收的,不管針對一個店鋪還是一個品牌而言,爆品思維也是非常重要的,不過同樣根據二八法則,剩下80%的品類的盡管只創造了20%的收益,但也充分說明了長尾小眾市場的重要意義在於對於各類個性化場景和需求的滿足,因此針對部分商家而言,可以在這些被主流忽視的領域外,確立自己的定位,再利用二八法則,打造自己的爆品。
從商品分類的結果來看,針對各類產品的營銷策略已經進行了比較充分的論述,在此不再贅述。
(三)從動作維度來看
從瀏覽行為緯度,各類指標反映出,app的內容和頁面吸引是較為優質的,跳出率幾乎為0,當然這更可能是因為消費者自身的強烈的購買或者瀏覽目的,盡管得出了uv、pv、成交量等各類指標,但是這些指標也只有根據特定的業務目進行對比才有意義,比如,想發現最近的uv、pv成交量是否有明顯增長或者異常,這需要跟往常的指標進行對比,發現其波動是否在合理范圍之內,如果想知道app跟競品的差異,可以跟行業的一個水平進行對比,從而對自身產品所處的行業位置進行一個評估,從而采取相應的營銷策略來進行鞏固或者競爭。(不過好像也不太可能拿到競品的數據??這是一個值得思考的問題)
從購買行為緯度,主要是復購率、回購率、支付率這類指標,復購率有不同的計算公式,在本次分析中,復購率指的是在一段時間內,多次購買的人數占總購買人數的比例,這反映出平台的健康度和忠誠度,當然用戶也有可能在一天內下單多次算不算復購,有不同的統計口徑,但是對於一個團隊來說,統一口徑的數據就是有效度的。復購率高說明可以從產品、平台、以及消費者的緯度進行解釋,無論如何,提升復購率需要綜合性的營銷策略,回購率是指在兩段時間內均發生購買行為的人數占總購買人數的比例,回購率能夠從較長的時間維度上反映出客戶的忠誠度,一般而言針對不同的品類可能會從月度或者季度的時間尺度上來衡量用戶的回購率。支付率是下單人數占/總瀏覽量的比例,在這里我將之理解為,我看了兩次,但是我其中只買了一次,支付率就是50%,當然隨着我看的次數的增加,我下單的概率其實都不能確定,因此可以把每次的我都算成一個新的人,所以我認可支付率這個指標的構建方式。
當然從瀏覽到支付中間會經歷:首頁—商品詳情頁—加入購物車—提交訂單—支付訂單的一個行為過程,雖然本分析中缺乏一些相關的數據,但是我們也不難發現,針對每個環節可能存在的導致用戶流失或者終止購買行為的因素都要進行一個精細化的分析,並通過運營來提升相關指標,最終實現各環節轉化率的提升,數據分析的意義就在於針對每次運營的效果進行一個量化的評估,並且不斷提出新的假設,實踐,並在下一次的執行通過數據中得到驗證,這是一個非常典型的閉環與迭代的思維。這也說明,數據分析不能脫離業務而存在,因為只有懂業務,才能夠提供真正有效的解決辦法。
(四)從主體緯度來看
對用戶進行分層的意義在於,針對不同的用戶進行采取不同的運營策略,發掘各類用戶的價值,從而實現綜合效益最大化,rfm模型是一個常用的客戶管理模型,但是需要結合具體的業務和數據進行指標的構建,在不同的業務場景中,各個維度的權重也是不同的。
6、其他:
遇到的報錯信息,沒有解決,繞着走,后來發現,如果代碼語句過於復雜的時候,就會產生這個信息,這時候只需要把代碼進行簡單化拆分即可。
本項目作為一個新手練習,整體的分析框架和思路都借鑒了這篇博客,但也經過個人的探索,思考了一些東西,在此表示感謝: