雷鋒網按:本文爲 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
雷鋒網雷鋒網(公衆號:雷鋒網)