JData算法大赛-用户购买预测

版权声明:(欢迎转载,转载请注明出处。技术交流:[email protected]) https://blog.csdn.net/Yasin0/article/details/84404493

机器学习通用的完整流程:数据清洗、数据分析、特征抽取、搭建模型、模型评估

数据清洗

高潜用户的购买意向预测,从机器学习的角度来讲,可以认为这是一个二分类的任务.那么我们就是尝试去构建自己的正负样本.
原始数据里面存在很多噪声,第一步先要对数据清洗,比如说:

  • 去掉只有购买记录的用户(没有可用的历史浏览等记录来预测用户将来的购买意向)
  • 去掉浏览量很大而购买量很少的用户(惰性用户或爬虫用户)
  • 去掉最后5(7)天没有记录(交互)的商品和用户
  • ......

为了能够进行上述清洗,在此首先构造了简单的用户(user)行为特征和商品(item)行为特征,对应于两张表user_table和item_table

  • user_table特征包括:
user_id(用户id)
age(年龄)
sex(性别)
user_lv_cd(用户级别)
browse_num(浏览数)
addcart_num(加购数)
delcart_num(删购数)
click_num(点击数)
favor_num(收藏数)
buy_num(购买数)
buy_browse_ratio(购买浏览转化率)
buy_addcart_ratio(购买加购转化率)
buy_click_ratio(购买点击转化率)
buy_favor_ratio(购买收藏转化率)
  • item_table特征包括:
sku_id(商品id)
attr1,attr2,attr3(特征1,2,3)
cate(品类)
brand(品牌)
browse_num(浏览数)
addcart_num(加购数)
delcart_num(删购数)
click_num(点击数)
favor_num(收藏数)
buy_num(购买数)
buy_browse_ratio(购买浏览转化率)
buy_addcart_ratio(购买加购转化率)
buy_click_ratio(购买点击转化率)
buy_favor_ratio(购买收藏转化率)
comment_num(评论数),
has_bad_comment(是否有差评),
bad_comment_rate(差评率)

特征工程

特征

用户基本特征:

  • 获取基本的用户特征,基于用户本身属性多为类别特征的特点,对age,sex,usr_lv_cd进行独热编码操作,对于用户注册时间暂时不处理

商品基本特征:

  • 根据商品文件获取基本的特征
  • 针对属性a1,a2,a3进行独热编码
  • 商品类别和品牌直接作为特征

评论特征:

  • 分时间段,
  • 对评论数进行独热编码

