[阿里移动推荐算法]比赛_快速入门_4_19_update_仅供参考,思维不要受局限

【这里只讲快速入门——即破题,正负样本不平衡、特征数量等问题就自己多看论文或者其他资料吧~~如果还有数据挖掘相关基础知识不了解的,建议看看《数据挖掘导论》】

【以下是理解错误案例】:错误的根本原因是不能保证训练集的构建逻辑与赛题目标保持一致,不能保证训练集和测试集的构建逻辑保持一致,不能保证离线评测的逻辑和线上保持一致!

1. 有同学在构建训练集的时候,为了给样本(即ui对)标上正负,不是根据分割点之后第一天的购买情况来对分割点之前的ui进行标记,而是根据分割点之前某个时间段内的购买情况进行标记。(要知道赛题是要预测未来一天的购买)×
2. 有同学在选取样本时,用到了分割点未来第一天的ui,理论上说,训练集是不能带有任何未来信息的,不然算法在学习上会“混淆”。×
3.有同学在离线测评时,用于validation的ui取自相应的测试集,理论上来说,validation set 应该和线上评测的逻辑保持一致。×
 
如果觉得计算资源不够用的,可以尝试购买阿里云的服务,也可以提前熟悉S2将会用到的工具。

这里要讲在是怎么用机器学习的算法来进行训练和预测,但是初赛数据相对比较小,做得不好的话很可能还不如规则有效,所以大家好好考量!
如果成绩一直上不去,麻烦多读几遍《入门》,好好理解为什么要这么破题!

----------------------------------------正文-----------------------------------------

首先,我们要确定待解决的问题映射到数据挖掘,具体会是怎么样一个问题。如果连自己要解决的是什么问题都不清楚,那就别提怎么解题了。

根据官方描述,这次比赛要做的就是:根据用户1个月内(11-18~12-18)在手机淘宝上对商品的操作记录(点击、收藏、加购物车、购买共4类操作)以及用户和商品的位置信息、商品的类目信息等,预测用户在未来的第一天(这里即12-19)会购买哪些商品。那么,问题在数据挖掘里是怎么描述的?
 
    0、写在前面
    当我们谈论数据挖掘、谈论训练和测试的时候,我们在谈论什么?
    首先,要确定题目要我们预测的是什么,这样才能决定让模型学什么(即怎么训练)!
    
    在这里,我们要预测的是12-19的购买情况,也就是我们要预测在12-19,哪些user会购买哪些item,也就是以user_id 、item_id确定一个样本,哪些样本的类别是购买、哪些是未购买。

【P.S. 注意!我们要预测的不是点击、不是收藏、更不是加购物车等动作的发生,所以不要想太多!赛题让我们预测什么!那我们就让模型学习和预测什么!预测太多其他东西只会让模型什么都预测不好!】
    
    确定了要预测什么之后,要知道如何让机器学习算法模型去学习!
    直观的理解:在分割点(即12-19 00:00)之前发生了什么事情(在这里称其为“知识”,在数据里表现为数据分布),导致了哪些user会在12-19购买哪些item!
    我们拥有的数据是11-18—12-18,显然,我们只能利用决定12-18当天(注意!要预测的只有一天的购买情况)购买情况的“知识”,来模拟预测12-19的购买情况!
    因此,用12-18发生了购买的user_id、item_id作为正样本,未发生购买的作为负样本,从而让算法模型进行学习“知识”!
    
 
    1、    确定这是一个监督学习里的二分类问题。
    首先,我们拥有用户的购买记录,因此可以用来标记训练样本(监督学习);其次,要预测的是购买与否,因此,类别是2个(二分类)。
 
 
    2、    确定训练和测试的单位
    数据挖掘里,基本数据单位叫做样本,而在这里,样本的ID由用户(user_id)和商品(item_id)共同决定,有点儿类似数据库里的两个键组成主键,用于表明样本身份。
 
 
    3、    训练集和测试集的划分
    二分类问题,都需要模型经过训练集的学习,从而获得合适的参数(这些参数代表了训练集中所蕴含的“知识”),用于对测试集进行分类。那么,训练集和测试集又该怎么划分和构建?
    在这里,要先弄明白一个时序类数据集里非常重要的概念——分割点。在时序类数据集中,训练集往往由“过去”(即分割点之前)的数据构建,模型学习过去的“知识”用于预测未来。因此,训练集绝对不能掺入“未来”(即分割点之后)的数据,以至于学到的不是“知识”,而是“未来”的既有事实。

