淘寶用戶行為分析(Python+Tableau)

blank

淘寶用戶行為分析(Python+Tableau)

(一)項目背景

隨著移動互聯網的不斷發展,電商行業也從以前的粗獷式發展進入到了精準的精細化時代,就淘寶而言,現在依據大數據的發展,實現了千人千面的購物,每一個人都是獨立的,但是又不都是獨立的,背後都有一整套完整的用戶畫像和行銷體系,在這樣的背景下,本文將基於部分的電商用戶數據進行分析。下圖是一張比較全面的用戶在電商平台進行購物的流程圖,能夠和AAARR 模型匹配起來。

blankblank

本次用戶數據來自於阿里巴巴天池平台:

本數據集包含了2014年11月18日至2014年12月18日之間,有行為的約一萬隨機用戶的所有行為(行為包括點擊、購買、加購、喜歡)。數據集的每一行表示一條用戶行為,由用戶ID、商品ID、商品類目ID、行為類型和時間戳,用戶地址組成,並以逗號分隔。

- user_id:用戶ID

- item_id:商品ID

- category_id:商品類目ID

- behavior_type:用戶行為,分別以1,2,3,4代表點擊,收藏,加入購物車,購買

- timestamp:時間戳

- user_geohash:用戶的地理位置

本數據集共有將近1000萬條數據,用戶數1萬,商品數287萬,商品類目數8916個,可以看到數據還是很大量。

(二)分析目標

本次數據分析的目的是找出用戶群體在整個購物過程中的轉化率,找出影響用戶下單的因素,並針對此提出一些改進的建議。所以本文將從流量指標,用戶的轉化率,用戶價值模型,以及商品的銷售情況去進行分析。以下是本文的大綱:

blankblank

1. 從流量的角度去考慮,分析這一段時間內,用戶的點擊率,獨立訪客數,以及平均訪問量。

2. 分析用戶在不同的時間段的活躍規律

3. 找出最具有價值的核心用戶群體,並採取相應的措施

4. 分析商品的銷售情況,哪些商品最暢銷,優化商品行銷策略

5. 從業務流程去考慮,各流程的轉化率和用戶最終下單之間的影響因素

importpandasaspdimportnumpyasnptb=pd.read_csv('/Users/wh-js/Documents/the_item_for_resume/taobao_user/tianchi_mobile_recommend_train_user.csv')tb.info()

2. 1 剔除重複值

數據集中有600多萬行的數據時重複的,所以我們需要將其剔除掉。最後還有600多萬條的數據集。

tb.duplicated().sum()# 计算有多少重复值的值6043527tb.drop_duplicates(inplace=True)

2.2 缺失值處理

本次數據集中user_geohash存在大量的缺失值,共有833萬多缺失,所以直接將該直接刪掉。

tb.isnull().sum()

2.3 數據一致化處理

首先我們需要將behavior_type由原來的1,2,3,4轉換成分類的字符串,方便我們繼續後續的辨認處理;其次把time 字段拆分成date和time字段,也就是日期和時間,方便我們在不同的時間維度上對用戶的行為進行分析。

defbehavior_type(type):iftype==1:return'pv'eliftype==2:return'favor'eliftype==3:return'cart'else:return'buy'tb['behavior_type']=tb['behavior_type'].apply(behavior_type)tb['date']=tb['time'].apply(lambdax:x.split(' ')[0])tb['time']=tb['time'].apply(lambdax:x.split(' ')[1])tb.head()

最後我們把處理過的數據集保存到一個新的csv文件中。

tb.to_csv('tb_user_2014.csv',index=False)tb.drop_duplicates('user_id').count()# 查看有多少个用户user_id10000item_id10000behavior_type10000item_category10000time10000date10000dtype:int64

(三)分析過程

本文後續的分析都是使用tableau 可視化軟件來進行可視化分析。

3.1 分析用戶行為的漏斗模型

