「A/B 測試不一定是最好的評估方法。它不是萬能的,但不會 A/B 測試肯定是不行的?!?br/>
4 月 20 日,首個火山引擎技術開放日在北京方恒時尚中心舉辦,字節(jié)跳動副總裁楊震原以《聊聊數(shù)據(jù)驅動和用 A/B 測試解決問題》為題,分享了他對于 A/B 測試的理解。
楊震原稱,A/B 測試是字節(jié)跳動一項非?;A的工具,從公司成立之初就在使用,支撐了抖音、今日頭條等產(chǎn)品的增長迭代。目前,字節(jié)跳動 A/B 測試每日新增 1500 + 實驗,服務于 400 多項大大小小的業(yè)務,累計做了 70 多萬次實驗。這項工具已經(jīng)實現(xiàn)產(chǎn)品化,通過火山引擎向企業(yè)客戶開放。
A/B 測試廣泛應用于字節(jié)跳動方方面面,包括產(chǎn)品命名、交互設計、推薦算法等。但楊震原表示,這項工具也存在很多應用局限,比如獨立性、置信度、長短期等問題。
楊震原透露,抖音產(chǎn)品名字,其實是綜合了 A/B 測試和人為判斷的結果,「『抖音』這個名字在測試結果中排名第二。但大家覺得,這個名字更符合認知,更能體現(xiàn)它的形態(tài),所以還是選了它?!?/p>
楊震原在火山引擎技術開放日現(xiàn)場
以下為楊震原演講全文:
大家好,我叫楊震原。非常高興在火山引擎技術開放日上和大家交流分享,希望對大家有所幫助。
字節(jié)跳動做了很多產(chǎn)品,我們希望技術團隊對待自家產(chǎn)品就像對待客戶一樣。我們不僅有內部客戶,像抖音、今日頭條,也希望有更多外部客戶,把我們的技術能力輸出,于是就有了火山引擎品牌。火山引擎技術開放日也是這個目的,希望把我們的技術對外,跟更多朋友分享交流。當然,也有點私心,希望我們的產(chǎn)品能賣到更多地方去。
今天我們聊的話題是 “數(shù)據(jù)驅動和用 A/B 測試解決問題”。這里的關鍵詞是“解決問題、數(shù)據(jù)驅動、A/B 測試”。解決問題一定要有好的方法,每個人都想用更好的方法解決問題,這涉及用什么方法,達成什么目標?!皵?shù)據(jù)驅動” 是我們公司內非常看重的一系列方法,“A/B 測試”是 “數(shù)據(jù)驅動” 中的一個具體方法。
用戶畫像和使用時長不是好的目標
要想解決問題,第一個問題是:目標是什么?很多人覺得:這個很簡單啊!目標嘛,今天想干一個什么事情,我就確定一個目標,接下來就是照著這個目標去完成。但是,確認目標,以及這個目標是否可量化,其實是特別重要的。
我給大家舉幾個例子。我大概 2014 年初來到字節(jié)跳動。剛來時,張一鳴說把我們的推薦質量提升提升,想想辦法怎么做改進。所以,當時我的目標就是提升今日頭條產(chǎn)品的用戶體驗,把推薦做得更好。
很快我發(fā)現(xiàn),這方面其實已經(jīng)有很多項目在做了,其中有一個子方向的目標是“全面、精準的用戶畫像體系”。但在我看來,這個目標其實有很多問題。
我們的實際目標是“提升推薦的用戶體驗”。我們有很多方法來達成目標,用戶畫像只是方法之一。它是個子目標,不是我們要解決的目標,甚至可能都不是重要的方法。即使假設這個目標就是我們的主要目標,我們也還要評估它是不是可衡量的。
如何評估這一點非常難,比如衡量用戶畫像是不是好,很難量化。用戶的實際興趣是什么,很難評估。問用戶喜歡不喜歡旅游,一般人都說喜歡,但是推薦旅游相關文章看不看?實際上很多人都不看。
因此,用戶畫像不是一個好的目標。首先,這個目標優(yōu)先級不一定高,其次,它的評估非常難,這就意味著,這個目標很難指導我們的具體工作。
還有一種常用目標,叫“使用時長”。A 做了一個算法,平均使用時長 40 分鐘,B 做的算法,平均使用時長 45 分鐘,那是不是 B 就比 A 好?這個聽起來似乎很科學。
但是我要跟大家講一個例子。大概在 2016 年,有一個傳統(tǒng)老牌外企,它在美國的 PC 端有一款產(chǎn)品是新聞推薦。這個公司在中國有一個研究所,其中一項工作是去提高新聞推薦質量,采用的評估標準是用戶使用時長。對于用戶在平臺上閱讀了多少時長,這個研究所每個季度都有 KPI,連續(xù)幾年他們每年都能完成目標,并且經(jīng)常超額完成。但后來我跟他們聊的時候,這個研究所快要解散了。
原來,雖然使用時長在增加,但這個產(chǎn)品的用戶規(guī)模其實是不好的,用戶體驗也不夠理想,整個產(chǎn)品的留存在下降。我問他們,為什么你們的時長一直在漲,但是你們產(chǎn)品卻不行了?對方說:時長是在漲,但時長增長有兩種方式,一種是用戶體驗變好了、用戶看的時間更長了;還有一種方式是用著很好的用戶繼續(xù)留下來了,而一些時長很短的用戶看了看覺得這個產(chǎn)品不好,就走了。這些用戶走了以后,平均時長繼續(xù)變長。于是就變成了 “不斷驅趕體驗差的用戶,平均時長卻變長了” 這樣一個過程。
這是很可怕的,看起來是個很好的目標,但卻把產(chǎn)品做死了??梢灶A見,如果我們只用使用時長作為目標的話,是有風險的。
那怎么辦呢?我們也沒有大招,只能是盡量將多個目標綜合。既要考慮用戶體驗,也要考慮一些客觀指標,同時可能輔以一些用戶訪談的直觀印象,最后綜合去制定我們的方向。
好的目標層次合理、可衡量
如何選一個合適的目標?我覺得至少有兩個角度,需要去考慮。
第一個角度,目標層次合理性。
什么叫“層次合理性”?比如你是一家公司的首席技術官(CTO),CEO 問你公司的技術目標是什么,你說“我要讓我們的公司市值做得更大,原來估值 5 億美元,10 年之后估值 50 億美元”。這個目標很泛、很高層次,跟最終目標很接近。通常大家也不會質疑說這個目標有錯誤。但是這個目標就不太能指導你的工作。CTO 下面的總監(jiān)、經(jīng)理、工程師這個季度該干什么呢?這個目標能有些推導分解嗎?很難。雖然目標層次很高,不容易偏離,但是對具體工作很難有指導。
那我們定非常具體的目標可以嗎?比如像剛才的例子,以使用時長為目標。這種時候,會有另一個問題:這個目標很具體、很能指導工作,但是它偏離了怎么辦?還有一個可能出現(xiàn)的問題是,這個目標沒有偏離,但不可衡量,它不利于指導工作。
所以,應該選一個不要太高、不要太低的目標,并且定期衡量特別重要。聊數(shù)據(jù)驅動思路時,當試圖用數(shù)據(jù)驅動思路去細化目標時,有利于你仔細反思:我的目標是不是這個?我的目標能不能量化?它會逼你把目標想得很清楚。
第二個角度,目標可衡量。這一點特別重要。它跟數(shù)據(jù)驅動的理念互相幫助,定好目標,才能更好的應用數(shù)據(jù)驅動,當你用數(shù)據(jù)驅動的方法去做事情時,它就會 push 你的目標到底是不是合理。比如你想了想這個目標:哦,之前的目標就定錯了,怪不得搞不清楚。
什么是靠譜的評估方法?
當目標想清楚了,那我們就評估吧。通常我們有哪些方法?
一是經(jīng)驗判斷。不管什么公司,每天都在不停的用這個方法,這個方法非??孔V的,但是有它的問題。
二是非 A/B 測試的數(shù)據(jù)分析。
三是 A/B 測試的數(shù)據(jù)分析。我特別把 A/B 測試和非 A/B 測試區(qū)分了一下,因為它是一個更接近真實、更能夠把握住本質的一個方法。相信很多朋友都了解因果推斷,做精準的 A/B 測試能夠把因果說得更清楚,所以是更有效的方法。
經(jīng)驗判斷是什么?本質上是就靠人,這個方法是普遍采用的。舉個例子,大家都知道我們公司在做短視頻,怎么評估質量好壞?很多時候都靠人去判斷,如果你用客觀指標判斷它,會有另外的風險,所以很多時候用人判斷。在很多公司,比如戰(zhàn)略決策通常是人判斷的,很難靠數(shù)據(jù)定你的戰(zhàn)略方向,這是一個很重要的方法。
但它的問題在于:執(zhí)行層面很容易不一致,尤其對一個很大的公司來說,每天要決策的事情很多,并不是每個決策都由 CEO 或者高管來做,可能會分到公司很多團隊很多部門,每個部門都有很多人,這些人在他們的點上去做希望對公司正確的決策,但他們的意見有可能是不一致的。而且每個人可能有每個人的偏好,這是很難避免的。尤其公司比較大的時候,就會帶來非常多風險,比如不一致性和有偏性。
非 A/B 測試的數(shù)據(jù)分析。這個主要想強調關聯(lián)跟因果的問題,我們來舉個例子就很容易看到。暑假前,運營團隊做了一波活動,聲勢非常浩大,到了暑假開始的時候,發(fā)現(xiàn)用戶的活躍度大幅上升,這個提升是我們的運營活動帶來的嗎?二者是有關聯(lián)的,但是關聯(lián)并不代表因果。很明顯,暑假就是一個因素,暑假帶來的變化跟運營活動帶來的變化,到底誰更大?這個事情很難歸因的。每個人都覺得自己做的事情有用,關聯(lián)分析中往往就會帶有偏見。
我們再舉個有趣的例子,諾貝爾獎和巧克力消費量的關系圖。圖片顯示,巧克力吃得越多的國家,諾貝爾獎得主就越多。如果想改進中國的科技水平,多拿諾貝爾獎,我們應該多吃巧克力嗎?這顯然不靠譜??赡軙兣郑茈y拿到諾貝爾獎。
這可以說明一件事情,這兩個事件有關聯(lián)性,但是它不是因果性。從數(shù)據(jù)分析中得出結論,就會面臨很多這樣的風險,它會混淆關聯(lián)性和因果性,并不能解決問題。
真正的完美解決方案是什么?得靠平行宇宙了。當前時空是這個狀態(tài),做了一波 A 操作,比如一些同事搞了一波活動,時間退回去,他沒有做這個事情。我們再回過頭來看這兩個平行宇宙的差別是什么,這個差別就是這個活動所帶來的,這個很好理解。但是我們沒辦法做平行宇宙的實驗,就只能做 A/B 測試了。
怎么做 A/B 測試?當我們想觀測某個方面,比如說人群或者某類產(chǎn)品,就把人群和產(chǎn)品分成 A、B 兩組,比如你的操作是發(fā)紅包,或者改了設計頁面,又或者是做了運營活動。除了這些操作之外,其他的分布完全一樣。當然了,這件事情只能無限逼近,不能做到理論上完全一樣,除非是平行宇宙。
A/B 測試看上去好像效率很低,非常復雜,要分組,還要看因素是不是剝離干凈了。但是當你真正把一個事情搞清楚以后,就可以一個臺階一個臺階往上走。如果你搞不清楚,做得很快,有可能今天上一個臺階,明天下一個臺階,后天上一個臺階,不能保證一直在前進,這是非常大的差別。
字節(jié)跳動的 A/B 測試實踐
早期有記載的 A/B 測試,是在 1747 年,詹姆斯 · 林德治療壞血病的臨床實驗。他們把患有壞血病的水手分成 6 組,每組 2 個人。在 6 天的時間內,他們把大家安排在同樣的治療室中,吃同樣的食物,盡量排除實驗的干擾。這個人群選擇也很重要,我們應該選擇各種年齡段的,各種國家地區(qū)的。這里沒有寫,沒有足夠的數(shù)量,這是它不嚴謹?shù)牡胤?。唯一的不同是每組的治療方案,吃什么東西?檸檬、橘子、蘋果汁、醋、海水等等。最后的實驗結果是檸檬 / 橘子、蘋果汁有用。
在此之前有很多玄學,這個病,有人說用這個方法有用,用那個方法有用,有的是碰上了,有的是有效了。這個實驗雖然不夠嚴謹,還可以做得更好,但是它真正確定了什么原因。當你非常確信這個結論時,就可以繼續(xù)深入研究,比如從這個食物中分離出它所必要的真正有效物質是什么。在很確定結論的基礎上不斷演化,就能夠往后走得很遠。
知道了 A/B 測試的源頭后,現(xiàn)在說下字節(jié)跳動做的 A/B 測試實踐。
2012 年公司成立,那時候我還沒來。聽說那會兒一鳴還在自己寫代碼,已經(jīng)開始做 A/B 測試。
我大概是 2014 年來的,發(fā)現(xiàn)公司已經(jīng)非常重視這方面。這跟我的理念非常像,我也在繼續(xù)推動這件事情。比如定目標,推動 A/B 測試的平臺化,讓它更嚴謹,以及發(fā)現(xiàn)它的問題,在公司中更廣泛地使用。
到 2016 年,已經(jīng)變成一個內部廣泛使用的平臺了,叫 Libra 平臺,它有很多的功能。到 2019 年時,我們已經(jīng)不只是內部平臺了,正式立項,開始做對外平臺,給外部更多客戶來用我們的產(chǎn)品。
內部來說,我們用 A/B 測試確實很多,現(xiàn)在每天大概新增 1500 個實驗,服務了 400 多項業(yè)務,累計已經(jīng)做了 70 萬次實驗。
應用在哪些方面呢?產(chǎn)品命名、交互設計,比如改一個字體、一個彈窗、界面大小,都會做 A/B 測試。推薦算法就不說了,從一鳴自己寫代碼開始,就一直在做了。廣告優(yōu)化,這是業(yè)界普遍做法。用戶增長,也是這樣。市場活動,我們做了一小部分。內部基本上就是,能用 A/B 測試的都用。
A/B 測試不是萬能的
那 A/B 測試是不是就一統(tǒng)天下了呢?顯然也不是。A/B 測試不一定是最好的評估方法,它不是萬能的,但是我覺得,不會 A/B 測試肯定是不行的。
為什么說它不一定是最好的評估方法?我們說說它的一些局限和問題。
首先是獨立性的問題。如果你真的想做 A/B 測試,就要對你的實驗對象進行分組,分組之后,去做一個操作,觀測結果。這個分組要求兩組是非常獨立,除了你的這個操作之外,其他部分都一樣,至少是分布一樣。但有時候這點并不容易保證。
舉個例子,網(wǎng)約車的司機分配策略,比如這個網(wǎng)約車分配什么司機?誰離你最近,我就分配,這是一個策略。我們還可以考慮價格,以及車型和時間等等,做別的策略。A 同學做了 A 策略,B 同學做了 B 策略,哪個策略更好?
我們可以來做個 A/B 實驗,把用戶分成兩組,A 組是一部分用戶,用 A 策略,B 組是另一部分用戶,用 B 策略。但這是有很多問題的。如果只按用戶來分,A 策略和 B 策略的用戶有可能都用同一個司機,A 策略的用戶把這個司機訂走了,B 組的用戶就訂不到這個司機了。
也就是說,你最后觀測到的統(tǒng)計指標,比如成單量、成單率,可能會有交叉影響,但具體是多少?單從這個實驗數(shù)據(jù)來講,是看不出來的,也不太容易分析,所以它不獨立。交叉影響在哪?按用戶分了,但是司機沒有分開,兩波用戶有可能會聯(lián)系到同一個司機,這就叫“獨立性問題”。
更嚴謹?shù)膶嶒炘趺醋??應該把用戶和司機都分開,把用戶編個組,司機也編個組,用戶司機 A 組,用戶司機 B 組。當你發(fā)現(xiàn)你要觀測的對象不能被嚴格切分的話,就需要考慮獨立性的問題,這時候你做的結論很可能是錯的。
我們再看一個置信度的問題。比如做搜索評估,我們評估 100 個隨機測試,把它們分成 A、B 兩個測試組,其中有 22 個變好了,有 20 個變差了,加起來是 42 個,剩下的 58 個兩邊一樣。
請問,A 組是比 B 組變好了嗎?有人說,系統(tǒng)變好 10%,效果非常明顯。你相信嗎?你要相信的話就被蒙蔽了。
我這里寫了一個置信度,P 值 = 0.75,這是什么意思?我們通常認為,P 值要小于 0.05,這個數(shù)據(jù)才是可信的,也就是 A 比 B 好。0.75 的意思是 “A 比 B 好” 碰巧出現(xiàn)的概率是 75%,這是不可信的。我們把這個箱型圖畫出來,它波動的范圍如果按照 95% 的區(qū)間,從 - 0.1 一直到 0.147,是非常大的范圍。把置信度畫出來,發(fā)現(xiàn)這個實驗完全不能說明 A 比 B 好。結論就是:這個實驗不可信,沒有顯著性,完全不能從這個實驗中得出 A 比 B 好的結論。
還有長短期的影響,這也是一個常見的問題。我舉一個例子,比如說,我們對每個商品會有評價,現(xiàn)在興趣電商比較熱,電商的推薦主要會考慮它的評價,對于評價低的商品,我們會做一些控制和懲罰,讓它的推薦少一些。如果加大懲罰力度,或者由不懲罰變成懲罰,交易量會怎么樣變化?
如果做 A/B 實驗,會發(fā)現(xiàn)加上這個懲罰,它的交易量是下降的。這很顯然,商品本來可以買,現(xiàn)在不讓買了,那它的交易量肯定下降。如果你看了 A/B 測試,說我們不應該做,對這些差的產(chǎn)品就應該保持,那你很可能就錯了。
有時候,靠人的經(jīng)驗相信這個事情是對的,堅持做,你很可能會得到一個正確的答案。為什么?我們這個實驗不再測 3 天或者 1 個星期,而是測 1 個月,你會發(fā)現(xiàn),這個交易量開始是下降的,但是慢慢持平了。隨著時間再往前推移,它的交易量就變好了。
可以想象,當你做了一些正確的事情,短期可能會受一定損失,但是積累了用戶口碑,這些東西周期都很長的,慢慢效果就體現(xiàn)出來了。A/B 測試通常不會做那么多時間。
所以有時候要結合判斷相信背后本質的東西,可以用更長期的 A/B 測試驗證它,這時候你會做出更正確的選擇。如果相信短期,就掉到溝里了,得出錯誤的結論。
抖音的名字是怎么來的?
最后再講講抖音取名字的故事。很多人都很關心這件事,甚至有人說抖音的名字是找大師算過的。起名字是可以做 A/B 測試的。當年,我們做了這個短視頻產(chǎn)品,有很多候選名字,那會兒已經(jīng)有一些產(chǎn)品 demo 了。
我們就把這個 demo 產(chǎn)品起成不同的名字,用不同的 logo,在應用市場商店做 A/B 測試,同樣的預算,同樣的位置,這能測出用戶對這個名字的關心程度,吸引力程度,下載轉化率等等,但其實也是非常短期的。
做完這個測試之后,我們得出了一個排名,比如第一名是什么,第二名是什么?!岸兑簟笔桥琶诙模皇亲詈玫拿?。當時負責抖音的產(chǎn)品經(jīng)理,討論應該用哪個名字。
你去看這個分析和排名,看那個過程,就會發(fā)現(xiàn)有一些是符合你的感覺,有一些不是符合你的感覺,才知道,原來人們對這個東西可能會這么想。所以 A/B 測試的過程,有時不完全看它的結論,它也會給你帶來很多認知,這就是經(jīng)驗帶來的偏差。A/B 測試可以糾正這些偏差,但是它也會有這樣或那樣的問題,有時候你不會完全采納它的結論。
我們就沒有采納排名第一的名字,大家覺得,“抖音”長期來講更符合認知,更能體現(xiàn)它的形態(tài),所以就選擇了 “抖音” 這個排名第二的選項。
從這個故事中可以看到,真正想去做一個科學決策,是很難有完美方法的,沒有一招鮮的方法,只有最合適的方法。充分地做 A/B 測試,這是一個能夠在很大程度上補充信息的過程,能夠消除很多偏見,能夠帶來很多客觀的事實。但是它也不是完美的,需要補充其他方法一起來用。就像 “抖音” 起名字的例子一樣。在公司中更廣泛地使用 A/B 測試,我相信對提高整個公司的決策質量是很有幫助的。