“A/B測試不一定是最好的評估方法。它不是萬能的,但不會A/B測試肯定是不行的。”
楊震原透露,抖音產品名字,其實是綜合了A/B測試和人為判斷的結果,“‘抖音’這個名字在測試結果中排名第二。但大家覺得,這個名字更符合認知,更能體現它的形態,所以還是選了它。”
楊震原在火山引擎技術開放日現場
以下為楊震原演講全文:
今天我們聊的話題是“資料驅動和用A/B測試解決問題”。這裡的關鍵詞是“解決問題、資料驅動、A/B測試”。解決問題一定要有好的方法,每個人都想用更好的方法解決問題,這涉及用什麼方法,達成什麼目標。“資料驅動”是我們公司內非常看重的一系列方法,“A/B測試”是“資料驅動”中的一個具體方法。
使用者畫像和使用時長不是好的目標
要想解決問題,第一個問題是:目標是什麼?很多人覺得:這個很簡單啊!目標嘛,今天想幹一個什麼事情,我就確定一個目標,接下來就是照著這個目標去完成。但是,確認目標,以及這個目標是否可量化,其實是特別重要的。
很快我發現,這方面其實已經有很多專案在做了,其中有一個子方向的目標是“全面、精準的使用者畫像體系”。但在我看來,這個目標其實有很多問題。
我們的實際目標是“提升推薦的使用者體驗”。我們有很多方法來達成目標,使用者畫像只是方法之一。它是個子目標,不是我們要解決的目標,甚至可能都不是重要的方法。即使假設這個目標就是我們的主要目標,我們也還要評估它是不是可衡量的。
如何評估這一點非常難,比如衡量使用者畫像是不是好,很難量化。使用者的實際興趣是什麼,很難評估。問使用者喜歡不喜歡旅遊,一般人都說喜歡,但是推薦旅遊相關文章看不看?實際上很多人都不看。
因此,使用者畫像不是一個好的目標。首先,這個目標優先順序不一定高,其次,它的評估非常難,這就意味著,這個目標很難指導我們的具體工作。
還有一種常用目標,叫“使用時長”。A做了一個演算法,平均使用時長40分鐘,B做的演算法,平均使用時長45分鐘,那是不是B就比A好?這個聽起來似乎很科學。
但是我要跟大家講一個例子。大概在2016年,有一個傳統老牌外企,它在美國的PC端有一款產品是新聞推薦。這個公司在中國有一個研究所,其中一項工作是去提高新聞推薦質量,採用的評估標準是使用者使用時長。對於使用者在平臺上閱讀了多少時長,這個研究所每個季度都有KPI,連續幾年他們每年都能完成目標,並且經常超額完成。但後來我跟他們聊的時候,這個研究所快要解散了。
原來,雖然使用時長在增加,但這個產品的使用者規模其實是不好的,使用者體驗也不夠理想,整個產品的留存在下降。我問他們,為什麼你們的時長一直在漲,但是你們產品卻不行了?對方說:時長是在漲,但時長增長有兩種方式,一種是使用者體驗變好了、使用者看的時間更長了;還有一種方式是用著很好的使用者繼續留下來了,而一些時長很短的使用者看了看覺得這個產品不好,就走了。這些使用者走了以後,平均時長繼續變長。於是就變成了“不斷驅趕體驗差的使用者,平均時長卻變長了”這樣一個過程。
這是很可怕的,看起來是個很好的目標,但卻把產品做死了。可以預見,如果我們只用使用時長作為目標的話,是有風險的。
那怎麼辦呢?我們也沒有大招,只能是儘量將多個目標綜合。既要考慮使用者體驗,也要考慮一些客觀指標,同時可能輔以一些使用者訪談的直觀印象,最後綜合去制定我們的方向。
好的目標層次合理、可衡量
如何選一個合適的目標?我覺得至少有兩個角度,需要去考慮。
第一個角度,目標層次合理性。
什麼叫“層次合理性”?比如你是一家公司的首席技術官(CTO),CEO問你公司的技術目標是什麼,你說“我要讓我們的公司市值做得更大,原來估值5億美元,10年之後估值50億美元”。這個目標很泛、很高層次,跟最終目標很接近。通常大家也不會質疑說這個目標有錯誤。但是這個目標就不太能指導你的工作。CTO下面的總監、經理、工程師這個季度該幹什麼呢?這個目標能有些推導分解嗎?很難。雖然目標層次很高,不容易偏離,但是對具體工作很難有指導。
那我們定非常具體的目標可以嗎?比如像剛才的例子,以使用時長為目標。這種時候,會有另一個問題:這個目標很具體、很能指導工作,但是它偏離了怎麼辦?還有一個可能出現的問題是,這個目標沒有偏離,但不可衡量,它不利於指導工作。
所以,應該選一個不要太高、不要太低的目標,並且定期衡量特別重要。聊資料驅動思路時,當試圖用資料驅動思路去細化目標時,有利於你仔細反思:我的目標是不是這個?我的目標能不能量化?它會逼你把目標想得很清楚。
第二個角度,目標可衡量。這一點特別重要。它跟資料驅動的理念互相幫助,定好目標,才能更好的應用資料驅動,當你用資料驅動的方法去做事情時,它就會push你的目標到底是不是合理。比如你想了想這個目標:哦,之前的目標就定錯了,怪不得搞不清楚。
什麼是靠譜的評估方法?
當目標想清楚了,那我們就評估吧。通常我們有哪些方法?
一是經驗判斷。不管什麼公司,每天都在不停的用這個方法,這個方法非常靠譜的,但是有它的問題。
二是非A/B測試的資料分析。
三是A/B測試的資料分析。我特別把A/B測試和非A/B測試區分了一下,因為它是一個更接近真實、更能夠把握住本質的一個方法。相信很多朋友都瞭解因果推斷,做精準的A/B測試能夠把因果說得更清楚,所以是更有效的方法。
經驗判斷是什麼?本質上是就靠人,這個方法是普遍採用的。舉個例子,大家都知道我們公司在做短影片,怎麼評估質量好壞?很多時候都靠人去判斷,如果你用客觀指標判斷它,會有另外的風險,所以很多時候用人判斷。在很多公司,比如戰略決策通常是人判斷的,很難靠資料定你的戰略方向,這是一個很重要的方法。
但它的問題在於:執行層面很容易不一致,尤其對一個很大的公司來說,每天要決策的事情很多,並不是每個決策都由CEO或者高管來做,可能會分到公司很多團隊很多部門,每個部門都有很多人,這些人在他們的點上去做希望對公司正確的決策,但他們的意見有可能是不一致的。而且每個人可能有每個人的偏好,這是很難避免的。尤其公司比較大的時候,就會帶來非常多風險,比如不一致性和有偏性。
非A/B測試的資料分析。這個主要想強調關聯跟因果的問題,我們來舉個例子就很容易看到。暑假前,運營團隊做了一波活動,聲勢非常浩大,到了暑假開始的時候,發現使用者的活躍度大幅上升,這個提升是我們的運營活動帶來的嗎?二者是有關聯的,但是關聯並不代表因果。很明顯,暑假就是一個因素,暑假帶來的變化跟運營活動帶來的變化,到底誰更大?這個事情很難歸因的。每個人都覺得自己做的事情有用,關聯分析中往往就會帶有偏見。
我們再舉個有趣的例子,諾貝爾獎和巧克力消費量的關係圖。圖片顯示,巧克力吃得越多的國家,諾貝爾獎得主就越多。如果想改進中國的科技水平,多拿諾貝爾獎,我們應該多吃巧克力嗎?這顯然不靠譜。可能會變胖,但很難拿到諾貝爾獎。
這可以說明一件事情,這兩個事件有關聯性,但是它不是因果性。從資料分析中得出結論,就會面臨很多這樣的風險,它會混淆關聯性和因果性,並不能解決問題。
真正的完美解決方案是什麼?得靠平行宇宙了。當前時空是這個狀態,做了一波A操作,比如一些同事搞了一波活動,時間退回去,他沒有做這個事情。我們再回過頭來看這兩個平行宇宙的差別是什麼,這個差別就是這個活動所帶來的,這個很好理解。但是我們沒辦法做平行宇宙的實驗,就只能做A/B測試了。
怎麼做A/B測試?當我們想觀測某個方面,比如說人群或者某類產品,就把人群和產品分成A、B兩組,比如你的操作是發紅包,或者改了設計頁面,又或者是做了運營活動。除了這些操作之外,其他的分佈完全一樣。當然了,這件事情只能無限逼近,不能做到理論上完全一樣,除非是平行宇宙。
A/B測試看上去好像效率很低,非常複雜,要分組,還要看因素是不是剝離乾淨了。但是當你真正把一個事情搞清楚以後,就可以一個臺階一個臺階往上走。如果你搞不清楚,做得很快,有可能今天上一個臺階,明天下一個臺階,後天上一個臺階,不能保證一直在前進,這是非常大的差別。
在此之前有很多玄學,這個病,有人說用這個方法有用,用那個方法有用,有的是碰上了,有的是有效了。這個實驗雖然不夠嚴謹,還可以做得更好,但是它真正確定了什麼原因。當你非常確信這個結論時,就可以繼續深入研究,比如從這個食物中分離出它所必要的真正有效物質是什麼。在很確定結論的基礎上不斷演化,就能夠往後走得很遠。
2012年公司成立,那時候我還沒來。聽說那會兒一鳴還在自己寫程式碼,已經開始做A/B測試。
我大概是2014年來的,發現公司已經非常重視這方面。這跟我的理念非常像,我也在繼續推動這件事情。比如定目標,推動A/B測試的平臺化,讓它更嚴謹,以及發現它的問題,在公司中更廣泛地使用。
到2016年,已經變成一個內部廣泛使用的平臺了,叫Libra平臺,它有很多的功能。到2019年時,我們已經不只是內部平臺了,正式立項,開始做對外平臺,給外部更多客戶來用我們的產品。
內部來說,我們用A/B測試確實很多,現在每天大概新增1500個實驗,服務了400多項業務,累計已經做了70萬次實驗。
應用在哪些方面呢?產品命名、互動設計,比如改一個字型、一個彈窗、介面大小,都會做A/B測試。推薦演算法就不說了,從一鳴自己寫程式碼開始,就一直在做了。廣告最佳化,這是業界普遍做法。使用者增長,也是這樣。市場活動,我們做了一小部分。內部基本上就是,能用A/B測試的都用。
A/B測試不是萬能的
那A/B測試是不是就一統天下了呢?顯然也不是。A/B測試不一定是最好的評估方法,它不是萬能的,但是我覺得,不會A/B測試肯定是不行的。
為什麼說它不一定是最好的評估方法?我們說說它的一些侷限和問題。
首先是獨立性的問題。如果你真的想做A/B測試,就要對你的實驗物件進行分組,分組之後,去做一個操作,觀測結果。這個分組要求兩組是非常獨立,除了你的這個操作之外,其他部分都一樣,至少是分佈一樣。但有時候這點並不容易保證。
舉個例子,網約車的司機分配策略,比如這個網約車分配什麼司機?誰離你最近,我就分配,這是一個策略。我們還可以考慮價格,以及車型和時間等等,做別的策略。A同學做了A策略,B同學做了B策略,哪個策略更好?
我們可以來做個A/B實驗,把使用者分成兩組,A組是一部分使用者,用A策略,B組是另一部分使用者,用B策略。但這是有很多問題的。如果只按使用者來分,A策略和B策略的使用者有可能都用同一個司機,A策略的使用者把這個司機訂走了,B組的使用者就訂不到這個司機了。
也就是說,你最後觀測到的統計指標,比如成單量、成單率,可能會有交叉影響,但具體是多少?單從這個實驗資料來講,是看不出來的,也不太容易分析,所以它不獨立。交叉影響在哪?按使用者分了,但是司機沒有分開,兩波使用者有可能會聯絡到同一個司機,這就叫“獨立性問題”。
更嚴謹的實驗怎麼做?應該把使用者和司機都分開,把使用者編個組,司機也編個組,使用者司機A組,使用者司機B組。當你發現你要觀測的物件不能被嚴格切分的話,就需要考慮獨立性的問題,這時候你做的結論很可能是錯的。
我們再看一個置信度的問題。比如做搜尋評估,我們評估100個隨機測試,把它們分成A、B兩個測試組,其中有22個變好了,有20個變差了,加起來是42個,剩下的58個兩邊一樣。
請問,A組是比B組變好了嗎?有人說,系統變好10%,效果非常明顯。你相信嗎?你要相信的話就被矇蔽了。
我這裡寫了一個置信度,P值=0.75,這是什麼意思?我們通常認為,P值要小於0.05,這個資料才是可信的,也就是A比B好。0.75的意思是“A比B好”碰巧出現的機率是75%,這是不可信的。我們把這個箱型圖畫出來,它波動的範圍如果按照95%的區間,從-0.1一直到0.147,是非常大的範圍。把置信度畫出來,發現這個實驗完全不能說明A比B好。結論就是:這個實驗不可信,沒有顯著性,完全不能從這個實驗中得出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測試,我相信對提高整個公司的決策質量是很有幫助的。