tb_behavior_type=tb['behavior_type'].value_counts().reset_index()(tb_behavior_type['favor']+tb_behavior_type['cart'])/tb_behavior_type['pv']0.1031131641424966tb_behavior_type['buy']/tb_behavior_type['pv']0.01927029113172452tb_behavior_type
blankblank

查看用戶從收藏或者加入購物車到下單的轉化率:已經加入購物車或者收藏的人群中有20%的用戶會下單購買物品。

tb_behavior_type['buy']/(tb_behavior_type['favor']+tb_behavior_type['cart'])0.18688487829831366

用戶從瀏覽點擊商品詳情頁面,然後加入購物車,收藏等等,最後到下單購買,而用戶收藏和加入購物車並沒有必然的聯繫,不存在上下級,所以把它當做是購物中的一環,由上面的計算我們能看到用戶的從點擊到收藏和加入購物車,轉化率只有10.3%,而到了購買僅有1.9%,轉換率非常之低,說明淘寶推薦的商品不是用戶喜歡的,或者是用戶想要的商品,所以才導致了這麼低的轉換率。

所以接下來,淘寶能夠做的就是優化商品的推薦機制,優化用戶搜索商品的效率,提升用戶從點擊到收藏和加入購物車這一環的轉化率,這樣才能夠最終提升用戶購買的比例。

那麼付費用戶數在總的用戶數佔比有多少呢?

可以看到有88.86%的用戶都是付費用戶,證明用戶非常願意在淘寶上進行購物。

tb_buy=tb[tb['behavior_type']=='buy']tb_buy.drop_duplicates('user_id').count()/10000user_id0.8886item_id0.8886behavior_type0.8886item_category0.8886time0.8886date0.88862014-12-190.8886dtype:float64

那麼我們來看看用戶的在這一個月的時間內復購率是怎麼樣的?可以看到在這一個月內用戶的複購率達到了驚人的81%,所以用戶的複購率非常可觀。

tb_two_buy=tb_buy.groupby('user_id').count()tb_two_buy[tb_two_buy['behavior_type']>=2].count()item_id8117behavior_type8117item_category8117time8117date8117dtype:int648117/100000.8117

並且在這一個月內用戶平均購買了12次,也就是平均2.5天進行一次購物,可見用戶的粘性是非常高的。

tb_two_buy.sort_values('behavior_type',ascending=False)['behavior_type'].mean()12.005176682421787

在這裡我計算用戶購買的一些數據,得出用戶購買次數的中位數是8,方便我運用RFM模型的時候,對頻率有一個估計。

tb_two_buy.sort_values('behavior_type',ascending=False)['behavior_type'].describe()count8886.000000mean12.005177std16.349089min1.00000025%4.00000050%8.00000075%15.000000max745.000000Name:behavior_type,dtype:float64tb_two_buy.sort_values('behavior_type',ascending=False)['behavior_type'].median()8.0

3.2 不同時間段下的用戶行為分析

分別以月為周期,以及以每天內的時間為單位來分析用戶的行為,找出用戶活躍的規律。

3.2.1 用戶每天的活躍規律

日均訪問量

blankblank

由上圖可知,無論是訪問數,還是用戶數,在12月12日當天突然激增,此後又恢復了正常,可見當天雙十二的活動成功的吸引了客戶的注意。所以在活動的前幾天或者當天,我們可以利用這個巨大的流量優勢,提升用戶購買的機率。

3.2.2 用戶日活躍時間段

blankblank

  1. 分析2014年12月12日這一天的數據,我們發現用戶從0點到6點處於一個休息狀態,而從6點開始,到10點活躍的人數越來越多,10點達到了一個巔峰,然後又逐漸回落,預測是用戶起床上班,利用路上通勤時間進行瀏覽以及購買,而到了上班時間,則只能抽空購物;
  2. 晚上6點到9點用戶數量又開始激增,成交率也增加,證明用戶下班,吃飯等等有較多的空閒時間進行購物了;10點之後用戶瀏覽慢慢下降,是準備要休息了。