那么,在本赛题里,用于划定训练集的分割点即为12-18  00:00,则训练集数据来源将限定在11-18—12-17这30天内,且会用12-18整天的购买情况用于对11-18—12-17之内的样本(注意!不包括12-18当天的ui)进行类别标记(即确定这些样本在12-18时,哪些是购买、哪些是未购买)。然后划分测试集的分割点即为 12-19  00:00,其数据来源将包括11-18—12-18整整31天的数据。
 
    划分好训练集、测试集的数据来源,就可以用这些数据构建相应的特征了!

很多同学还是不明白分割点在这里的意义,举个例子:线上测试:测试集的分割点是:12-19 00:00, 训练集的分割点是 12-18 :00;线上测试:测试集的分割点是:12-19 00:00 训练集的分割点是 12-18 :00。当然这只是一种建议。明白了为什么这么划分就好了。
    在线下进行离线测评时,务必保持评测逻辑与线上保持一致!!!!

4、    业务知识—>特征工程
    没错,之前提到如何划分训练集和测试集,就是为了明确构建特征工程时应该用到哪些时间段的数据。具体如何使用这些数据就是所谓的特征工程。
    首先要明白特征工程的意义是什么。
    前面提到了数据挖掘的基本单位是样本,模型的训练和测试都以样本(也就是一行记录)为单位进行,而模型训练时所学到的“知识”则来自于对样本的“描述”——也就是特征。
特征如果愈能描述样本的本质,则模型愈能学习到其中所蕴含的“知识”。因此,如何构建特征就显得尤为重要。
    那么,样本的本质是什么?
    样本的本质由要解决的问题所决定,在这里显然就是——为什么某用户会在12-19购买某商品?即:12-19 00:00之前发生了哪些事导致了该样本为正(或负)?
    搞明白了背后隐藏的各种原因,那么,对于样本的描述将愈发精确。
    那么,如何找出这些原因?
        a、    先要拆解问题
        为什么某用户会在未来第一天(12-19)购买某商品?
        这个问题包含的对象有用户、商品,那么购买发生与否的原因将取决于用户、商品以及用户和商品之间的关系,也就是:在12.19,什么样的用户很可能会进行购买?什么样的商  品(或类目)很可能会卖出去?而用户和商品(或类目)之间有什么样的关系会决定用户对商品的购买?

b、    分析问题、分析数据
        首先,我们要梳理自己对“购买”这一业务的认知——也就是所谓的业务知识。
        比如,我们从直觉上知道,如果我访问了某一商品之后很久不再访问过,那么我购买它的可能性会小一些。由此出发,我们可以进行数据统计,计算每个用户从最后一次访问到最终购买某商品的时间跨度,从而可以发现用户对商品的购买意愿是随着时间而衰减的。并且,我们可以利用相应的衰减公式来拟合用户对商品购买意愿的衰减趋势,甚至可以直接将【分割点与用户之前最后一次访问商品之间的时间间隔】作为一个特征。
        上面这个例子,就是为了说明:一来要先从已有的业务知识出发,分析数据,并验证或者纠正已有的业务知识,甚至发现新的业务知识;另一方面,可以利用业务知识构建特征,要知道,任何你觉得make sense的业务知识都可以将其用于构建特征、描述样本,再举个例子,你看你会觉得销量越好的商品越可能卖出去,那么商品在分割点前的7天总销量也可以拿来构建新的特征。
        总之,特征的构建与对数据的理解、分析是一个不断迭代的过程,两者互为助益。
 
去年一个帖子以LR为例,简单讲述了如何在实际动手中进行处理:
http://oilbeater.com/categories.html#阿里大数据比赛-ref

