开发者社区> 问答> 正文

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

由于论坛发帖限制,链接和图片内容见CSDN博客
阿里音乐流行趋势预测大赛一起做-(6)小结

部分内容如下:
最近一直在忙毕业的事情,比赛也落下不少。今天第一次切换了数据,在此对之前的工作做个简单的总结。感谢组委会岱月邀请我写自己的参赛经历,《天池小白成长记》在阿里的“天池大数据科研平台”上发布了,还是蛮激动的。好啦,进入正题!
扒一扒别人的方法

在论坛和QQ群里看到有部分同学透露自己的方法,我就顺道记下来啦,注:以下成绩均为6月7日切换数据前的成绩,评分时间大概在6月1日到6日之间
1、RNN(递归神经网络)
有位大神用RNN预测,不过收敛比较严重,加入了星期特征,成绩约6200。
这应该是一周前的成绩了,现在不知道怎么样了。喜欢神经网络的同学可以试试。
2、GBDT
有人放了星期、节假日、三日均值等特征,得分6350。
这个算法复赛平台里有,所以初赛复赛可以较好地衔接。
3、ARIMA
有几个人直接用的auto.arima,不过得分大不同。有人得分6200、6300,有人得分6455。有一个得分6459的同学给的提示是:用你能想到的一切的方法去切割数据集。不止50个数据集,还要对歌手近一步切割。
时序算法复赛平台里目前没有。
4、Random forest
有人得分得分6444,有人6483,也有人改进后提升到6518。
这个算法复赛平台里有。
5、小波包分解
有人对每天的播放人数进行小波分解(直接调Python包),分解3层以上,周期感觉很明显。按照艺人每天不同的播放人数,把趋势分解出来,剩下的是随机波动,有很明显的周期,7天左右。
我猜测该同学是信号处理专业的,有兴趣同学也可以试试傅里叶变换等信号处理算法,有可能独辟蹊径。
6、其他方法
有人滑动窗口取均值+规则,得分6400。有人聚类+规则得分6528。
这里的聚类我觉得应该是用户分类或者歌曲分类吧,细节没有透露。

在群里看到一位同学说的好:“现阶段大家多尝试尝试些新东西 ,就会发现玩着玩着就入门了,就有想法了,就变的厉害了, 这是我这阶段的收获。 “
不推荐的方法

之前试过不少方法,时间序列、回归里的多种模型,实际测试后发现某些方法想想挺美好,实际使用时却不合适(个人观点,也许是我做的不好,有兴趣的自己尝试,以免受我误导)。
1、曲线拟合
刚开始觉得每个歌手的播放曲线都有其趋势,比如上升,下降,平稳等,用曲线拟合应该可以很好的把趋势抓出来吧。
我选取了某一个歌手的播放量分别对最后一个月、最后两个月做了简单的拟合试验,曲线拟合Python代码如下:

# 对数据集做曲线拟合

from pandas import Series, DataFrame
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# import dataset
importdata = pd.read_csv('F:/AliMusicTianChi/data/2e14d32266ee6b4678595f8f50c369ac.csv')
#x = importdata['Ds']
x = np.linspace(1,183,183)  #生成1到183的数
y = importdata['play_num']
x1 = x[-60:]
y1 = y[-60:]
x2 = x[-30:]
y2 = y[-30:]
z1 = np.polyfit(x1, y1, 1) #用1次多项式拟合,可更改为更高次
z2 = np.polyfit(x2, y2, 1)
p1 = np.poly1d(z1)
p2 = np.poly1d(z2)
y1new=p1(x1) #拟合值
y2new=p2(x2)
plt.figure()
plt.plot(x, y, '*-',label='original values')
plt.plot(x1, y1new, 'r*-',label='polyfit 2months')
plt.plot(x2, y2new, 'g*-',label='polyfit 1month')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend()
plt.title('polyfitting-2e14d32266ee6b4678595f8f50c369ac')
predict_x = np.linspace(184,244,61)
predict_y1 = p1(predict_x)
predict_y2 = p2(predict_x)
plt.plot(predict_x, predict_y1, 'k*-',label='fit2months predict')
plt.plot(predict_x, predict_y2, 'b*-',label='fit1month predict')
plt.savefig('polyfitting1.png',dpi=400,bbox_inches='tight')

