目录
数据集说明
来源:阿里云 天池https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
阿里巴巴提供的移动端淘宝用户的行为数据集,包含2014-11-18至2014-12-18共计一千多万条数据。
| 字段 | 字段说明 | 提取说明 |
|---|---|---|
| user_id | 用户标识 | 抽样&字段脱敏 |
| item_id | 商品标识 | 抽样&字段脱敏 |
| behavior_type | 用户对商品的行为类型 | 包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。 |
| user_geohash | 用户位置的空间标识,可以为空 | 由经纬度通过保密的算法生成 |
| item_category | 商品分类标识 | 字段脱敏 |
| time | 行为时间 | 精确到小时级别 |
分析思路

结论和建议
流量
1.PV、UV:
- 非活动期间的PV在40或50万左右,UV在12000到13000之间。双十二当天PV达到80万,UV达到15000以上。活动期PV增长45%,UV增长25%左右,但活动结束后下降较快。
- PV和UV在一周内有周期性变化,周二到周四的UV、PV最大,且保持稳定。周五最低。
2.新增PV和UV:
- 总体呈下降趋势,活动前期新增UV保持50-60/天,活动的拉新效果比较稳定,但活动后新增访客快速下降,低至7/天。
3.留存率:
- 次日留存率基本稳定在0.4到0.7,11.23到11.27、12.6的次日留存率过低。
- 三日留存率基本稳定在0.6到0.8,12.7的数据过低。
- 七日留存率较高,基本在0.7以上,12.1的数据过低。
- 12月的留存率增长明显,可见双十二活动提高了留存率,但活动过后的留存率没有增长。
建议:
对周五PV、UV低的情况,需要更长时间的数据分析其原因,建议结合用户行为和商品情况做进一步分析,是否可以提高周五的PV、UV。
12.1到12.6的新增UV下降,但是新增PV维持稳定;12.18以后新增PV下降显著,建议对这两部分用户做进一步分析,为后续拉新和提升PV作参考。
对于留存率过低的时间,建议分析原因,是否存在消息提醒不足或用户体验不佳等问题。
建议关注活动后的留存率变化情况,通过会员、签到奖励等方式提高留存率。
消费习惯
1.每日用户行为:
- 浏览、收藏、加购物车同样存在周期变化,但不明显。非活动期的用户行为数据稳定。
- 活动期里,购买增加只在12,12当天。从12.10开始,收藏、加购物车显著增加,也就是说用户活跃期只有3天。
2.日均各时段用户行为:
- 12.12当天,用户使用时间主要在20到零点,零点的购买、加购物车达到峰值。
- 非活动期间,浏览、收藏、加购物车主要在18到23点,18到21点处于上升期。购买行为集中在10到23点,18点后有略微上升,21点是购买峰值。购买量受日均时段影响较小。
3.15天内复购率:
- 非活动期的复购率一直在0.17到0.2之间,12.12当天达到0.45,说明活动前15天的购买转化效果比较明显。
- 12.5到12.11的复购率明显较低,可能和后面的双十二活动有关,因为活动前的新增用户增加了,同时大多数会在活动当天购买,所以这几天复购率有所下降。
活动过后的复购率仍在0.2左右,没有提高。4.日均各时段购买率:
- 用户总体购买率为88.27%。
- 相比非活动期,12.12当天的购买率增加了10%左右。3到16点一直在0.2左右,17点下降了5%,随后开始增加,在零点达到峰值0.44,23-1点是购买高峰期。
- 非活动期的购买高峰期在10到22点,购买率峰值在21点,其中18点下降显著,和用户作息时间有关。因此商品投放和促销活动应重点关注10-22点这段时间,尤其是18-21点。
建议:
- 1.活动前的用户活跃期只有3天,建议延长活动预热时间,比如从12.5就开始,有利于提高新增用户和活跃率,对活动更有利。
- 2.商品投放和促销活动应重点关注10-22点这段时间,尤其是18-21点,促销活动建议在19-23点间进行。
- 3.购买量受日均时段影响较小,可分析各商品在不同时段的购买转化率,针对不同时段投放转化率相对高的商品。
- 4.关注活动过后的复购率变化,趁活动余热未过、新增用户量还没流失,建议做新的活动和优惠方案,进一步提高用户粘性和复购率。
转化率
1.用户行为转化漏斗
- 非活动期,从浏览到加购物车、收藏或购买的转化率分别为:4.46%、3.27%、1.4%,活动期的分别是5.59%、3.39%、2.38%。
- 相比非活动期,活动期的各阶段的总体转化率提高了1%左右,效果不是很明显。
2.登陆天数与转化率
- 加购物车和收藏的转化率随登陆天数增加,提高用户登陆天数,可促进加购物车和收藏的转化率,登陆6天的用户此指标异常,建议进一步分析寻找原因。
- 浏览-购买转化率、加购或收藏-购买转化率随用户登陆天数减小,尤其在登陆19天后,购买转化率下降明显,可能和双十二活动后购买率显著下降有关。
- 用户登陆5天后的购买转化率明显上升,登陆5-19天的用户购买转化率较高。
- 由于受双十二活动影响,此处的分析不能准确表明常规时期的登陆天数与转化率关系,需要更长时间的数据作进一步分析。
建议:
- 1.活动期的各阶段的总体转化率提高了1%左右,效果不明显。建议进一步分析用户不同的行为路径以及阶段转化率,比如浏览-购买、收藏-购买、加购物车-购买的转化率,再决定从哪一阶段提高转化率。
- 2.登陆5-19天的用户购买转化率较高,建议让用户登录时间达到5天及以上,可以通过发放优惠券、发送提醒、签到奖励等方式进行。
- 3.登陆6天的用户购物车和收藏的转化率过低,建议从商品投放和推送分析原因。
商品偏好:
1.浏览,收藏,加购物车,购买的前十名的商品类别:
- 各阶段的品类重合度在50%左右,有些浏览、收藏、加购很高的品类,购买量不在前十,比如5027、5894。而有的销量前十的品类,浏览、收藏、加购不在前十,
比如6344、8877、7957。2.购物车分析:前20商品及购买转化率
- 加购物车量与购买率明显不成正比。有的商品购买率低,比如209323160、6703599、382513156。有的商品购买率高但收藏量低,如303205878、289649282、14087919。
3.购买分析:销量前10的商品类别、销量前20的商品
- 品类分析:活动期和非活动期销量都在前十的品类有5个。活动期1683、6513两个品类的销量显著,其他前十品类的销量差距不大。非活动期1863、6344、5232三个品类的销量显著,其他前十品类的销量差距不大。6513这个品类在活动期销量显著,而平时销量不算高。6344这个品类平时销量很好,而活动期销量不太高。
- 商品分析:活动期和非活动期销量都在前20的商品只有一个,这说明,活动期和非活动期用户购买的商品差距很大。
4.不同时段销售前十的商品类别:
- 7-18时和18-24时销量都在前十的品类有8个,可见用户购买何种品类受时段影响不大。如进一步分析,建议查看每个商品日均时段的销量,在不同时段投放销量高的相应品类。
建议:
- 1.对于浏览、收藏、加购很高,销量低的品类,或浏览、收藏、加购低,销量高的品类,建议结合商品特性进一步分析,是否存在推荐机制准确度不高、商品投放不精准的情况,同时挖掘有潜力的品类。
- 2.对于购买率低、加购物车多的商品,建议从商品质量特点、用户评价、各销售环节分析原因。对于购买率率高但收藏量低的商品,考虑商品特性,分析推荐机制、投放时段和频率是否有问题,是否增加要曝光率或做主推商品。
- 6513这个品类在活动期销量显著,而平时销量不算高,建议结合活动期的销售策率和商品特点分析,是否可作为后续活动的主推品类。6344这个品类平时销量很好,而活动期销量不太高,建议分析销售环节是否有问题。
- 4.针对活动期和非活动期用户购买的商品差距大的情况,除了商品特性和优惠活动的原因外,建议分析平时的推荐机制是否准确。有些商品活动期销量高,而平时的销量不高,比如115052027,对于这样的商品,建议结合商品特点,考虑定价是否合理、是否可以做主推商品或新活动。
数据预处理
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
读取数据
df = pd.read_csv('C:/Users/阿怪不会弹吉他/Desktop/用户行为分析/tianchi_fresh_comp_train_user.csv')
df.head()
| user_id | item_id | behavior_type | user_geohash | item_category | time | |
|---|---|---|---|---|---|---|
| 0 | 10001082 | 285259775 | 1 | 97lk14c | 4076 | 2014-12-08 18 |
| 1 | 10001082 | 4368907 | 1 | NaN | 5503 | 2014-12-12 12 |
| 2 | 10001082 | 53616768 | 4 | NaN | 9762 | 2014-12-02 15 |
| 3 | 10001082 | 9947871 | 1 | NaN | 2825 | 2014-11-28 20 |
| 4 | 10001082 | 150720867 | 1 | 95qoghe | 3200 | 2014-12-15 08 |
查看数据类型及结构
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15463110 entries, 0 to 15463109
Data columns (total 6 columns):
# Column Dtype
--- ------ -----
0 user_id int64
1 item_id int64
2 behavior_type int64
3 user_geohash object
4 item_category int64
5 time object
dtypes: int64(4), object(2)
memory usage: 707.8+ MB
df.describe()
| user_id | item_id | behavior_type | item_category | |
|---|---|---|---|---|
| count | 1.546311e+07 | 1.546311e+07 | 1.546311e+07 | 1.546311e+07 |
| mean | 7.015207e+07 | 2.023169e+08 | 1.153780e+00 | 6.827181e+03 |
| std | 4.572019e+07 | 1.167524e+08 | 5.440445e-01 | 3.810410e+03 |
| min | 4.920000e+02 | 3.700000e+01 | 1.000000e+00 | 2.000000e+00 |
| 25% | 3.021406e+07 | 1.014015e+08 | 1.000000e+00 | 3.687000e+03 |
| 50% | 5.638708e+07 | 2.022669e+08 | 1.000000e+00 | 6.054000e+03 |
| 75% | 1.166482e+08 | 3.035247e+08 | 1.000000e+00 | 1.025800e+04 |
| max | 1.424430e+08 | 4.045625e+08 | 4.000000e+00 | 1.408000e+04 |
数据清洗:去重、丢空
#查看缺失值数量
df.isnull().sum()
user_id 0
item_id 0
behavior_type 0
user_geohash 8207386
item_category 0
time 0
dtype: int64
因为不做地理数据的分析user_geohash 这列的缺失值不做处理
#查看数据重复数量
sum(df.duplicated())
0
数据分析及可视化
1.每日pv(浏览量)、uv(独立用户数)
转换日期格式,提取日期和时间
df['time'] = pd.to_datetime(df['time'])
df['day'] = df.time.dt.date
df['month'] = df.time.dt.month
df['hour'] = df.time.dt.hour
df['day_of_week'] = df.time.dt.weekday
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15463110 entries, 0 to 15463109
Data columns (total 10 columns):
# Column Dtype
--- ------ -----
0 user_id int64
1 item_id int64
2 behavior_type int64
3 user_geohash object
4 item_category int64
5 time datetime64[ns]
6 day object
7 month int64
8 hour int64
9 day_of_week int64
dtypes: datetime64[ns](1), int64(7), object(2)
memory usage: 1.2+ GB
df.head()
| user_id | item_id | behavior_type | user_geohash | item_category | time | day | month | hour | day_of_week | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 10001082 | 285259775 | 1 | 97lk14c | 4076 | 2014-12-08 18:00:00 | 2014-12-08 | 12 | 18 | 0 |
| 1 | 10001082 | 4368907 | 1 | NaN | 5503 | 2014-12-12 12:00:00 | 2014-12-12 | 12 | 12 | 4 |
| 2 | 10001082 | 53616768 | 4 | NaN | 9762 | 2014-12-02 15:00:00 | 2014-12-02 | 12 | 15 | 1 |
| 3 | 10001082 | 9947871 | 1 | NaN | 2825 | 2014-11-28 20:00:00 | 2014-11-28 | 11 | 20 | 4 |
| 4 | 10001082 | 150720867 | 1 | 95qoghe | 3200 | 2014-12-15 08:00:00 | 2014-12-15 | 12 | 8 | 0 |
#查看日期范围
df.time.min(), df.time.max()
(Timestamp('2014-11-18 00:00:00'), Timestamp('2014-12-18 23:00:00'))
1.流量分析
1.1 每日pv,uv
计算每日pv(浏览量),uv(独立用户数)
#计算每日基于pv的用户行为
behavior_type_by_day = df.groupby(['day','behavior_type']).user_id.count()
behavior_type_by_day
day behavior_type
2014-11-18 1 395982
2 13205
3 18703
4 6115
2014-11-19 1 405103
...
2014-12-17 4 6530
2014-12-18 1 459362
2 13805
3 18095
4 6384
Name: user_id, Length: 124, dtype: int64
#每日pv(浏览量)
pv_by_day = behavior_type_by_day.xs(1, level = 1)
#uv(独立用户数)
uv_by_day = df.groupby('day').user_id.nunique()
PV和UV日变化趋势图
#每日用户浏览量变化趋势图
plt.figure(figsize = (18, 10))
plt.subplot(2,1,1)
plt.plot(pv_by_day, linestyle='-.', marker='o')
plt.title('PV by Day')
plt.xlabel('Date')
plt.ylabel('PV')
#每日用户浏览量变化趋势图
plt.subplot(2,1,2)
plt.plot(uv_by_day, linestyle='-.', marker='o')
plt.title('UV by Day')
plt.xlabel('Date')
plt.ylabel('UV')

