阿里音樂流行趨勢預測大賽,賽后總結


一、賽題介紹

1、賽題數據:

已知x個歌曲藝人在阿里音樂上的用戶記錄數據( 2015年03月01日-2015年08月30日)
  • 用戶行為表:一行記錄某個用戶某日對某首歌曲的操作,包括:播放,下載,收藏

  • 歌曲藝人表:一行記錄某個藝人在某日發行某首歌曲的基本信息,其中包括該收歌曲的專輯收錄時間,初始播放量,歌唱語言以及歌唱者的性別組成

預測這x個藝人在之后的2個月 (2015年09月01日-2015年10月30日) ,共60天內每日的播放量。
選手提交表:一行記錄某個藝人某日的播放量

2、賽制介紹

比賽共分為初賽, 復賽2個環節,各給1個月時間,每日定點提交一次結果,線上評分。
每個環節的最后7天時間會切換數據,重新 評分 排名,以此分數作為該環節的最后得分。
  • 初賽離線下載建模:50個藝人和565,2231條用戶記錄,切換數據后為100個藝人和1588,4087條用戶記錄。
  • 復賽在線上數據平台上建模:100個藝人,切換數據后為1000個藝人和18,3981,9438條用戶記錄。

二、分析思路

1、分析評分指標

提交結果的最終評分是按照F值計算的,從計算公式來看F是由每個藝人的評分相加得到的,每個藝人的得分是由歸一化方差 (sigma)和 (phi)相乘得到的。
其中 是當前藝人的每日實際播放量相加開根號得到的, 每個藝人的參數 有且只有一個固定值,它的大小取決於每個藝人的60天播放量總和值,當某個藝人的總播放量較大時, 就大,F也就變大了,由此可知:60天總播放量越大的藝人,預測越准,評分會越高,這是個快速提分的方法

從公式來看參數 是由某藝人提交的每日播放量與實際播放量的差值除以實際播放量,對該值平方后取60天的平均值,開根號得到的。這個參數反應了提交結果S與實際播放量T之間的差距。差越小,預測越精准,(1- )越大,F就大。而當差過大超過了實際播放量T,此時 >1, (1- )為負數,此時對該藝人評分為負,綜合累加的F值會更小。由此可知,若預測中存在某個藝人結果極端不准的情況,會使評分F下降得更多,因此也要保證所有藝人的平均預測准確性。即 盡量保持平穩的值,突發值很容易使結果變差。


2、初探規律

根據題目要求,可以確定這是一個回歸預測類題目,已知前6個月歌曲藝人及其用戶記錄,預測后兩個月每日的藝人播放量值。
建模的流程是:
預處理-->提取特征並篩選-->模型(多個自變量預測一個連續因變量值)-->預測-->評估
初探數據規律,是為了提取重要特征作為后續建模的備選樣本變量。
開腦洞,研究數據:
  • 首先可以看出用戶記錄表中的用戶每日播放,下載和收藏歌曲量是預測未來60天每個藝人播放量的重要依據,可以將其作為重要特征。
  • 其次,在不考慮突變和周期規律的情況下,該時間序列是具有短期自相關性的,即相鄰的時間序列值具有連續性。很顯然要預測9、10月的每日播放量,從已知的8月30日開始倒推,離待預測時間越近的幾個月的信息與待預測值相關性較大,可以作為主要預測依據。

  • 用戶記錄表中每條記錄gmt_create記錄是可以將每日用戶的播放行為精確到每小時,將用戶行為按小時划分也許會獲得在時間上的高分低谷特征規律以輔助預測未來60天的播放量的周期規律

  • 在歌曲藝人表中,查看數據會發現有部分歌曲的發行時間記錄publish_time是在2015年3月以后到2016年的,而截止2015年3月1日前的初始播放量數據song_init_plays確為較大的值,官方解釋說是藝人有些歌曲是在之后發行專輯的,因此發行記錄比較晚,而歌曲已經有初始播放量了。專輯發行的炒作,很大可能會導致在publish_time出現播放量小范圍的突增現象,有助於推測未來數據的突增日期及其播放量。

  • 整理數據會發現,在用戶前記錄表(6個月)中的歌曲總數小於在歌曲藝人表中的歌曲個數,如初賽未換數據前用戶記錄表有1,0278首歌曲,而歌曲藝人表中有1,0842首歌曲。這是因為有些藝人的某些歌曲太過老舊,用戶點播率較低。而歌曲和用戶記錄數據是隨機抽樣得到的,因此產生這種情況。

  • 歌曲語言數據Language和性別Gender是做過脫敏處理的類型數據,官方給出Gender分別代表着女性,男性和樂隊。語言估計有漢語,粵語,英語等等。這兩個記錄值需要畫圖分析它與預測播放量有什么關系,也許可以分類不同類型的藝人時間序列趨勢走向。

