0
雷锋网按:本文为 AI 研习社编译的技术博客,原标题 Neural networks for landing page optimization,作者为 Oleksandr Savsunenko 。
翻译 | 赵萌 校对 | 余杭 整理 | MY
用增强学习将 A/B 测试提升到一个新的水平
AI 寻找最佳的登录页面版本
为什么,是什么,怎么做?
我很乐意分享我用神经网络对页面登录进行多参数优化的一些实验。我想到这个点子已经有半年了,而且我发现从自动操作这个角度来看它十分有趣。A/B 测试需要从市场专家那里消耗大量的时间,同时它们需要有大量的流量才能表现良好。当一个小团队来管理大量页面时,这就很成问题了。对于一些项目来说,这也与登录页面的“老化”有关——它们会随着促销或优惠的结束而过时。
有许多方法可以解决这个问题。在谷歌优化方案中比较旧的方案 MVTs(多变量测试)将分割所有可能的登录页面版本间的流量。并且适用于 3 个变量的测试。但是想象一下,你要测试 3 个标题,3 个子标题,2 个按钮颜色和 2 个标题图片,再加上总体布局的几个版本。这很容易达到 10k+不同的组合。由于你估计了 50k 的流量,目标是尽快找到最优或接近最优的版本。你牺牲了纯粹的统计精度,并试图尽快达到尽可能多的转换。
我知道少量的潜在方法。首先,考虑不同的特性。因为它们是独立的实体,想象一下你正在做一个独立的数字 A /B 测试,这样你将很快得到一些结果,但是如果存在有交叉特征的相关性,你将会错过它们,你的解决方案并不是最佳的。二是使用遗传算法。有一些公司就这样做了——比如 Sentient Ascend。从他们的宣传材料来看,他们似乎使用了某种遗传算法。三是运用多臂老虎机理论。解决多臂老虎机问题的方法之一是利用强化学习和神经网络。
让我们从概要开始。
遗传算法
遗传算法是模拟自然选择的过程。把不同的网页变化看作是一种生物的不同特征——有些特征利于生存,有些不产生影响,有些则有负面影响。遗传算法的基本工作流程如下:
生成一个数字 (假设是 100),不同的后代具有随机的特征集 (100 个登录网页具有各种各样的特征)。
让流量流入它们并测量转化率(进化生存)。
计算适应值大小——每一个网页的表现。
选取 20 个表现最好的页面,提取它们的特性,以重新将它们混合。然后在混合页面中添加 20 个性能较差的页面特性并添加一些。这可能有一些罕见的“突变”隐藏在其他性状中,但是有利于多样性。基于这些特性生成新 100 个新的网页。
重复 n 次。
当这个系统看起来不错的时候,我发现了一些确切存在我不想要的东西。
它仍然需要大量的流量
当用户配置文件/属性在测试期间发生变化时变化很慢 (例如出现新的获取通道)
它没有考虑用户配置文件 (一天中的时间、浏览器、设备等)
它没有用到神经网络
所以,我决定构造神经网络驱动的一些东西。我和一些市场营销的人做了交易:我将建立一个系统,他们会给我流量来测试它。这是个双赢的过程,CPA 是这种系统的一个完美的应用案例。
研究阶段
我需要做的是使用神经网络来解决所谓的“多臂老虎机”问题。在强化学习方面,我还学过一些其他的好方法,你可以在下面找到一些联系。我把这个项目简化为几个阶段,就像多臂老虎机问题的演变一样。
第一阶段 :一个拥有几个拉杆的老虎机。一个多臂老虎机,每个拉杆(网站的不同功能)有稍微不同的收益概率 (CTR 率)。你需要构建一个系统,在最少的尝试中找到性能最好的拉杆,然后始终坚持使用这个拉杆 (显示网站的这个版本)。请记住,由于这个问题的随机性,总会存在解决办法错误的情况。
第二阶段 : 用户。赌场里有许多多臂老虎机,不同的用户会玩不同的老虎机,系统必须找到什么用户应该玩什么样的老虎机。这意味着不同的用户对你的登陆页面有不同的反应,所以你必须根据用户的特点为每位用户显示不同的页面。
第三阶段 : 定时。这里有很多带有多臂老虎机的房间,你必须经过每个房间里的老虎机,你的收益概率取决于你在每个房间的表现。当你有多步销售过程——例如预登录,登录,电子邮件营销,这是问题的完整版本。
我将分享我对实现阶段 0 中问题的见解。
为什么只是第一阶段呢?
我内心深处对解决每个步骤所需要的流量数量持非常乐观的态度。我的 CPA 的小伙伴们赞成用 10k-20k 的流量去测试我的观点。并且我觉得测试阶段 0 和阶段 1 已经足够,但数学对我来说不利。阶段 1 将需要更大数量级的流量,当系统调试并学习完毕后所需要的流量会减少。
最新运行结果
在这里,我将描述系统在运行中的最新运行结果以及我收获的一些见解。下面你会发现为精通技术的读者准备的一些代码和实现细节。
所以,我们进行了 50/50 的分割测试。50% 是静态登录页面,另外 50% 是神经引擎驱动的动态登录页面。在最初的 3-4 天之后,我注意到我的神经系统解决方案已经达到了它确定的变化 (局部最小值),并且不会改变 (基于损失和权重)。这大约出现在 3-4k 的流量之后。
我开始好奇,想看看我是否能基于单纯统计数据得出同样的变化。我计算了每一种变化的平均 CTR 值,选择了其中表现最好的,并与 ML 得到的变化进行了比较。让我十分惊讶的是,它们中 80% 都不相同。神经网络表现出完全不同的结果。真有趣…
那么,我想神经网络应该比简单的线性代数和我都更聪明。为了进一步验证我的发现,我停止了学习神经网络,对 3 个版本进行了正面比较:
100% 的随机化;
提出对特征性能进行简单比较的静态版本 (为每个特性获得最佳性能并将它们合并到登录页);
由神经网络得到的静态版本。
正如你看到的那样,我一直等到随机和非随机选择之间的差异变得具有统计学意义。所以以下是主要的结论:
基于神经网络的系统与简单的基于概率统计学的版本表现相同。
统计学和神经网络系统两个版本的表现差异为 80%。这可能意味着我没有收集足够的数据对两者进行独立操作。
有一种可能性是,性能最好的登录页不仅仅是表现最好的特性总和,而且存在二阶相关性。
我们需要更多的数据。
系统建立
经过一些挖掘,我认为我的问题符合典型的「人工智能」强化学习。这里有一个很好的我经常用到的速成课程,我将在文末提到它。我希望我的代码在生产环境中运行,而 Tensorflow 是一个可以选择的框架。在我的日常工作中,我更喜欢 MXNet,它已步入量产阶段。
神经网络
我使用了一个简单的两层全连通网络,有一个静态变量作为输入,并将每个页面的每个特性生成概率作为输出。如果输入不是静态的,而是随着用户特性 (时间、地理位置、语言等) 的不同,那么对于第一阶段的系统来说,修改它是非常容易的。
这是我使用的网络。规模变量表示经测试的特性数量和每个特性的一些变体。
产品运行
为了在产品中运行系统,我使用了 Sanic 后端、Postgres 作为 SQL 存储,而 Tensorflow 作为推理引擎。在服务器上执行了系统的学习。
对于每个网站访问,我们要求后台系统把推理结果和页面的变量显示给这个用户,它大约有 30 毫秒的延迟。在转换之后,它与用户的页面访问之间有 15 分钟延迟(其中五分钟是经典窗口转换)来决定访问是否成功,然后使用这次访问来进行神经网络训练。在测试期间,随机页面生成与神经网络动态页面比例在逐步减少。最初的登陆页面是 100% 随机生成的,随机页面生成与神经网络动态页面比例在 10 天内衰减到 0。
一些技巧
为了构建系统,我需要某种虚拟测试环境,所以我构建了一个简单的脚本来模拟访问网站和转换。这个过程的基础是为每个登录页面的变化生成一个「隐藏」的转化率概率。最初,我假设每个特性的独特组合都有自己的 CTR,并且所有的特性都完全依赖于彼此。这是一种失败的方法,网络常常无法找到具有大量流量的最佳解决方案。正如我所理解的,这并不是一个真实的情况,标题文本和下面 3 个卷轴的颜色之间并没有太大的相关性。
然后我决定简化环境,假设特性都是线性无关的。这是一个过于简化的过程,但是对超参数进行优化并确保系统找到正确的解决方案就足够了。
在这里创建正确的“隐藏”环境是一个关键的系统微调,需要一些额外的步骤。
部分代码
我正在分享我一般用来寻找超参数和测试神经网络部分的脚本。
感谢你的关注,欢迎提出问题并与我沟通交流,我的邮箱是: savsunenko.sasha@gmail.com
原文链接:https://hackernoon.com/neural-networks-for-landing-page-optimization-564153b4d12
号外号外~
一个专注于
AI技术发展和AI工程师成长的求知求职社区
诞生啦!
欢迎大家访问以下链接或者扫码体验
https://club.leiphone.com/page/home
雷锋网雷锋网
雷峰网原创文章,未经授权禁止转载。详情见转载须知。