1.2 访问深度:PV/UV
pv_uv = pv_by_day/uv_by_day
plt.figure(figsize = (18, 6))
plt.plot(pv_uv, linestyle='-.', marker='o')
plt.title('PV/UV by Day')
plt.xlabel('Date')
plt.ylabel('PV/UV')

PV、UV从11.10开始上升,在双十二当天达到峰值,11.13开始下降。非活动期间的PV在40或50万左右,UV在12000到13000之间。双十二当天PV达到80万,UV达到15000以上。
同时,可以看出PV和UV呈现周期性的起伏变化,结合用户访问深度,可看出波谷的日期11.21、11.28、12.5都是星期五,因此PV、UV可能是以星期为周期变化。
分析一周中PV和UV的变化趋势
双十二数据量过大,去除该天数据后再分析
import datetime
pv_by_week = df[~df.day.isin([datetime.date(2014,12,12)])].query('behavior_type == 1').groupby('day_of_week').user_id.count()
uv_by_week = df[~df.day.isin([datetime.date(2014,12,12)])].groupby('day_of_week').user_id.nunique()
#一周中用户浏览量变化趋势图
plt.figure(figsize = (18, 10))
plt.subplot(2,1,1)
plt.plot(pv_by_week, linestyle='-.', marker='o')
plt.title('PV by Week')
plt.xlabel('Day of week')
plt.ylabel('PV')
#一周中用户浏览量变化趋势图
plt.subplot(2,1,2)
plt.plot(uv_by_week, linestyle='-.', marker='o')
plt.title('UV by Week')
plt.xlabel('Day of week')
plt.ylabel('UV')

PV和UV在一周内有周期性变化,周二到周四的UV、PV最大,且保持稳定。周五UV、PV迅速降低,是一周中最低的一天。对周五PV、UV低的情况,需要更长时间的数据分析其原因,同时结合用户行为和商品情况做进一步分析,是否需要提高周五的PV、UV。
1.3 每日新增访客及浏览量
from copy import deepcopy
import datetime
user_pv = df[df.behavior_type == 1]
s = set()
days = []
nums = []
add_pv = []
for date in np.sort(user_pv['day'].unique()

最低0.47元/天 解锁文章
1248

被折叠的 条评论
为什么被折叠?



