日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

用户消费行为分析

發(fā)布時間:2023/12/25 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 用户消费行为分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)源:提取碼: g6vv

寫這篇文章的目的是通過實踐加深數(shù)據(jù)分析流程的印象,方便以后忘記時快速回顧,文末附有自己寫的數(shù)據(jù)分析報告。

數(shù)據(jù)來源CDNow網(wǎng)站的用戶購買明細。一共有用戶ID,購買日期,購買數(shù)量,購買金額四個字段

消費行業(yè)或者是電商行業(yè)一般是通過訂單數(shù),訂單額,購買日期,用戶ID這四個字段來分析的,基本上這四個字段就可以進行很豐富的分析。

分析步驟:先清洗好數(shù)據(jù),然后從消費趨勢、用戶方向、訂單方向分析數(shù)據(jù)所反映的問題

一、數(shù)據(jù)類型的處理——字段的清洗

  任務:缺失值的處理、數(shù)據(jù)類型的轉化

二、按月數(shù)據(jù)分析——消費趨勢分析

  任務:每月的消費總金額、每月的訂單數(shù)、每月的銷量、每月的消費人數(shù)

三:用戶個體消費數(shù)據(jù)分析——用戶方向分析

  任務:用戶消費金額和購買數(shù)量的描述統(tǒng)計、用戶消費金額和購買數(shù)量的散點圖、用戶消費金額的分布圖(二八法則)、用戶購買數(shù)量的分布圖、用戶累計消費金額的占比

四:用戶消費行為分析——訂單方向分析

  任務:用戶第一次消費時間、用戶最后一次消費時間、用戶分層、用戶購買周期

五:數(shù)據(jù)分析報告

一、數(shù)據(jù)類型的處理——字段的清洗

1.啟動jupyter notebook,新建puython3文件

2.導入庫并加載數(shù)據(jù)

 1 import pandas as pd 
 2 import numpy as np
 3 import matplotlib.pyplot as plt
 4 from datetime import datetime
 5 %matplotlib inline
 6 plt.rcParams['font.family'] = ['sans-serif']  # 解決中文亂碼
 7 plt.rcParams['font.sans-serif'] = ['SimHei']
 8 # 設置顯示圖形用svg矢量格式,
 9 %config InlineBackend.figure_format = 'svg'
10 
11 columns = ['user_id','order_dt','order_products','order_amount']  # 為打開的文件指定列名(CDNOW_master.txt文件沒有列名只有數(shù)據(jù))
12 df = pd.read_table(r"C:/CHB/CDNOW_master.txt", names = columns, sep = 's+')  # 文件CDNOW_master.txt以空格分隔,s+表示匹配任意空白符

3.用 head+info+describe 觀察數(shù)據(jù),看數(shù)據(jù)是否干凈:有沒有缺失值、數(shù)據(jù)類型是否正確(數(shù)據(jù)類型正確與否很重要,拿到數(shù)據(jù)需要首先看數(shù)據(jù)類型,以避免接下來出現(xiàn)數(shù)據(jù)類型問題,pandas數(shù)據(jù)類型轉換)

沒有缺失值,但有些數(shù)據(jù)類型不符合我們的分析要求:如order_dt應該是datetime64類型才對

用戶平均購買2個商品,中位數(shù)在2個商品,75分位數(shù)在3個商品,說明絕大部分訂單的購買量都不多。最大值在99個,數(shù)字比較高。

購買金額的情況差不多,大部分訂單都集中在小額,說明有小部分用戶會購買大量商品。

一般而言,消費類的數(shù)據(jù)分布,都是長尾形態(tài)。大部分用戶都是小額,然而小部分用戶貢獻了收入的大頭,俗稱二八。

4. 把 order_dt 字段的數(shù)據(jù)類型轉為datetime64,astype也可以將時間格式進行轉換,比如[M]轉化成月份,周是W。

