雷锋网 AI科技评论消息,由法国萨克雷大学主办的2017全球高校学生数据科学大赛(Data Science Game 2017)近日落下帷幕。在初赛上,来自中国的Medicinovo Inc.(诺道医学)团队一路过关斩将,最终获得全球第八、全美第一的佳绩;决赛中酣战20多个小时,Medicinovo Inc.(诺道医学)团队成功挤进全球前20强。
雷锋网 AI科技评论第一时间联系到团队成员王则远,就他在参赛过程中的一些诀窍和经验展开了探讨。
他们团队共有四名成员,大家都为美国史蒂文森理工大学商业智能与分析专业(数据科学方向)硕士生,其他三名队员分别是张仁宇、刘畅、张璐。
在比赛过程中,王则远主要负责确定初步的算法思路以及数据的一些处理方式,另外的同学主要负责编写爬虫,实现并行运算,处理缺失值和变量等。大家在比赛中分工合作,并结合自己的经验进行了充分探讨。
上图从左至右:张仁宇,张璐,王则远,刘畅
试题讨论
据王则远介绍,在初赛中,主办方为选手提供了Deezer上用户一个月的听歌历史数据,通过分析历史数据,他们需要预测用户是否会喜欢Deezer推荐的歌曲。这个问题被归纳为二分类问题,与广告点击率、用户的购买行为预测等系统类似。
“目前业界对这类问题的关注很多,例如腾讯的社交广告算法大赛,阿里云的广告点击率预估算法等。不过音乐跟前面提到的广告算法其实还是有一些差别的,很典型的一点就是音乐需要考虑的维度更多,比如说歌曲特性、歌手特性,甚至是语言,另外还有国家、地区的特性,用户的喜好等。这次比赛提供的数据集就覆盖了欧洲、美洲、非洲以及一些西班牙语地区等。”
音乐推荐系统中需要关注的点有这么多,那么Medicinovo Inc.(诺道医学)团队在这次比赛中是如何考虑的呢?
在与雷锋网 AI科技评论的交流中,王则远表示,总的来说,这次比赛需要考虑的特性可以归为用户、歌曲和歌手这三个大的维度。此外他也向记者阐述了这次比赛与广告算法、用户购买推荐系统具体的不同点:
音乐需要考虑到歌手的特性,而广告算法需要考虑的可能只是广告特性和用户特性,大家不用考虑广告制作人的特性。另外用户购买行为推荐系统也是一样,并不会说喜欢某个人做的推荐系统算法,就会喜欢这个人做的算法推荐出来的东西。
比赛过程
主办方提供的基础数据集有30多个变量,原始数据有500多万条,这些数据大概涉及到3万多个用户。除了这些基础数据,主办方还另外公布了一个API链接,里面涉及到音乐网站上相对而言不那么重要的数据。
“参赛选手需要编写爬虫下载这些数据,然后再把所有的数据结合起来,得到整体数据集。”王则远说道。
拿到整体数据集之后,他们就开始进行一系列预处理操作了,包括缺失值的检验、变量间的相互独立性、偏斜性,还有一些异常值的检测、降维等。
他们团队在降维过程中具体用到什么算法?有什么经验可以分享呢?
王则远对AI科技评论讲解到,
“这次比赛用的降维算法主要是PCA和高斯映射。在进行降维时有一个小诀窍,在把各个非连续变量拟合成连续变量的时候,不要只用PC拟合出主成分,可以试一试把主成分放回到原有数据当中,比如原来有一百个变量,拟合出一个主成分,将主成分再放回数据集,变成101个变量,然后再进行结果的预测,可能会发现意想不到的效果。”
数据预处理之后呢?王则远表示,他们把所有数据结合起来之后,只得到了40个左右的变量。“用这些变量肯定没办法跟其他选手进行PK,所以需要利用变量工程挖掘出一些新的深度信息。”
他进一步阐述到,在这次比赛当中,变量工程主要是提取歌曲、歌手特性等。“例如我们需要对歌手名字进行解析,去看这个名字是属于什么语言,然后再把歌手与国家结合起来,挖掘出一些更深度的特性。歌手的性别、风格,在哪段时间最火,这些也要考虑到。”
歌手风格是如何提取的呢?在推荐系统中能起到什么作用?王则远说道:
歌手可能会分为乡村、民谣、摇滚等风格,但我们无法提取出风格,不过可以提取用户在不同的时间段(如上午、下午、晚上)分别喜欢听什么歌,然后再把歌手对应起来。在早上上班或是精力比较旺盛的时候,大家可能会想听一听摇滚风的歌手,而在晚上比较累的时候,大家可能就会想听一些舒缓的歌,就可以为大家推荐舒缓曲风的歌手。
谈完歌手之后,他也详述了在歌曲的处理中所使用的一些方法。
“其实歌曲和歌手的特性很接近,不过歌曲会存在专辑和播放时间的问题。歌曲的时长分布基本属于正态分布曲线,大致集中在一到三分钟之间。对于歌曲的时长,我们会设定一个阈值,比赛当中设定的是小于30秒和大于十分钟,小于30秒的歌曲全部会归为30秒,大于十分钟的全部归为十分钟。”
在变量工程中,他们还发现了哪些有意思的事情呢?
王则远表示,在这次比赛中,他们发现把歌曲在专辑中的位置跟歌曲特性结合起来,对识别主打歌作用很大。而这也带来了新的思考:这些特性的发现,都需要大家不断去想,不断去尝试。
另外,他也提到实验中这一阶段的一些小诀窍:
“做变量工程的时候,需要分开去试。我们在实验中会先提取一些深度特性,然后是一次加三个新特征,再看删去哪一个精度会上涨,通过这种方式一点点去删除,这样才形成最后的那套数据集。”
变量工程是实验中需要重点考虑的一环,除了变量工程,还有哪些是需要重点考虑到的呢?
据AI科技评论了解,这次比赛历时只有一个多月,远远短于Kaggle上的大多数比赛,对于这种时间紧、任务重的比赛,所以也需要考虑到速度。
王则远表示,他们试过在Kaggle比赛中使用频率较高的XGboost,但要想跑完数据集需要30个小时左右,这样会对后续的调参影响很大,而LightGBM能把时间压缩到三个小时,因此在模型训练阶段最终使用的是LightGBM。另外,在Stacking阶段他们也选了一些速度比较快的算法,这样能相对快速去进行调参。他同时也提到一点,在选取Stacking算法的时候也需要考虑到数据集的大小以及算法的多样性。
除了对模型和算法的考虑,他们还集合大家所有的计算资源,搭建了一个局域并行环境。
“在搭建小型局域网络之后,相当于把数据分拆成四个部分,然后分别放到四台电脑上去。这样去跑模型会稍微快一点。”他对AI科技评论这样说道。
除了前面提到的这些工作,像这种大量数据集,最容易遇见的问题肯定是过拟合了。那么,为了防止过拟合,他们做了哪些工作呢?
“调参的目的是为了防止过拟合。对于过拟合问题的话,我们需要进行正则化。加正则项之后,我们每次不会考虑所有的样本,可能会抽取80%进行考虑。在实验中的调参阶段,我们先调的是subsample和d-level这两个参数,最后调学习率。”
他进一步说道,“另外还有树的深度和广度。像这种比赛中树的深度一般是在3、4、5这三个数之间,广度基本上默认的就OK。”
此外,他表示,为了防止过拟合,在实验中也需要跑交叉验证。这次实验他们选择的是5-fold交叉验证,在数据集中,每次抽20%,连抽五份,抽出来部分的当测试集,剩下四个当训练集。
比赛中碰到的问题
在这次比赛中,会碰到哪些比较罕见的情况呢?他们又是怎么处理的?
王则远对AI科技评论说道,在这次比赛的测试集中,一个用户只放了一个ID,不像平常是随机抽取测试集的,这样的话ID有可能有重复,因此很容易对模型成大量干扰,产生过拟合。
“这种情况我们见得比较少,这可能是符合真实世界的一种情形,我们也试了很多种特征工程方法。最开始原始数据里没有排行榜,比如歌曲的年度推荐排行榜或者月度推荐排行榜,但是里面有这首歌被听的时间,那我们就可以提取出时间信息做出排行榜。基本上比赛的最后阶段我们都在做特征工程,也试了很多方法,才一点一点把问题攻克掉。”
他也提到,在这种情况出现的时候,他们当时还发现了一个神奇变量——歌曲月度推荐排行榜。加入这个变量之后,影响非常大,实验的精度提高了很多。
对大家的建议
在采访的最后,他也分享了他的一些比赛经验:
首先来说,类似这种比赛的数据集,其实70%的努力都是在变量工程上。如果变量工程做得好,最后的结果一定不会很差,它的重要性要远比建立一个好的模型要高,所以建议大家把精力大部分都要放在变量工程上面。
如何做好变量工程呢?AI科技评论对他提出了这个问题。
这个其实也没有定式,是要充满想象力一些,提取出变量的深度特性。我们现在所有的模型都是在关注列,但要以行为基准去进行变量工程的操作。在这个过程中,还是以group by为主,把行进行拟合变换。这是一种很好的方式。另外还有现在的降维算法,大家也要多多考虑。
另外,这个比赛的数据是非连续变量,非连续变量与连续变量相比,相当于是损失了一部分信息,难度会稍微大一些。它的维度很高,对于模型的判别存在很大的干扰,噪音数据的量可能稍微大一些,降维的时候也比较费劲。总的来说非连续变量存在很多问题,提取深度特征的时候也比较难。现在市面上有很多的方法,大家需要多多关注,在非连续变量有着天生缺陷的情况下,通过特征工程如何把它拟合成一个新的连续变量去处理。
最后,现在国内的比赛也在慢慢变多,但我觉得大家对这种类型的比赛重视程度稍微差一些,这个比赛其实跟真实世界很像。大家后续可以多关注一下这类比赛,多多参与,多多积累经验。
比赛扩展
除了对比赛的一些经验分享,他也对比赛和现在的实际情况提出了自己的看法:
这次比赛中遇到的问题确实是现在实际应用当中的一个痛点,包括各大公司做的比赛也都专注在这个方面,进行用户个性化推荐系统的定制。但推荐系统现在整体的精度不是那么好,现在市面上一些音乐系统可以优化的地方还有很多,例如在真实世界的情况下,如何做好间接性推荐,这也是对推荐精度存在着影响的一个因素。
关于诺道医学:诺道医学是一家医疗人工智能领域的创业企业,开发的人工智能辅助诊断产品覆盖影像、心血管病、消化系统疾病、神经病学、临床药学等多个领域。