郁偉生,鄧 偉,張 瑤,李蜀瑜,
(1.陜西師范大學(xué)網(wǎng)絡(luò)信息中心,陜西 西安 710119;2.陜西師范大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,陜西 西安 710119)
音樂是反映人類現(xiàn)實(shí)生活情感的一種藝術(shù),當(dāng)下音樂的流行趨勢成為了眾人關(guān)注的話題。在如今的大數(shù)據(jù)時(shí)代,音樂聽眾將會(huì)決定音樂的流行趨勢。聽眾在眾多音樂平臺(tái)上試聽、下載、收藏、分享音樂,以及在各大社交網(wǎng)絡(luò)、視頻網(wǎng)站、貼吧、論壇上對音樂進(jìn)行關(guān)注、評論、轉(zhuǎn)發(fā)、點(diǎn)贊,這些行為反映出聽眾對音樂的喜好。當(dāng)今音樂的流行趨勢,可以通過對聽眾的喜好趨向進(jìn)行深度挖掘和分析預(yù)測獲得。利用龐大的曲庫資源和用戶行為形成音樂大數(shù)據(jù),通過精準(zhǔn)的大數(shù)據(jù)分析,可以有效預(yù)測音樂的潮流走向,真正實(shí)現(xiàn)聽眾喜好的聚合決定音樂的流行發(fā)展趨勢。
阿里音樂經(jīng)過7年發(fā)展,現(xiàn)已擁有了數(shù)百萬的曲庫資源,及數(shù)億次的用戶試聽、下載、收藏等行為。阿里舉辦的音樂流行趨勢預(yù)測大賽基于阿里云平臺(tái)強(qiáng)大的數(shù)據(jù)計(jì)算能力,通過用戶的歷史行為數(shù)據(jù),預(yù)測下一階段藝人播放量,挖掘出即將成為關(guān)注熱點(diǎn)的藝人,從而準(zhǔn)確把控未來音樂的流行趨勢。本文以大賽復(fù)賽提供的音樂用戶從2016年3月~8月的歷史播放數(shù)據(jù)為基礎(chǔ),借鑒STL、Holt-Winters模型中的分解思想,分別從長期趨勢、周期兩個(gè)方面進(jìn)行分析,對長期趨勢編碼和分類,并基于類別最優(yōu)值選擇和子序列模式匹配法,提出了E-TSMP(Extend-Time Series based Music Prediction)算法,最終在阿里音樂平臺(tái)上實(shí)現(xiàn)了對2016年9月~10月藝人播放量較為準(zhǔn)確的預(yù)測。
對音樂流行趨勢的預(yù)測可以采用時(shí)間序列、回歸等預(yù)測模型來實(shí)現(xiàn)[1 - 7]。Li[8]提出的自回歸積分滑動(dòng)平均模型ARIMA(Auto Regressive Integrated Moving Average model),雖能很好地根據(jù)動(dòng)態(tài)數(shù)據(jù)及自身的相關(guān)特征進(jìn)行預(yù)測,但因ARIMA中差分次數(shù)d和p、q參數(shù)的選取不具備通用性,需對每個(gè)藝人數(shù)據(jù)預(yù)處理分類后逐一進(jìn)行參數(shù)調(diào)整。Chatfield等[9]提出的三次指數(shù)平滑TOES(Three Order Exponential Smoothing)模型可以對同時(shí)含有趨勢和季節(jié)性的時(shí)間序列進(jìn)行預(yù)測,但該模型對數(shù)據(jù)集和時(shí)間段的選取比較敏感,此外針對高于二階擬合的曲線會(huì)出現(xiàn)不可控的發(fā)散狀態(tài)。Cleveland等[10]提出的STL分解(Seasonal and Trend decomposition using Loess)模型雖兼具通用性和魯棒性,但只適合加法模型,且不能根據(jù)數(shù)據(jù)突然變化進(jìn)行自動(dòng)處理。Jain等[11]提出的遞歸神經(jīng)網(wǎng)絡(luò)RNN(Recurrent Neural Network)雖可以根據(jù)之前的數(shù)據(jù)給出相應(yīng)反饋,并采用非線性動(dòng)力系統(tǒng),但收斂性差,即使加入相應(yīng)的特征,預(yù)測效果也不理想。
采用ARIMA等時(shí)間序列模型中標(biāo)準(zhǔn)的時(shí)間序列函數(shù)對每個(gè)藝人的日播放量曲線進(jìn)行擬合和預(yù)測,若需要預(yù)測的日期較長,容易出現(xiàn)過擬合等問題。在大數(shù)據(jù)環(huán)境下,對音樂進(jìn)行流行趨勢預(yù)測,應(yīng)當(dāng)對模型建立、算法設(shè)計(jì)、實(shí)驗(yàn)優(yōu)化等方面進(jìn)行綜合考慮。
預(yù)測效果表示預(yù)測值和真實(shí)值之間的差距,通常定義一個(gè)打分函數(shù)來衡量預(yù)測效果。因此,阿里大賽給出相應(yīng)的評估指標(biāo),用于判斷預(yù)測值的準(zhǔn)確度。設(shè)藝人j在第h天的實(shí)際播放量為Dj,h,藝人集合為A,算法預(yù)測得到藝人j在第h天的播放量為Sj,h,則藝人j的歸一化方差σj可以根據(jù)藝人N天的實(shí)際播放量和預(yù)測值的方差求得:
歸一化方差σj反映了預(yù)測結(jié)果Sj和實(shí)際播放量Dj之間的差距,(1-σj)值越大,表示預(yù)測越精準(zhǔn)。根據(jù)當(dāng)前藝人j的每日實(shí)際播放量相加后的算術(shù)平方根求對應(yīng)權(quán)重φj:
定義打分函數(shù)F:
*φj
并以此作為預(yù)測標(biāo)準(zhǔn),F(xiàn)值越大,預(yù)測值越接近實(shí)際值。
在音樂的流行趨勢預(yù)測過程中,借鑒了STL、Holt-Winters模型中的分解思想,在類別最優(yōu)值選擇法的基礎(chǔ)之上,提出TSMP(Time Series based Music Prediction)算法。為了實(shí)現(xiàn)對音樂流行趨勢更為精準(zhǔn)的預(yù)測,基于子序列模式匹配法及對近期發(fā)布新專輯的附加處理,提出E-TSMP算法,針對2016年8月中下旬某些藝人的日播放量突然成倍增加的情況,有效地解決了該類情況下預(yù)測趨勢后續(xù)走向問題。
為了實(shí)現(xiàn)音樂更精準(zhǔn)的流行趨勢預(yù)測,需要對每個(gè)時(shí)間序列分別從長期趨勢、周期、隨機(jī)干擾項(xiàng)三部分進(jìn)行分析。因?yàn)殡S機(jī)干擾項(xiàng)的不確定性,因此所有的研究都忽略了該部分。
阿里比賽提供了用戶行為信息和歌曲藝人信息,其中用戶行為信息記錄用戶對歌曲進(jìn)行的播放、下載、收藏等操作,歌曲藝人信息包含歌曲專輯收錄時(shí)間、初始播放量、歌曲語言、歌曲類別等內(nèi)容。只有在提供的眾多信息中提取出有效信息,才能更好地對數(shù)據(jù)進(jìn)行分析,實(shí)現(xiàn)對每個(gè)藝人音樂播放量更為精準(zhǔn)的預(yù)測。因此,把信息處理成每個(gè)藝人對應(yīng)的日播放量序列、周播放量均值序列、月播放量均值序列及日變化率序列,對數(shù)據(jù)進(jìn)行的預(yù)處理為TSMP算法的實(shí)現(xiàn)奠定了基礎(chǔ)。
在對每個(gè)藝人日播放量曲線進(jìn)行擬合和預(yù)測的過程中,曲線趨勢發(fā)展成為了至關(guān)重要的問題,而重要的外部事件是影響曲線趨勢發(fā)展的一大關(guān)鍵因素,比如:預(yù)測期間藝人發(fā)布新專輯、開演唱會(huì)、參加選秀節(jié)目等。在排除外部事件干擾的前提下,計(jì)算每個(gè)藝人播放量的月平均值、周平均值、日平均值并進(jìn)行編碼處理,這些編碼處理的均值可以作為每個(gè)藝人播放量趨勢的預(yù)測。定義基本趨勢和增量趨勢作為編碼規(guī)則,例如月度編碼:若當(dāng)月播放量均值高于前一月均值,則基本趨勢對應(yīng)的編碼值為1,否則為0;若當(dāng)月播放量均值高于前一月均值,則以當(dāng)月均值除以上月均值的商值取整作為增量趨勢編碼值,否則增量趨勢編碼值為上月均值除以當(dāng)月均值的商值取整。具體編碼過程如圖1所示。
Figure 1 Coding method圖1 編碼方法
根據(jù)月編碼、周編碼、日編碼中的基本趨勢和增量趨勢兩部分,基于k-means聚類算法[12,13],最終將阿里提供的數(shù)據(jù)集劃分成24個(gè)基本類別。通過對不同類別進(jìn)行大量測試與分析,最終采用類別最優(yōu)值選擇法對不同類別的藝人進(jìn)行日播放量預(yù)測。類別最優(yōu)值選擇法的思想是:選取時(shí)間序列的某個(gè)特征值作為其預(yù)測值[14],例如百分位數(shù)、后3天均值、后7日均值等,構(gòu)成的如圖2所示的候選方法預(yù)測集合用來選取特征值。
Figure 2 Candidate prediction method set based on eigenvalue圖2 基于特征值的候選預(yù)測方法集合
大多數(shù)藝人的時(shí)間序列相對比較平穩(wěn),實(shí)驗(yàn)證明,若預(yù)測的天數(shù)較長,與波動(dòng)性的曲線相比,均值的預(yù)測效果更好。采用3~7月數(shù)據(jù)作為訓(xùn)練集,8月數(shù)據(jù)作為測試集,進(jìn)行預(yù)測值的特征值選取,將打分函數(shù)F計(jì)算的結(jié)果作為依據(jù),并進(jìn)行最大化選取,以便做最優(yōu)預(yù)測。
對任意類Ck,候選方法集為S={s(1),s(2),…,s(n)},最優(yōu)預(yù)測方法的選取公式為:
s=
算法1類別最優(yōu)值選擇算法COVSA(S,Dk1,Dk2)
輸入:S:候選方法預(yù)測集合;Dk1:類別Ck內(nèi)所有藝人3~7月內(nèi)日播放量序列(訓(xùn)練集);Dk2:類別Ck內(nèi)所有藝人8月內(nèi)日播放量序列(驗(yàn)證集)。
輸出:m:類別Ck的最優(yōu)預(yù)測方法。
Begin
f←0;m←s(1);/*定義打分函數(shù)初始值為0,m為最優(yōu)預(yù)測方法*/
Fors(i)∈Sdo//遍歷候選方法預(yù)測集合
S←Ss(i)};
P←s(i)(Dk1);/*對訓(xùn)練集采用候選方法s(i)得到8月份類別Ck內(nèi)所有藝人的預(yù)測集*/
fi←F(P,Dk2);/*計(jì)算采用候選方法s(i)后的分?jǐn)?shù)fi*/
iffi>fthen/*分?jǐn)?shù)fi比之前方法獲得的分?jǐn)?shù)f高,重設(shè)s(i)作為最優(yōu)預(yù)測方法*/
f←fi;
m←s(i);
end
end
Returnm;//輸出最優(yōu)預(yù)測方法。
End
Figure 3 Classification rules圖3 分類規(guī)則
隨機(jī)選出類別Ck中3~8月藝人j的音樂播放量作為數(shù)據(jù)集,應(yīng)用類別最優(yōu)值選擇算法最終輸出類別Ck的最優(yōu)預(yù)測方法m,對于類別k中的其他藝人,用其最優(yōu)預(yù)測方法m預(yù)測9~10月份的日播放量。具體分類規(guī)則及對應(yīng)最優(yōu)預(yù)測方法如圖3所示?;陬悇e最優(yōu)值選擇方法,提出了TSMP算法,實(shí)現(xiàn)了對9~10月藝人總播放量的預(yù)測,偽代碼如下所示:
算法2音樂流行趨勢預(yù)測算法TSMP(U,A,S)
輸入:U:3~8月用戶行為數(shù)據(jù)集合;A:藝人基本信息集合;S:候選預(yù)測方法集合。
輸出:P:9~10月所有藝人總播放量預(yù)測值。
Begin
P←0;//設(shè)初始預(yù)測值為0
(D,W,M)←Pre(U,A);/*把數(shù)據(jù)集U,A預(yù)處理為日、周、月播放量均值序列集D,W,M*/
(DT,WT,MT)←Cod(D,W,M);/*對數(shù)據(jù)集D,W,M進(jìn)行日、周、月編碼形成編碼序列集DT,WT,MT*/
Ck←Sort(DT,WT,MT);/*采用k-means算法對DT,WT,MT進(jìn)行劃分構(gòu)成類別Ck,及與類別對應(yīng)的日播放量序列集DCk*/
Forck∈Ckdo//遍歷分類集合
Ck←Ckck};
Pck←0;/*設(shè)類別ck中所有藝人9~10月總播放量初始值為0*/
m←COVSA(S,Dck);/*根據(jù)類ck內(nèi)所有藝人日播放量序列Dck中3~8月的日播放量,由COVSA獲得類別ck最優(yōu)預(yù)測方法m*/
Pck←m(Dck);/*預(yù)測類別ck中所有藝人9~10月總播放量Pck*/
P←P+Pck;
end
ReturnP;/*輸出9~10月所有藝人總播放量預(yù)測值*/
End
在阿里提供的3~8月份數(shù)據(jù)集里,通過分析周編碼、日編碼的增量趨勢部分發(fā)現(xiàn),在8月中下旬部分藝人的播放量突然成倍增加,若對此類藝人繼續(xù)使用最優(yōu)預(yù)測方法,最終預(yù)測結(jié)果與真實(shí)值偏差會(huì)較大。因此,借鑒其他藝人歷史數(shù)據(jù)中出現(xiàn)過的類似曲線,提出了子序列模式匹配法SSPMM(Sub-Sequence Pattern Matching Method),對該類別藝人的預(yù)測方法做了相應(yīng)的改進(jìn)。子序列模式匹配法思想是:首先計(jì)算所有藝人3~8月份歌曲播放量日變化率序列,根據(jù)觀察及大量實(shí)驗(yàn)進(jìn)行驗(yàn)證,最終選擇截取待預(yù)測藝人最后15天的日變化率序列并作為待匹配子序列集 ,然后根據(jù)序列集中藝人的日變化率,找出與待匹配子序列集歐氏距離最小的5個(gè)子序列,選取其中后續(xù)子序列變化比較平穩(wěn)的3個(gè)子序列作為最佳子序列, 最后求取最佳子序列的日變化率均值,作為待預(yù)測藝人的日變化率序列,計(jì)算出待預(yù)測藝人9~10月份的日播放量趨勢中回落后的平穩(wěn)部分的預(yù)測值。在回落過程,采用n段梯度法求取回落過程中的預(yù)測值,第i個(gè)回落點(diǎn)的預(yù)測值為:
其中,d1為回落點(diǎn)藝人的日播放量,d2為預(yù)測藝人平穩(wěn)點(diǎn)的預(yù)測值。子序列模式匹配法的具體實(shí)現(xiàn)過程如圖4所示。
Figure 4 Sub-sequence pattern matching method圖4 子序列模式匹配法
此外對部分類別的預(yù)測值做了附加處理AD(Additional Processing):針對近兩個(gè)月有新專輯的藝人,根據(jù)專輯的發(fā)布時(shí)間對時(shí)間做分段處理,依據(jù)以往發(fā)布專輯的藝人的播放量變化率,分別求取對應(yīng)的權(quán)重因子α,對發(fā)布專輯后一段時(shí)間的日播放量的預(yù)測值的精確度做了相應(yīng)提升,AD算法具體處理過程如圖5所示。
Figure 5 Additional processing圖5 附加處理
在對所有藝人播放量的時(shí)間序列進(jìn)行周期性疊加的實(shí)驗(yàn)中,預(yù)測效果并不理想。為了能得到良好的實(shí)驗(yàn)效果,在預(yù)測所有藝人的播放量的實(shí)驗(yàn)過程中,沒有考慮周期性的疊加。基于類別最優(yōu)值選擇和子序列模式匹配法提出的E-TSMP算法,實(shí)現(xiàn)了對2016年9~10月藝人播放量更為精準(zhǔn)的預(yù)測,偽代碼如下所示:
算法3擴(kuò)展音樂流行趨勢預(yù)測算法E-TSMP(U,A,S)
輸入:U:3~8月用戶行為數(shù)據(jù)集合;A:藝人基本信息集合;S:候選預(yù)測方法集合。
輸出:P:9~10月所有藝人總播放量預(yù)測值。
Begin
P←0;//設(shè)初始預(yù)測值為0
(D,W,M)←Pre(U,A);/*把數(shù)據(jù)集U,A預(yù)處理為日、周、月播放量均值序列集D,W,M*/
(DT,WT,MT)←Cod(D,W,M);/*對數(shù)據(jù)集D,W,M進(jìn)行日、周、月編碼形成編碼序列集DT,WT,MT*/
Ck←Sort(DT,WT,MT);/*采用k-means算法對DT,WT,MT進(jìn)行劃分構(gòu)成類別Ck,及與類別對應(yīng)的日播放量序列集DCk*/
Forck∈Ckdo//遍歷分類集合
Ck←Ckck};
Pck←0;/*設(shè)類別ck中所有藝人9~10月總播放量初始值為0*/
m←COVSA(S,Dck);/*根據(jù)類ck內(nèi)所有藝人日播放量序列Dck中3~8月的日播放量,由COVSA獲得類別ck最優(yōu)預(yù)測方法m*/
Forckj∈ckdo//遍歷ck類所有藝人
ck←ckckj};
Pckj←0;/*設(shè)置ck類中藝人j在9~10月總播放量的初始預(yù)測值為0*/
if suddenly increase then/*藝人j在8月中下旬的播放量突然成倍增加*/
Pckj←SSPMM(Dckj);/*用子序列模式匹配法預(yù)測ck類中9~10月藝人j的總播放量*/
else
Pckj←m(Dckj);/*用m預(yù)測ck類中藝人j在9~10月的總播放量*/
end
if publish then/*若藝人j近兩個(gè)月發(fā)布新專輯,略提升發(fā)布專輯后的預(yù)測值*/
Pckj←AD(Pckj);/*采用AD算法,重新預(yù)測ck類中藝人j在9~10月的總播放量*/
end
Pck←Pck+Pckj;/*預(yù)測ck類中9~10月藝人j的總播放量*/
end
P←P+Pck;
end
ReturnP;/*輸出9~10月所有藝人總播放量預(yù)測值*/
End
本文以阿里比賽復(fù)賽提供的1 000位藝人10 842首歌曲,從2016年3月~8月的歷史播放量作為實(shí)驗(yàn)數(shù)據(jù),采用E-TSMP算法預(yù)測2016年9月~10月這1 000位藝人歌曲總播放量?;诎⒗镌频腗ap-Reduce框架,使用Java語言,實(shí)現(xiàn)E-TSMP算法。另外,使用Echarts實(shí)現(xiàn)報(bào)表的可視化,形象地展示藝人日播放量序列變化及預(yù)測值。在復(fù)賽中,參賽團(tuán)隊(duì)?wèi){借提出的E-TSMP算法獲得大賽第2名,大賽復(fù)賽排行榜如圖6所示。
在E-TSMP算法中的類別最優(yōu)值選擇過程中,將均值及百分位數(shù)作為其預(yù)測方法集,而不是將波動(dòng)曲線作為預(yù)測方法集,實(shí)驗(yàn)表明本文方法對均值預(yù)測的效果更理想。如圖7分別采用后7天均值、后3天均值作為其特征值。
Figure 6 Competition ranking圖6 比賽排名
Figure 7 Experiment results of the category optimal value selection method圖7 采用類別最優(yōu)值選擇法的實(shí)驗(yàn)結(jié)果
針對8月中下旬某些藝人播放量突然成倍增加的情況,采用E-TSMP算法中的子序列模式匹配方法進(jìn)行預(yù)測,如圖8所示,在回落的過程中,不同分段中預(yù)測值的變化以梯度回落方式來體現(xiàn),為了對均值預(yù)測的精確度進(jìn)行改進(jìn),使預(yù)測值更符合播放量的實(shí)際變化趨勢;根據(jù)處理后的3個(gè)最佳匹配子序列的樣本序列的變化率求得。
Figure 8 Experiment results of the sub-sequence pattern matching method圖8 采用子序列模式匹配法的實(shí)驗(yàn)結(jié)果
通過對訓(xùn)練集中的數(shù)據(jù)進(jìn)行分析發(fā)現(xiàn),當(dāng)藝人有新專輯發(fā)布時(shí),在隨后的20~30日內(nèi)其播放量會(huì)有明顯的提升。針對9~10月有新專輯發(fā)布的藝人,在E-TSMP算法中對此類別的預(yù)測值做了附加處理。如圖9所示,藝人在9月有新專輯發(fā)布時(shí),則對發(fā)布專輯后一段時(shí)間的日播放量有相應(yīng)提升。
Figure 9 Experiment result of additional processing for releasing new album圖9 針對新發(fā)布專輯進(jìn)行附加處理的實(shí)驗(yàn)結(jié)果
在比賽期間曾對所有藝人做過周期性的判斷和疊加處理,采用周作為提取和疊加的周期,預(yù)測結(jié)果如圖10所示,疊加后導(dǎo)致評判分?jǐn)?shù)有所下降,即降低了預(yù)測值與實(shí)際播放量的準(zhǔn)確度,分析原因如下:
(1)周期性是根據(jù)每個(gè)藝人樣本集的時(shí)間序列的最后10周70天的日播放量進(jìn)行提取的,提取出來的周期性在未來60天的預(yù)測結(jié)果中不一定存在。
(2)周期性是在預(yù)測趨勢的基礎(chǔ)上進(jìn)行疊加的,若預(yù)測趨勢的偏差過大,進(jìn)行周期性疊加的結(jié)果可能會(huì)適得其反。
故最終提出的E-TSMP算法未對所有藝人的預(yù)測值進(jìn)行周期性的疊加。
Figure 10 Experiment result of periodic overlay圖10 周期性疊加的實(shí)驗(yàn)結(jié)果
在大數(shù)據(jù)環(huán)境下針對音樂的流行趨勢預(yù)測,本文借鑒了STL、Holt-Winters模型中的分解思想,在基于類別最優(yōu)值選擇和子序列模式匹配等方法 以及對藝人近期發(fā)布新專輯的附加處理的基礎(chǔ)之上,提出E-TSMP算法?;诎⒗镌频腗ap-Reduce框架,在阿里音樂平臺(tái)上實(shí)現(xiàn)了對2016年9月~10月藝人播放量較為準(zhǔn)確的預(yù)測,并使用Echarts工具實(shí)現(xiàn)報(bào)表的可視化,直觀形象地展示了藝人日播放量序列變化及預(yù)測值。