1 df['order_dt'] = pd.to_datetime(df.order_dt,format = '%Y%m%d')  # Y四位數(shù)的日期部分,y表示兩位數(shù)的日期部分
2 df['month'] = df.order_dt.values.astype('datetime64[M]')  # 衍生一個month字段用于接下來的分析(月份依舊顯示日,只是變?yōu)樵鲁醯男问健#?/pre>

二、按月數(shù)據(jù)分析——消費趨勢分析

我們將月份作為消費行為的主要事件窗口,選擇哪種時間窗口取決于消費頻率。

1.先對數(shù)據(jù)按月分組,然后求出每月的銷量并繪圖

1 fig,axes = plt.subplots(1,1)
2 plt.plot(grouped_month.order_amount.sum())
3 plt.title("CDNow網(wǎng)站月度銷售金額走勢圖")
4 plt.xlabel("月份")
5 plt.ylabel("銷售金額")
6 plt.grid(b = "true")
7 plt.savefig("month_amount.jpg")

按月統(tǒng)計每個月的CD銷量。從圖中可以看到,前幾個月的銷量非常高漲。數(shù)據(jù)比較異常。而后期的銷量則很平穩(wěn)。

2.每月的消費總金額

1 fig,axes = plt.subplots(1,1)
2 plt.plot(grouped_month.order_products.sum())
3 plt.title("CDNow網(wǎng)站月度銷售量走勢圖")
4 plt.xlabel("月份")
5 plt.ylabel("銷售量")
6 plt.grid(b = "true")
7 plt.savefig("month_products.jpg")

金額一樣呈現(xiàn)早期銷售額多,后期平穩(wěn)下降的趨勢。

3.每月的訂單數(shù)

1 fig,axes = plt.subplots(1,1)
2 plt.plot(grouped_month.user_id.count())
3 plt.title("CDNow網(wǎng)站月度訂單量走勢圖")
4 plt.xlabel("月份")
5 plt.ylabel("訂單量")
6 plt.grid(b = "true")
7 plt.savefig("month_count.jpg")

前三個月的消費訂單數(shù)在10000筆左右,后續(xù)月份的消費人數(shù)則在2500人左右。

4.每月的消費人數(shù)(重復的不算)

1 fig,axes = plt.subplots(1,1)
2 plt.plot(df.groupby('month').user_id.nunique())
3 plt.title("CDNow網(wǎng)站月度消費人數(shù)走勢圖")
4 plt.xlabel("月份")
5 plt.ylabel("消費人數(shù)量")
6 plt.grid(b = "true")
7 plt.savefig("month_people_count.jpg")

一樣是前期消費人數(shù)多,后期平穩(wěn)下降的趨勢。

5.用數(shù)據(jù)透視表看每月數(shù)據(jù)的趨勢

df.pivot_table(index = 'month',
              values = ['order_products','order_amount','user_id'],
              aggfunc = {'order_products':'sum','order_amount':'sum','user_id':'count'}).head()

小結:每月的銷量、銷售金額、訂單數(shù)和消費人數(shù)都是前三個月非常高,之后趨于平穩(wěn)。

為什么會呈現(xiàn)這個原因呢?我們假設是用戶身上出了問題,早期時間段的用戶中有異常值,第二假設是各類促銷營銷,但這里只有消費數(shù)據(jù),所以無法判斷。

三:用戶個體消費數(shù)據(jù)分析——用戶方向分析

有時候我們也需要從個體來看這個人的消費能力如何,這里劃分了五個方向如下:

1.先按用戶分組,然后求用戶消費金額和購買數(shù)量的描述統(tǒng)計

1 group_user = df.groupby('user_id')
2 group_user.sum().describe()

從用戶角度看,每位用戶平均購買7張CD,最多的用戶購買了1033張。用戶的平均消費金額(客單價)100元,標準差是240

結合分位數(shù)和最大值看,平均值才和75分位接近,肯定存在小部分的高額消費用戶。