行为特征:

  • 分时间段
  • 对行为类别进行独热编码
  • 分别按照用户-类别行为分组和用户-类别-商品行为分组统计,然后计算
  • 用户对同类别下其他商品的行为计数
  • 不同时间累积的行为计数(3,5,7,10,15,21,30

累积用户特征:

  • 分时间段
  • 用户不同行为的
  • 购买转化率
  • 均值

用户近期行为特征:

  • 在上面针对用户进行累积特征提取的基础上,分别提取用户近一个月、近三天的特征,然后提取一个月内用户除去最近三天的行为占据一个月的行为的比重

用户对同类别下各种商品的行为:

  • 用户对各个类别的各项行为操作统计
  • 用户对各个类别操作行为统计占对所有类别操作行为统计的比重

累积商品特征:

  • 分时间段
  • 针对商品的不同行为的
  • 购买转化率
  • 均值

类别特征

  • 分时间段下各个商品类别的
  • 购买转化率
  • 均值

 

 

 

基础数据介绍

1. 用户数据 - JData_User.csv
 user_id 用户ID 脱敏
 age 年龄段 -1表示未知
 sex 性别 0表示男,1表示女,2表示保密
 user_lv_cd 用户等级有顺序的级别枚举,越高级别数字越大
 user_reg_tm 用户注册日期粒度到天

 2. 商品数据 - JData_Product.csv
 sku_id 商品编号 脱敏
 a1 属性1 枚举,-1表示未知
 a2 属性2 枚举,-1表示未知
 a3 属性3 枚举,-1表示未知
 cate 品类ID 脱敏
 brand 品牌ID 脱敏

3. 评价数据 - JData_Comment.csv
 dt 截止到时间 粒度到天
 sku_id 商品编号 脱敏
 comment_num 累计评论数分段0表示无评论,1表示有1条评论,
 2表示有2-10条评论,
 3表示有11-50条评论,
 4表示大于50条评论
 has_bad_comment 是否有差评0表示无,1表示有
 bad_comment_rate 差评率差评数占总评论数的比重

4. 行为数据 - JData_Action_201602.csv,JData_Action_201604.csv,JData_Action_201603.csv
 user_id 用户编号 脱敏
 sku_id 商品编号 脱敏
 time 行为时间  
 model_id 点击模块编号,如果是点击脱敏
 type 1.浏览(指浏览商品详情页); 2.加入购物车;3.购物车删除;4.下单;5.关注;6.点击
 cate 品类ID 脱敏
 brand 品牌ID 脱敏


任务描述
参赛者需要使用京东多个品类下商品的历史销售数据,构建算法模型,预测用户在未来5天内,对某个目标品类下商品的购买意向。对于训练集中出现的每一个用户,参赛者的模型需要预测该用户在未来5天内是否购买目标品类下的商品以及所购买商品的SKU_ID。评测算法将针对参赛者提交的预测结果,计算加权得分。

3.1 数据清洗 data_cleaning.ipynb

item_table.csv由create_item_table.py生成,user_table.csv由create_user_table.py生成;JData_User_New.csv由explore_data.py生成。
文件执行顺序:

1、 生成缺失的三个文件的目的是把文件中的数据按照商品和用户两个维度进行聚合

执行时间较长,但完成后,可以在data/目录下看到新生成的三个文件,注意检验数据条数是否一致

2、缺失文件生成完成后,就可以进行数据清洗和分析了

(2-1)数据分析

进入到我们下载上面程序的目录,在这个目录下启动jupyter notebook:

直接点击data_analysis.ipynb查看即可,这里是在notebook中通过pandas,numpy和matplotlib查看数据的统计特征,进行初步分析

(2-2)数据清洗

查看data_cleaning.ipynb,这里面有原作者的详细描述,介绍了一种数据清洗方法,大家可以在这里改为自己的清洗策略

3、高潜用户行为分析,查看explore_potential_user.ipynb即可,这里是原作者对高潜用户的一些定义,大家可以根据自己的理解修改或调整阈值

4、挖掘过程和结果:
python potential_user.py
简要说明:

find_buy_user函数,查找2,3,4月有购买行为的用户记录(type=4,已去重),保留"user_id", "sku_id"字段,含义分别为用户id,商品id,结果数据存储到了buy_user_list.csv

find_potential_user,查找潜在用户,使用策略为:先读取buy_user_list.csv,取出有购买行为的用户;然后通过ui_record_in_batch_data方法,拿到用户的行为序列(不只是购买行为);more_than_a_day方法:最后购买日期:行为序列中,购买类型行为的最后日期(last_buy_day);最早行为日期(earliest_behave_day):对某商品有浏览等行为的最早日期,这里对用户的意向打了一个标签,当last_buy_day>earliest_behave_day时,则标记potential_flag 为1;否则标记为0

意义:这里标签的定义方式为,如果用户对某个商品,有从浏览,到最终购买的行为链条,则可以说明用户对该商品有购买意向;否则说明没有。

当然,上述标签只是原作者的一种定义方式,可能并不符合我们的设想,我们可以针对这里进行改进。例如,多次浏览同一商品,有关注,或加入购物车行为都可以认为是有意向,只是强弱不同,这样,可以构造特征集合,并使用逻辑回归进行分类。


一 数据特征统计分析

几个主要的点:

(1)各类行为与转化(购买)之间的关联关系,包括浏览、加入购物车、关注

(2)已购商品的复购率

(3)性别与商品的关联程度

二 特征提取

包括用户特征,商品特征,和用户历史行为特征

三 模型构建

1、商品候选集确认 - 用户&相关商品,不应该是整个商品集;可能使用到关联分析,协同过滤

2、模型选择 - 分类

3、代码编写与参数调整

4、效果评估与迭代优化

以下分别按照上面描述进行整理。

二 操作

1、用户id数据预处理 

用户行为数据,提供的JData_Action_201602.csv 中的user_id是浮点型,都带了个.0,直接跟JData_User.csv关联稍有麻烦,当然主要是看着不爽,所以先把几个action文件的数据规范化

(1)格式化user_id 【使用awk 命令,gsub函数】

awk '$0 ~ /.0,/ {gsub(".0,", ",", $0); print}' JData_Action_201602.csv > Format_JData_Action_201602.csv
(2)用户行为合并

原始数据中,用户的行为是每行一条数据,无法形成行为序列,所以这里加一步中间数据的处理,便于分析用户的商品浏览到购买的全流程行为。给的文件字段说明,是'user_id','sku_id','time','model_id','type','cate','brand' 七个字段,但解析的过程中发现,有不少记录按照逗号分割后,是6个,例如:

266079.0,138778,2016-01-31 23:59:02,,1,8,403

266079.0,138778,2016-01-31 23:59:03,0,6,8,403

200719.0,61226,2016-01-31 23:59:07,,1,8,30


追查后,发现是第一步处理时导致部分空值丢失。。所以重写编写了脚本,这里一并完成user_id的处理在脚本中实现。

(2.1)用户维度聚合

(2.2)用户维度,同一个商品的行为序列再次聚合,一个商品一个元组

(3)正样本提取

先明确一下正负样本的定义:

正样本:有过非购买行为,且有购买行为的用户记录(针对同一商品)

负样本:有过浏览等行为,但最终没有购买行为的用户记录

初步的目标,就是从有非购买行为,且有购买行为的用户中,分析出其中隐藏的规律,并利用这个规律,对其他有行为的用户进行购买行为的预测

上一篇中介绍了以为热心参赛者的代码和流程。这篇将记录自己的策略更新过程。

一 数据特征统计分析

几个主要的点:

(1)各类行为与转化(购买)之间的关联关系,包括浏览、加入购物车、关注

(2)已购商品的复购率

(3)性别与商品的关联程度

二 特征提取

包括用户特征,商品特征,和用户历史行为特征

三 模型构建

1、商品候选集确认 - 用户&相关商品,不应该是整个商品集;可能使用到关联分析,协同过滤

2、模型选择 - 分类

3、代码编写与参数调整

4、效果评估与迭代优化

以下分别按照上面描述进行整理。

二 操作

1、用户id数据预处理 

用户行为数据,提供的JData_Action_201602.csv 中的user_id是浮点型,都带了个.0,直接跟JData_User.csv关联稍有麻烦,当然主要是看着不爽,所以先把几个action文件的数据规范化

(1)格式化user_id 【使用awk 命令,gsub函数】

awk '$0 ~ /.0,/ {gsub(".0,", ",", $0); print}' JData_Action_201602.csv > Format_JData_Action_201602.csv

(2)用户行为合并

原始数据中,用户的行为是每行一条数据,无法形成行为序列,所以这里加一步中间数据的处理,便于分析用户的商品浏览到购买的全流程行为。给的文件字段说明,是'user_id','sku_id','time','model_id','type','cate','brand' 七个字段,但解析的过程中发现,有不少记录按照逗号分割后,是6个,例如:

266079.0,138778,2016-01-31 23:59:02,,1,8,403

266079.0,138778,2016-01-31 23:59:03,0,6,8,403

200719.0,61226,2016-01-31 23:59:07,,1,8,30

追查后,发现是第一步处理时导致部分空值丢失。。所以重写编写了脚本,这里一并完成user_id的处理在脚本中实现。

(2.1)用户维度聚合

(2.2)用户维度,同一个商品的行为序列再次聚合,一个商品一个元组

(3)正样本提取

先明确一下正负样本的定义:

正样本:有过非购买行为,且有购买行为的用户记录(针对同一商品)

负样本:有过浏览等行为,但最终没有购买行为的用户记录

初步的目标,就是从有非购买行为,且有购买行为的用户中,分析出其中隐藏的规律,并利用这个规律,对其他有行为的用户进行购买行为的预测

猜你喜欢

转载自blog.csdn.net/Yasin0/article/details/84404493
今日推荐