9年70萬次實驗,字節跳動首次揭秘A/B測試

“A/B測試不一定是最好的評估方法。它不是萬能的,但不會A/B測試肯定是不行的。”

4月20日,首個火山引擎技術開放日在北京方恒時尚中心舉辦,字節跳動副總裁楊震原以《聊聊數據驅動和用A/B測試解決問題》為題,分享了他對於A/ B測試的理解。

楊震原稱,A/B測試是字節跳動一項非常基礎的工具,從公司成立之初就在使用,支撐了抖音、今日頭條等產品的增長迭代。目前,字節跳動A/B測試每日新增1500+實驗,服務於400多項大大小小的業務,累計做了70多萬次實驗。這項工具已經實現產品化,通過火山引擎向企業客戶開放。

A/B測試廣泛應用於字節跳動方方面面,包括產品命名、交互設計、推薦算法等。但楊震原表示,這項工具也存在很多應用局限,比如獨立性、置信度、長短期等問題。

楊震原透露,抖音產品名字,其實是綜合了A/B測試和人為判斷的結果,“'抖音'這個名字在測試結果中排名第二。但大家覺得,這個名字更符合認知,更能體現它的形態,所以還是選了它。”

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

以下為楊震原演講全文:

大家好,我叫楊震原。非常高興在火山引擎技術開放日上和大家交流分享,希望對大家有所幫助。

字節跳動做了很多產品,我們希望技術團隊對待自家產品就像對待客戶一樣。我們不僅有內部客戶,像抖音、今日頭條,也希望有更多外部客戶,把我們的技術能力輸出,於是就有了火山引擎品牌。火山引擎技術開放日也是這個目的,希望把我們的技術對外,跟更多朋友分享交流。當然,也有點私心,希望我們的產品能賣到更多地方去。

今天我們聊的話題是“數據驅動和用A/B測試解決問題”。這裡的關鍵詞是“解決問題、數據驅動、A/B測試”。解決問題一定要有好的方法,每個人都想用更好的方法解決問題,這涉及用什麼方法,達成什麼目標。“數據驅動”是我們公司內非常看重的一系列方法,“A/B測試”是“數據驅動”中的一個具體方法。

用戶畫像和使用時長不是好的目標

要想解決問題,第一個問題是:目標是什麼?很多人覺得:這個很簡單啊!目標嘛,今天想乾一個什麼事情,我就確定一個目標,接下來就是照著這個目標去完成。但是,確認目標,以及這個目標是否可量化,其實是特別重要的。

我給大家舉幾個例子。我大概2014年初來到字節跳動。剛來時,張一鳴說把我們的推薦質量提升提升,想想辦法怎麼做改進。所以,當時我的目標就是提升今日頭條產品的用戶體驗,把推薦做得更好。

很快我發現,這方面其實已經有很多項目在做了,其中有一個子方向的目標是“全面、精準的用戶畫像體系”。但在我看來,這個目標其實有很多問題。

我們的實際目標是“提升推薦的用戶體驗”。我們有很多方法來達成目標,用戶畫像只是方法之一。它是個子目標,不是我們要解決的目標,甚至可能都不是重要的方法。即使假設這個目標就是我們的主要目標,我們也還要評估它是不是可衡量的。

如何評估這一點非常難,比如衡量用戶畫像是不是好,很難量化。用戶的實際興趣是什麼,很難評估。問用戶喜歡不喜歡旅遊,一般人都說喜歡,但是推薦旅遊相關文章看不看?實際上很多人都不看。

因此,用戶畫像不是一個好的目標。首先,這個目標優先級不一定高,其次,它的評估非常難,這就意味著,這個目標很難指導我們的具體工作。

還有一種常用目標,叫“使用時長”。A做了一個算法,平均使用時長40分鐘,B做的算法,平均使用時長45分鐘,那是不是B就比A好?這個聽起來似乎很科學。

但是我要跟大家講一個例子。大概在2016年,有一個傳統老牌外企,它在美國的PC端有一款產品是新聞推薦。這個公司在中國有一個研究所,其中一項工作是去提高新聞推薦質量,採用的評估標準是用戶使用時長。對於用戶在平台上閱讀了多少時長,這個研究所每個季度都有KPI,連續幾年他們每年都能完成目標,並且經常超額完成。但後來我跟他們聊的時候,這個研究所快要解散了。

原來,雖然使用時長在增加,但這個產品的用戶規模其實是不好的,用戶體驗也不夠理想,整個產品的留存在下降。我問他們,為什麼你們的時長一直在漲,但是你們產品卻不行了?對方說:時長是在漲,但時長增長有兩種方式,一種是用戶體驗變好了、用戶看的時間更長了;還有一種方式是用著很好的用戶繼續留下來了,而一些時長很短的用戶看了看覺得這個產品不好,就走了。這些用戶走了以後,平均時長繼續變長。於是就變成了“不斷驅趕體驗差的用戶,平均時長卻變長了”這樣一個過程。