實驗結果發現:
1、 用距離預測時間最近的時間段作為預測值是比較理想的方法,因此在初賽時嘗試畫出50藝人在8月內的播放量取值箱形圖。如下,可以看到每個藝人各自8月每日播放量數值,可以從圖中區分高播放量的藝人和一般播放量的藝人。 根據評分指標,若能將播放量越大的藝人預測越准,評分會提升。因此很明顯要對 高播放量的藝人序列多加關注,同時應該進一步研究藝人序列的分類方法。
2、 如下畫出按 性別和語言分類的 8月藝人播放量取值 箱形圖,以及對應類別藝人數據量的柱狀圖,由於有些藝人的不同歌曲語言不同,因此這里的語言類別是按照藝人最常用的歌曲語言做分類。從圖中粗略判斷性別為3的藝人播放量最低,語言1,4,11的藝人的每日播放量較高。
如下是按照8月30日的每個藝人的播放量值,以語言分類為橫坐標,顏色值區分藝人性別,發現性別為3的藝人播放量並不一定最低,而語言為1,4,11的藝人播放量滿足8月播放量相對較高,或者其高低播放量差距較大的數據規律。於是可以嘗試按語言將藝人分類,初賽時嘗試將Language=1,4,11定義高播放量密集區,對這21個藝人做細致研究,剩余29個藝人直接用0830作為預測值。在這21藝人中挑選出重點研究藝人,其滿足要不是數值比較高,要不是分布比較穩定的時間序列規律,最后篩選了13個藝人高播放量藝人研究預測。
 
如圖是 Language=1,4,11的藝人對應的8月密度曲線,可以看出 Language=4,11時密度曲線有2座波峰,而1的時候則以一波峰為主,右側有大量尾巴。這些信息可以作為區分高播放量藝人和普通藝人的邊界。
 
