您的位置:首页 > 其它

天池新人实战赛----阿里移动推荐算法大赛(离线赛与平台赛)

2016-04-13 17:04 435 查看

平台赛最终成绩5/1629,算是没辜负我这10天的付出吧。。。我要去玩有奖金的了0.0

想快速入门,请戳这:机器学习入门----以阿里移动推荐算法大赛为例(较详细)


竞赛题目 (离线赛与平台赛题目一样,只是数据量不一样,离线2000w+条数据,平台11亿+条数据)

在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。在完成这件任务的过程中,我们不仅需要利用用户在这个商品子集上的行为数据,往往还需要利用更丰富的用户行为数据。定义如下的符号:

U——用户集合

I——商品全集

P——商品子集,P ⊆ I

D——用户对商品全集的行为数据集合

商品子集都是偏服务类的商品,涵盖阿里巴巴集团十个主要的商品大类,例如汽车售后服务、摄影服务、餐饮、电影等,其特色是线上购买、线下服务。

那么我们的目标是利用D来构造U中用户对P中商品的推荐模型。

数据说明

本场比赛提供20000用户的完整行为数据以及百万级的商品信息。竞赛数据包含两个部分。

第一部分是用户在商品全集上的移动端行为数据(D),表名为tianchi_fresh_comp_train_user_2w,包含如下字段:
字段
字段说明
提取说明
user_id
用户标识
抽样&字段脱敏
item_id
商品标识
字段脱敏
behavior_type
用户对商品的行为类型
包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。
user_geohash
用户位置的空间标识,可以为空
由经纬度通过保密的算法生成
item_category
商品分类标识
字段脱敏
time
行为时间
精确到小时级别
第二个部分是商品子集(P),表名为tianchi_fresh_comp_train_item_2w,包含如下字段:
字段
字段说明
提取说明
item_id
商品标识
抽样&字段脱敏
item_ geohash
商品位置的空间标识,可以为空
由经纬度通过保密的算法生成
item_category
商品分类标识
字段脱敏
训练数据包含了抽样出来的一定量用户在一个月时间(11.18~12.18)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天(12.19)对商品子集(P)的购买数据。参赛者要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为的预测结果。
有了新想法我先在离线赛上实验,成绩有提升我才去平台赛,不过也遇到一些问题,在hive里运行一点问题没有的SQL语句,到了ODPS里就不能用,有很多限制,毕竟数据量大了好几个数量级,处理起来很费资源,不能那么随意的写了。

刚开始没理解题意,我还纳闷为啥给两张表= =

U——用户集合

I——商品全集

P——商品子集,P ⊆ I

D——用户对商品全集的行为数据集合

那么我们的目标是利用D来构造U中用户对P中商品的推荐模型


让我们预测的是用户会购买商品子集里的哪些商品,不是所有的商品。

提示:根据评分规则可以找到一些讨巧的办法~

刚开始没理解题意,提交的结果F1值极低。

[b]去掉非P中商品之后,F1值咔咔的上去了。然后我就赶紧去平台赛了~

[/b]

平台赛

去除非P中商品之后,F1值咔咔的上去了。





快进前50了!





前50了!





借鉴了李强大神团队的PPT,用了GBDT迭代决策树






直接第6了!








前五了!






--odps sql
--********************************************************************--
--author:断线纸鸢自由
--create time:2016-04-12 15:12:09
--********************************************************************
describe tianchi_data.tianchi_fresh_comp_train_user_online;

Create table tianchi_fresh_comp_train_item as
select * from tianchi_data.tianchi_fresh_comp_train_item_online;
Create table tianchi_fresh_comp_train_user as
select * from tianchi_data.tianchi_fresh_comp_train_user_online;

。。。。。。

我QQ:728972837



离线赛



快到前100了!



前100了!



day3.hql

create external table tianchi_fresh_comp_train_item(item_id string,item_geohash string,item_category string)
row format delimited fields terminated by ','
location '/tianchilxitem';
create external table tianchi_fresh_comp_train_user(user_id string,item_id string,behavior_type bigint,user_geohash string,item_category string,time string)
row format delimited fields terminated by ','
location '/tianchilx';


hive> source /home/guo/day3.hql;
PS:Hive几种导出数据方式

我QQ:728972837



补充:

下文中的准确率其实是精确率,他弄混了!


建议先看这篇:准确率(Accuracy),
精确率(Precision), 召回率(Recall)

补充的原文地址:/article/7987474.html

准确率、召回率、F1

信息检索、分类、识别、翻译等领域两个最基本指标是召回率(Recall Rate)准确率(Precision Rate),召回率也叫查全率,准确率也叫查准率,概念公式:

召回率(Recall) = 系统检索到的相关文件 / 系统所有相关的文件总数

准确率(Precision) = 系统检索到的相关文件 / 系统所有检索到的文件总数

图示表示如下:





注意:准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。一般情况,用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:



如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。

所以,在两者都要求高的情况下,可以用F1来衡量。

[python] view
plaincopy

F1 = 2 * P * R / (P + R)

公式基本上就是这样,但是如何算图1中的A、B、C、D呢?这需要人工标注,人工标注数据需要较多时间且枯燥,如果仅仅是做实验可以用用现成的语料。当然,还有一个办法,找个一个比较成熟的算法作为基准,用该算法的结果作为样本来进行比照,这个方法也有点问题,如果有现成的很好的算法,就不用再研究了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: