用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

  • 2020 年 3 月 10 日
  • 資訊

在影片成為重要媒介,vlog、影片部落客也成為一種職業的當下,如何提高自己影片的播放量,是廣大內容生產者最頭禿的問題之一。網路上當然有許多內容製作、熱點跟蹤、剪輯技巧的分享,但你可能不知道,機器學習也可以在其中發揮大作用。

join into data上兩位作者Lianne和Justin做了一個硬核的技術分析。他們的分析對象是YouTube一個新近崛起的健身部落客Sydney Cummings。

Sydney擁有美國國家運動醫學會(NASM)的私人教練證,同時也是一位跳高運動員。她的帳號註冊於 2016 年 5 月 17 日,累計播放量 27,031,566,目前擁有 21 萬粉絲,每天都穩定更新,很有研究意義。請注意,以下研究都將通過 Python 實現。

Sydney Cummings?的標題都有一定套路,比如最近一個標題是《30分鐘手臂和強壯臀肌鍛煉!燃燒310卡路里!》,通常涵蓋時間、身體部位、消耗的卡路里以及其他關於鍛煉的描述性辭彙。觀眾點擊這段影片之前,就會知道幾個資訊:

30分鐘——我將在 30 分鐘內完成整個訓練;

鍛煉手臂和臀肌——我將致力於手臂和臀肌,專註於力量;

燃燒310卡路里——我會燃燒相當多的卡路里。

掌握以上關鍵資訊是預先的準備,接下來還有六個步驟:觀察數據、用自然語言處理技術對影片進行分類、選擇特徵、創建目標、構建決策樹、閱讀決策樹。接下來就一起看看作者究竟是怎麼一步一步展開研究的。

事前準備:抓取數據

其實有很多不同的方法來抓取 YouTube 數據。由於這只是個一次性項目,所以作者選擇了一個只需要手工操作,不依賴額外工具的簡單方法。

以下是分步步驟:

選中所有影片;

右鍵單擊最新的影片並選擇“Inspect“;

將游標懸停在每一行上,找到高亮顯示了所有影片的最低級別的 HTML 程式碼/元素級別;

例如,如果使用 Chrome 瀏覽器,它看起來就像這樣:

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密
圖片來源:Sydney’s YouTube Video page  所有者:Sydney 

右鍵單擊元素並選擇“複製”,然後選擇“複製元素”;

將複製的元素粘貼到文本文件中並保存,這裡使用 JupyterLab 文本文件並將其保存為 sydney.txt;

使用 Python 提取資訊並清理數據。

接下來就是有趣的部分了,他們將從這個數據中集中提取特徵,並研究是哪些因素影響著播放量。

步驟1:觀察數據

將數據導入到 Python 中是在最後一節中完成的,以下是數據集 df_videos,一共有 837 個影片。

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

df_videos 有 8 個特徵來描述每個影片細節,包括:標題、多久前發布的、影片長度、播放量、地址、卡路里、發布具體日期、發布至今的天數。

此外,他們注意到數據有重疊,因為部落客曾經多次上傳同一個影片,在接下來的分析中將會忽略這部分不大的樣本。

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

步驟2:用 NLP 對影片進行分類

在這一步中,他們根據標題中的關鍵詞對影片進行分類。

分組標準是:

這個影片針對的是身體哪個部位?

這個影片的目的是增肌還是減肥?

或者還有什麼其他關鍵詞?

作者使用了自然語言工具包(NLTK),Python 中一個常用的開源 NLP 庫,來處理標題。

生成關鍵詞列表

首先,標記化影片的標題。此過程使用分隔符(如空格(" ")將標題文本字元串拆分為不同的標記(單詞)。這樣,電腦程式就可以更好地理解文本。

這些標題中有 538 個不同的單詞,以下列出了使用頻率最高的標記/單詞。可以發現,頻繁使用的就是那幾個詞,這也再次證明部落客確實喜歡起標準格式的影片標題。

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

基於高頻詞列表,作者創建了 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特徵是相關的。這個發現很直觀,因為健身的時間越長,消耗的卡路里就越多。

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

這種關係不難理解。 

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

length和 calories之間存在正相關,但這種強度還不足以將它們直接歸到一塊。因為40-45分鐘的影片消耗的熱量與30-35分鐘、50-55分鐘,甚至與60多分鐘的影片,都有重疊部分。因此,兩個特徵都保留。

此外,作者發現num_same_area和area_full,兩個特徵也是相關的,這個發現有點令人驚訝,接下來開始解密。

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

下圖顯示了num_same_area和area之間的關係。

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

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層。

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密

步驟 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)

過去一個月中身體不同部位的鍛煉數量較少 (< 10).。

發現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經常會打破過去套路,嘗試新想法。鑒於此,我們可以將機器學習應用到他們的競爭對手身上。

只集中分析了標題,還有一些其他資訊,比如訂閱者人數、性別、區域的統計,其中可能蘊藏著更多的特徵、更準確的發現和解釋。

用機器學習分析完YouTube網紅影片後 我發現了播放量暴漲的秘密