用機(jī)器學(xué)習(xí)分析完YouTube網(wǎng)紅視頻后,我發(fā)現(xiàn)了播放量暴漲的秘密
本文轉(zhuǎn)自雷鋒網(wǎng),如需轉(zhuǎn)載請(qǐng)至雷鋒網(wǎng)官網(wǎng)申請(qǐng)授權(quán)。
在視頻成為重要媒介,vlog、視頻博主也成為一種職業(yè)的當(dāng)下,如何提高自己視頻的播放量,是廣大內(nèi)容生產(chǎn)者最頭禿的問(wèn)題之一。網(wǎng)絡(luò)上當(dāng)然有許多內(nèi)容制作、熱點(diǎn)跟蹤、剪輯技巧的分享,但你可能不知道,機(jī)器學(xué)習(xí)也可以在其中發(fā)揮大作用。
join into data上兩位作者 Lianne 和 Justin 做了一個(gè)硬核的技術(shù)分析。他們的分析對(duì)象是 YouTube 一個(gè)新近崛起的健身博主 Sydney Cummings 。
Sydney 擁有美國(guó)國(guó)家運(yùn)動(dòng)醫(yī)學(xué)會(huì)(NASM)的私人教練證,同時(shí)也是一位跳高運(yùn)動(dòng)員。她的賬號(hào)注冊(cè)于 2016 年 5 月 17 日,累計(jì)播放量 27,031,566,目前擁有 21 萬(wàn)粉絲,每天都穩(wěn)定更新,很有研究意義。請(qǐng)注意,以下研究都將通過(guò) Python 實(shí)現(xiàn)。
Sydney Cummings 的標(biāo)題都有一定套路,比如最近一個(gè)標(biāo)題是《30 分鐘手臂和強(qiáng)壯臀肌鍛煉!燃燒 310 卡路里!》,通常涵蓋時(shí)間、身體部位、消耗的卡路里以及其他關(guān)于鍛煉的描述性詞匯。觀眾點(diǎn)擊這段視頻之前,就會(huì)知道幾個(gè)信息:
-
30 分鐘——我將在 30 分鐘內(nèi)完成整個(gè)訓(xùn)練;
-
鍛煉手臂和臀肌——我將致力于手臂和臀肌,專注于力量;
-
燃燒 310 卡路里——我會(huì)燃燒相當(dāng)多的卡路里。
掌握以上關(guān)鍵信息是預(yù)先的準(zhǔn)備,接下來(lái)還有六個(gè)步驟:觀察數(shù)據(jù)、用自然語(yǔ)言處理技術(shù)對(duì)視頻進(jìn)行分類、選擇特征、創(chuàng)建目標(biāo)、構(gòu)建決策樹(shù)、閱讀決策樹(shù)。接下來(lái)就和雷鋒網(wǎng)一起看看作者究竟是怎么一步一步展開(kāi)研究的。
事前準(zhǔn)備:抓取數(shù)據(jù)
其實(shí)有很多不同的方法來(lái)抓取 YouTube 數(shù)據(jù)。由于這只是個(gè)一次性項(xiàng)目,所以作者選擇了一個(gè)只需要手工操作,不依賴額外工具的簡(jiǎn)單方法。
以下是分步步驟:
選中所有視頻;
右鍵單擊最新的視頻并選擇“Inspect“;
將光標(biāo)懸停在每一行上,找到高亮顯示了所有視頻的最低級(jí)別的 HTML 代碼/元素級(jí)別;
例如,如果使用 Chrome 瀏覽器,它看起來(lái)就像這樣:
【 圖片來(lái)源:Sydney’s YouTube Video page所有者:Sydney 】
右鍵單擊元素并選擇“復(fù)制”,然后選擇“復(fù)制元素”;
將復(fù)制的元素粘貼到文本文件中并保存,這里使用 JupyterLab 文本文件并將其保存為 sydney.txt;
使用 Python 提取信息并清理數(shù)據(jù)。
接下來(lái)就是有趣的部分了,他們將從這個(gè)數(shù)據(jù)中集中提取特征,并研究是哪些因素影響著播放量。
步驟 1:觀察數(shù)據(jù)
將數(shù)據(jù)導(dǎo)入到 Python 中是在最后一節(jié)中完成的,以下是數(shù)據(jù)集 df_videos,一共有 837 個(gè)視頻。
df_videos 有 8 個(gè)特征來(lái)描述每個(gè)視頻細(xì)節(jié),包括:標(biāo)題、多久前發(fā)布的、視頻長(zhǎng)度、播放量、地址、卡路里、發(fā)布具體日期、發(fā)布至今的天數(shù)。
此外,他們注意到數(shù)據(jù)有重疊,因?yàn)椴┲髟?jīng)多次上傳同一個(gè)視頻,在接下來(lái)的分析中將會(huì)忽略這部分不大的樣本。
步驟 2:用 NLP 對(duì)視頻進(jìn)行分類
在這一步中,他們根據(jù)標(biāo)題中的關(guān)鍵詞對(duì)視頻進(jìn)行分類。
分組標(biāo)準(zhǔn)是:
-
這個(gè)視頻針對(duì)的是身體哪個(gè)部位?
-
這個(gè)視頻的目的是增肌還是減肥?
-
或者還有什么其他關(guān)鍵詞?
作者使用了自然語(yǔ)言工具包(NLTK),Python 中一個(gè)常用的開(kāi)源 NLP 庫(kù),來(lái)處理標(biāo)題。
生成關(guān)鍵詞列表
首先,標(biāo)記化視頻的標(biāo)題。此過(guò)程使用分隔符(如空格(" ")將標(biāo)題文本字符串拆分為不同的標(biāo)記(單詞)。這樣,計(jì)算機(jī)程序就可以更好地理解文本。
這些標(biāo)題中有 538 個(gè)不同的單詞,以下列出了使用頻率最高的標(biāo)記/單詞??梢园l(fā)現(xiàn),頻繁使用的就是那幾個(gè)詞,這也再次證明博主確實(shí)喜歡起標(biāo)準(zhǔn)格式的視頻標(biāo)題。
基于高頻詞列表,作者創(chuàng)建了 3 個(gè)關(guān)鍵字列表,可用于接下來(lái)環(huán)節(jié)對(duì)視頻進(jìn)行分類。
-
body_keywords(正文—關(guān)鍵詞)——這標(biāo)識(shí)了視頻針對(duì)的身體部位,如“完整”身體、“腹肌”、“腿”。
-
workout_type_keywords(健身—類型關(guān)鍵字)——區(qū)分鍛煉類型,如“有氧”、“伸展”、“力量”。
-
其他關(guān)鍵字——這包括常用但難以歸類的關(guān)鍵詞,如“訓(xùn)練營(yíng)”、“精疲力竭”、“纖體”(toning)。
詞干關(guān)鍵詞列表
在形成這些關(guān)鍵字列表后,作者還提取了詞干。這是為了確保計(jì)算機(jī)能夠識(shí)別近義詞。例如,ABS 是 Abdominal Exercise(腹部鍛煉)的簡(jiǎn)寫(xiě),單詞“abs”和“ab”有相同的詞干“ab”。
YouTube 標(biāo)題的標(biāo)記和詞干
除了關(guān)鍵詞,作者還需要標(biāo)記和提取標(biāo)題詞干。這些過(guò)程可為進(jìn)一步匹配關(guān)鍵字和標(biāo)題列表做準(zhǔn)備。
步驟 3:特征工程
經(jīng)過(guò)頭腦風(fēng)暴,他們選擇了兩種特征——基于關(guān)鍵詞和基于時(shí)間。
基于關(guān)鍵詞的特征
Indicator Features
由于前一步的工作,現(xiàn)在有 3 個(gè)關(guān)鍵詞列表和精簡(jiǎn)的標(biāo)題,可以匹配它們來(lái)對(duì)視頻進(jìn)行分類。
按照 body_keywords 和 workout_type_keywords 分類,一個(gè)視頻中有許多關(guān)鍵詞。所以在匹配之前,作者還創(chuàng)建了 2 個(gè)特征:area 區(qū)域和 workout_type 健身類型。這些特征將一個(gè)視頻的所有身體部位和鍛煉類型連接成一個(gè)字符串。
例如,一個(gè)健身視頻可以同時(shí)做“腹肌”和“腿”,或者同時(shí)做“有氧”和“力量”。該視頻的特征區(qū)域?yàn)?ldquo;腹肌+腿”,健身類型為“有氧+力量”。
同時(shí),作者也識(shí)別出了相似的關(guān)鍵字,如“總共”和“完全”、“核心”和“腹肌”,將它們歸在一組。
最后,他們創(chuàng)建了三種不同類型的虛擬特征(dummy features):
-
is _ { } _區(qū)域,識(shí)別視頻是否包含特定身體部位;
-
is_ { } _健身,確定健身類型;
-
title_contains_{},查看標(biāo)題是否包含其他關(guān)鍵詞。
為了清楚起見(jiàn),視頻標(biāo)題“腿部力量消耗訓(xùn)練”應(yīng)該是 _leg_area = True, is_strength_workout = True, title_contains_burnout = True,而所有其他都為 False。
Frequency Features
除以上特征外,作者還創(chuàng)建了三個(gè)特征:num_body_areas, num_workout_types,和 num_other_keyword,用來(lái)計(jì)算一個(gè)視頻標(biāo)題中提到的關(guān)鍵詞的數(shù)量。
舉個(gè)例子,一個(gè)標(biāo)題是“腹肌和腿部有氧力量訓(xùn)練”的 num_body_areas 和 num_workout_types 都是 2。
這些特征有助于確定視頻中應(yīng)包含的身體部位或鍛煉類型的最佳數(shù)量。
Rate Features
最后同樣重要的是,作者創(chuàng)建了一個(gè)特征:calories_per_min(每分鐘卡路里數(shù))看看卡路里的燃燒速度。畢竟,觀眾都想要一些明確的(可量化的)鍛煉目標(biāo)。
當(dāng)然整個(gè)過(guò)程中也難免存在一些被錯(cuò)誤分類的視頻,作者也在轉(zhuǎn)向時(shí)間特征前進(jìn)行了手動(dòng)修復(fù),這里不再贅述。
基于時(shí)間序列的特征
有了上述基于關(guān)鍵詞的特征,作者已經(jīng)發(fā)現(xiàn)受歡迎視頻的類型。但這是否意味著博主應(yīng)該一直發(fā)相同類型的視頻?
為了回答這個(gè)問(wèn)題,他們還創(chuàng)建了一些基于時(shí)間序列的特征:
-
num_same_area,過(guò)去 30 天內(nèi)發(fā)布的針對(duì)同一區(qū)域的視頻(包括當(dāng)前視頻)數(shù)量。例如,特征= 6,說(shuō)明除了當(dāng)前視頻針對(duì)上半身時(shí),過(guò)去 30 天中還有 5 個(gè)上身健身視頻。
-
num_same_workout ,該特征類似 num_same_area,只是統(tǒng)計(jì)的是健身類型。例如,特征= 3,說(shuō)明除了當(dāng)前視頻 HIIT 健身,在過(guò)去 30 天內(nèi)還有 2 個(gè) HIIT 健身視頻。
-
last_same_area,距離上一個(gè)針對(duì)同一塊身體部位視頻過(guò)去的天數(shù)。例如,該特征= 10,說(shuō)明針對(duì)腹肌的上一個(gè)視頻,發(fā)布在 10 天前。
-
last_same_workout,同 last_same_area,只是針對(duì)健身類型。
-
num_unique_areas,過(guò)去 30 天內(nèi)鍛煉了幾塊不同的身體部位。
-
num _ unique _workouts,過(guò)去30天發(fā)布的不同健身類型視頻的數(shù)量。
這些特征將幫助了解觀眾是喜歡相同的還是不同類型的視頻。
需要說(shuō)明的是,博主偶爾會(huì)發(fā)布與健身無(wú)關(guān)的視頻,播放數(shù)差距很大,所以作者未將這些列入分析。另外他們也過(guò)濾掉了前 30 天的視頻,因?yàn)樗鼈內(nèi)狈ψ銐虻臍v史數(shù)據(jù)。
接下來(lái)請(qǐng)看下面特征工程的具體過(guò)程。
多重共線性檢驗(yàn)Test for Multicollinearity
什么是多重共線性檢驗(yàn),維基百科的解釋是,多重共線性(也稱共線性)是一種現(xiàn)象,其中多元回歸模型中的一個(gè)預(yù)測(cè)變量可以以相當(dāng)高的準(zhǔn)確度從其他預(yù)測(cè)變量中線性預(yù)測(cè)。多重共線性不會(huì)降低模型整體的預(yù)測(cè)能力或可靠性,至少在樣本數(shù)據(jù)集中是如此;它只影響單個(gè)預(yù)測(cè)因子的計(jì)算。
為什么這很重要?
假設(shè)博主只在周一發(fā)布力量訓(xùn)練,而且她的視頻在周一的播放量總是更高。那么分析播放量時(shí),應(yīng)該歸因它們發(fā)布在周一,還是因?yàn)樗鼈兪橇α坑?xùn)練呢?為了獲得真實(shí)的答案,作者必須確保特征之間沒(méi)有強(qiáng)共線性。
成對(duì)相關(guān)( pairwise correlations)是常用的方法,但當(dāng)出現(xiàn)多個(gè)特征(多于一對(duì))時(shí),可能會(huì)同時(shí)存在共線性。
因此,作者使用了一種更復(fù)雜的方法——k折交叉驗(yàn)證( K-fold cross-validation)來(lái)達(dá)到目的。
詳細(xì)過(guò)程如下:
-
根據(jù)判斷,選擇一組關(guān)鍵特征來(lái)測(cè)試共線性。
作者選擇了對(duì)于YouTube視頻播放量至關(guān)重要的特征,同時(shí)還添加了三個(gè)由隨機(jī)數(shù)組成的特征:rand0,rand1, rand2。當(dāng)比較特征之間的關(guān)系時(shí),它們充當(dāng)anchor。如果一個(gè)特征與這些隨機(jī)特征相比不太重要或不太相似時(shí),那么它就不是目標(biāo)特征的重要自變量。
-
為k折交叉驗(yàn)證準(zhǔn)備這些特征。
在此過(guò)程中,他們轉(zhuǎn)換分類特征(categorical features):area和workout_type。這種轉(zhuǎn)換確保每個(gè)類別級(jí)別至少有K個(gè)值。
-
使用其中一個(gè)特征作為目標(biāo),其余特征作為自變量,來(lái)訓(xùn)練預(yù)測(cè)模型。
接下來(lái),作者遍歷每個(gè)特征,并使用其他特征擬合一個(gè)模型來(lái)預(yù)測(cè)它,他們用了一個(gè)簡(jiǎn)單的梯度提升模型(Gradient Boosting Model ,GBM)和K折驗(yàn)證,并且根據(jù)目標(biāo)特征是數(shù)字的還是分類的,應(yīng)用不同的模型和分?jǐn)?shù)(模型預(yù)測(cè)能力評(píng)估指標(biāo))。
當(dāng)目標(biāo)特征是數(shù)字時(shí),作者使用Gradient Boosting Regressor模型和均方根誤差(RMSE);當(dāng)目標(biāo)特征是分類特征時(shí),則使用Gradient Boosting Classifier 模型和Accuracy(精度)。
對(duì)于每個(gè)目標(biāo),他們打印出K折驗(yàn)證分?jǐn)?shù)(平均分)和最重要的5個(gè)自變量。
-
研究得分和每個(gè)目標(biāo)特征的重要自變量。
作者試圖研究每個(gè)目標(biāo)特征及其與自變量的關(guān)系。當(dāng)然本文不會(huì)列舉整個(gè)過(guò)程,將舉兩個(gè)例子。
作者發(fā)現(xiàn)length(視頻長(zhǎng)度)和 calories特征是相關(guān)的。這個(gè)發(fā)現(xiàn)很直觀,因?yàn)榻∩淼臅r(shí)間越長(zhǎng),消耗的卡路里就越多。
這種關(guān)系不難理解。
length和 calories之間存在正相關(guān),但這種強(qiáng)度還不足以將它們直接歸到一塊。因?yàn)?0-45分鐘的視頻消耗的熱量與30-35分鐘、50-55分鐘,甚至與60多分鐘的視頻,都有重疊部分。因此,兩個(gè)特征都保留。
此外,作者發(fā)現(xiàn)num_same_area和area_full,兩個(gè)特征也是相關(guān)的,這個(gè)發(fā)現(xiàn)有點(diǎn)令人驚訝,接下來(lái)開(kāi)始解密。
下圖顯示了num_same_area和area之間的關(guān)系。
num_same_area特征,統(tǒng)計(jì)的是在過(guò)去30天內(nèi)發(fā)布的針對(duì)于同一部位視頻(包括當(dāng)前視頻)的數(shù)量。area_ful代表全身鍛煉,這是Sydney視頻中最常見(jiàn)的類型。因此,當(dāng)num_same_area很大時(shí),那么這些視頻就是針對(duì)全身的鍛煉。
假設(shè)我們發(fā)現(xiàn)更高的 num_same_area(>=10) 確實(shí)會(huì)導(dǎo)致更高的YouTube瀏覽量,但我們無(wú)法知道這是因?yàn)閍rea_full 還是因?yàn)?num_same_area。因此,作者放棄了 num_same_area特征,也因?yàn)橄嗤倪壿嫹艞壪鄋um_same_workouts特征。
步驟 4:創(chuàng)建目標(biāo)
你可能還記得,這個(gè)研究的目標(biāo)是增加YouTube的播放量。是不是說(shuō)明,我們可以直接拿播放量作為目標(biāo)呢?
但請(qǐng)注意!播放量呈偏態(tài)分布。播放量中值是27,641次,而最高的視頻達(dá)到130萬(wàn)。這種不平衡會(huì)給模型的解釋性帶來(lái)問(wèn)題。
因此,作者創(chuàng)建了特征views_quartile,以它作為目標(biāo)。
他們將視頻分為兩類——高播放視頻(“high”)和低播放視頻(“low”)。“high”占總播放量的75%,也就是播放數(shù)35578及以上的視頻,剩下的都?xì)w到“low”。
通過(guò)這種方式,作者使用預(yù)測(cè)模型來(lái)找到播放量最高的25%的視頻的特征組合。
步驟 5:構(gòu)建決策樹(shù)
準(zhǔn)備好了一切工作,我們根據(jù)目標(biāo)views_quartile建立一個(gè)決策樹(shù)模型啦!
為了避免過(guò)度擬合,作者將一個(gè)葉子節(jié)點(diǎn)的最小樣本設(shè)置為10。為了讓我們更容易理解,作者將樹(shù)的最大深度設(shè)置為8層。
步驟 6:閱讀決策樹(shù)
在最后一步中,作者將研究并總結(jié)導(dǎo)致高或者低播放量的“分支”。他們到底發(fā)現(xiàn)了什么呢?
發(fā)現(xiàn) 1:calories_per_min是最重要的特征
沒(méi)錯(cuò),calories_per_min是最重要的特征。人們似乎不太關(guān)心健身類型或身體部位。
每分鐘消耗的卡路里≥ 12.025屬于高消耗,60%(51/(34+51) )的視頻都有較高的觀看率。
每分鐘燃燒的卡路里少于(≤ 9.846)的視頻則遠(yuǎn)沒(méi)有受歡迎,只有 7.2%(12/(154+12) =)有較高的播放。
而每分鐘消耗卡路里在9.846到12.025之間的視頻,其他因素也會(huì)產(chǎn)生較大作用。
發(fā)現(xiàn) 2:不同部位、多種方式鍛煉并不能提高播放量
這個(gè)發(fā)現(xiàn)超乎作者想象,難道不是各種各樣的鍛煉更好嗎?
當(dāng)過(guò)去一個(gè)月,身體不同部位的鍛煉數(shù)量(num_unique_area)很高,≥ 10時(shí),視頻的觀看傾向低。即使每分鐘燃燒的卡路里很高,這種情況依然成立。
結(jié)合前兩個(gè)觀點(diǎn),78%(42/(12+42) )的視頻在以下情況下獲得了更多的播放:
-
每分鐘燃燒的熱量很高(≥ 12.025)
-
過(guò)去一個(gè)月中身體不同部位的鍛煉數(shù)量較少 (
發(fā)現(xiàn) 3:臀部健身很受歡迎
當(dāng)一段視頻消耗的卡路里較少(calories_per_min ≤ 9.846)時(shí),但只要是臀部鍛煉,33%(5/(10+5) )仍能獲得高播放;不然,只有4.6%(7/(144+7) )視頻擁有較高播放。
建議:如何提高播放
綜上,作者給Sydney提出了三條建議:
建議 1:燃燒卡路里
正如我們所見(jiàn),每分鐘消耗的卡路里是最重要的特征,12.025是個(gè)魔法數(shù)字。
下表是不同時(shí)長(zhǎng)的視頻應(yīng)該燃燒多少卡路里的節(jié)點(diǎn):
-
30分鐘健身:361卡路里
-
40分鐘健身:481卡路里
-
50分鐘健身:601卡路里
-
60分鐘健身:722卡路里
作者還提出了一個(gè)猜想:數(shù)字(時(shí)長(zhǎng)和卡路里)對(duì)人的刺激只是心理上,大家可能就是喜歡看到卡路里的前兩位數(shù)比時(shí)長(zhǎng)大得多,這說(shuō)明可以用更短的時(shí)間,消耗更多的卡路里。
建議 2:少用不同的身體部位關(guān)鍵詞
Sometimes less is more.
人們不喜歡健身標(biāo)題中有太多不同的身體部位。根據(jù)模型,在一個(gè)月內(nèi)針對(duì)少于10個(gè)身體部位的組合更好。
作者注意到Sydney在她最近的視頻中使用了更少的身體部位關(guān)鍵詞。最明顯的一點(diǎn)是,她一直在使用“手臂”或“上身”,而不是像“二頭肌”或“背部”這樣的詞。
建議 3:多多發(fā)布臀部健身
Sydney的訂閱者可能更多是女士,她們傾向于“臀部”塑性,而不是增加手臂肌肉。人們?cè)敢鉅奚紵俚目防飦?lái)獲得更健美的臀部。也許Sydney應(yīng)該一直為燃燒更少卡路里的視頻加入一些臀部運(yùn)動(dòng)。
建議 4:未經(jīng)驗(yàn)證的想法
比如說(shuō)在月初發(fā)起新的活動(dòng)。 月初發(fā)布的視頻更有可能獲得更高的瀏覽量。也許人們喜歡設(shè)定新的目標(biāo)來(lái)開(kāi)始新的一個(gè)月。第二,避免在5天內(nèi)發(fā)布相同類型的鍛煉。
最后作者也表示,這個(gè)研究也有一些限制:
-
這些建議是基于過(guò)去的表現(xiàn)。而 YouTubers經(jīng)常會(huì)打破過(guò)去套路,嘗試新想法。鑒于此,我們可以將機(jī)器學(xué)習(xí)應(yīng)用到他們的競(jìng)爭(zhēng)對(duì)手身上。
-
只集中分析了標(biāo)題,還有一些其他信息,比如訂閱者人數(shù)、性別、區(qū)域的統(tǒng)計(jì),其中可能蘊(yùn)藏著更多的特征、更準(zhǔn)確的發(fā)現(xiàn)和解釋。