消費、金融和錢相關的數(shù)據(jù),基本上都符合二八法則,小部分的用戶占了消費的大頭

2.用戶消費金額和購買數(shù)量散點圖

1 group_user.sum().query('order_amount < 4000'). plot.scatter(x = 'order_amount' , y = 'order_products')  # query后面只支持string形式的值

x軸是用戶個人消費金額,y軸是用戶個人購買數(shù)量,呈線性關系,因為這是CD網(wǎng)站的銷售數(shù)據(jù),商品比較單一,消費金額和購買數(shù)量掛鉤。

這里把消費金額大于4000的點排除在外,因為從上面用戶消費金額和消費次數(shù)的描述統(tǒng)計來看,大于4000已屬于異常值了,而且也沒多少個點,還不如排除在外,重點關注大部分用戶的分布情況。

如果不設置條件,散點圖如下圖,顯然上圖好一點,上圖已經(jīng)夠表達出分布規(guī)律了

3.用戶消費金額的分布圖(二八法則)

group_user.sum().order_amount. plot.hist(bins = 20)  # bins = 20,就是分成20塊,最高金額是14000,每個項就是700

x軸是消費金額,y軸是用戶數(shù),從上圖直方圖可知,大部分用戶的消費能力確實不高,絕大部分用戶集中在很低的消費檔次(700)。高消費用戶在圖上幾乎看不到,這也確實符合消費行為的行業(yè)規(guī)律。

說大部分可能有點籠統(tǒng),我們具體算一下有多少用戶消費金額小于等于700,有多少用戶消費金額大于700

group_user.sum().query('order_amount <= 700').count()

group_user.sum().query('order_amount > 700').count()

print("消費金額小于等于700的用戶有: 23171位,占比: {:.2%}".format(23171/(23171+399)))

4.用戶購買數(shù)量的分布圖(二八法則)

group_user.sum().query('order_products < 100').order_products.hist(bins = 40)  # 購買數(shù)量設置小于100,分成40塊,每塊就是2.5

大部分用戶的購買數(shù)量落在區(qū)間 [0,20]

5.用戶累計消費金額的占比(百分之多少的用戶占了百分之多少的消費額)

1 user_cumsum = group_user.sum().sort_values('order_amount').apply(lambda x: x.cumsum() / x.sum())  # axis = 0按列計算 cumsum滾動累加求和 sort_values排序,升序
2 user_cumsum

user_cumsum.reset_index().order_amount.plot().grid(b=True)  # reset_index重設索引,grid(b=True)開啟網(wǎng)格線

x軸是用戶數(shù)量,y軸是銷售額占比,按用戶消費金額進行升序排序,由圖可知50%的用戶僅貢獻了15%的銷售額度。而排名前4000多的用戶就貢獻了60%的消費額。
也就是說我們只要維護了這4000個用戶就可以把業(yè)績KPI完成60%,如果能把4000個用戶運營的更好就可以占比70%—80%之間。
摸索一下消費金額前10%的用戶消費界限是多少

拿消費界限計算各自消費總額

小結:從用戶的角度我們了解到,大部分(90%)用戶消費能力低,小部分(10%)用戶消費能力高,而這小部分用戶貢獻了一半的銷售額。

四:用戶消費行為分析——訂單方向分析

1.用戶第一次消費時間(首購)

在很多行業(yè)里面首購是一個很重要的維度,它和渠道息息相關,尤其是針對客單價比較高客戶留存率比價低的行業(yè),第一次客戶從哪里來可以拓展出很多運營方式

group_user.month.min().value_counts()

求月份的最小值,即用戶消費行為中的第一次消費時間。所有用戶的第一次消費都集中在前三個月。

2.用戶最后一次消費時間

group_user.month.max().value_counts()

group_user.max().order_dt.value_counts().plot()

用戶最后一次消費比第一次消費分布廣,大部分最后一次消費集中在前三個月,說明很多客戶購買一次就不再進行購買。

