2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队

摘要:2016中国高校计算机大赛——大数据挑战赛是由教育部和全国高等学校计算机教育研究会联合主办,清华大学和阿里云联合承办,在“天池大数据众智平台”上开展的高端算法竞赛。本次赛题是对于阿里音乐流行趋势进行预测,本文整理自大赛极客奖COM团队的答辩演讲。

本文整理自获得本次2016中国高校计算机大赛阿里音乐流行趋势预测比赛中COM团队答辩视频。在游戏世界中其实流行这样的一句话就是:不怕神一样的对手,就怕猪一样的队友。团队对于最后获得的成绩是十分关键的,COM团队由三名成员组成的,下图为COM团队成员简介:
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
团队中的杨南海同学是idea担当,几乎承担了本次比赛中所有的想法工作。曾钢同学,人称超级码力,几乎承担了团队中全部的代码工作。张志伟同学,则是帮助大家进行协作的云服务员。之所以起名为COM团队,其实想的是Come on,表达一个积极向上的意思。COM团队谈到希望能通过这次比赛使得大家在数据挖掘领域对于一些模型算法的研究达到更深层次的水平。

在本次比赛的答辩中,COM团队的论述主要分为以下四个方面:
一、问题分析
二、数据清洗
三、核心算法
四、总结思考
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
一、问题分析
首先赛题给出了阿里音乐6个月的历史数据,需要预测出之后60天每个艺人的播放量。其实无论对于数据挖掘的入门者还是资深人员来说,首先需要做的就是对于数据集进行划分,COM团队将所给的数据划分成为了三个数据集:Train、Test和Submit 。正好因为阿里音乐提供了6个月历史数据,所以可以进行比较好的划分。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
值得一提的是,COM团队谈到其实赛题数据这里面蕴含着一个比较大的坑,参加比赛的同学都知道,就是所给出的6个月的数据是没有8月31号的数据的。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
那么拿到这个问题之后,应该怎样去做呢?COM团队谈到因为需要预测60天的数据,所以这很明显是一个时间序列的预测问题。但是在进行序列预测时,可以预测60天是一个值也可以是60个值,再往深层次去想,其实这不是一个分类问题,而是一个最基本的回归问题。对于回归问题,通用模型是非常多的,包括GBDT以及随机森林等,这里如果预测一个值就比较简单了。而COM团队在比赛中一直在考虑是不是存在不通用的模型,也就是经过数据分析之后的一些特别的能满足数据的专用模型。

二、数据清洗
在数据挖掘界,有这样一句常用的话就是“Garbage in garbage out!”。如果数据本身就是比较脏的话,无论模型再好,特征提取的再好,提取出来的东西照样是比较脏的。COM团队通过一些专业的数据调查发现24%的人会在前5s结束这首歌,28%的人会在前10s结束一首歌,35%的人会在前30s结束一首歌,48%的人会在歌曲结束前结束一首歌。所以,假设一个正常人的人听歌,其上限一个小时应该在60*60在千的量级;正常的自然操作,上限应该60*60/(5~30)之间算是更加的自然,所以120~720之间应该算是正常人的上限,平均下来应该更加偏向于120;最终,我们经过试验和计算,取的是每个人每个小时的上限250,在本地的测试效果最好。最后清洗的数据能占到总播放量的0.24%,这个占比看起来比较小,其实这些数据是集中在某个艺人上面的。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
举个例子来说,就是如下图所示的内部代号为D13的艺人。可以看到图中蓝线的部分是在清洗数据之前的该艺人的音乐播放量,底下绿色的线表示的是在进行数据清洗之后的播放量,可以看出这两者之间的实际相差是非常大的。如果不去进行数据清洗,直接将特征提取出来丢给任何一个模型,其实脏数据就相当于随机的噪音。而在后面的时间,如果表现成前面的情况对实际的结果影响比较大,甚至得出的结果可能是负值,还不如不进行预测。所以其实在数据挖掘领域,数据清洗是在时间上要优先于其他所有需要做的事情的。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队

三、核心算法
COM团队接下来介绍了最主要的核心算法,他们谈到在第一赛季进行比赛时是比较头疼的,整个第一赛季,COM团队在核心算法上分成了三个部分,团队中每个成员负责一个角度,这三个角度分别是User、song和artist。可以看到,三个角度所提出的特征几乎都不一样。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
  • 在user的角度,就是user在数据集上的听歌的最大值,最小值,中位数等通用特征。用户听过artist,听歌时间,歌曲语言的top-n进行one-hot encode。对上面的特征进行聚类,来刻画用户的艺人偏好,时间偏好,语言偏好等。
  • 而在song的角度,就是最近k天听歌、收藏、下载的统计听歌次数在k次以上的user数量的统计假期。工作日听歌次数的统计和被预测天同一个星期的听歌次数的统计。
  • 在artist的角度而言,就是artist的user听歌次数分级统计。artist自身歌曲、专辑信息统计从影响每个artist每天的被听的次数的角度建模,直接进行结果的预测。
第一个赛季大约有一个月时间,COM团队本身想的是通过这个比赛对于数据挖掘更通用的模型有更加深入的了解,但是在做第一个赛季的时候,每个成员从一个角度出发,基本上将所有的通用模型都尝试了一遍,最终发现效果并不是特别理想,所以在第一赛季结束之前,COM团队曾经基本上快要放弃比赛了,因为确实比较头疼,最好的排名才到了200多名的样子,基本上就是快要放弃了。但是就像一句古话所说的“柳暗花明又一村”,在COM团队就要放弃的时候,天池就突然换数据了,他们就用20行左右的代码做出来一个值却莫名其妙地排到了第二名。

这究竟是为什么呢?COM团队详细地进行了介绍。下图中最上面的就是目标函数,最右边的式子对应于阿里音乐真实的播放量,这是无法改变的,COM团队能做的就是改变被1减去的那个值。其实在最优化这个问题的时候,如果使用这样的一个方程放在高中,很多人就可以解出来。其实目标函数最右边的数值是固定的,左边的数值是很容易受到极小值影响的。给大家举一个非常简单的例子,假如某一个artist在59天内是一个非常稳定的或者固定的值,但是在某一天真实值是1或者2的话,这样就会出现预测值在59天中是完全正确的,没有任何偏差,但是某一天则会存在好几倍的差距。这时对于目标函数而言,59天的方差是0,但是一天差距在8倍以上,整个的得分就是负数了。所以这个目标函数是非常诡异的,59天相差无几,但是只要有一天差距很大就会造成极大的影响。如果预测比较小的值,即使与正确值之间的偏差比较大,但是得到的分数也不至于是负数。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
所以回到目标函数来说,可能这个函数放在高中,很多人都能解决,但是在大学当大家学的东西多了以后,可能就不容易联想到解法了。实际上,对于这个目标函数优化而言,高中生就会说是一个复合函数求导的问题,可以通过极值为零得到最优化的值,当然这里是将问题进行了松弛,不预测60天每天的独立值,而是预测60天统一的值,这样对于整个函数进行求导就可以了。其实这个问题就是复合函数求导,最终得出最优时的公式。通过这个公式,大家可以看出,公式形式比较简单,最终体现在代码上也是比较简单的,所以在第二赛季一开始,刚更换数据时,COM团队就感觉非常兴奋,因为一个非常简单的想法就能取得很不错成绩。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
COM团队之后对于ME有什么样的好处进行了具体分析。其实前面可以看到,公式非常简单,实现上也非常方便,基本上只需要20~30行代码就可以完成。其实最小化极小值对目标函数的影响并不像求平均值,因为求平均值很关心大数的影响,但是ME算法对于极小值的权值会更高一些,如果进行单值预测,算下来就会比均值好很多。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
但是,预测一个值是不是存在问题呢?答案时肯定的。使用8月份最真实的数据预测8月份的数据,使用这样的一个公式计算下来,最后也就才48万多分,所以预测一个值并不能提供继续加分的功能。所以说对于一个值而言,ME可能已经做到最好了,所以后面还需要做波动,对于一个值而言,是存在上限的,不去对于数据进行仔细分析以及特殊化处理,就会存在上限。

数学界是存在一个王冠的,下面这个题就是一个看图找规律的过程,解出此题就能获取数学界的王冠。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
言归正传,正如上面的思想来看数据。从100个艺人拿出几个,可以看出这些数据的规律还是非常强的,像这些尖端的突起是存在一定的规律的。但是ARIMA是难以把握这些波动的,有些时候正常情况下的波动是向上的,但是预测出来却是向下的,所以ARIMA这条思路在COM团队第二赛季是放弃的。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
但是这个图是非常有规律的,如果不能使用7天的周期进行预测,那么能不能剑走偏锋,单纯只用一个值呢?其实最大值什么时候出现是非常明显的,COM团队考虑到使用一个值去替换最大值出现的那天,分数会不会非常好。所以,COM团队对于可能会出现极大值的天用简单的ME进行替换,这个是周期的问题。

因为得到的周期大约是7天,而不是3年或者5年这样的,其实这是不常见的。但是在日常生活中,7天作为一个周期是非常明显的,5个工作日和周末。而看到刚才的图像中尖端的突起,也就是在60天中,能够替换的值就只有8个,所以并不是特别靠谱。

那么是不是还存在可以更好地模拟波动的方式呢?其实可以看下图,在两个红点下方都会出现一个比较明显的衰减的过程,为什么会存在衰减呢?其实数据中提供了每个新歌的发布日期,后来发现,在红点出有一个新歌的发布,那么考虑能不能在新歌发布之后进行数据的衰减,而不是单纯地使用前面所有的数据,这就与数据挖掘里面比较常用算法思想比较类似,就是不同的数据做区分来对待,并不是使用同一模型进行挖掘,这时就考虑到将新歌和老歌区分出来。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
接下来这个图就比较明显了,红线代表的是新歌的播放量随时间的变化,上面的绿线表示的最原始的播放量,整个蓝线表示去除掉新歌的播放量。其实大家可以看出,在后面,老歌的播放量是非常稳定的,但是新歌会存在一个衰减的过程,所以COM团队考虑能不能对于新歌做一个衰减模型。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
在为新歌做衰减模型时,其实方式有很多种,如果使用普通的线性回归,假设新歌的定义是在30天内发布的歌,因为从数据可以看到基本上一个月以后,新歌就与老歌的数据持平了。COM团队考虑能不能将新歌的数据进行线性回归,但是大家仔细观察下图可以发现,新歌前期的衰减是非常明显的,所以这个斜率就会比较大一些,很容易出现负值。虽然泛化能力比较强,但是并不能很好地模拟新歌的趋势。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
COM团队对于新歌衰减模型进行了构建,可以看出Y很容易受到衰减的影响,可以看到红线这部分,如果对于Y变化之后再变化回去,预测值很容易受到影响。COM团队于是考虑可不可以对X进行变换,实际上通过这样的拟合之后,曲线与真实的播放量就比较接近了,这就是COM团队的新歌衰减模型NSI。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队
剩下的就是COM团队对前面第二赛季算法的总结了,老歌使用ME算法,新歌使用NSI算法,老歌周期使OST算法。
2016中国高校计算机大赛——大数据挑战赛极客奖:COM团队

四、总结思考

COM团队谈到在走完第一个赛季之后,最好的表现也在200名以后,但是在新赛季天池更换数据以后,COM团队的成绩在三个模型不断累加的过程中就有了一个比较大的提升,但是后来这个提升就止步了。COM团队也在考虑这个原因,为什么周期分数会有下降?以及有些artist没有发新歌,但是还会出现衰减?COM团队表示这是值得继续研究的地方。