這是很可怕的,看起來是個很好的目標,但卻把產品做死了。可以預見,如果我們只用使用時長作為目標的話,是有風險的。

那怎麼辦呢?我們也沒有大招,只能是盡量將多個目標綜合。既要考慮用戶體驗,也要考慮一些客觀指標,同時可能輔以一些用戶訪談的直觀印象,最後綜合去製定我們的方向。

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

好的目標層次合理、可衡量

如何選一個合適的目標?我覺得至少有兩個角度,需要去考慮。

第一個角度,目標層次合理性。

什麼叫“層次合理性”?比如你是一家公司的首席技術官(CTO),CEO問你公司的技術目標是什麼,你說“我要讓我們的公司市值做得更大,原來估值5億美元,10年之後估值50億美元”。這個目標很泛、很高層次,跟最終目標很接近。通常大家也不會質疑說這個目標有錯誤。但是這個目標就不太能指導你的工作。CTO下面的總監、經理、工程師這個季度該干什麼呢?這個目標能有些推導分解嗎?很難。雖然目標層次很高,不容易偏離,但是對具體工作很難有指導。

那我們定非常具體的目標可以嗎?比如像剛才的例子,以使用時長為目標。這種時候,會有另一個問題:這個目標很具體、很能指導工作,但是它偏離了怎麼辦?還有一個可能出現的問題是,這個目標沒有偏離,但不可衡量,它不利於指導工作。

所以,應該選一個不要太高、不要太低的目標,並且定期衡量特別重要。聊數據驅動思路時,當試圖用數據驅動思路去細化目標時,有利於你仔細反思:我的目標是不是這個?我的目標能不能量化?它會逼你把目標想得很清楚。

第二個角度,目標可衡量。這一點特別重要。它跟數據驅動的理念互相幫助,定好目標,才能更好的應用數據驅動,當你用數據驅動的方法去做事情時,它就會push你的目標到底是不是合理。比如你想了想這個目標:哦,之前的目標就定錯了,怪不得搞不清楚。

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

什麼是靠譜的評估方法?

當目標想清楚了,那我們就評估吧。通常我們有哪些方法?

一是經驗判斷。不管什麼公司,每天都在不停的用這個方法,這個方法非常靠譜的,但是有它的問題。

二是非A/B測試的數據分析。

三是A/B測試的數據分析。我特別把A/B測試和非A/B測試區分了一下,因為它是一個更接近真實、更能夠把握住本質的一個方法。相信很多朋友都了解因果推斷,做精準的A/B測試能夠把因果說得更清楚,所以是更有效的方法。

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

經驗判斷是什麼?本質上是就靠人,這個方法是普遍採用的。舉個例子,大家都知道我們公司在做短視頻,怎麼評估質量好壞?很多時候都靠人去判斷,如果你用客觀指標判斷它,會有另外的風險,所以很多時候用人判斷。在很多公司,比如戰略決策通常是人判斷的,很難靠數據定你的戰略方向,這是一個很重要的方法。

但它的問題在於:執行層面很容易不一致,尤其對一個很大的公司來說,每天要決策的事情很多,並不是每個決策都由CEO或者高管來做,可能會分到公司很多團隊很多部門,每個部門都有很多人,這些人在他們的點上去做希望對公司正確的決策,但他們的意見有可能是不一致的。而且每個人可能有每個人的偏好,這是很難避免的。尤其公司比較大的時候,就會帶來非常多風險,比如不一致性和有偏性。

非A/B測試的數據分析。這個主要想強調關聯跟因果的問題,我們來舉個例子就很容易看到。暑假前,運營團隊做了一波活動,聲勢非常浩大,到了暑假開始的時候,發現用戶的活躍度大幅上升,這個提升是我們的運營活動帶來的嗎?二者是有關聯的,但是關聯並不代表因果。很明顯,暑假就是一個因素,暑假帶來的變化跟運營活動帶來的變化,到底誰更大?這個事情很難歸因的。每個人都覺得自己做的事情有用,關聯分析中往往就會帶有偏見。

我們再舉個有趣的例子,諾貝爾獎和巧克力消費量的關係圖。圖片顯示,巧克力吃得越多的國家,諾貝爾獎得主就越多。如果想改進中國的科技水平,多拿諾貝爾獎,我們應該多吃巧克力嗎?這顯然不靠譜。可能會變胖,但很難拿到諾貝爾獎。

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

這可以說明一件事情,這兩個事件有關聯性,但是它不是因果性。從數據分析中得出結論,就會面臨很多這樣的風險,它會混淆關聯性和因果性,並不能解決問題。

