0
本文作者: AI研習社-譯站 | 2018-07-26 10:57 |
雷鋒網(wǎng)按:本文為 AI 研習社編譯的技術(shù)博客,原標題 Neural networks for landing page optimization,作者為 Oleksandr Savsunenko 。
翻譯 | 趙萌 校對 | 余杭 整理 | MY
用增強學習將 A/B 測試提升到一個新的水平
AI 尋找最佳的登錄頁面版本
為什么,是什么,怎么做?
我很樂意分享我用神經(jīng)網(wǎng)絡(luò)對頁面登錄進行多參數(shù)優(yōu)化的一些實驗。我想到這個點子已經(jīng)有半年了,而且我發(fā)現(xiàn)從自動操作這個角度來看它十分有趣。A/B 測試需要從市場專家那里消耗大量的時間,同時它們需要有大量的流量才能表現(xiàn)良好。當一個小團隊來管理大量頁面時,這就很成問題了。對于一些項目來說,這也與登錄頁面的“老化”有關(guān)——它們會隨著促銷或優(yōu)惠的結(jié)束而過時。
有許多方法可以解決這個問題。在谷歌優(yōu)化方案中比較舊的方案 MVTs(多變量測試)將分割所有可能的登錄頁面版本間的流量。并且適用于 3 個變量的測試。但是想象一下,你要測試 3 個標題,3 個子標題,2 個按鈕顏色和 2 個標題圖片,再加上總體布局的幾個版本。這很容易達到 10k+不同的組合。由于你估計了 50k 的流量,目標是盡快找到最優(yōu)或接近最優(yōu)的版本。你犧牲了純粹的統(tǒng)計精度,并試圖盡快達到盡可能多的轉(zhuǎn)換。
我知道少量的潛在方法。首先,考慮不同的特性。因為它們是獨立的實體,想象一下你正在做一個獨立的數(shù)字 A /B 測試,這樣你將很快得到一些結(jié)果,但是如果存在有交叉特征的相關(guān)性,你將會錯過它們,你的解決方案并不是最佳的。二是使用遺傳算法。有一些公司就這樣做了——比如 Sentient Ascend。從他們的宣傳材料來看,他們似乎使用了某種遺傳算法。三是運用多臂老虎機理論。解決多臂老虎機問題的方法之一是利用強化學習和神經(jīng)網(wǎng)絡(luò)。
讓我們從概要開始。
遺傳算法
遺傳算法是模擬自然選擇的過程。把不同的網(wǎng)頁變化看作是一種生物的不同特征——有些特征利于生存,有些不產(chǎn)生影響,有些則有負面影響。遺傳算法的基本工作流程如下:
生成一個數(shù)字 (假設(shè)是 100),不同的后代具有隨機的特征集 (100 個登錄網(wǎng)頁具有各種各樣的特征)。
讓流量流入它們并測量轉(zhuǎn)化率(進化生存)。
計算適應(yīng)值大小——每一個網(wǎng)頁的表現(xiàn)。
選取 20 個表現(xiàn)最好的頁面,提取它們的特性,以重新將它們混合。然后在混合頁面中添加 20 個性能較差的頁面特性并添加一些。這可能有一些罕見的“突變”隱藏在其他性狀中,但是有利于多樣性?;谶@些特性生成新 100 個新的網(wǎng)頁。
重復 n 次。
當這個系統(tǒng)看起來不錯的時候,我發(fā)現(xiàn)了一些確切存在我不想要的東西。
它仍然需要大量的流量
當用戶配置文件/屬性在測試期間發(fā)生變化時變化很慢 (例如出現(xiàn)新的獲取通道)
它沒有考慮用戶配置文件 (一天中的時間、瀏覽器、設(shè)備等)
它沒有用到神經(jīng)網(wǎng)絡(luò)
所以,我決定構(gòu)造神經(jīng)網(wǎng)絡(luò)驅(qū)動的一些東西。我和一些市場營銷的人做了交易:我將建立一個系統(tǒng),他們會給我流量來測試它。這是個雙贏的過程,CPA 是這種系統(tǒng)的一個完美的應(yīng)用案例。
研究階段
我需要做的是使用神經(jīng)網(wǎng)絡(luò)來解決所謂的“多臂老虎機”問題。在強化學習方面,我還學過一些其他的好方法,你可以在下面找到一些聯(lián)系。我把這個項目簡化為幾個階段,就像多臂老虎機問題的演變一樣。
第一階段 :一個擁有幾個拉桿的老虎機。一個多臂老虎機,每個拉桿(網(wǎng)站的不同功能)有稍微不同的收益概率 (CTR 率)。你需要構(gòu)建一個系統(tǒng),在最少的嘗試中找到性能最好的拉桿,然后始終堅持使用這個拉桿 (顯示網(wǎng)站的這個版本)。請記住,由于這個問題的隨機性,總會存在解決辦法錯誤的情況。
第二階段 : 用戶。賭場里有許多多臂老虎機,不同的用戶會玩不同的老虎機,系統(tǒng)必須找到什么用戶應(yīng)該玩什么樣的老虎機。這意味著不同的用戶對你的登陸頁面有不同的反應(yīng),所以你必須根據(jù)用戶的特點為每位用戶顯示不同的頁面。
第三階段 : 定時。這里有很多帶有多臂老虎機的房間,你必須經(jīng)過每個房間里的老虎機,你的收益概率取決于你在每個房間的表現(xiàn)。當你有多步銷售過程——例如預登錄,登錄,電子郵件營銷,這是問題的完整版本。
我將分享我對實現(xiàn)階段 0 中問題的見解。
為什么只是第一階段呢?
我內(nèi)心深處對解決每個步驟所需要的流量數(shù)量持非常樂觀的態(tài)度。我的 CPA 的小伙伴們贊成用 10k-20k 的流量去測試我的觀點。并且我覺得測試階段 0 和階段 1 已經(jīng)足夠,但數(shù)學對我來說不利。階段 1 將需要更大數(shù)量級的流量,當系統(tǒng)調(diào)試并學習完畢后所需要的流量會減少。
最新運行結(jié)果
在這里,我將描述系統(tǒng)在運行中的最新運行結(jié)果以及我收獲的一些見解。下面你會發(fā)現(xiàn)為精通技術(shù)的讀者準備的一些代碼和實現(xiàn)細節(jié)。
所以,我們進行了 50/50 的分割測試。50% 是靜態(tài)登錄頁面,另外 50% 是神經(jīng)引擎驅(qū)動的動態(tài)登錄頁面。在最初的 3-4 天之后,我注意到我的神經(jīng)系統(tǒng)解決方案已經(jīng)達到了它確定的變化 (局部最小值),并且不會改變 (基于損失和權(quán)重)。這大約出現(xiàn)在 3-4k 的流量之后。
我開始好奇,想看看我是否能基于單純統(tǒng)計數(shù)據(jù)得出同樣的變化。我計算了每一種變化的平均 CTR 值,選擇了其中表現(xiàn)最好的,并與 ML 得到的變化進行了比較。讓我十分驚訝的是,它們中 80% 都不相同。神經(jīng)網(wǎng)絡(luò)表現(xiàn)出完全不同的結(jié)果。真有趣…
那么,我想神經(jīng)網(wǎng)絡(luò)應(yīng)該比簡單的線性代數(shù)和我都更聰明。為了進一步驗證我的發(fā)現(xiàn),我停止了學習神經(jīng)網(wǎng)絡(luò),對 3 個版本進行了正面比較:
100% 的隨機化;
提出對特征性能進行簡單比較的靜態(tài)版本 (為每個特性獲得最佳性能并將它們合并到登錄頁);
由神經(jīng)網(wǎng)絡(luò)得到的靜態(tài)版本。
正如你看到的那樣,我一直等到隨機和非隨機選擇之間的差異變得具有統(tǒng)計學意義。所以以下是主要的結(jié)論:
基于神經(jīng)網(wǎng)絡(luò)的系統(tǒng)與簡單的基于概率統(tǒng)計學的版本表現(xiàn)相同。
統(tǒng)計學和神經(jīng)網(wǎng)絡(luò)系統(tǒng)兩個版本的表現(xiàn)差異為 80%。這可能意味著我沒有收集足夠的數(shù)據(jù)對兩者進行獨立操作。
有一種可能性是,性能最好的登錄頁不僅僅是表現(xiàn)最好的特性總和,而且存在二階相關(guān)性。
我們需要更多的數(shù)據(jù)。
系統(tǒng)建立
經(jīng)過一些挖掘,我認為我的問題符合典型的「人工智能」強化學習。這里有一個很好的我經(jīng)常用到的速成課程,我將在文末提到它。我希望我的代碼在生產(chǎn)環(huán)境中運行,而 Tensorflow 是一個可以選擇的框架。在我的日常工作中,我更喜歡 MXNet,它已步入量產(chǎn)階段。
神經(jīng)網(wǎng)絡(luò)
我使用了一個簡單的兩層全連通網(wǎng)絡(luò),有一個靜態(tài)變量作為輸入,并將每個頁面的每個特性生成概率作為輸出。如果輸入不是靜態(tài)的,而是隨著用戶特性 (時間、地理位置、語言等) 的不同,那么對于第一階段的系統(tǒng)來說,修改它是非常容易的。
這是我使用的網(wǎng)絡(luò)。規(guī)模變量表示經(jīng)測試的特性數(shù)量和每個特性的一些變體。
產(chǎn)品運行
為了在產(chǎn)品中運行系統(tǒng),我使用了 Sanic 后端、Postgres 作為 SQL 存儲,而 Tensorflow 作為推理引擎。在服務(wù)器上執(zhí)行了系統(tǒng)的學習。
對于每個網(wǎng)站訪問,我們要求后臺系統(tǒng)把推理結(jié)果和頁面的變量顯示給這個用戶,它大約有 30 毫秒的延遲。在轉(zhuǎn)換之后,它與用戶的頁面訪問之間有 15 分鐘延遲(其中五分鐘是經(jīng)典窗口轉(zhuǎn)換)來決定訪問是否成功,然后使用這次訪問來進行神經(jīng)網(wǎng)絡(luò)訓練。在測試期間,隨機頁面生成與神經(jīng)網(wǎng)絡(luò)動態(tài)頁面比例在逐步減少。最初的登陸頁面是 100% 隨機生成的,隨機頁面生成與神經(jīng)網(wǎng)絡(luò)動態(tài)頁面比例在 10 天內(nèi)衰減到 0。
一些技巧
為了構(gòu)建系統(tǒng),我需要某種虛擬測試環(huán)境,所以我構(gòu)建了一個簡單的腳本來模擬訪問網(wǎng)站和轉(zhuǎn)換。這個過程的基礎(chǔ)是為每個登錄頁面的變化生成一個「隱藏」的轉(zhuǎn)化率概率。最初,我假設(shè)每個特性的獨特組合都有自己的 CTR,并且所有的特性都完全依賴于彼此。這是一種失敗的方法,網(wǎng)絡(luò)常常無法找到具有大量流量的最佳解決方案。正如我所理解的,這并不是一個真實的情況,標題文本和下面 3 個卷軸的顏色之間并沒有太大的相關(guān)性。
然后我決定簡化環(huán)境,假設(shè)特性都是線性無關(guān)的。這是一個過于簡化的過程,但是對超參數(shù)進行優(yōu)化并確保系統(tǒng)找到正確的解決方案就足夠了。
在這里創(chuàng)建正確的“隱藏”環(huán)境是一個關(guān)鍵的系統(tǒng)微調(diào),需要一些額外的步驟。
部分代碼
我正在分享我一般用來尋找超參數(shù)和測試神經(jīng)網(wǎng)絡(luò)部分的腳本。
感謝你的關(guān)注,歡迎提出問題并與我溝通交流,我的郵箱是: savsunenko.sasha@gmail.com
原文鏈接:https://hackernoon.com/neural-networks-for-landing-page-optimization-564153b4d12
號外號外~
一個專注于
AI技術(shù)發(fā)展和AI工程師成長的求知求職社區(qū)
誕生啦!
歡迎大家訪問以下鏈接或者掃碼體驗
https://club.leiphone.com/page/home
雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。