介绍
拥有一个好的标题对于文章的成功至关重要。人们只花一秒钟的时间(如果我们相信Ryan Holiday的书《Trust Me, I’m Lying》)来决定是否点击标题打开整篇文章。媒体痴迷于优化点击率(CTR),即点击标题数除以标题显示次数。使用虚假引流标题可以增加点击率。媒体可能会选择点击率较高的标题,因为这将带来更多收入。
我对挤取广告收入并不感兴趣。更多的是传播我的知识和专业知识。但观众的时间和注意力有限,而互联网上的内容几乎是无限的。所以,我必须与其他内容制作者竞争,以吸引观众的注意力。
我如何选择我下一篇文章的合适标题呢?当然,我需要一系列的选项供我选择。希望我可以自己生成它们或向ChatGPT提问。但接下来我该怎么办呢?作为一名数据科学家,我建议以数据驱动的方式运行A/B/N测试,以了解哪个选项是最好的。但是存在一个问题。首先,我需要快速决定,因为内容很快过期。其次,可能没有足够的观察量来发现CTR的统计显著性差异,因为这些值相对较低。因此,除了等待几周来做决定之外,还有其他选择。
希望有一个解决方案!我可以使用一种“多臂老虎机”机器学习算法,该算法可以根据我们观察到的关于观众行为的数据进行自适应调整。当更多的人点击集合中的特定选项时,我们可以分配更多的流量给该选项。在本文中,我将简要解释什么是“贝叶斯多臂老虎机”,以及如何使用Python实现它的工作原理。
什么是贝叶斯多臂老虎机?
多臂老虎机是机器学习算法。贝叶斯型多臂老虎机利用汤普森抽样根据我们对CTR的概率分布的先验信念来选择选项,之后根据新数据进行更新。所有这些概率论和数理统计的词汇可能听起来很复杂和令人望而生畏。让我尽量用尽可能少的公式来解释整个概念。
假设只有两个标题可供选择。我们对它们的CTR一无所知。但我们希望获得表现最佳的标题。我们有多个选项。第一个选项是选择我们更相信的标题。多年来,这就是行业的做法。第二个选项是将50%的流量分配给第一个标题,将50%的流量分配给第二个标题。这在数字媒体的兴起之后成为可能,您可以在观众请求阅读文章列表时准确决定要显示的文本。通过这种方法,您可以确保已将50%的流量分配给表现最佳的选项。这是一个限制吗?当然不是!
有些人在发布几分钟后就会阅读文章。有些人会在几小时或几天内阅读。这意味着我们可以观察到“早期”读者对不同标题的反应,并将流量分配从50/50调整为更多分配给表现更好的选项。过一段时间后,我们可以再次计算CTR并调整分配比例。最终,我们希望在每个新的观众点击或跳过标题后调整流量分配。我们需要一个能够在科学和自动化环境下适应流量分配的框架。
这就是贝叶斯定理、贝塔分布和汤普森抽样的作用。
假设文章的CTR是一个随机变量”theta”。根据设计,它的取值介于0和1之间。如果我们没有先验信念,它可以是0和1之间的任意数字,并且各个数字的概率相等。在观察到一些数据”x”之后,我们可以调整我们的信念,并得到一个新的”theta”分布,该分布将在0和1之间偏向0或1。
点击标题的人数可以建模为一个二项分布,其中“n”是看到标题的访客数量,“p”是标题的点击率。这是我们的似然概率!如果我们将先验(关于点击率分布的信念)建模为一个贝塔分布,并采用二项式似然概率,后验概率也将是一个具有不同参数的贝塔分布!在这种情况下,贝塔分布被称为似然概率的共轭先验。
这个事实的证明并不难,但需要一些数学推导,与本文的内容无关。请参阅下方的优美证明:
贝塔分布的取值范围在0到1之间,这使得它成为塑造点击率分布的完美选择。我们可以从“a = 1”和“b = 1”作为贝塔分布参数开始建模点击率。在这种情况下,我们对分布没有任何信念,使得任何点击率都是等概率的。然后,我们可以开始添加观察数据。正如您所看到的,每个“成功”或“点击”将“a”增加1。每个“失败”或“跳过”将“b”增加1。这会偏移点击率的分布,但不会改变分布的基本类型。它仍然是一个贝塔分布!
我们假设点击率可以建模为一个贝塔分布。然后,有两个标题选项和两个分布。我们如何选择要向观众展示哪一个?因此,该算法被称为“多臂赌博机”。当观众请求一个标题时,你“拉动两个手臂”并采样点击率。然后,您比较这些值,并展示具有最高采样点击率的标题。然后,观众要么点击,要么跳过。如果标题被点击,你会调整该选项的贝塔分布参数“a”,表示“成功”。否则,你会增加该选项的贝塔分布参数“b”,表示“失败”。这会扭曲分布,对于下一个观众,选择该选项(或“手臂”)的概率将与其他选项不同。
经过多次迭代后,该算法将估计出点击率分布。从该分布中采样将主要触发最高点击率的选项,但仍然允许新用户探索其他选项并重新调整分配。
好吧,这在理论上都是正确的。它真的比我们之前讨论的50/50分割更好吗?
使用Python进行模拟
创建一个模拟并构建图表的所有代码可以在我的GitHub Repo中找到。
如前所述,我们只有两个可供选择的标题。对于这个标题的点击率,我们没有任何先验信念。因此,我们从a=1和b=1开始为两个贝塔分布。我将模拟一个简单的流量输入,假设有一个查看者队列。我们在向新的观众展示标题之前,清楚地知道前一个观众是“点击”还是“跳过”。为了模拟“点击”和“跳过”操作,我需要定义一些真实的点击率。让它们分别为5%和7%。需要注意的是,算法对这些值一无所知。我需要它们来模拟一个点击;在现实世界中,您将拥有真正的点击。我将为每个标题翻转一个超倾斜的硬币,其概率为5%或7%。如果正面朝上,那么就会有点击事件。
然后,算法很简单:
- 根据观察到的数据,为每个标题获取一个Beta分布
- 从两个分布中抽样CTR
- 确定哪个CTR更高,翻转一个相关的硬币
- 了解是否有点击
- 如果有点击,则将参数“a”增加1;如果有跳过,则将参数“b”增加1
- 重复,直到队列中有用户。
为了了解算法的质量,我们还将保存一个表示暴露给第二个选项的观众份额的值,因为它具有较高的“真实”CTR。我们将使用50/50的分割策略作为对应项,以获得基准质量。
作者编写的代码
在排队的1000个用户后,我们的“多臂匪徒(Saboteur)”已经很好地了解了CTR。
下面是一张图表,显示这种策略可以产生更好的结果。在100个观众之后,“多臂匪徒(Saboteur)”胜过了50%的观众,提供了第二个选项。因为越来越多的证据支持第二个标题,算法将越来越多的流量分配给第二个标题。几乎80%的观众都看到了表现最佳的选项!而在50/50分割中,只有50%的人看到了最佳表现的选项。
贝叶斯多臂匪徒Saboteur”将额外的25%的观众暴露给了表现更好的选项!随着更多的数据流入,这两种策略之间的差异只会增加。
结论
当然,“多臂匪徒(Saboteur)”并不完美。实时抽样和选择选项是昂贵的。最好有一个良好的基础设施来实现所需的延迟。此外,您可能不希望通过更改标题来吓坏您的观众。如果您有足够的流量来运行快速的A/B测试,请这样做!然后,手动更改标题一次。然而,这个算法可以在许多其他超出媒体范畴的应用中使用。
希望你现在明白了“多臂匪徒(Saboteur)”是什么,以及它如何用于在新数据中选择两个选项。我特意没有侧重于数学和公式,因为教科书会更好地解释它。我打算介绍一种新技术,并引起人们的兴趣!
如果您有任何问题,请随时在LinkedIn上联系。
包含所有代码的笔记本可以在我的GitHub存储库中找到。
[Igor Khomyanin](https://www.linkedin.com/in/igorkhomyanin/)是Salmon的数据科学家,在Yandex和McKinsey担任过数据角色。我专门从数据中提取统计信息和数据可视化来创造价值。