bucket sort sample sort 并行_使用Dask并行分析1亿条淘宝官方用户行为数据

6e5d065809e09e20d18008d31f849c71.png

UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究。

本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
用户ID:整数类型,序列化后的用户ID
商品ID:整数类型,序列化后的商品ID
商品类目ID: 整数类型,序列化后的商品所属类目ID
行为类型:字符串,枚举类型,包括('pv', 'buy', 'cart', 'fav')
时间:行为发生的时间戳

注意到,用户行为类型共有四种,它们分别是:
pv:商品详情页pv,等价于点击
buy:商品购买
cart:将商品加入购物车
fav:收藏商品

关于数据集大小的一些说明如下:
用户数量:987,994
商品数量:4,162,024
商品类目数量:9,439
所有行为数量:100,150,807

1.提出问题

  • 哪样商品类目最受欢迎?
  • 订单量随时间的变化
  • 通过数学建模预测用户购买行为情况

2.理解数据

由于需要从csv加载1亿条数据,一般个人电脑用Excel已经打不开,通过Pandas来加载,由于Pandas本身没有分布式的加载方式等,所以用Pandas加载内存根本不够用(本机的内存已经是16G了,不算好大,但已经不算小了。用小于16G内存电脑的朋友要加载更可想而知)。所以后来我选择了用Dask框架。Dask是一款用于分析计算的灵活并行计算库。Dask由两部分组成:针对计算优化的动态任务调度。这与Airflow,Luigi,Celery或Make类似,但针对交互式计算工作负载进行了优化。“大数据”集合, 像并行数组,数据框和列表一样,它们将通用接口(如NumPy,Pandas或Python迭代器)扩展到大于内存或分布式环境。 这些并行集合运行在动态任务调度器之上。最后通过使用Numba编译加速(使用@jit修饰符修饰函数)以及Dask单机分布式动态加载,最终只需要花费1分10秒左右的时间即可完全把1亿多行的数据加载到数据框中。

import 

957ee676c3c261cffdc864bcda27a475.png

之所以通过定义dtypes字典来指定装载数据框不同列的数据类型为了尽可能节省内存分配,不要浪费。由于头三列数据不超过2的32次方,也没有负数,所以直接指定为uint32类型。第四列是行为类型数据,所以指定为类别类型,第五列是时间戳,由于有负数,所以不能用unsigned,而且绝对值有大于2的32次方的一半的,所以只能用int64,不能再省。

userBehaviorDf

4a8df56b404fafbac005060343f3072d.png
userBehaviorDf

b70879a4fc37ee2c19c27c6b693ffabf.png

3.数据清洗

3.1 数据预处理

3.1.1 数据列重命名

由于第二列的商品ID没有作用,所以直接去掉,也节省了内存空间,然后给剩下的列重新命名

userBehaviorDf 

3.1.2 缺失值处理

def 

ad46e76d050215a63bac7bc8c995fbca.png

如上,所有列都没有缺失值,所以不用作缺失值处理

4.数据分析及可视化

4.1 哪样商品类目最受欢迎?