隨著時間的增長,最后一次購買數(shù)也在遞增,消費呈現(xiàn)流失上升的情況,用戶忠誠度在慢慢下降。

3.用戶分層(RFM)

R表示客戶最近一次交易時間的間隔。
F表示客戶在最近一段時間內(nèi)交易的次數(shù),F值越大,表示客戶交易越頻繁,反之則表示客戶交易不夠活躍。
M表示客戶在最近一段時間內(nèi)交易的金額。M值越大,表示客戶價值越高,反之則表示客戶價值越低。

1 rfm = df.pivot_table(index = 'user_id',
2                     values = ['order_products','order_amount','order_dt'],
3                     aggfunc = {'order_dt':'max','order_amount':'sum','order_products':'sum'})
4 
5 rfm.head()

order_amount消費總金額,order_products消費產(chǎn)品數(shù),order_dt最近一次消費時間
order_products求的是消費產(chǎn)品數(shù),把它替換成消費次數(shù)也是可以,但是因為我們這里消費次數(shù)是比較固定的,所以使用消費產(chǎn)品數(shù)的維度。

1 rfm['R'] =-(rfm.order_dt - rfm.order_dt.max()) / np.timedelta64(1,'D')
2 #-(rfm.order_dt - rfm.order_dt.max())結果為時間類型,將時間格式轉化為整數(shù)或者浮點數(shù)的形式,可以除以單位‘D’,也可以用astype轉化
3 rfm.rename(columns ={'order_products':'F', 'order_amount':'M'},inplace = True )
4 rfm = rfm[['R','F', 'M']]
5 rfm.head()

獲得三個字段的值后定義分層函數(shù)進行用戶分層

 1 def rfm_func(x):
 2     level = x.apply(lambda x :'1' if x >= 0 else '0')
 3     label = level.R + level.F + level.M
 4     d = {
 5         '111':'重要價值客戶',
 6         '011':'重要保持客戶',
 7         '101':'重要挽留客戶',
 8         '001':'重要發(fā)展客戶',
 9         '110':'一般價值客戶',
10         '010':'一般保持客戶',
11         '100':'一般挽留客戶',
12         '000':'一般發(fā)展客戶'
13     }
14     result = d[label]
15     return result
16 
17 rfm['label'] = rfm[['R','F','M']].apply(lambda x : x - x.mean()).apply(rfm_func,axis = 1)  # axis = 1列,即把rfm_func結果放到列
18 rfm.head()

統(tǒng)計一下每個層次的用戶有多少

rfm.groupby('label').count()

畫餅圖看一下占比

1 x = rfm.groupby('label').count().R
2 plt.pie(x.values, labels=x.index, autopct='%.0f%%')

可以看到,一般挽留和一般發(fā)展的用戶占了大部分,重要保持客戶排名第二


再來看一下每個層次的銷售額情況

rfm.groupby('label').sum().M

畫餅圖看一下占比

1 y = rfm.groupby('label').sum().M
2 plt.pie(y.values, labels=y.index, autopct='%.0f%%')

結合上一個圖看,一般挽留客戶人數(shù)占60%,但銷售額只占18%,重要保持客戶占19%,銷售額占64%,消費的大頭主要是重要保持客戶

4.用戶購買周期

1 order_diff = group_user.apply(lambda x : x.order_dt - x.order_dt.shift())  # 將用戶分組后,每個用戶的訂單購買時間進行錯位相減
2 order_diff.describe()

用戶的平均購買周期是68天,絕大部分用戶的購買周期都低于100天

用戶購買周期分布

小結:用戶首購集中在前三個月并且最后一次購物也集中在前三個月,很多用戶都是在前三個月購買一次后就不買了,這些用戶大多屬于一般發(fā)展和一般挽留客戶,只貢獻了1/4的銷售額,剩下的用戶購買量大,貢獻了銷售額的大頭。

數(shù)據(jù)分析報告

總結

以上是生活随笔為你收集整理的用户消费行为分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。