一次线性拟合结果如下图。
这里写图片描述
容易发现选取不同时间段的拟合结果差别很大,预测的结果趋势走向都不一样。那2次曲线拟合会不会好一点,我们把上述代码中的z1 = np.polyfit(x1, y1, 1)的最后一个参数1改为2,结果如下:
这里写图片描述
同样地,三次曲线拟合如下:
这里写图片描述
我们发现阶数高于2次后的曲线是完全发散,不可控的,而2次曲线和一次线性拟合对于时间段的选取和数据集的选取非常敏感,所以曲线拟合的想法只是想起来很美好而已。
另外,我还另外尝试了其他方法,如样条插值,效果都不理想。所以果断的放弃了该方法。
2、时间序列
刚开始我也是用时间序列在做,发现越做越难做下去。总结有如下几点:
1)时间序列在复赛平台上没有库。这点在“扒一扒”里也提到了,所以即使你时间序列运用的炉火纯青了,复赛没有支持的算法库调用也是很悲催的。除非你自己写,但是工作量非常大。
2)时间序列参数很难调。大部分人还是直接掉auto.arima省事,也有部分人自己研究参数的选取。以ARIMA为例,使用时需要用某种方法(差分、平滑等)将数据转换为适合它处理的平稳时间数据,这在很多时候是很难做到的。定阶、评价参数等都需要有一定时间的研究才能完全吃透。
3)工作量大。对每个歌手都要调出一个满意的参数和预测结果需要何等的时间和勇气啊!
推荐的方法

前面说了,时间序列方法不推荐(并不代表不可行),根据大家的讨论,大部分同学还是采用回归的方法来进行预测的。
回归方法相比时间序列方法还是有不少好处的:
1)不需要将数据处理成严格的时间序列形式,也不需要把数据变成平稳序列。
2)回归模型很多,常用的有LR,GBDT,XGBOOST,RF等。
3)可以方便的切入自己的特征。
但是也是有不少问题的:
1)一般的时间特征(星期、假日、月等)可以在预测集中得到,但是其他的特征比如下载量如何在预测集中得到?这是困扰大家的难题之一。
2)这么多模型,如何选取?这么多特征,如何选取?
推荐的思路

1、用户或者歌曲分类
去年资金预测的第一名的大熊就做了初步的用户分类,这也是他和其他几个团队相比的一个重要胜出因素。我觉得音乐预测也一样,这方面应该有搞头。
2、特征选取和挖掘
赛题中的数据给了很多,目前为止大部分的人还是只用了播放量这一个特征,其他的特征如果能很好地嵌入应该会有大幅度的提高。
3、不同的滑动窗口
不同曲线取不同的滑动窗口得到的结果差异是非常大的。这一点也可以深入一点挖。
4、数据预处理
是否需要去掉那些操作记录非常少的用户?是否需要平滑抖动非常大的曲线,这些工作也值得深入。
后记

好吧,就写到这里。写博客分享攒人品!我们队的成绩很久没有提升了,希望能早点突破!希望大家能有所收获,欢迎留言或私信讨论!

展开
收起
sixgod 2016-06-07 15:05:23 10350 0
11 条回答
写回答
取消 提交回答
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    表示用SVR+6特征切换数据前做到过6528分,然而切换数据后就不行了。。。
    2016-06-14 10:34:38
    赞同 展开评论 打赏
  • 回 7楼好了,是我的帖子
    天池大数据比赛交流群 155167917

    -------------------------

    回 6楼misslv的帖子
    你注册一个账号就可以在官方网站下载啦

    -------------------------

    回 4楼yida110的帖子
    试过dayofweek, weekend, holiday等

    -------------------------

    回 3楼coldsheep的帖子
    问的参加菜鸟比赛的人,哈哈

    -------------------------

    回 2楼youngpeak的帖子
    筛选特征很难
    2016-06-12 23:27:52
    赞同 展开评论 打赏
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    学习一把!
    2016-06-11 11:35:16
    赞同 展开评论 打赏
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    总结的很全面!!
    2016-06-10 16:38:13
    赞同 展开评论 打赏
  • qq群分享下吧。一直没找到组织
    2016-06-10 11:35:05
    赞同 展开评论 打赏
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    你好能不能把AliMusicTianChi数据分享给我一下,我刚来注册想试试这个数据集,谢谢啦

    -------------------------

    回 11楼sixgod的帖子
    我注册了,但是可能因为时间过了,不能下载了,是这样(见图片)
    2016-06-10 10:35:26
    赞同 展开评论 打赏
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    赞,总结的很不错!
    2016-06-08 13:04:24
    赞同 展开评论 打赏
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    想问一下楼主你们日期特征都提取了什么额。
    2016-06-08 12:35:16
    赞同 展开评论 打赏
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    请问在哪里可以知道复赛平台是否包含这些算法包啊?因为目前正在做时间系列的相关尝试
    2016-06-08 10:31:22
    赞同 展开评论 打赏
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    个人觉得,在使用树模型中,噪声对结果影响不是很大,反而是特征如何取对结果影响不小
    2016-06-08 09:39:35
    赞同 展开评论 打赏
  • Re阿里音乐流行趋势预测大赛一起做-(6)小结
    支持
    2016-06-08 01:58:08
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
超越感官,沉浸赛场——大型体育赛事云上实战精选 立即下载
人物写真开源&商业 立即下载
长安十二时辰背后的技术密集——从智能算法到音视频创新技术 立即下载