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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据分析项目整理之用户消费行为分析

發布時間:2024/8/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据分析项目整理之用户消费行为分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

數據預處理-清洗字段

按用戶個體消費數據分析

用戶消費金額和消費次數的描述統計

用戶消費金額和消費次數的散點圖

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

用戶消費次數的分布圖

用戶累計消費金額的占比

按月數據分析

每月消費總金額

每月的消費次數(訂單數)

每月的產品購買量

每月的消費人數(去重)?

用戶消費行為分析

用戶第一次消費(首購)?

用戶最后一次消費

新老客的消費比

用戶分層?

用戶質量

用戶生命周期

用戶購買周期

用戶復購率和回購率


本案例分析了來自CDNow網站的一份用戶購買CD明細,進一步分析用戶的消費行為,提高決策質量。數據來源CDNow網站的用戶購買明細。一共有用戶ID,購買日期,購買數量,購買金額四個字段。

數據預處理-清洗字段

  • 加載包和數據,文件是txt,用read_table方法打開,因為原始數據不包含表頭,所以需要賦予。字符串是空格分割,用\s+表示匹配任意空白符。
  • 一般csv的數據分隔是以逗號的形式,但是這份來源于網上的數據比價特殊,它是通過多個空格來進行分隔。

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

  • 觀察數據,判斷數據是否正常識別。值得注意的是一個用戶可能在一天內購買多次,用戶ID為2的用戶在1月12日買了兩次,這個細節不要遺漏。

  • 查看數據類型、數據是否存在空值;原數據沒有空值,很干凈的數據。接下來我們要將時間的數據類型轉化。
  • 當利用pandas進行數據處理的時候,經常會遇見數據類型的問題,當拿到數據的時候,首先要確定拿到的是正確的數據類型,如果數據類型不正確需要進行數據類型的轉化,再進行數據處理。

  • 用戶平均每筆訂單購買2.4個商品,標準差在2.3,稍稍具有波動性。中位數在2個商品,75分位數在3個商品,說明絕大部分訂單的購買量都不多。最大值在99個,數字比較高。購買金額的情況差不多,大部分訂單都集中在小額。
  • 一般而言,消費類的數據分布,都是長尾形態。大部分用戶都是小額,然而小部分用戶貢獻了收入的大頭,俗稱二八。

  • 接下來我們要將時間的數據類型轉換。

  • pd.to_datetime可以將特定的字符串或者數字轉換成時間格式,其中的format參數用于匹配。例如19970101,%Y匹配前四位數字1997,如果y小寫只匹配兩位數字97,%m匹配01,%d匹配01。
  • 另外,小時是%h,分鐘是%M,注意和月的大小寫不一致,秒是%s。若是1997-01-01這形式,則是%Y-%m-%d,以此類推。
  • astype也可以將時間格式進行轉換,比如[M]轉化成月份。我們將月份作為消費行為的主要事件窗口,選擇哪種時間窗口取決于消費頻率。

  • 上圖是轉化后的格式。月份依舊顯示日,只是變為月初的形式。

  • pandas中有專門的時間序列方法tseries,它可以用來進行時間偏移,也是處理時間類型的好方法。時間格式也能作為索引,在金融、財務等領域使用較多。

到目前為止,我們已經把數據類型處理成我們想要的類型了。我們通過四個字段及衍生字段就可以進行后續的分析了。

按用戶個體消費數據分析

接下來我們用之前清洗好的字段進行數據分析。我么可以按個體來看這個人的消費能力如何,這里劃分了五個方向如下:

用戶消費金額和消費次數的描述統計

  • 從用戶角度看,每位用戶平均購買7張CD,最多的用戶購買了1033張。用戶的平均消費金額(客單價)100元,標準差是240,結合分位數和最大值看,平均值才和75分位接近,肯定存在小部分的高額消費用戶。
  • 如果大家能夠接觸到消費、金融和錢相關的數據,基本上都符合二八法則,小部分的用戶占了消費的大頭。

用戶消費金額和消費次數的散點圖

  • 繪制用戶的散點圖,用戶比較健康而且規律性很強。因為這是CD網站的銷售數據,商品比較單一,金額和商品量的關系也因此呈線性,沒幾個離群點。

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

  • 從上圖直方圖可知,大部分用戶的消費能力確實不高,絕大部分呈現集中在很低的消費檔次。高消費用戶在圖上幾乎看不到,這也確實符合消費行為的行業規律。
  • 雖然有極致干擾了我們的數據,但是大部分的用戶還是集中在比較低的而消費檔次。