所以我們能看出來,利用用戶的空閒時間進行行銷,比如早上通勤時間,中午吃飯時間,晚上6-9點,能夠提升用戶成交率。

3.2.3 用戶週末與工作日的活躍

blankblank

從上圖可知,用戶在周末與平時工作日的活躍度基本沒有太大的變化,除了第50週的一個雙十二活動,吸引了大量客戶去參與。所以,能夠看出為什麼阿里要造出雙十一,雙十二這樣的活動了,能夠吸引大量客戶在這個節日中進行下單購買。所以,商戶在節假日和平台的活動中,一定要藉助流量去行銷自己。

3.4 用戶價值分析

本次用戶的價值分析,我們利用RFM 模型來進行分析。但是由於本次數據集中缺少金額,所以我們只能以R(最近的消費時間)和F(這一段時間內的消費頻次)來對用戶的價值進行評估了。

  • R:根據用戶最近一次購買的時間到2014年12月19日的時間差值,來判斷用戶的最近一次消費時間間隔
  • F:將數據集中用戶從2014年11月18日到2014年12月18日的消費次數來作為頻率

關於RFM模型的理解可以看這個知乎問答:理解RFM模型

首先,我們需要先定義以下我們的R,F值的規劃如下:

blankblank

(1)接下來,我們計算每一個付費用戶得RF值.

(2)計算R,F值的平均值

(3)根據每一個的用戶的R,F值和其平均值的對比,代入RFM用戶分類模型,即可得到用戶的分類。用戶分類規則見如下圖:

blankblank
來源:猴子

3.4.1 計算RFM值

計算用戶最近一次消費時間距離2014年12月19日的時間間隔,再根據我們上面的打分規則,對每個用戶進行打分。

tb.to_csv('tb_user_2014.csv',index=False)tb_buy.to_csv('tb_buy.csv',index=False)tb_buy['date']=tb_buy['date'].apply(pd.to_datetime)# 将字符串时间字段变为datatime 类型,方便后续时间间隔计算

由於我們的RFM模型只需要知道用戶的id,消費時間就可以進行計算了,所以把無關的字段剔除。保留user_id 和date。

3.4.2 構造R值

tb_buy_rfm=tb_buy[['user_id','date']]tb_buy_rfm.head()# 构造 R值r=tb_buy_rfm.groupby('user_id')['date'].max().reset_index()r.head()r['R']=(pd.to_datetime('2014-12-19')-r['date']).dt.daysr.head()

3.4.3 F值構造

在我們構造F值,也就是用戶一個月內的購買頻次的時候,我們應該把用戶一天內的多次消費當成是一次消費,否則會產生一個很怪的現象,那就是比如一個顧客上午9點買了一本書,下午3點想起來需要買筆,於是又下單買了筆,到了晚上8點,想起來需要買點牛奶補充身體,又下單購買,這樣就造成了一天內多次消費,而這不合理,本來是應該一次消費完畢的,所以我們合併用戶一天內的多次消費為一次消費

buy_tb=tb_buy.groupby('user_id')['behavior_type'].count().reset_index()buy_tb['behavior_type'].describe()count8886.000000mean12.005177std16.349089min1.00000025%4.00000050%8.00000075%15.000000max745.000000Name:behavior_type,dtype:float64

我們能看到有的用戶在這30天內消費了745次,這實在是不符合常理,平均一天消費24.8次,一天消費這麼多次的客戶非常的少,所以我們還是需要合併客戶一天內的消費為一次。

