电商平台用户消费行为分析

本文基于CDNOW一年半的用户消费记录,通过数据分析揭示用户消费趋势、个体行为和周期特征。发现用户消费在前三个月达到峰值,随后稳定下降,用户中少数贡献大部分消费金额,新用户在三个月后流失严重,月复购率和回购率维持在20%-30%。RFM模型显示,20%的重要保持客户贡献60%的消费金额,需要关注用户活跃状态和生命周期管理。
摘要由CSDN通过智能技术生成

CD案例分析

本文对CD案例进行了一个分析总结,主要是根据用户消费记录,分析用户消费行为,统计电商领域的一些关键性指标。

项目背景

CDNOW 是一个主打线上销售的CD品牌,通过 1.5年 的用户消费记录,针对这1.5年时间里的销售数据对用户消费行为进行分析,并针对分析结果对后续的营销策略及用户管理提出合理的建议。

分析目标

根据CDNOW一年半时间里的线上消费数据,分析用户消费行为,建立RFM模型并对用户进行分层,统计用户生命周期,复购率及回购率等关键性指标。

分析过程

  • 数据准备
  • 消费趋势分析
  • 用户个体消费分析
  • 用户消费行为分析
  • 用户生命周期分析

1.数据准备

  • 导入常用模块
import matplotlib.pyplot as plt
%matplotlib inline                          
plt.rcParams['font.sans-serif']=['SimHei']   # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False    # 用来正常显示负号
import numpy as np
import pandas as pd
  • 导入数据集

数据集没有列名,为新建表格创建列名

  • user_id:用户ID
  • order_dt:购买日期
  • order_product:购买产品的数量
  • order_amount:购买金额

数据列间使用空格间隔,分割使用正则进行匹配,\s 表示匹配任何空白字符

columns=['user_id','order_dt','order_product','order_amount']
data = pd.read_csv('./data/CDNOW_master.txt',sep='\s+',names=columns)
data.head()
user_id order_dt order_product order_amount
0 1 19970101 1 11.77
1 2 19970112 1 12.00
2 2 19970112 5 77.00
3 3 19970102 2 20.76
4 3 19970330 2 20.76
  • 数据清洗

观察数据,查看数据类型,是否存在缺失值

data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 69659 entries, 0 to 69658
Data columns (total 4 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   user_id        69659 non-null  int64  
 1   order_dt       69659 non-null  int64  
 2   order_product  69659 non-null  int64  
 3   order_amount   69659 non-null  float64
dtypes: float64(1), int64(3)
memory usage: 2.1 MB

数据集不存在缺失值,不需要进行处理

order_dt 为int类型,将其转换为日期类型

data['order_dt'] = pd.to_datetime(data['order_dt'],format='%Y%m%d')
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 69659 entries, 0 to 69658
Data columns (total 4 columns):
 #   Column         Non-Null Count  Dtype         
---  ------         --------------  -----         
 0   user_id        69659 non-null  int64         
 1   order_dt       69659 non-null  datetime64[ns]
 2   order_product  69659 non-null  int64         
 3   order_amount   69659 non-null  float64       
dtypes: datetime64[ns](1), float64(1), int64(2)
memory usage: 2.1 MB

后面会使用月份衡量数据指标,新增一列月份month字段,order_dt转换后的数据类型为datetime64,从其中截取月份数据,即datetime64[M]

data['month'] = data['order_dt'].values.astype('datetime64[M]')
data.head()
user_id order_dt order_product order_amount month
0 1 1997-01-01 1 11.77 1997-01-01
1 2 1997-01-12 1 12.00 1997-01-01
2 2 1997-01-12 5 77.00 1997-01-01
3 3 1997-01-02 2 20.76 1997-01-01
4 3 1997-03-30 2 20.76 1997-03-01
  • 查看数据的统计描述

订单平均消费商品数为2.4,平均消费金额为35.9,存在一定的偏差,但是影响较小。

中位数分别为2.0和26.0,均小于平均值,说明用户消费整体水平偏低于平均值。

最小值和最大值相差巨大,说明很有必要对用户进行分类管理。

data.describe()
user_id order_product order_amount
count 69659.000000 69659.000000 69659.000000
mean 11470.854592 2.410040 35.893648
std 6819.904848 2.333924 36.281942
min 1.000000 1.000000 0.000000
25% 5506.000000 1.000000 14.490000
50% 11410.000000 2.000000 25.980000
75% 17273.000000 3.000000 43.700000
max 23570.000000 99.000000 1286.010000

2.月消费趋势

  • 每月消费的总金额
data.groupby('month')['order_amount'].sum().plot()

由上图可知,前三个月每月花费总金额呈上升趋势并达到峰值,1997年4月急剧下降,后面趋于稳定有轻微下降趋势。

  • 每月产品购买量
data.groupby('month')['order_product'].sum().plot()

在这里插入图片描述

由上图可知,前三个月产品购买量最大,峰值大于25000,后续月份产品购买量小幅波动,但都在10000以下。

  • 每月消费次数
data.groupby('month')['order_dt'].count().plot(

由上图可知,前三个月消费次数最多,峰值大于10000,1997年4月急剧下降至稳定波动,后续月份购买均次数小于4000.

  • 每月购买人数
data.groupby('month')['user_id'].apply(lambda x : len(x.drop_duplicates())).plot()
# data.groupby('month')['user_id'].nunique() 也可进行去重统计

由上图可知,前三个月每月消费人数在8000以上,后续月份平均每月消费人数小于2000,且每月消费人数小于每月消费次数。

  • 用户每月平均消费金额
amount_month = data.groupby('month')['order_amount'].sum()
num_month = data.groupby('month')['user_id'].apply(lambda x : len(x.drop_duplicates()))
avg_amount = amount_month/num_month
avg_amount.plot()

# 用户月均消费金额统计性描述
avg_amount.describe()
count    18.000000
mean     48.411269
std       4.994027
min      38.116259
25%      46.538143
50%      49.264167
75%      50.592662
max      56.927337
dtype: float64

由上图可知,用户每月平均消费金额为48.4元以,1997年11月最高,消费金额约为57元。

  • 用户每月平均消费次数
times_month = data.groupby('month')['order_dt'].count()
avg_times = times_month/num_month
avg_times.plot()

由上图可知,用户每月平均消费次数均不足2次但均在1次以上,1997年1月最低,1997年10月平均消费次数最高。

  • 数据透视表快速汇总统计

通过透视表快速统计出每个月的消费总金额、产品购买数量及总购买次数,能详细的了解每个月的整体销售情况。

data.pivot_table(
                index='month',
                aggfunc={
   'order_amount':'sum',
                         'order_product':'sum',
                         'user_id':'count'}
)
order_amount order_product user_id
month
1997-01-01 299060.17 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值