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

目录

数据预处理-清洗字段

按用户个体消费数据分析

用户消费金额和消费次数的描述统计

用户消费金额和消费次数的散点图

用户消费金额的分布图(二八法则)

用户消费次数的分布图

用户累计消费金额的占比

按月数据分析

每月消费总金额

每月的消费次数(订单数)

每月的产品购买量

每月的消费人数(去重)​

用户消费行为分析

用户第一次消费(首购) 

用户最后一次消费

新老客的消费比

用户分层 

用户质量

用户生命周期

用户购买周期

用户复购率和回购率


本案例分析了来自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网站的用户消费特征。

 

注:本文以学习为主,具体思路参考秦路七周七