# F值构造tb_buy_rfm['日期标签']=tb_buy_rfm['date'].astype(str)# 把单个用户的多次消费订单合并为一次消费dup_f=tb_buy_rfm.groupby(['user_id','日期标签'])['date'].count().reset_index()# 对合并之后的用户统计消费频次f=dup_f.groupby('user_id')['date'].count().reset_index()f.columns=['user_id','frequency_buy']f.head()
blankblank
# 将两者合并,R值和F值rfm=pd.merge(r,f,left_on='user_id',right_on='user_id',how='inner')rfm.head()
blankblank
rfm['frequency_buy'].mean()5.53691199639883rfm['R_sore']=pd.cut(rfm['R'],bins=[0,3,5,10,20,50],labels=[5,4,3,2,1],right=False).astype(float)rfm['F_score']=pd.cut(rfm['frequency_buy'],bins=[1,2,6,10,15,50],labels=[1,2,3,4,5],right=False).astype(float)rfm.head()rfm['R是否大於均值']=(rfm['R']>rfm['R'].mean())*1rfm['F是否大於均值']=(rfm['frequency_buy']>rfm['frequency_buy'].mean())*1rfm.head()

3.4.4 用戶分類

本次我們把用戶分為四類,因為缺少金額數值,我們把用戶分成如下四類,並針對不同類型的客戶採取不同的措施,實現精細化運營。

blankblank
#首先我們先創建一個新的字段,把R是否大於均值,F是否大於均值給合併起來rfm['user_value']=(rfm['R是否大於均值']*10)+(rfm['F是否大於均值']*1)defuser_value(x):ifx==0:return'重要挽留客戶'elifx==1:return'重要保持客戶'elifx==10:return'重要發展客戶'else:return'重要價值客戶'rfm['user_catergory']=rfm['user_value'].apply(user_value)rfm.head()rfm_user_cat=rfm['user_catergory'].value_counts().reset_index()rfm_user_cat
blankblank

可以看到重要價值的用戶比較少,但是卻是一個比較優質的客戶,所以可以有針對性地給這類客戶提供VIP服務,比如現在的淘寶VIP會員卡等等。

重要挽留客戶佔比也很大,對於這類客戶,最近消費時間間隔較遠,並且消費頻次低,我們需要主動聯繫客戶,調查清楚哪裡出現了問題,比如通過短信,郵件,APP推送等喚醒客戶。

對於重要發展客戶,消費頻次低,我們需要提升他的消費頻率,可以通過優惠券疊加等活動來刺激消費;

而重要保持客戶,消費時間間隔較遠,但是消費頻次高,有可能就是需要買東西的時候,就高頻購買,不需要就不再購物,對於這類客戶,需要主動聯繫,了解客戶的需求,及時滿足這類用戶的需求。

3.5 商品銷售情況

首先,我們先來統計商品的點擊情況,收藏情況,加入購物情況,以及購買情況。

3.5.1 商品的銷售情況

總共銷售的商品有92753個,我們能看到有83894個商品只銷售了一次,6395件商品銷售了2次,一次性購買的商品佔據了90%,說明商品的銷售主要是靠長尾商品,並沒有爆款商品的帶動。

tb_item=tb_buy['item_id'].value_counts().reset_index()tb_item.columns=['item_id','销售次数']tb_item.count()item_id92753销售次数92753dtype:int64tb_item_num=tb_item['销售次数'].value_counts().reset_index()tb_item_num.columns=['销售次数','商品数量']tb_item_num.to_csv('tb_item_num.csv',index=False)
blankblank
tb_pv=tb[tb['behavior_type']=='pv'].groupby('item_id')['behavior_type'].count().reset_index().sort_values('behavior_type',ascending=False)tb_pv_20=tb_pv.head(20)

接下來我們來查看每個商品的總體情況。

blankblank

在前20名商品點擊數中,112921337商品被點擊了716次,97655171被點擊了550次,135104537被點擊了478次,那麼我們接下來看一看商品的收藏數和加購物數的情況。

