kaggle竞赛-Instacart Market Basket Analysis(推荐)-初探

竞赛网址
参考代码

1.1赛题背景:

根据顾客的历史购买记录,预测Instacart的消费者将再次购买哪些产品?

1.2数据集详情:

aisle.csv 产品摆放位置说明
 - 包含了aisle_id和aisle两列数据
departments.csv 产品所属类别
 - 包含了department_id和department两列数据
products.csv  产品详情说明
 - 包含product_id、product_name、aisle_id、department_id四列数据
orders.csv  订单详情说明
 - 包含了order_id、user_id、eval_set、order_number、order_dow、order_hour_of_day、days_since_prior_order七列数据
orders_products__prior.csv 历史订单购买情况记录
 - 包含了order_id、product_id、add_to_cart_order、reordered四列数据
orders_products__train.csv 训练集订单购买情况记录
 - 包含了order_id、product_id、add_to_cart_order、reordered四列数据
sample_submission.csv 提交文件参考格式说明

1.3评分指标:

mean F1 score

1.4提交格式:

包含order_id和products,如下图所示
提交文件格式说明

2.数据探索分析(EDA)

2.1数据导入
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

path='/home/WLY/learn/Kaggle_example_learn/Instacart/Data/'
aisles=pd.read_csv(path+'aisles.csv')
departments = pd.read_csv(path + 'departments.csv')
products = pd.read_csv(path + 'products.csv')
orders = pd.read_csv(path + 'orders.csv')
order_products__train = pd.read_csv(path + 'order_products__train.csv')
order_products__prior = pd.read_csv(path + 'order_products__prior.csv')
sample_submission = pd.read_csv(path + 'sample_submission.csv')
2.2数据探索性分析

1.aisles数据集分析

  • aisles数据集大小为134*2,共有134个不同的取值,代表产品摆放位置
1.查看数据集的大小,前五行数据,以及各列数据的不同取值情况
aisles.shape
aisles.head()
aisles.nunique()

2.departments数据集分析

  • departments数据集大小为21*2,共有21个不同的取值,代表产品所属类别
departments.shape
departments.head()
departments.nunique()

3.products数据集分析

  • products数据集中大小为49688*4,共有49688个取值,代表产品名称
products.shape
products.head()
products.nunique()

4.orders数据集分析

  • orders数据集大小为3421083*7
  • 上一单与本单的时间间隔(days_since_prior_order)含有缺失值,原因是order_number=1也就是第一单时,无上一单可言
  • order_number=1数目和用户id数目相同。说明order_number代表用户购买顺序
  • eval_set有三个类别取值(prior,train,test)即历史数据,训练数据,测试数据
  • 查看用户购买总次数,即user_id出现的次数,得知最少购买次数为4,最大购买次数为100
  • order_dow一周七天,order_hour_of_day一天24小时
  • 训练集和测试集中的用户均在历史数据集中出现过,但训练集和测试集的用户无交集,且为用户最新购买(购买顺序最大)
orders.shape
orders.head()
orders.nunique()

根据数据分布可以看出最后一列数据有缺失值。下一步对缺失值进行分析
将最后一列数据提取出来,判断是否为nan值,并定位在数据集中有缺失值的行,分析原因
结论:当有缺失值时,订购顺序为1,不存在上一单的情况,所以为nan
orders.loc[orders.days_since_prior_order.isnull()].head() 

eval_set有3个类别取值,查看取值情况
结论:分别为历史数据,训练数据,测试数据
orders.eval_set.value_counts()

统计order_number=1的数目.
结论:order_number=1的数目和用户id数目相同,说明order_number代表用户购买顺序
print('There are %d samples with order_number=1'%np.sum(orders['order_number']==1))

查看剩余两列数据的基础信息
结论:order_dow,order_hour_of_day属于正常值,一周7,一天24小时
orders[['order_dow','order_hour_of_day']].describe()

查看用户购买总次数情况,即用户的记录
结论:一个用户最多记录为100,最少为4
orders['user_id'].value_counts()
orders['user_id'].value_counts()[:5]
orders['user_id'].value_counts()[-5:]

绘制用户购买总次数的分布图,横轴为用户购买总次数,纵轴为购买人数
tmp=pd.DataFrame(orders['user_id'].value_counts().values,columns=['user_correspoding_samples'])
tmp=tmp['user_correspoding_samples'].value_counts()
sns.barplot(x=tmp.index,y=tmp.values)

查看历史数据集,训练数据和测试数据之间用户的交叉情况,因为用户在推荐问题中都是一个很重要的特征变量
结论:train中所有用户均在prior中出现,test中所有用户均在prior中出现,但是train和test无相交用户情况
因此可知用户id在模型预测时,可能并不能带来增益,可以考虑删除
len(set(orders.loc[orders['eval_set']=='prior','user_id'])-set(orders.loc[orders['eval_set']=='train','user_id'
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值