真正的完美解決方案是什麼?得靠平行宇宙了。當前時空是這個狀態,做了一波A操作,比如一些同事搞了一波活動,時間退回去,他沒有做這個事情。我們再回過頭來看這兩個平行宇宙的差別是什麼,這個差別就是這個活動所帶來的,這個很好理解。但是我們沒辦法做平行宇宙的實驗,就只能做A/B測試了。

怎麼做A/B測試?當我們想觀測某個方面,比如說人群或者某類產品,就把人群和產品分成A、B兩組,比如你的操作是發紅包,或者改了設計頁面,又或者是做了運營活動。除了這些操作之外,其他的分佈完全一樣。當然了,這件事情只能無限逼近,不能做到理論上完全一樣,除非是平行宇宙。

A/B測試看上去好像效率很低,非常複雜,要分組,還要看因素是不是剝離乾淨了。但是當你真正把一個事情搞清楚以後,就可以一個台階一個台階往上走。如果你搞不清楚,做得很快,有可能今天上一個台階,明天下一個台階,後天上一個台階,不能保證一直在前進,這是非常大的差別。

字節跳動的A/B測試實踐

早期有記載的A/B測試,是在1747年,詹姆斯·林德治療壞血病的臨床實驗。他們把患有壞血病的水手分成6組,每組2個人。在6天的時間內,他們把大家安排在同樣的治療室中,吃同樣的食物,盡量排除實驗的干擾。這個人群選擇也很重要,我們應該選擇各種年齡段的,各種國家地區的。這裡沒有寫,沒有足夠的數量,這是它不嚴謹的地方。唯一的不同是每組的治療方案,吃什麼東西?檸檬、橘子、蘋果汁、醋、海水等等。最後的實驗結果是檸檬/橘子、蘋果汁有用。

在此之前有很多玄學,這個病,有人說用這個方法有用,用那個方法有用,有的是碰上了,有的是有效了。這個實驗雖然不夠嚴謹,還可以做得更好,但是它真正確定了什麼原因。當你非常確信這個結論時,就可以繼續深入研究,比如從這個食物中分離出它所必要的真正有效物質是什麼。在很確定結論的基礎上不斷演化,就能夠往後走得很遠。

知道了A/B測試的源頭後,現在說下字節跳動做的A/B測試實踐。

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

2012年公司成立,那時候我還沒來。聽說那會兒一鳴還在自己寫代碼,已經開始做A/B測試。

我大概是2014年來的,發現公司已經非常重視這方面。這跟我的理念非常像,我也在繼續推動這件事情。比如定目標,推動A/B測試的平台化,讓它更嚴謹,以及發現它的問題,在公司中更廣泛地使用。

到2016年,已經變成一個內部廣泛使用的平台了,叫Libra平台,它有很多的功能。到2019年時,我們已經不只是內部平台了,正式立項,開始做對外平台,給外部更多客戶來用我們的產品。

內部來說,我們用A/B測試確實很多,現在每天大概新增1500個實驗,服務了400多項業務,累計已經做了70萬次實驗。

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

應用在哪些方面呢?產品命名、交互設計,比如改一個字體、一個彈窗、界面大小,都會做A/B測試。推薦算法就不說了,從一鳴自己寫代碼開始,就一直在做了。廣告優化,這是業界普遍做法。用戶增長,也是這樣。市場活動,我們做了一小部分。內部基本上就是,能用A/B測試的都用。

A/B測試不是萬能的

那A/B測試是不是就一統天下了呢?顯然也不是。A/B測試不一定是最好的評估方法,它不是萬能的,但是我覺得,不會A/B測試肯定是不行的。

為什麼說它不一定是最好的評估方法?我們說說它的一些局限和問題。

首先是獨立性的問題。如果你真的想做A/B測試,就要對你的實驗對象進行分組,分組之後,去做一個操作,觀測結果。這個分組要求兩組是非常獨立,除了你的這個操作之外,其他部分都一樣,至少是分佈一樣。但有時候這點並不容易保證。

舉個例子,網約車的司機分配策略,比如這個網約車分配什麼司機?誰離你最近,我就分配,這是一個策略。我們還可以考慮價格,以及車型和時間等等,做別的策略。A同學做了A策略,B同學做了B策略,哪個策略更好?

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

我們可以來做個A/B實驗,把用戶分成兩組,A組是一部分用戶,用A策略,B組是另一部分用戶,用B策略。但這是有很多問題的。如果只按用戶來分,A策略和B策略的用戶有可能都用同一個司機,A策略的用戶把這個司機訂走了,B組的用戶就訂不到這個司機了。

也就是說,你最後觀測到的統計指標,比如成單量、成單率,可能會有交叉影響,但具體是多少?單從這個實驗數據來講,是看不出來的,也不太容易分析,所以它不獨立。交叉影響在哪?按用戶分了,但是司機沒有分開,兩波用戶有可能會聯繫到同一個司機,這就叫“獨立性問題”。