'''

ed1f1b816d79c2f0fb2feb2180a46eda.png

从上图中,头7位商品类别订单数都相关不太大,但从第八位开始就形成明显的缩减。

# 申请回收无用变量

主动申请回收无用变量是为了尽大程度地节省内存空间,所以后面出现一些不再使用且占用内存比较大的变量,都会在用完中主动去申请把它回收。后面的相同情况不再赘述。

4.2 订单量随时间的变化

# 筛选出数据集实际时间区间的数据

12eb2f6bb4f11ba29b73c4230ea1ea3d.png
图为2017-11-25订单数与时间关系图,当天为星期六,订单量最高峰出现在21点,有14327单之多

f310771a22ff81800dad36021fd10afa.png
图为2017-11-25订单数与时间关系图,当天订单量最低谷出现在凌晨4点,只有704单

843b984933492903ff9869e4fb6d4221.png
图为2017-11-29订单数与时间关系图,当天为周中星期三,订单量最高峰出现在21点,有16418单之多

89bcf35dc77515071bd077608b8c974d.png
图为2017-11-29订单数与时间关系图,订单量最低谷出现在凌晨4点,只有727单

从2017年11月25日至2017年12月3日之间挑选一天休息天和一天工作天数据做分析。2017-11-25为星期六,代表周末的情况,而2017-11-29为周三,刚好是上班天数的中间,代表上班期间的情况。从图表中不能发现,其实上班日子和休息日子,在淘宝上的一天订单量的走势轨迹相差无几,当天最高峰都出现在晚上21点,当天最低谷都出现在凌晨4点。

# 申请回收无用变量

4.3. 通过数学建模预测用户购买行为情况

orderTimeDf

16707d209e67f046df56ce72efd0b44f.png
corrDf

6416d0e37cdc34cdfdcd0fbf2cbd0f3a.png
与购买行为的特征相关系数降序排列
value 

c8fdd664b8e7597e6f6eafefa992990d.png
颜色越向红色靠拢,相关性越高,越向蓝色靠拢,相关性越低

从上图看,购买行为这列“行为类型_buy”,只有pv和中间时间段21-23,时间段18-20,时间段15-17和时间12-14相对比较淡的蓝色,说明特征项和“行为类型_buy”相关性不大,主要集中在这些特征上。至于如果分析的是“行为类型_pv”的话,和不同时间段之间的相关性是非常高的,这刚好呼应了之前订单数时间折线图,下单数多的时间,“行为类型_pv”也会跟着增加,下单数少的时间,“行为类型_pv”也会跟着减少。

数学建模先通过截取数据集的前8成除“行为类型_buy”外的列作为特征数据,“行为类型_buy”列为标签数据,

剩下的2成数据中除去“行为类型_buy”外的列作为预测用的特征数据,

然后再把之前截取的前8成的特征数据按8:2的比例分为训练集和测试集,

准备工作做好后,就可以使用逻辑回归算法建模训练数据,训练后立即评估一下模型,

结果正确率高达约99.17%,非常满意!

我们可以通过此模型,输入不同时间段行为记录数以及除“行为类型_buy”外的其余行为类型情况,即可以预测出“行为类型_buy”的累计记录情况!!

buyDf_X 

518bbad81e8c558c3ba69c305272d595.png

5.分析结论

1.对于分析一些中型数据集的时候,特别本地运算的话,使用Dask框架的确是个不错的选择。它是再封装Pandas框架,Numpy框架,所以结构和用法高度相似,很低的学习成本和代码重构成本。如果你之前的代码就是用Pandas和Numpy框架写的话,只是内存不足,想转换成分布式环境,那么直接在原代码基础上小改即可。

b21c58375b5133d7cd0dd23eea0bcb33.png

a2dd061e543dadce3b469beb704cbb91.png

2.虽然使用Dask框架分布式利用内存,但还是得再通过其它方面尽可能地节省内存,这样才能更大程度地处理更多的数据。

a.如果有已不需的变量要主动申请回收

b.要尽量调整最合适的数据列的数据类型,因为数据类型直接决定了该列划分多久的空间来装载数据,所以没有调整到合适大小的类型则浪费内存空间,而且数据列越长越浪费。例如全量数据默认数据类型加载到内存共3.7G,但通过我调整了每列数据类型和删除不需要的列后,只占了1.6G,只有原本的43.24%!!

3.根据第一条问题的分析,发现淘宝的商品订单量是分层级的,每一个层级中的商品订单量相差不太大,但下一个层级就会和它有一个明显的下降,所以同一层级的商品应该都有很高的相似性。所以在打造爆款的时候要分析和参考相似类型的已成爆款商品,因为淘宝的推荐机制都是推荐相似的商品,也就是如果这类商品最近很受欢迎,就是说这类商品最近有“势”(这“势”可以是人为打造出来,也可能是大环境,例如某个明星在用,或者不同时节要用到),受到推荐系统的“青睐”,有红利,所以要利用好这波红利,加入到这大势中去,俗称借势

4.根据第二条问题的分析,无论工作还休息,都不怎么影响大家在淘宝上“血拼”,一天下来的订单数曲线轨迹都大致相同,最高峰出现在晚上21点,最低谷出现在凌晨4点,相差20倍,差距非常大。基本中午达到一个正常水平,下班时间会有一个小低谷,然后18点之后一攀升,直到19点30之后超过中午平均水平,一直到21点迎来当天最高峰,然后到10点半之后低过中午平均水平,慢慢走向低谷,如此一天循环。所以做推广等要利用好中午10点到15点和晚上7点半到10点半这两段黄金时间,这是用户下单最活跃的时间段。

5.最后一个问题是通过数学建模预测用户购买行为情况,我先将精确到秒的时间按精确到小时后按三个小时为一个时间段通过one-hot分出8列特征列,然后通过数据按不同时间段和不同行为类型聚合汇总求和,得出同一用户指定商品类目的所以时间和行为类型的次数记录总和。然后生成相关性列表和图表,和训练,测试以及预测数据集的划分等,最后使用逻辑回归算法训练模型,最后得出的评估结果非常满意,达到99.17%。通过行为时间段以及行为类型预测出购买情况能很好的指引我们的推广方针,锁定了通过黄金推广时间段的选择和引导放入购物车等方式提高下单率!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值