5、    选取算法、并以离线测试进行调优
    推荐sklearn这一个Python的开源机器学习工具,文档齐全,而且使用也比较简单,当然,也可以使用其他的开源工具,比如weka等,选好一个即可,毕竟只是工具,用的顺手就OK了。
    至于具体用什么样的算法比较合适,可以去找找相关的论文或技术博客,分析分析赛题所给的数据适合用什么样的算法。不过这也不是什么特别重要的事情,选好一个算法先上手要紧(最好是先用逻辑斯谛回归,计算速度快,方便上手),毕竟首要是构建好训练集、测试集,并构建能描述样本本质的特征工程。“特征工程决定了模型效果的上限,而算法则决定了接近这一上限的程度。”
 
     离线测评可以参考去年比赛的一个帖子:http://wuchong.me/blog/2014/04/29/odps-sql-build-offline-evaluation/?spm=5176.7189909.0.0.eD9haN#jtss-tsina.
   务必保证训练集和测试集的划分、特征构建在逻辑上保持一致,两方面都不要混入分割点之后的数据!而且务必保持训练集在打标签时逻辑与赛题要预测的目标一致!

6、    缺失值填充、抽样、调参、融合
    在正式走上轨道之后,比赛还有很多细节方面的东西要处理,除了更进一步构建好特征工程,更要想办法解决特征中的缺失值,以及处理正负样本不平衡带来的抽样问题。而不同算法的参数又该如何调到最优,使得模型的拟合效果达到最优。怎么融合不同模型才能使最终输出的结果取得最佳成绩?
这些暂且不表,毕竟,这次的《快速入门》只是为了帮助同学们快速上手,至于后续这些各种细节上的问题,欢迎阅读我写的《数据挖掘比赛入门_以去年阿里天猫推荐比赛为例》,将更加详细地介绍如何完善模型。
 
    7、    再次强调特征工程
    如果你读过kaggle优胜选手们写的经验,一定知道他们多强调特征工程的重要性。可以说,模型效果的80%取决于特征工程。而做好特征工程绝不是一时半会儿的事,需要你深入理解业务、理解赛题、理解数据。这既需要你自己有敏锐的分析能力,也需要你和其他人多多交流、启发思路。
 
 
    8、    分工
    简单讲一下分工,比赛中的工作主要分为以下几个部分:
        a.    数据和业务分析
        专职分析业务、分析数据,并利用分析结果构建和完善特征工程,总的来说,就是负责整个模型业务上的工作。
    b.    码农
        专职负责实现所需要的代码,比如,统计分析,提取特征,训练和预测等。
    我当时99%是一个人做的,所以整个过程下来其实效率不高,因为在实验记录上不规范,也没自动化代码,使得所耗精力十分巨大,希望参赛的同学,无论分工与否,都务必做好一定的规划,在比赛的流程摸清楚后就将流程规范化,释放自己的劳动力,也提高效率。
 
 
    P.S.: 千万不要一开始就执着于调参,最好是先理出一个粗糙的流程,把比赛从头到尾先做一遍,然后再将这个过程规范化(代码、实验等方面)、自动化——尤其是因为要换数据,那么流程的自动化和标准化就非常重要,等到对数据和业务的理解已经差不多了,再开始尝试单模型的调优,找到最合适的参数,然后进行不同模型之间的融合。

转载地址:http://bbs.aliyun.com/read/234063.html?spm=5176.7189909.0.0.Rw8Yez

时间: 2024-08-02 11:00:38

[阿里移动推荐算法]比赛_快速入门_4_19_update_仅供参考,思维不要受局限的相关文章

Spring_MVC_教程_快速入门_深入分析

Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com 目录 一.前言 二.spring mvc 核心类与接口 三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明

【天池竞赛系列】阿里移动推荐算法思路解析

赛题地址:http://tianchi.aliyun.com/competition/information.htm?raceId=1 登录就可以下载数据 从4月到7月,学习了非常多也收获了非常多 题目就不多说了.一句话表达就是依据过去一个月的行为预測14年12月19号的购买情况. 看题目貌似推荐算法.自然就有队伍想到用协同过滤什么的.当然效果不好. 首先是特征的问题,然后是这是基于行为的相似,不太类似用户和商品类似的ItemCF.UserCF,还有非常多其它的原因.比方我买过一部手机,难道还要