用戶消費次數的分布圖

  • 到目前為止關于用戶的消費行為有一個大概的了解

用戶累計消費金額的占比

  • 按用戶消費金額進行升序排序,由圖可知50%的用戶僅貢獻了15%的銷售額度。而排名前5000的用戶就貢獻了60%的消費額。也就是說我們只要維護了這5000個用戶就可以把業績KPI完成60%,如果能把5000個用戶運營的更好就可以占比70%—80%之間。

按月數據分析

之前的維度是用戶個體,接下來我們按月來分析消費趨勢,了解數據的波動形式。

每月消費總金額

  • 用groupby創建一個新的對象。這里要觀察消費總金額,需要將order_amount求和。

  • 按月統計每個月的CD消費總金額。從圖中可以看到,前幾個月的銷量非常高漲。數據比較異常。而后期的銷量則很平穩。

  • 繪制每筆訂單的散點圖。從圖中觀察,訂單消費金額和訂單商品量呈規律性,每個商品十元左右。訂單的極值較少,超出1000的就幾個。顯然不是異常波動的罪魁禍首。

每月的消費次數(訂單數)

  • 前三個月的消費訂單數在10000筆左右,后續月份的消費人數則在2500人左右。

每月的產品購買量

  • 每月的產品購買量一樣呈現早期購買量多,后期平穩下降的趨勢。為什么會呈現這個原因呢?我們假設是用戶身上出了問題,早期時間段的用戶中有異常值,第二假設是各類促銷營銷,但這里只有消費數據,所以無法判斷。

每月的消費人數(去重)

  • 每月的消費人數小于每月的消費次數,但是區別不大。前三個月每月的消費人數在8000—10000之間,后續月份,平均消費人數在2000不到。一樣是前期消費人數多,后期平穩下降的趨勢。

上面消費趨勢的分析可以通過數據透視表分析 :

  • 數據透視表是更簡單的方法,可以用里面的數據進行作圖,而且更加的快捷。

用戶消費行為分析

用戶第一次消費(首購)?

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

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

用戶最后一次消費

  • 觀察用戶的最后一次消費時間。用戶最后一次消費比第一次消費分布廣,大部分最后一次消費集中在前三個月,說明很多客戶購買一次就不再進行購買。隨著時間的增長,最后一次購買數也在遞增,消費呈現流失上升的情況,用戶忠誠度在慢慢下降。

新老客的消費比

  • user_id為1的用戶第一次消費時間和最后一次消費時間為1997-01-01,說明他只消費了一次。

  • 有一半的用戶只消費了一次。?

用戶分層?

  • 用戶每個月的消費次數,對于生命周期的劃分只需要知道用戶本月是否消費,消費次數在這里并不重要,需要將模型進行簡化。
  • 使用數據透視表,需要明確獲得什么結果。有些用戶在某月沒有進行過消費,會用NaA表示,這里用filna填充。

  • 對于尾部數據,user_id2W+的數據是有問題的,因為從實際的業務場景上說,他們一月和二月都沒有注冊三月份才是他們第一次消費。透視會把他們一月和二月的數據補上為0,這里面需要進行判斷將第一次消費作為生命周期的起始,不能從一月份開始就粗略的計算

  • 主要分為兩部分的判斷,以本月是否消費為界。本月沒有消費,還要額外判斷他是不是新客,因為部分用戶是3月份才消費成為新客,那么在1、2月份他連新客都不是,用unreg表示。如果是老客,則為unactive。
  • 本月若沒有消費,需要判斷是不是第一次消費,上一個時間窗口有沒有消費。可以多調試幾次理順里面的邏輯關系,對用戶進行分層。
  • 這里用戶生命周期的狀態變化是用數據透視表一次性做的,但在實際業務場景中我們可能用SQL把它作為中間表來處理。我們有了明細表,會通過明細表來計算出狀態表;也就是它的數據上個月是什么樣的情況得出來,比如上個月是新用戶或者回流用戶,我們直接用上個月的狀態left join本月的狀態。直接用SQL進行對比。
  • 可以用pandas將每個月的狀態計算出來,不是逐行而是月份計算,先算出一月份哪些用戶是新購買的,然后判斷二月份是否購買,兩者left join。

  • 由上表可知,每月用戶的消費狀態變化。活躍用戶、持續消費的用戶對應的是消費運營質量。回流用戶,之前不消費本月才消費對應的是喚回運營。不活躍的用戶對應的是流失。

  • 用戶回流占比在5%~8%,有下降趨勢。所謂回流占比,就是回流用戶在總用戶中的占比。另外一種指標叫回流率,指上個月多少不活躍/消費用戶在本月活躍/消費。因為不活躍的用戶總量近似不變,所以這里的回流率也近似回流占比。

  • 活躍用戶的下降趨勢更明顯,占比在3%~5%間。這里用戶活躍可以看作連續消費用戶,質量在一定程度上高于回流用戶。
  • 結合回流用戶和活躍用戶看,在后期的消費用戶中,60%是回流用戶,40%是活躍用戶/連續消費用戶,整體質量還好,但是針對這兩個分層依舊有改進的空間,可以繼續細化數據。

這里可以針對業務模型下個定義:流失用戶增加,回流用戶正在減少。

用戶質量

因為消費行為有明顯的二八傾向,我們需要知道高質量用戶為消費貢獻了多少份額。

  • 新建一個對象,按用戶的消費金額生序。使用cumsum,它是累加函數。逐行計算累計的金額,最后的2500315便是總消費額。

  • 轉換成百分比。

  • 繪制趨勢圖,橫坐標是按貢獻金額大小排序而成,縱坐標則是用戶累計貢獻。可以很清楚的看到,前20000個用戶貢獻了40%的消費。后面4000位用戶貢獻了60%,確實呈現28傾向。

  • 統計一下銷量,前兩萬個用戶貢獻了45%的銷量,高消費用戶貢獻了55%的銷量。

用戶生命周期

  • 統計出用戶第一次消費和最后一次消費的時間,相減,得出每一位用戶的生命周期。因為數據中的用戶都是前三個月第一次消費,所以這里的生命周期代表的是1月~3月用戶的生命周期。因為用戶會持續消費,所以理論上,隨著后續的消費,用戶的平均生命周期會增長。

  • 求一下平均,所有用戶的平均生命周期是134天,比預想的高,但是平均數不靠譜,看一下分布。

  • 因為這里的數據類型是timedelta時間,它無法直接作出直方圖,所以先換算成數值。換算的方式直接除timedelta函數即可,這里的np.timedelta64(1, 'D'),D表示天,1表示1天,作為單位使用的。因為max-min已經表示為天了,兩者相除就是周期的天數。
  • 大部分用戶只消費了一次,所有生命周期的大頭都集中在了0天。不妨將只消費了一次的新客排除,來計算所有消費過兩次以上的老客的生命周期。

  • 轉換成DataFrame。

  • 篩選出lifetime>0,即排除了僅消費了一次的那些人。做直方圖。
  • 這是雙峰趨勢圖。部分質量差的用戶,雖然消費了兩次,但是仍舊無法持續,在用戶首次消費30天內應該盡量引導。少部分用戶集中在50天~300天,屬于普通型的生命周期,高質量用戶的生命周期,集中在400天以后,屬于忠誠用戶。

  • 消費兩次以上的用戶生命周期是276天,遠高于總體。從策略看,用戶首次消費后應該花費更多的引導其進行多次消費,提供生命周期,這會帶來2.5倍的增量。

