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 從圖入手:
檢視規律與趨勢
2 提出問題:
為什麼會出現特别高的播放量?
是否有一定的節假日工作日規律?
不同歌手模組化還是單獨歌手模組化或者歌曲模組化?
不同歌手趨勢是否相同?
3 解決問題
為什麼會出現特别高的播放量?--發現兩種情況:1有人刷單2有新歌釋出
是否有一定的節假日工作日規律?--除去特殊情況,大緻有周期性節假日特征,周六日播放量會比工作日低
不同歌手模組化還是單獨歌手模組化或者歌曲模組化?--不同對象的模組化需要實際結果來指導
不同歌手趨勢是否相同?--不同歌手趨勢變化大,需要分開不同趨勢預測
4 預測過程
1、利用ODPS SQL進行了資料清洗、預處理-删除掉了認為是異常的刷單等噪聲資料(這個非常有效)
2、刻畫資料的節假日與周期性特點—使用了stl分解預測
3、刻畫資料的最近的播放趨勢—使用一階指數平滑預測(訓練資料一定得選好)-歌曲模組化最好
4、使用組合模型
5、針對預測誤差進行模型參數修正-訓練集的修正
6、針對預測誤差的個體進行分析總結出模型的缺陷(對最近有新歌的歌手預測不準)-測試集選的34有一定的指導意義,和線上不完全一緻
7、針對模型的缺陷選擇合适的模型去解決該問題(拟合最近有新歌的歌手的播放量下降到穩定的趨勢)
8、針對模型的缺陷-對于最近有新歌播放的歌手,利用去噪聲平滑,融合平滑後資料的調和平均數。
二、分析思路
1、分析評分名額
送出結果的最終評分是按照F值計算的,從計算公式來看F是由每個藝人的評分相加得到的,每個藝人的得分是由歸一化方差(sigma)和(phi)相乘得到的。
其中(phi)是目前藝人的每日實際播放量相加開根号得到的,每個藝人的參數(phi)有且隻有一個固定值,它的大小取決于每個藝人的60天播放量總和值,當某個藝人的總播放量較大時,(phi)就大,F也就變大了,由此可知:60天總播放量越大的藝人,預測越準,評分會越高,這是個快速提分的方法。
從公式來看參數(sigma)是由某藝人送出的每日播放量與實際播放量的內插補點除以實際播放量,對該值平方後取60天的平均值,開根号得到的。這個參數反應了送出結果S與實際播放量T之間的差距。差越小,預測越精準,(1-(sigma))(sigma)越大,F就大。而當差過大超過了實際播放量T,此時(sigma)>1,(1-(sigma))為負數,此時對該藝人評分為負,綜合累加的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日)前,之後基本是平穩的。
按每周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%)使用者的圖像:橫軸是使用者按播放量從小到大的編号,縱軸是使用者總播放量。
可以看到使用者兩級分化,一部分使用者的播放量特别的小,不到50;另一部分特點的大,超過150。由此考慮對藝人的使用者分類為粉絲使用者和随機使用者2類。設n=35,此時總使用者人數是12,7135,一般使用者a有12,0375,粉絲使用者b有6760個,而此時一般使用者a總播放量61,7199;粉絲使用者b總播放量為53,6210,2類使用者的播放量值恰巧接近總播放量的一半。這說明一般使用者和粉絲使用者對藝人的播放量的取值貢獻都很重要。如圖是藝人每日的播放量(黑線),一般使用者a(藍線)和粉絲使用者b(紅線)的播放量,其中綠色圈圈明顯看到兩類使用者将原先混雜在一起的總播放量序列時間規律差別開來。從圖中可以看出不同的使用者點播趨勢是不同的:一般使用者上升,粉絲使用者下降。
進一步分析,根據公式:
藝人當日播放量=藝人當日使用者數*當日使用者平均點播量
分别研究藝人每日使用者平均播放量和每日點播使用者數
-
每日平均點播量
如圖:粉絲使用者(紅線)每日平均播放量有二次曲線的下降趨勢,這可以解釋總播放量那張圖粉絲使用者是下降的;一般使用者(藍線)相比于粉絲使用者每日平均播放量基本是一個平穩的正态序列。
-
每日使用者人數
如圖,所有序列都呈現出較強的周期性(一周7天的特征),一般使用者(藍線)每日使用者數呈上升趨勢,這可以解釋總播放量那張圖一般使用者是上升的;粉絲使用者(紅線)每日使用者人數先增多後減少;但相比于一般使用者,人數趨于平穩序列(極差大概是500)。
從以上規律總結,可以将2類使用者的每日播放量分解為每日平均使用者點播量和每日使用者人數的乘積,并且大緻符合以下規律:
- 每日平均點播量(無周期)
1、粉絲使用者序列b1:有趨勢 2、一般使用者序列a1:平穩
- 每日使用者人數(有周期,7天)
1、粉絲使用者序列b2:平穩 2、一般使用者序列a2:有趨勢
由此挖掘出一個規律是:
*1、粉絲使用者的每日平均播放量(b1)和一般使用者的每日使用者人數(a2),把2個時序分開做線性回歸,a1和b2用均值代替(平穩序列),再代入公式:該play=a1a2+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轉換會讓它更接近正态,由此提分不少。
除此,許多人對評估名額做了深入的數學推到研究,大家各顯高招,盡管思路不同,其實隻要堅持細鑽下去,總會有結果的。而我們團隊對于資料的認識還太過粗糙,應高去做進一步精細化思考。
原文釋出時間為:2018-07-27
本文作者:大資料挖掘DT機器學習
本文來自雲栖社群合作夥伴“
大資料挖掘DT機器學習”,了解相關資訊可以關注“大資料挖掘DT機器學習”。