3、論壇和群里有人研究 gmt_create每小時的用戶記錄,然而並未找到明顯規律。但查看總體藝人的周播放量,確實存在着周期規律。 以復賽時100藝人最高播放量為例,如下是其 7、8月時序圖,除了7月初(7月7日)前,之后基本是平穩的。 (詳細參看 阿里音樂預測小結2——藝人周期規律
 
   按每周7天計算每月平均播放量如下,可以發現這個分布規律與工作節假日規律相關
根據之前群友提供的聽歌年齡分布,用戶在25到31歲所占比重最大,這類人大部分是上班族,因此每日聽歌習慣就是和上班習慣掛鈎,基本符合如下上班族規律:
  • 周1,2好好工作精神飽滿
  • 周3、4疲勞成極寫不進去
  • 周5快要節假再恢復精神工作一點
  • 周6、7逛街玩耍,休息Hi起來
根據上圖,由於大部分人聽歌是用來放松的,也就是說最疲勞的時候(周三)最需要放松,此時聽歌人數劇增,而周6、7節假日相對放松活動選擇很多,聽歌人數反而不多。由此可以按照工作日和節假日來區分,很明顯7、8月每個月都是節假日要比工作日低一些:
在復賽時,藝人種類較多,不同藝人的周期規律都會影響時間序列結果。因此可以按照周期規律作為藝人的分類依據。

4、觀察publish_time在2015年3月到8月的內對應的藝人時間序列圖像,確實在該日期點附近存在起伏或者突增。但是由於在2015年9、10月的publish_time記錄較少,而這種突增現象不好度量,因此暫不考慮。根據publish_time可以發現有的藝人每年會更新,這類藝人比較活躍,時間序列起伏明顯;有的藝人已經停更了,停更的藝人時間序列就平穩的。以此也可以作為藝人分類依據。
官網給出song_init_plays收錄的音樂大小不准,播放量只是一個參考,是3月1號之前的統計,因此暫時不用。

3、基礎模型

建模初期,主要是集中在預處理數據和基礎模型的建立。
預處理-->提取特征並篩選-->模型(多個自變量預測一個連續因變量值)-->預測-->評估

3.1預處理

3σ准則: 它是先假設一組檢測數據只含有隨機誤差,對其進行計算處理得到標准偏差,按一定概率確定一個區間,認為凡超過這個區間的誤差,就不屬於隨機誤差而是粗大誤差,含有該誤差的數據應予以剔除。3σ原則為:
  • 數值分布在(μ-σ,μ+σ)中的概率為0.6826
  • 數值分布在(μ-2σ,μ+2σ)中的概率為0.9544
  • 數值分布在(μ-3σ,μ+3σ)中的概率為0.9974
因為藝人和用戶數據是隨機抽樣,且數據量較大,大部分藝人時間序列符合正態分布的密度曲線,下是部分藝人8月每日播放量的密度曲線。我們就按照2倍標准差 (SD)的方法粗略的剔除數據。

但這種預測結果也並不一定完全正確,因為前提假設需滿足正態分布。 觀察 如下的藝人播放量並不一定存在有異常數據,但是用2sd數據剔除異常后,在第0天附近的較低的播放量將會被剔除掉。

其次,若回歸模型中以時間作為變量,剔除掉的空缺時間數據需要被填補,如下所示:

3.2建立基礎模型

建模初期,根據規律:用距離預測時間較近的時間段作為預測值比較准確。
  • 單點預測方法:以最后一天8月30日播放量,8月最后一周,8月下半月,8月,以及7月8月的中值和均值日播放量作為藝人的預測結果。
  • 多點預測方法:線性回歸模型,時間序列模型

3.3線上線下評估

除了每天10點的線上提交評分,線下測試評分可以輔助預測建模結果。根據評分指標,在線下以3月到6月數據為測試集,以7、8月藝人播放量作為結果集,計算線下評分。但根據實際測評結果,不同模型下線上線下測評結果有很多出入。

三、分類與預測

3.1分類

根據規律,可以按照用戶,藝人分別進行分類

1)按用戶分類

  • 參考2015年公交線路預測冠軍袁光PPT中的分類方法,以初賽播放量最高藝人為例,畫出該藝人的用戶183的播放量圖像,如下是將用戶總小到大取前126499個(99.5%)用戶的圖像:橫軸是用戶按播放量從小到大的編號,縱軸是用戶總播放量。(詳細參看阿里音樂預測小結1——用戶分類與建模
 可以看到用戶兩級分化,一部分用戶的播放量特別的小,不到50;另一部分特點的大,超過150。由此考慮對藝人的用戶分類為粉絲用戶和隨機用戶2類。設n=35,此時總用戶人數是12,7135,一般用戶a有12,0375,粉絲用戶b有6760個,而此時一般用戶a總播放量61,7199;粉絲用戶b總播放量為53,6210,2類用戶的播放量值恰巧接近總播放量的一半。 這說明 一般用戶和粉絲用戶對 藝人的播放量的取值貢獻都很重要。 如圖是藝人每日的播放量(黑線),一般用戶a(藍線)和粉絲用戶b(紅線)的播放量,其中綠色圈圈明顯看到兩類用戶將原先混雜在一起的總播放量序列時間規律區別開來。 從圖中可以看出不同的用戶點播趨勢是不同的:一般用戶上升,粉絲用戶下降。

 進一步分析,根據公式:
藝人當日播放量=藝人當日用戶數*當日用戶平均點播量
分別研究藝人每日 用戶平均播放量和每 日點播用戶數
  • 每日平均點播量
如圖:粉絲用戶(紅線)每日平均播放量有二次曲線的下降趨勢,這可以解釋總播放量那張圖粉絲用戶是下降的; 一般用戶(藍線)相比於粉絲用戶每日平均播放量基本是一個平穩的 正態序列。
userb15e8846dc61824c1242a6b36796117b_mean_margin35.png
  • 每日用戶人數
如圖,所有序列都呈現出較強的周期性(一周7天的特征), 一般用戶(藍線)每日用戶數呈上升趨勢,這可以解釋總播放量那張圖一般用戶是上升的; 粉絲用戶(紅線)每日用戶人數先增多后減少;但 相比於一般用戶,人數趨於平穩序列(極差大概是500)。
userb15e8846dc61824c1242a6b36796117b_num_margin35.png
從以上規律總結,可以將2類用戶的每日播放量分解為 每日平均用戶點播量和每日用戶人數的乘積,並且大致符合以下規律:
  • 每日平均點播量(無周期)
    1、粉絲用戶序列b1:有趨勢
    2、一般用戶序列a1:平穩
  • 每日用戶人數(有周期,7天)
    1、粉絲用戶序列b2 :平穩
    2、一般用戶序列a2 :有趨勢
由此挖掘出一個規律是:
1、 粉絲用戶的 每日平均播放量(b1)一般用戶的 每日用戶人數(a2),把2個時序分開做線性回歸,a1和b2用均值代替(平穩序列),再代入公式:該play=a1*a2+b1*b2
2、周期,從每日用戶人數中獲取。
但由於時間限制以及當時知識能力限制,並未再深入研究,后續看了比賽答辯PPT后發現這是有可行性的方法,可以深入研究。

2)按藝人分類