tb_cart=tb[tb['behavior_type']=='cart'].groupby('item_id')['behavior_type'].count().reset_index().sort_values('behavior_type',ascending=False)tb_cart_20=tb_cart.head(20)
blankblank
tb_favor=tb[tb['behavior_type']=='favor'].groupby('item_id')['behavior_type'].count().reset_index().sort_values('behavior_type',ascending=False)tb_favor_20=tb_favor.head(20)
blankblank
tb_buy=tb[tb['behavior_type']=='buy'].groupby('item_id')['behavior_type'].count().reset_index().sort_values('behavior_type',ascending=False)tb_buy_20=tb_buy.head(20)
blankblank

3.5.2 商品類目銷售情況

blankblank
  1. 從上圖我們可以看到,商品的類目銷售的情況還是比較集中的,上圖是前20銷售類目的情況,我們可以嘗試將銷量較低的商品和銷量較高的商品捆綁銷售,並且優化商品的展示,將暢銷類的商品和非暢銷品展示在一起,提升商品購買轉化率。
  2. 優化商品的推薦算法,將流量更多地聚焦於暢銷的商品,打造爆款的產品,並利用爆款產品帶動整體商品類目的銷售。
pd.merge(tb_buy_20,tb_pv_20,on='item_id',how='inner')
blankblank

在前20名點擊商品中,僅有14087919,387911330 商品是被用戶購買的,說明用戶瀏覽的商品和最終購買的商品存在著很大的誤差,我們需要優化推薦系統,讓用戶真正找到自己想買的商品,將瀏覽量轉換為購買量。

pd.merge(tb_cart_20,tb_pv_20,on='item_id',how='inner')
blankblank

而加入購物車的商品中,僅有14087919,353381230,209323160,277922302是被用戶瀏覽過後才加入購物車的,也從側面說明從瀏覽到加購的轉化率較低。

pd.merge(tb_favor_20,tb_pv_20,on='item_id',how='inner')

從點擊到收藏中,前20名商品,只有277922302,6703599,14087919,211781109,128186279商品是被收藏的。那麼接下來我們看看收藏或者加入購物車的商品到底有哪些會進入購買階段呢?

pd.merge(tb_favor_20,tb_buy_20,on='item_id',how='inner')
blankblank

從這裡我們能看到收藏之後再進行購買的商品非常的少,只有14087919這個商品。

pd.merge(tb_cart_20,tb_buy_20,on='item_id',how='inner')
blankblank

從上圖我們能看到7個商品被加入購物車之後被購買,也就是存在35%的轉化率,因此在後續的活動中,我們應該想辦法讓客戶把商品加入購物車,從而提升轉化率。

3.6 影響用戶購買的流程因素

那麼用戶在購物的各個環節中,到底是哪些因素影響了最終的購買率呢?我們來做一個假設:

  1. 點擊-購買
  2. 點擊-收藏-購買
  3. 點擊-加入購物車-購買
  4. 點擊-收藏-加入購物車-購買

3.6.1 點擊購買

pd.merge(tb_pv,tb_buy,on='item_id',how='inner').count()item_id89786behavior_type_x89786behavior_type_y89786dtype:int64

3.6.2 點擊-收藏-購買

tb_pv_favor=pd.merge(tb_pv,tb_favor,on='item_id',how='inner')tb_pv_favor_buy=pd.merge(tb_pv_favor,tb_buy,on='item_id',how='inner').count()tb_pv_favor_buyitem_id19869behavior_type_x19869behavior_type_y19869behavior_type19869dtype:int64tb_pv_favor.count()item_id204117behavior_type_x204117behavior_type_y204117dtype:int64

3.6.3 點擊-加入購物車-購買

tb_pv_cart=pd.merge(tb_pv,tb_cart,on='item_id',how='inner')tb_pv_cart_buy=pd.merge(tb_pv_cart,tb_buy,on='item_id',how='inner').count()tb_pv_cart_buyitem_id61102behavior_type_x61102behavior_type_y61102behavior_type61102dtype:int64tb_pv_cart.count()item_id247177behavior_type_x247177behavior_type_y247177dtype:int64