关于2015阿里移动推荐算法大赛的总结(三)——机器学习

关于2015阿里移动推荐算法大赛的总结(一) 关于2015阿里移动推荐算法大赛的总结(二)--推荐算法 关于2015阿里移动推荐算法大赛的总结(三)--机器学习 后来我们回归到正途上,虽然我们也想用深度学习的方法,但是毕竟还是菜鸟的水平,所以把目标定在能用机器学习跑通一遍,顺带熟悉一下各种机器学习算法的实际应用.但是最后的最后我们只用了LR,然后就受打击了.哈哈~ 想用机器学习的方法,那么思路其实也很明确,问题是那一天用户是买还是不买,那么可以看成是二分法.通过用户行为方式来判断是否会购买.就是

关于2015阿里移动推荐算法大赛的总结(二)——推荐算法

虽然开始走错了路,但是也学到了东西,美团技术团队的文档还是不错的,喜欢的童鞋可以经常去瞅瞅,后面我会给链接的~~~~ -------------------------------------------------------------- 具体流程 基本流程如下,借用美团的图. 从框架的角度看,推荐系统基本可以分为数据层.触发层.融合过滤层和排序层.数据层包括数据生成和数据存储,主要是利用各种数据处理工具对原始日志进行清洗,处理成格式化的数据,落地到不同类型的存储系统中,供下游的算法和模型使

关于2015阿里移动推荐算法大赛的总结(一)

写在最前面,第一场比赛的第一轮早已结束,lz组的团队已被淘汰~跟lz组队的人跟lz一样也是新手菜鸟,参加比赛只是兴趣与好奇.现在第二场比赛开始了,lz还会继续玩下去(虽然lz校内科研.项目压力都很大)~ 官方给了两个集合表--用户在商品全集上的移动端行为数据表和商品子集表.行为数据里面分别有用户名.商品名.行为类型(浏览.收藏.加购物车.购买).地理位置.商品类别.行为时间.商品子集里面有商品名.商品类别.地理位置. 题目是根据官方给的一个月的用户行为数据,预测这个月过完的第一天在商品子集中用户

微信小程序_快速入门01

这段时间,嗯,大四课程已经结束了,工作也已经找到了,但是呢,到公司报道的时间还没到,哈哈,马上就开始人生的第一份工作了,怎么说确实有点期待~ 在这段时间一方面为第一份工作做各种准备,另一方面也没有停止自己对互联网的探索,哈哈,于是乎,就决定折腾微信小程序了. 废话就省了,哈哈.快速开始吧: 首先参照 微信小程序官网开发教程 注册好微信小程序账号以及下载好开发者工具. 在按照官网开发文档准备好账号和工具后,就到了我们正正要玩的东西了:编程~~ 打开开发者工具并简历一个最初的demo项目: 程序结构

阿里开源服务发现组件 Nacos快速入门

摘自:https://www.cnblogs.com/binyue/p/12206654.html 最近几年随着云计算和微服务不断的发展,各大云厂商也都看好了微服务解决方案这个市场,纷纷推出了自己针对微服务上云架构的解决方案,并且诞生了云原生,Cloud Native的概念. 云原生是一种专门针对云上应用而设计的方法,用于构建和部署应用,以充分发挥云计算的优势. 云原生应用的特点是可以实现快速和频繁的构建.发布.部署,可以方便的满足在扩展性,可用性,可移植性等方面的要求,并提供更好的经济性.针对

阿里移动推荐算法大赛答辩PPT

?

C语言入门guide (仅供参考)

C语言书籍推荐 浙工大图书馆中,计算机的书都集中在三楼TP区. <Head First C>.Head First系列的书质量基本都很高.该书有很多插图,总体上就是用一种轻松愉快的方式给新手讲解令人头疼的C语言.书虽然有些厚但其实并没多多少字,内容上也相当丰富,英文原版的阅读难度大概也就高中阅读理解的难度.图书馆有其中译本<嗨翻C语言>,但我强烈推荐去看其英文影印版<深入浅出C语言>,一来这书的英文版本身难度就不大,二来容易树立阅读英文资料的信息(特别是看到自己看完这么