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