3.6.4 點擊-收藏-加入購物車-購買

tb_pv_favor=pd.merge(tb_pv,tb_favor,on='item_id',how='inner')tb_pv_favor_cart=pd.merge(tb_pv_favor,tb_cart,on='item_id',how='inner')tb_pv_favor_cart_buy=pd.merge(tb_pv_favor_cart,tb_buy,on='item_id',how='inner').count()tb_pv_favor_cart_buyitem_id13892behavior_type_x13892behavior_type_y13892behavior_type_x13892behavior_type_y13892dtype:int64tb_pv_favor_cart.count()item_id38710behavior_type_x38710behavior_type_y38710behavior_type38710dtype:int64

最終的結果如下:

blankblank

從上面的總結中,我們能夠看到有大量的用戶點擊之後就流失了。

1. 用戶點擊之後加入購物車的比例達到了4.465%,比用戶點擊-收藏的比例還高,並且其購買轉化率有24.7%,而收藏的購買轉化率只有9.73%,說明收藏的商品有可能是用戶收藏著,蘊含著一定的喜歡,我們需要搞一些活動,比如發放優惠券等等,刺激用戶去消費。

2. 用戶收藏和加入購物車之後的購買率達到了35.8%,說明商品只要被用戶喜歡和加入購物車,那就有相當大的機率被購買,所以我們應該採取相應措施,比如讓客戶去收藏和加入購物車,這樣能夠增大轉化率。

(四)結論與建議

本文從5個方便分析了淘寶用戶的行為,並且利用RFM 模型對用戶進行了分類

1.淘寶用戶的基本情況

本次數據集中有88.86%的用戶是付費用戶,並且這一個月內的複購率也達到了81%,說明淘寶已經深入老百姓的生活了,付費轉化率非常高,所以,我們只需要培養用戶的忠誠度,讓用戶繼續在淘寶上消費,並且通過一些行銷政策,優惠策略等提高用戶的消費頻次。

尤其是現在出現了拼多多這樣一個下沉到農村市場的電商平台,淘寶更應該抓住那部分對價格敏感的用戶,做一些轉發拼團,發放優惠券等的活動,來增加用戶。

2.在時間維度上

在用戶的休閒時間段,比如通勤時間7-10點,午飯時間12-13點,以及晚上6-10點之間做促銷活動,以及一些相關的行銷,這樣能夠大大增加用戶購買的轉化率。

3.業務流程方面

通過一些方法,引導用戶進行收藏和加入購物車,比如發放優惠券,滿減活動,送禮品等給用戶優惠的方式,通過大量銷售,提升購買轉化率。並且對於點擊量高的商品,要重點分析,優化商品的推薦機制,讓用戶做到點擊即想購買。

4.用戶群體

對於重要價值的用戶,需要給其提供VIP服務,比如VIP可以得到餓了麼優惠券,嗶嗶哩哩優惠券,阿里健康買藥優惠等等

blankblank

對於重要挽留的客戶,要發短信和郵件,或者APP客戶端推送等,讓客戶重新回來消費,此外可以通過一些節日優惠等再次召回客戶。

對於重要發展和重要保持用戶,可以再重點提升消費頻次,通過優惠券等活動刺激消費。

5.商品銷售

通過將暢銷商品和非暢銷商品進行捆綁銷售,優化商品的展示,當然在做這些活動之前,可以先嘗試做A/B 測試,找到最適合的銷售方式和最合適的商品類型捆綁,不斷提升轉化率。

參考文獻:

電商行業如何做好用戶行為分析:用戶行為事件分析

如何通俗易懂的理解和應用RFM分析方法(模型)?

RFM模型:如何量化你的用戶價值?

輕鬆玩轉RFM用戶分析模型

淘寶用戶行為MySQL分析

What do you think?

Written by marketer

blank

為什麼我推薦你學習Tableau

blank

Tableau安裝(無限制使用)