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

1、賽題介紹

一、賽題數據:

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

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

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

二、賽制介紹

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

2、分析思路

一、分析評分指標

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

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


二、初探規律

根據題目要求,能夠肯定這是一個迴歸預測類題目,已知前6個月歌曲藝人及其用戶記錄,預測後兩個月每日的藝人播放量值。
建模的流程是:
預處理-->提取特徵並篩選-->模型(多個自變量預測一個連續因變量值)-->預測-->評估
初探數據規律,是爲了提取重要特徵做爲後續建模的備選樣本變量。
開腦洞,研究數據:
  • 首先能夠看出用戶記錄表中的用戶每日播放,下載和收藏歌曲量是預測將來60天每一個藝人播放量的重要依據,能夠將其做爲重要特徵。
  • 其次,在不考慮突變和週期規律的狀況下,該時間序列是具備短時間自相關性的,即相鄰的時間序列值具備連續性。很顯然要預測九、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分別表明着女性,男性和樂隊。語言估計有漢語,粵語,英語等等。這兩個記錄值須要畫圖分析它與預測播放量有什麼關係,也許能夠分類不一樣類型的藝人時間序列趨勢走向。

實驗結果發現:
一、 用距離預測時間最近的時間段做爲預測值是比較理想的方法,所以在初賽時嘗試畫出50藝人在8月內的播放量取值箱形圖。以下,能夠看到每一個藝人各自8月每日播放量數值,能夠從圖中區分高播放量的藝人和通常播放量的藝人。 根據評分指標,若能將播放量越大的藝人預測越準,評分會提高。所以很明顯要對 高播放量的藝人序列多加關注,同時應該進一步研究藝人序列的分類方法。
二、 以下畫出按 性別和語言分類的 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的時候則以一波峯爲主,右側有大量尾巴。這些信息能夠做爲區分高播放量藝人和普通藝人的邊界。
 
三、論壇和羣裏有人研究 gmt_create每小時的用戶記錄,然而並未找到明顯規律。但查看整體藝人的周播放量,確實存在着週期規律。 以複賽時100藝人最高播放量爲例,以下是其 七、8月時序圖,除了7月初(7月7日)前,以後基本是平穩的。 (詳細參看 阿里音樂預測小結2——藝人週期規律
 
   按每週7天計算每個月平均播放量以下,能夠發現這個分佈規律與工做節假日規律相關
根據以前羣友提供的聽歌年齡分佈,用戶在25到31歲所佔比重最大,這類人大部分是上班族,所以每日聽歌習慣就是和上班習慣掛鉤,基本符合以下上班族規律:
  • 周1,2好好工做精神飽滿
  • 週三、4疲勞成極寫不進去
  • 周5快要節假再恢復精神工做一點
  • 週六、7逛街玩耍,休息Hi起來
根據上圖,因爲大部分人聽歌是用來放鬆的,也就是說最疲勞的時候(週三)最須要放鬆,此時聽歌人數劇增,而週六、7節假日相對放鬆活動選擇不少,聽歌人數反而很少。由此能夠按照工做日和節假日來區分,很明顯七、8月每月都是節假日要比工做日低一些:
在複賽時,藝人種類較多,不一樣藝人的週期規律都會影響時間序列結果。所以能夠按照週期規律做爲藝人的分類依據。

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

三、基礎模型

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

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月數據爲測試集,以七、8月藝人播放量做爲結果集,計算線下評分。但根據實際測評結果,不一樣模型下線上線下測評結果有不少出入。

3、分類與預測

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類用戶的每日播放量分解爲 每日平均用戶點播量和每日用戶人數的乘積,而且大體符合如下規律:
  • 每日平均點播量(無週期)
    一、粉絲用戶序列b1:有趨勢
    二、通常用戶序列a1:平穩
  • 每日用戶人數(有周期,7天)
    一、粉絲用戶序列b2 :平穩
    二、通常用戶序列a2 :有趨勢
由此挖掘出一個規律是:
一、 粉絲用戶的 每日平均播放量(b1)通常用戶的 每日用戶人數(a2),把2個時序分開作線性迴歸,a1和b2用均值代替(平穩序列),再代入公式:該play=a1*a2+b1*b2
二、週期,從每日用戶人數中獲取。
但因爲時間限制以及當時知識能力限制,並未再深刻研究,後續看了比賽答辯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

4、總結

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

三、對於這種實際上不徹底正態分佈數據的一個處理技巧: 大數處罰的方法:log變換
賽後有羣友向咱們科普、幾乎任何模型,或者任何基於平均值的規則,都已經假設目標服從正態分佈,若是目標不服從正態,作log轉換會讓它更接近正態,由此提分很多。
以下來自極客獎COM團隊答辯PPT


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









相關文章
相關標籤/搜索