中期报告

比赛要求是音乐播放量预测,给定的数据包括前6个月的用户行为表和歌曲艺人表,表的定义如下:

  • 用户行为表
user_id song_id gmt_create action_type Ds
xxxxxxxxxx sbgcvdkjdhhjjkjkh 1426406400 1 20150315
  • 歌曲艺人表
song_id artist_id publish_time song_init_plays Language Gender
sbgcvdkjdhhjjh xaxaxaxa 20150325 0 100 1
  • 需要提交的表格包含后两个月每个艺人的播放量预测:
artist_id Plays Ds
xaxaxaxa 5000 20150325

数据处理过程中,因为不过多考虑用户行为,我们的做法就是先将给定的两个表格聚合,求出每个艺人在每一天的歌曲播放量、下载量、收藏量,然后利用这些数据作为预测的输入数据。

为了建立数据分析模型,我们对数据进行可视化分析: 比如对于歌手03c6699ea836decbc5c8fc2dbae7bd3b 我们绘制出了该歌手每一首歌曲的播放收藏和下载数据,然后计算了他所有歌曲183天的播放、下载、收藏和播放的100log值,如图所示: image 同时绘制该歌手的粉丝数据如图所示: image 如果把所有歌手的图放一块,我们可以发现,除了发布歌曲的节点外,多数变化具有周期性,而且收藏和下载比在一定程度上可以衡量一个歌手的发展潜力 现在的算法模型比较简单,用到的思想也就是简单的时间序列方法。

  • 将前一段时间的数据求均值,作为后继的结果,然后移动窗口,再求均值
  • 调整窗口的大小可以得到不同的结果,不断调整可以得到一个较好的结果
  • 不同数据的波动性不同对结果的影响较大,我们旨在产生较为稳定的数据,所以方差小的窗口比大的好
  • 下载量和收藏量数据也要利用起来
  • 考虑去掉窗口中的最大值和最小值,增加结果的稳定性

算法伪代码

获得每个歌手183天内的所有歌曲的单天播放收藏下载数
对每个歌手最后多个窗口去掉最值的数据求方差
选择参数播放下载比为183天的收藏均值除以下载均值的结果
设置合适的窗口大小
while (60天数据没有生成完):
    滑动窗口;
    去最值
    计算均值 m;
    m = m*h(播放下载比);#h()为关于播放下载比的一个函数,还在设计之中
    设置m为当前播放量;

模型依然在改进中……