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