用戶購買周期

  • 計算留存率,留存率是消費分析領域的經典應用。它指用戶在第一次消費后,有多少比率進行第二次消費。

  • 這里將order_date和order_date_min相減。獲得一個新的列,為用戶每一次消費距第一次消費的時間差值。

  • 日期轉換成時間。

  • 將時間差值分桶。我這里分成0~3天內,3~7天內,7~15天等,代表用戶當前消費時間距第一次消費屬于哪個時間段呢。這里date_diff=0并沒有被劃分入0~3天,因為計算的是留存率,如果用戶僅消費了一次,留存率應該是0。另外一方面,如果用戶第一天內消費了多次,但是往后沒有消費,也算作留存率0。

  • 用pivot_table數據透視,獲得的結果是用戶在第一次消費之后,在后續各時間段內的消費總額。

  • 計算一下用戶在后續各時間段的平均消費額,這里只統計有消費的平均值。雖然后面時間段的金額高,但是它的時間范圍也寬廣。從平均效果看,用戶第一次消費后的0~3天內,更可能消費更多。
  • 但消費更多是一個相對的概念,我們還要看整體中有多少用戶在0~3天消費。

  • 依舊將數據轉換成是否,1代表在該時間段內有后續消費,0代表沒有。

  • 只有2.5%的用戶在第一次消費的次日至3天內有過消費,3%的用戶在3~7天內有過消費。數字并不好看,CD購買確實不是高頻消費行為。時間范圍放寬后數字好看了不少,有20%的用戶在第一次消費后的三個月到半年之間有過購買,27%的用戶在半年后至1年內有過購買。從運營角度看,CD機營銷在教育新用戶的同時,應該注重用戶忠誠度的培養,放長線掉大魚,在一定時間內召回用戶購買。
  • 怎么算放長線掉大魚呢?我們計算出用戶的平均購買周期。

  • 我們將用戶分組,groupby分組后的數據,也是能用for進行循環和迭代的。第一個循環對象user,是分組的對象,即user_id;第二個循環對象group,是分組聚合后的結果。為了舉例我用了print,它依次輸出了user_id=1,user_id=2時的用戶消費數據,是一組切割后的DataFrame。

  • 定義一個計算間隔的函數diff,輸入的是group,通過上面的演示,大家也應該知道分組后的數據依舊是DataFrame。我們將用戶上下兩次消費時間相減將能求出消費間隔了。shift函數是一個偏移函數,和excel上的offset差不多。

  • x.shift()是往上偏移一個位置,x.shift(-1)是往下偏移一個位置,加參數axis=1則是左右偏移。當我想將求用戶下一次距本次消費的時間間隔,用shift(-1)減當前值即可。案例用的diff函數便借助shift方法,巧妙的求出了每位用戶的兩次消費間隔,若為NaN,則沒有下一次。

  • 用mean函數即可求出用戶的平均消費間隔時間是68天。想要召回用戶,在60天左右的消費間隔是比較好的。

  • 看一下直方圖,典型的長尾分布,大部分用戶的消費間隔確實比較短。不妨將時間召回點設為消費后立即贈送優惠券,消費后10天詢問用戶CD怎么樣,消費后30天提醒優惠券到期,消費后60天短信推送。這便是數據的應用了。

用戶復購率和回購率

首先將用戶消費數據進行數據透視。

  • 使用數據透視表,需要明確獲得什么結果。有些用戶在某月沒有進行過消費,會用NaN表示,這里用fillna填充。

首先求復購率,復購率的定義是在某時間窗口內消費兩次及以上的用戶在總消費用戶中占比。這里的時間窗口是月,如果一個用戶在同一天下了兩筆訂單,這里也將他算作復購用戶。

  • 將數據轉換一下,消費兩次及以上記為1,消費一次記為0,沒有消費記為NaN。

  • 用sum和count相除即可計算出復購率。因為這兩個函數都會忽略NaN,而NaN是沒有消費的用戶,count不論0還是1都會統計,所以是總的消費用戶數,而sum求和計算了兩次以上的消費用戶。這里用了比較巧妙的替代法計算復購率,SQL中也可以用。
  • 圖上可以看出復購率在早期,因為大量新用戶加入的關系,新客的復購率并不高,譬如1月新客們的復購率只有6%左右。而在后期,這時的用戶都是大浪淘沙剩下的老客,復購率比較穩定,在20%左右。單看新客和老客,復購率有三倍左右的差距。

接下來計算回購率。回購率是某一個時間窗口內消費的用戶,在下一個時間窗口仍舊消費的占比。如果1月消費用戶1000,他們中有300個2月依然消費,回購率是30%。

  • 將消費金額進行數據透視,這里作為練習,使用了平均值。

  • 再次用applymap+lambda轉換數據,只要有過購買,記為1,反之為0。

  • 新建一個判斷函數。data是輸入的數據,即用戶在18個月內是否消費的記錄,status是空列表,后續用來保存用戶是否回購的字段。
  • 因為有18個月,所以每個月都要進行一次判斷,需要用到循環。if的主要邏輯是,如果用戶本月進行過消費,且下月消費過,記為1,沒有消費過是0。本月若沒有進行過消費,為NaN,后續的統計中進行排除。
  • 用apply函數應用在所有行上,獲得想要的結果。

  • 最后的計算和復購率大同小異,用count和sum求出。從圖中可以看出,用戶的回購率高于復購,約在30%左右,波動性也較強。新用戶的回購率在15%左右,和老客差異不大。

將回購率和復購率綜合分析,可以得出,新客的整體質量低于老客,老客的忠誠度(回購率)表現較好,消費頻次稍次,這是CDNow網站的用戶消費特征。

注:本文以學習為主,具體思路參考秦路七周七。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。