在復賽中,我們是根據 每個藝人8月播放量均值 畫出散點圖,可以很清晰的發現分類分界線是 15000,將其分為2類:高播放量藝人和低播放量藝 人,同時以8月均值作為60天每天的實際播放量,用評分公式計算完全預測准確時F值為 64296.57135,其中高播放量藝人F總和為 31413.58217,低播放量藝人F為 32882.98918,恰巧是總F值的一半,說明這2類藝人的評分都不可忽略。
這種分類過於粗略,學習了top5答辯模型后發現,需要做 更加細致的分類處理,才會有好的結果。

3.2建模

初賽是在線下,因此可以利用模型軟件嘗試較多種模型,建模方法有:
  • 規則
  • 單獨時間序列
  • 單獨線性回歸
  • 線性回歸+(殘差)時間序列AR模型
從最后評分結果來看,這種由前183天去預測后2個月(共60天)的問題,簡單的用時間序列方法,由於預測時間跨度太長,結果總是收斂成一條直線,效果並不理想。
多元線性回歸(橘線)在一些周期性規律強烈,趨勢較為平穩的時序下是不錯的選擇,如下圖所示,其中自變量由連續變量天數,每周第幾天,每月第幾天,每季第幾天,特殊天數等時間規律的虛擬變量組成。
並且在線下可以結合AR時序模型修正回歸模型( 藍線 ),如圖所示:
 
但線性回歸並不適用於所有藝人序列,如圖所示,這些預測結果偏差過大。
 線上評分結果證實,就算如下所示的預測結果也會降分,估計該趨勢最后在某一處是趨於平穩了,因此不能單純對所有藝人使用此模型擬合,仍需要對藝人序列做更細致的划分類別
因此轉而研究藝人時間序列的規律,如圖是按播放量從高到底排序前20名藝人時間序列,藍線是以8月下半月的中值作為y值所畫直線,紅線是由每個月的均值組成的分段函數,經過觀察,時序曲線大致分為
  • 總體趨勢上升性或下降至平穩型
  • 無月季規律波動水平曲線
  • 有周期規律波動水平曲線

復賽曾嘗試對時間序列用形狀,分維數,加權周長等特征結合月季同比增長量和增長率對1000條藝人序列進行聚類,然而效果並不很好,大部分序列聚在一類里,並不能突出以上分類方法。
 
由於時間,平台,以及自身知識的制約,最終以規則模型居多,結合部分多元線性回歸模型作為最好的提交結果。復賽得分:493919,排名84/500

四、總結

第一次打比賽,邊學邊比,隊友也是在比賽中結交認識的。對我來說是一次挑戰,但也確實獲得了不少經驗教訓。尤其是在賽后群里的交流以及8月的精彩答辯,都讓我獲益匪淺。在這里總結3點經驗:
1、化簡思路,從最簡單的做起,模型不是一蹴而成,是在基礎模型上一步步精細化加工得到的。比如,比賽中最初有很多賽友用了復雜的模型預測60天每天的結果,然而效果卻都沒有單點規則取值好。這道題最經典的預測技巧是將60天的預測化簡為單點的預測,這可以根據公式推導,除了規則方法,還可以進一步為此建立復雜模型,如第13名的賽友的滑窗方法 http://blog.csdn.net/lujiandong1/article/details/51933158
2、 深入挖掘,必須細化分類,如圖是季軍答辯模型,由此可見,高手是對數據業務做了細致的分類后再一步步提高分數的。

3、對於這種實際上不完全正態分布數據的一個處理技巧: 大數處罰的方法:log變換
賽后有群友向我們科普、幾乎任何模型,或者任何基於平均值的規則,都已經假設目標服從正態分布,如果目標不服從正態,做log轉換會讓它更接近正態,由此提分不少。
如下來自極客獎COM團隊答辯PPT


除此,許多人對評估指標做了深入的數學推到研究,大家各顯高招,盡管思路不同,其實只要堅持細鑽下去,總會有結果的。而我們團隊對於數據的認識還太過粗糙,應高去做進一步精細化思考。












免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM