天池阿里音乐流行趋势预测大赛–复赛

☛想要干货直接忽略这部分☚

话说初赛我们三个人,最好的成绩也就做到了200名,当时真的不打算搞了,但是命运就是这么喜欢捉弄人,第二赛季一换数据,就到了第二名, 一看我艹,什么情况,瞬间就又燃起了继续搞的希望。这就是中国的那句古话——山重水复疑无路,柳暗花明又一村。所以不到最后千万不要轻言放弃。

分享一下整个赛程的名次变化,其实还是很跌宕的。

OK,不扯淡了,进入正题。

二、 复赛——三起三落的跌宕人生

初赛几乎尝试了所有的通用的模型,我们三个人的三个角度,每个人都提了百十维的特征,但是模型乏力,所以复赛还是果断的换了角度。最后的成绩停留在三个角度上,我们分别起名是MENSIOST,下面分别对这三个模型做详细的介绍(会说一些在答辩中都没有介绍的细节)。

1、 ME

从目标函数出发,通过对目标函数松弛,求解目标函数的极值。

Fi=∑j∈W⎛⎝⎜1−1N∑k=1N((Si,j,k−Tj,k)/(Tj,k))2−−−−−−−−−−−−−−−−−−−−−−⎷⎞⎠⎟∗1N∑k=1NTj,k−−−−−−−−−⎷

F_{i}=\sum_{{j}\in W}\left (1-\sqrt{\frac{1}{N}\sum_{k=1}^N((S_{i,j,k}-T_{j,k})/(T_{j,k}))^2}\right) *\sqrt{\frac{1}{N}\sum_{k=1}^N T_{j,k}}

其中后半部分是固定的,而前半部分恰恰是我们要预测的。

σi,j=1N∑k=1N((Si,j,k−Tj,k/(Tj,k))−−−−−−−−−−−−−−−−−−−−−⎷

\sigma _{i,j} = \sqrt{\frac{1}{N}\sum_{k=1}^N((S_{i,j,k}-T_{j,k}/(T_{j,k}))}

可以看到这一个部分其实很容易受到极小值的影响,举一个简单的例子就是,如果后面60天的数据中播放量59天都是100.,但是有1天是10,这时直观的算法是如果预测100,这时只有一天预测错了,这给人的直观印象是成绩应该不错吧,其实不然,如果使用公式可以看到其中59个值(误差是0),但是一个误差是9倍,也就是这部分的值是大于1,所以整体的误差就是大于1,也就是说最后虽然59个值预测正确,最后的得分仍然负数。。。

既然分析到了这些,那么我们就要考虑如何去优化这个函数。其实最naive的松弛想法就是加入我们预测一个值,所以针对这一个值对其进行优化。这个σ函数很明显就是二次函数,所以对目标函数进行求导。

∂σi,j∂xj=∂1N∑Nk=1((x−Ti,k)/Ti,k)2−−−−−−−−−−−−−−−−−−−−√∂xj=−12N∗∑Nk=i2(xj−Ti,k)/T2i,k1N∑Nk=1((xj−Ti,k)/T2i,k)2=0

\frac{\partial \sigma_{i,j}}{\partial x_{j}}=\frac{\partial \sqrt{\frac{1}{N}\sum_{k=1}^{N}{((x-T_{i,k})/T_{i,k})^2}}}{\partial x_{j}}=-\frac{1}{2N}*\frac{\sum_{k=i}^{N}{2(x_{j}-T_{i,k})/T_{i,k}^2}}{\frac{1}{N}\sum_{k=1}^{N}{((x_{j}-T_{i,k})/T_{i,k}^2)^2}}=0

最后可以得出x的最优取值为

x∗j=∑Nk=11/Ti,k∑Nk=11/T2i,k

x_{j}^*=\frac{\sum_{k=1}^{N}1/T_{i,k}}{\sum_{k=1}^{N}1/T_{i,k}^2}

这时可以看到最后得到的公式是十分的简单,实现起来用简单的几行sql就可以完成,同样我们可以使用前面的任意天数替代真实数据,所以最后的代码也就20行左右。我们把这个方法叫做ME(最小化误差模型)。下面的代码是带有评测的代码。

select artist_id,sqrt(sum(e.target)) * (1-sqrt(avg(pow((e.plays-e.target)/e.target,2)))) as fscorefrom(select c.artist_id,c.ds,c.target,d.plays from(select t.artist_id,t.ds,t.targetfrom (select artist_id, ds, plays as target fromartist_playWHERE ds >= '{target_from_date}'and ds<='{target_to_date}' )t)cleft outer join(select artist_id,sum(1/plays)/sum(1/plays/plays) as plays from(select artist_id,ds, playsfrom {local_data2use}                WHERE ds >= "{me_from_date}"and ds <= "{toDate}"    )b group by artist_id)d on(c.artist_id=d.artist_id))e group  by artist_idorder by artist_id; 

在第二赛季换数据之后,我们使用14天的ME就获得了第8,但是后面我们有对ME进行了优化,我们把14天的ME记作ME14,同理我们可以得到ME1~ME30,最后我们将这30个ME求了一个算术平均。也许这时候各位大侠可能会问了,为什么要对它求平均?

各位大侠请看这张图,虽然ME可以有效的减少一些极小值对预测的影响,但是整体是下降趋势,这时如果使用算术均值,就可以抵消一些由于原本是下降趋势,而预测偏高的影响。如果非要拔高为什么要这么做可能就是所谓的模型融合吧。。。

最后ME(avg30)可以拿到498000+分,估计可以进入前20,也就20行左右的代码。。。

2.OST

在有了ME作为我们的baseline之后发现其实预测一个是是有上限的,我们用了最极端的例子就是7~8月的真实值作ME预测7-8月的播放量,发现也就480000+分,也就是无论你做的再怎么好它的upbound就在那里,不增不减。

所以就要做波动。

各位大侠可以先看看下面的这个数据。


估计各位大侠已经想到了,波动预测Airma应该是首选了,当然我们也试了,效果在这样的数据上面勉强还算可以,但是这样的数据也就占总共数据的5%左右。但是也有他的弊端就是因为Airma做的事周期预测,可以看到这些数据除了高点,其他的点趋势也是很容易预测错,预测小了还可以,但是如果本来是下降的趋势,模型预测成了上升感觉就会分分钟GG,因为目标函数对极小值还是十分敏感的。所以周期是不能这么用的。

那么这个波动应该怎么用呢?这时候仔细观察数据,我们为何不剑走偏锋,不用7天的周期,而是只去修改一个值,相当于是对baseline的修改。我们把这个模型叫做OST(老歌周期模型)

最后OST的模型就是修改哪些基于统计得来的某一天一定会出现极值的日期。虽然是这么用了,但是最后成绩却没有提升,由于是最后的idea,没时间验证,但是对于分数的提升我们的把握还是很大的。

3.NSI

下面就是这个比赛的重中之重,新歌衰减模型。
各位大侠看下面的这个数据。

红点是新歌发布,所以我们能不能拟合一下这个新歌的衰减趋势?

答案是肯定的!

虽然肯定可以拟合这个衰减曲线,但是衰减曲线有很多种,到底应该用什么样的衰减曲线进行拟合?但是可选的有线性回归模型GBDT等通用模型,或者自建模型

首先可以把线性模型pass掉,因为线性模型使用直线进行拟合,但是可以看到数据在前期的衰减是很剧烈的,所以如果使用线性模型,很容易在预测的前几天就会衰减到负数。那通用模型学习可以吗,经过分析之后发现也不行,因为如果使用所有的新歌训练一个通用模型,这样虽然泛化能力够强,但是不能达到足够的个性化,一个很明显的点就是衰减到什么程度不是通用的。但是如果每一个新歌训练一个模型,这时数据很少也就20个左右,很容易过拟合,所以通用模型也被pass掉了,那就只剩下最后的那个自建模型。

仔细观察数据可以看到,新歌的衰减很像指数衰减。

y=1eax+b+1

y=\frac{1}{e^{ax+b}+1}
这样的衰减函数,可以对y进行转化,然后转化成线性函数进行拟合,但是尝试后就会发现,如果对y进行转化,在最后的预测值又需要的将y转化回来,这时y是指数函数转化,由于预测本来就是不是很准确,极小的误差,表现在y上就会偏差很大。下图红线部分。

这时如果对x进行log变化,就可以这样对y的影响降到最低,如图绿线部分。最后我们管这个模型叫做OSI(新歌衰减模型)

这里有几个trick要跟大家分享一下:

a. 衰减无穷远点问题

由于这个模型在拟合的时候仍然使用线性函数,所以仍然会出现在60天后预测出现负数的可能,虽然这个可能已经很小,但是还是有必要处理一下,就是不能让新歌一直衰减,所以在模型中添加了无穷远点,那么何为无穷远点呢?在模型中我们使用200天之后的作为无穷远点。以此减少可能无限衰减的情况。

b. 衰减到多少问题

这个问题其实也是十分棘手的,我们不能说所有的新歌都衰减到原来的10%,这种数据太人工,或者太naive,所以我们要找到一个合适的衰减到的值。对于这个问题我们使用的统计的方法,将新歌分成两类,如果这个artist前面有发新歌,那么我们就取他所有发的新歌衰减到的最后的均值,如果没有新歌,那衰减到的比例就是最后的global的均值。

c. 是所有的新歌我们都要吗?

肯定不是的,对于拟合出来的曲线,我们采用r2值进行衡量,如果r2值大于一定的阈值(证明拟合的这个曲线还不错),我们就保留,如果小于,我们就抛弃。当然我们也会删除掉那些在最后几天发布的新歌,因为这个趋势不好去拟合,稍有不慎就,满盘皆输。

三、总结——骏马蹄前无沟堑,怂人眼里全是坎。

上周一参加了最终的答辩,本来以为可以膜拜一下大熊老师讲Airma各种调参的,但是发现大家都没有用这种东西,我们前面的队伍使用的最核心的思想就是不同的artist进行了分类,大熊老师他们通过对artist的不同表现使用GBDT分来,然后在回归,最后拿到这么好的名次,因为模型的回归能力确实不是特别的好,但是分类一般来说准确率是有保障的,因为有概率的输出吗!第二名和第三名的团队都是采用了不同的分类方式。所以这次比赛感觉最纯的干货就是先分类,再回归。

从初赛走来,感触颇多,可能我对于别人来说就是证明我不是坑队友,当然我也找到了神队友。

☛复赛PPT☚
☛Github代码☚
☛复赛数据(部分)☚

当当当,最后爆照时间。。。

天池阿里音乐流行趋势预测大赛--复赛相关推荐

  1. 天池_阿里音乐流行趋势预测大赛(1) —— 赛题分析

    本文以天池大数据竞赛的阿里音乐流行趋势预测大赛为背景,将机器学习实战的背景.模型.算法.代码和结果等都整理下来,放在博客中,算是对自己知识的整理吧,有兴趣的朋友也可以看看一起讨论学习. 由于很多比赛和 ...

  2. 阿里音乐流行趋势预测大赛一起做-(3)思路

    最近几个月忙着写论文,比赛给抛到脑后了(汗颜..).昨天阿里给了短信通知,说今天可以提交成绩了,于是抓紧搞起,结果也没赶上截止时间(早上10点)提交.无论如何今天也要提交一次成绩试试水.比赛的详细思路 ...

  3. 阿里音乐流行趋势预测大赛一起做-(1)介绍

    动机 去年在同学推荐下参加了阿里的"资金流入流出预测大赛",当时对数据挖掘的了解仅存在模糊的概念上,看了那本<大数据时代>后热血沸腾了几天,趁着这三分钟热度还没冷,就在 ...

  4. 阿里音乐流行趋势预测大赛一起做-(6)小结

    最近一直在忙毕业的事情,比赛也落下不少.今天第一次切换了数据,在此对之前的工作做个简单的总结.感谢组委会岱月邀请我写自己的参赛经历,<天池小白成长记>在阿里的"天池大数据科研平台 ...

  5. 阿里音乐流行趋势预测-代码分享

    向AI转型的程序员都关注了这个号

  6. D1-阿里音乐流行趋势预测竞赛数据清洗整合——纯python

    赛题和数据 经过7年的发展与沉淀,目前阿里音乐拥有数百万的曲库资源,每天千万的用户活跃在平台上,拥有数亿人次的用户试听.收藏等行为.在原创艺人和作品方面,更是拥有数万的独立音乐人,每月上传上万个原创作 ...

  7. 力挺2007年国内原创音乐届最权威大赛!

    力挺2007年国内原创音乐届最权威大赛!<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  8. 网易云音乐与阿里音乐牵手!后版权时代,在线音乐拼什么?

    在与TME(腾讯音乐娱乐集团)达成版权互相授权合作.拿下华研国际的全曲库授权后,今天网易云音乐在版权合作上再下一城. 网易云音乐与阿里音乐共同对外宣布,双方达成音乐版权互相转授权的合作.网易云音乐将天 ...

  9. 阿里音乐打算用大数据发掘下一个TFboys

    大数据时代,音乐界正迎来一场革命:下一首歌流行什么,听众说了算.昨天,记者从阿里音乐得到证实,阿里音乐正在开展一项尝试:将阿里音乐平台上的用户行为数据与社交网络数据.新闻资讯数据等结合,借助阿里云&q ...

最新文章

  1. Python语言学习 (七)1.1
  2. Java经典面试题整理及答案详解(四)
  3. hdu 4666 Hyperspace
  4. @Resource,@Autowired,@Inject3种注入方式详解
  5. Linux总线设备驱动框架的理解(非常棒的文章!)
  6. pandas的自带数据集_用Python和Pandas进行数据清理:检测丢失值
  7. 小米为其他手机适配rom_让小米引以为傲的MIUI,为什么不再给其它手机适配了?...
  8. 董明珠再谈“格力10年免费包修”政策:没企业敢跟,实力的象征
  9. Windows 查看端口使用情况
  10. 【AdaBoost算法】积分图代码实现
  11. 通过Gradle为APK瘦身
  12. Springboot
  13. 用c语言录入3组学生数据编程,学生信息管理系统C语言编程
  14. 8255A的控制字和C口状态字
  15. 南明区建成呼叫座席11710席
  16. Python爬虫--喜马拉雅三国音频爬取
  17. 李山甫 鳴谷 跌足折齒
  18. 深度 | 智慧城市背景下的“多规合一”标准探究
  19. 工作经验是积累总结出来的
  20. 淘宝商品详情API接口

热门文章

  1. python怎么下载pil库_如何在windows下安装Python的PIL库
  2. AMiner 会议论文推荐第十一期
  3. Fluent关于UDF实现速度入口随时间变化
  4. 值得收藏的英语名言大全
  5. 力扣121题买卖股票的最佳时机 简单容易明白
  6. 慢阻肺新药落地,钟南山院士开出我国首张处方
  7. java jframe教程_Java JFrame
  8. 【论文笔记】Image Privacy Prediction Using Deep Neural Networks
  9. 积分体系运营中,积分兑换比例设计切实可行的两个建议
  10. ESXi 虚拟交换机安全策略