更嚴謹的實驗怎麼做?應該把用戶和司機都分開,把用戶編個組,司機也編個組,用戶司機A組,用戶司機B組。當你發現你要觀測的對像不能被嚴格切分的話,就需要考慮獨立性的問題,這時候你做的結論很可能是錯的。

我們再看一個置信度的問題。比如做搜索評估,我們評估100個隨機測試,把它們分成A、B兩個測試組,其中有22個變好了,有20個變差了,加起來是42個,剩下的58個兩邊一樣。

請問,A組是比B組變好了嗎?有人說,系統變好10%,效果非常明顯。你相信嗎?你要相信的話就被蒙蔽了。

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

我這裡寫了一個置信度,P值=0.75,這是什麼意思?我們通常認為,P值要小於0.05,這個數據才是可信的,也就是A比B好。0.75的意思是“A比B好”碰巧出現的概率是75%,這是不可信的。我們把這個箱型圖畫出來,它波動的範圍如果按照95%的區間,從-0.1一直到0.147,是非常大的範圍。把置信度畫出來,發現這個實驗完全不能說明A比B好。結論就是:這個實驗不可信,沒有顯著性,完全不能從這個實驗中得出A比B好的結論。

還有長短期的影響,這也是一個常見的問題。我舉一個例子,比如說,我們對每個商品會有評價,現在興趣電商比較熱,電商的推薦主要會考慮它的評價,對於評價低的商品,我們會做一些控制和懲罰,讓它的推薦少一些。如果加大懲罰力度,或者由不懲罰變成懲罰,交易量會怎麼樣變化?

9年70萬次實驗,字節跳動首次揭秘A/B測試
9年70萬次實驗,字節跳動首次揭秘A/B測試

如果做A/B實驗,會發現加上這個懲罰,它的交易量是下降的。這很顯然,商品本來可以買,現在不讓買了,那它的交易量肯定下降。如果你看了A/B測試,說我們不應該做,對這些差的產品就應該保持,那你很可能就錯了。

有時候,靠人的經驗相信這個事情是對的,堅持做,你很可能會得到一個正確的答案。為什麼?我們這個實驗不再測3天或者1個星期,而是測1個月,你會發現,這個交易量開始是下降的,但是慢慢持平了。隨著時間再往前推移,它的交易量就變好了。

可以想像,當你做了一些正確的事情,短期可能會受一定損失,但是積累了用戶口碑,這些東西周期都很長的,慢慢效果就體現出來了。A/B測試通常不會做那麼多時間。

所以有時候要結合判斷相信背後本質的東西,可以用更長期的A/B測試驗證它,這時候你會做出更正確的選擇。如果相信短期,就掉到溝裡了,得出錯誤的結論。

抖音的名字是怎麼來的?

最後再講講抖音取名字的故事。很多人都很關心這件事,甚至有人說抖音的名字是找大師算過的。起名字是可以做A/B測試的。當年,我們做了這個短視頻產品,有很多候選名字,那會兒已經有一些產品demo了。

我們就把這個demo產品起成不同的名字,用不同的logo,在應用市場商店做A/B測試,同樣的預算,同樣的位置,這能測出用戶對這個名字的關心程度,吸引力程度,下載轉化率等等,但其實也是非常短期的。

做完這個測試之後,我們得出了一個排名,比如第一名是什麼,第二名是什麼。“抖音”是排名第二的,不是最好的名字。當時負責抖音的產品經理,討論應該用哪個名字。

你去看這個分析和排名,看那個過程,就會發現有一些是符合你的感覺,有一些不是符合你的感覺,才知道,原來人們對這個東西可能會這麼想。所以A/B測試的過程,有時不完全看它的結論,它也會給你帶來很多認知,這就是經驗帶來的偏差。A/B測試可以糾正這些偏差,但是它也會有這樣或那樣的問題,有時候你不會完全採納它的結論。

我們就沒有採納排名第一的名字,大家覺得,“抖音”長期來講更符合認知,更能體現它的形態,所以就選擇了“抖音”這個排名第二的選項。

從這個故事中可以看到,真正想去做一個科學決策,是很難有完美方法的,沒有一招鮮的方法,只有最合適的方法。充分地做A/B測試,這是一個能夠在很大程度上補充信息的過程,能夠消除很多偏見,能夠帶來很多客觀的事實。但是它也不是完美的,需要補充其他方法一起來用。就像“抖音”起名字的例子一樣。在公司中更廣泛地使用A/B測試,我相信對提高整個公司的決策質量是很有幫助的。

今天就講到這裡,謝謝大家。

本文經授權發布,不代表36氪立場。

如若轉載請註明出處。來源出處:36氪