用机器学习分析完网红视频后,我发现播放量暴涨的秘密
(原标题:用机器学习分析完 YouTube 网红视频后,我发现了播放量暴涨的秘密)
在视频成为重要媒介,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 浏览器,它看起来就像这样:
【 图片来源: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
什么是多重共线性检验,维基百科的解释是,多重共线性(也称共线性)是一种现象,其中多元回归模型中的一个预测变量可以以相当高的准确度从其他预测变量中线性预测。多重共线性不会降低模型整体的预测能力或可靠性,至少在样本数据集中是如此;它只影响单个预测因子的计算。
为什么这很重要?
假设博主只在周一发布力量训练,而且她的视频在周一的播放量总是更高。那么分析播放量时,应该归因它们发布在周一,还是因为它们是力量训练呢?为了获得真实的答案,作者必须确保特征之间没有强共线性。
成对相关(pairwisecorrelations)是常用的方法,但当出现多个特征(多于一对)时,可能会同时存在共线性。
因此,作者使用了一种更复杂的方法――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)
-
过去一个月中身体不同部位的锻炼数量较少(< 10).。
当一段视频消耗的卡路里较少(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:少用不同的身体部位关键词
Sometimeslessis more.
人们不喜欢健身标题中有太多不同的身体部位。根据模型,在一个月内针对少于10个身体部位的组合更好。
作者注意到Sydney在她最近的视频中使用了更少的身体部位关键词。最明显的一点是,她一直在使用“手臂”或“上身”,而不是像“二头肌”或“背部”这样的词。
建议3:多多发布臀部健身
Sydney的订阅者可能更多是女士,她们倾向于“臀部”塑性,而不是增加手臂肌肉。人们愿意牺牲燃烧更少的卡路里来获得更健美的臀部。也许Sydney应该一直为燃烧更少卡路里的视频加入一些臀部运动。
建议4:未经验证的想法
比如说在月初发起新的活动。月初发布的视频更有可能获得更高的浏览量。也许人们喜欢设定新的目标来开始新的一个月。第二,避免在5天内发布相同类型的锻炼。
最后作者也表示,这个研究也有一些限制:
-
这些建议是基于过去的表现。而YouTubers经常会打破过去套路,尝试新想法。鉴于此,我们可以将机器学习应用到他们的竞争对手身上。
-
只集中分析了标题,还有一些其他信息,比如订阅者人数、性别、区域的统计,其中可能蕴藏着更多的特征、更准确的发现和解释。
雷锋网雷锋网