A /B測試曾在多個領域產生深遠的影響,其中包括醫藥、農業、製造業和廣告。 在軟體開發中, A/B測試實驗提供了一個有價值的方式來評估新特性對客戶行為的影響。在這個系列中,我們將描述 Twitter的 A/B測試系統的技術和統計現狀。
本文是該系列的第一篇,主要介紹了為什麼進行 A/B測試和如何避免其中的陷阱。
正文
實驗是 Twitter產品開發週期的核心。這種實驗文化可能是因為 Twitter對工具、研究和培訓進行了大量的投資,以確保特性團隊能夠對他們的想法進行無縫、嚴格的測試和驗證。
Twitter實驗的規模無論數量還是種類都是龐大的——從細微的 UI/UX變更,到新特性,到機器學習模型的改進。我們喜歡將實驗看作是是一個無盡的學習環。
- 建立假設:提出新特性想法或者為現有特性提出改進建議。
- 定義成功指標:評估“機會大小(opportunity size)”——受該變更影響的使用者數量。正式定義實驗成功和失敗的指標;考慮可接受的折衷方案。
- 檢驗假設:實現擬定的變更,”檢測(instrument)“相應的日誌,並執行合理性檢查以確保實驗正確配置。
- 學習:檢查實驗中收集的資料,吸取其中的經驗教訓,並與其他 Twitter團隊共享。
- 釋出:收集完資料後,判斷實驗是否驗證了假設,並決定釋出或者不釋出。
- 建立另一個假設:結合實驗中的新想法,為更多的改進建立更多的假設。
A/B測試、決策制定和創新
Twitter的”產品檢測和實驗(Product Instrumentation and Experimentation)”(PIE)團隊對實驗哲學進行了大量的思考。A/B測試可以帶來很多好處,但是它也有很多眾所周知的、容易陷入的陷阱。它的結果往往是出人意料、違反直覺的。我們如何避免這種陷阱?什麼時候我們應該建議進行 A/B測試,從而試驗特性或者擬定的變更?在決策制定過程中我們如何保持敏捷,且在承受重大風險的時候仍能保持嚴謹?
測試的好處以及增量測試
特性變更A/B測試文化重點關注的是它帶來的是小增量收益,大部分實驗只能帶來個位數百分比的改進,或者甚至是分數百分比。因此,有些觀點認為,這有什麼意義呢?為什麼不從事一些更有影響力、更有革命性的事情呢?
這是事實:如果存在實驗能夠提升指標,那麼到目前為止,大多數實驗在以最低限度的方式提升著指標;某個實驗如果能夠為大部分使用者將某個核心指標提升數個百分點就被視為一種非凡的成功。
這與 A/B測試的基本原理無關。這是因為一個成熟的產品很難通過大幅度改進指標的方式改變。很多人認為的全壘打想法根本沒有帶來一點點的改進:人類原來極其不善於預測什麼可行(更多資訊請參閱 “Seven Rules of Thumb for Web Site Experimenters”)。大多數時候,不理想的 A/B測試結果讓我們能夠及早發現,看上去不錯的想法其實可能不怎麼樣。因此我們更願意儘可能快的獲得壞訊息,重新回到繪圖板;這就是我們實驗的原因。
A/B測試是一種可以確保好想法不會夭折的方法,使好的想法有機會全面充分開發。當我們真正的信任某個想法,而初步實驗結果不能滿足我們的期望的時候,我們可以對產品做進一步改進,持續改進直到符合期望可以釋出給數百萬的人使用。另一種方法是,構建一些感覺良好的特性併發布,之後開發其它新的想法,一年後有人意識到根本沒人在使用這個特性,它就這樣靜靜地隕落了。
在我們從事各種各樣原型開發的時候,快速迭代和衡量擬定的變更帶來的影響讓我們團隊能夠及早將隱式使用者反饋吸收進產品中。我們可以釋出一個變更,研究哪些能夠產生改進,哪些不能,接著為能夠進一步改進產品的變更建立假設,然後釋出變更,周而復始直到擁有能夠推送給更廣泛使用者的變更。
有些人可能認為這種增量變更效率太低。當然,釋出“大創意”聽起來遠比小改進好太多了。然而仔細想一下,將許多小變更疊加起來就能產生複合效果。迴避增量變更的產品改進方法很大程度上不是一個好方針。一個好的金融投資組合要能夠平衡儘管回報不那麼高但可預測的無風險賭注和高風險、高收益賭注。在這方面產品組合管理沒有什麼不同。
這就是說,有很多東西我們不能,或者不應該測試。有些變更被設計用於形成網路效應,而這些基於使用者分桶的 A/B測試不會捕獲(儘管確實存在其它技術能夠量化這種影響)。當只針對一個隨機比例的人群時,某些特性可能會失靈。例如,在簡單的 A/B測試中, Group DMs就不是一個可使用的特性,因為可能那些有幸獲得此特性的人想要給那些沒有獲得此特性的人留言,這使得該特性基本無用。其它特性可能是完全的正交——例如推出像 Periscope一樣的新應用程式就不是 Twitter應用實驗。但是一旦推出,A/B測試就成為一種重要的驅動應用程式內可度量增量和不那麼容易度量的增量變更的方法。
還有另一類變更是,主要的新特性在內部構建過程中通過使用者研究進行測試,但是考慮市場戰略原因,在特定爆炸性時刻釋出給所有的使用者。作為一個組織,我們在自認為對產品和使用者都有利的時候做出這個決定。我們相信儘管增量變更可能帶來更好的初始版本,使更多使用者嘗試和使用,但是我們能夠從大版本中獲得更多收益。這是產品負責人需要權衡取捨的。那麼當這麼一個新特性發布後,我們要對其增量變更進行 A/B測試嗎?當然啦!隨著想法的成熟,我們使用完善的科學原理指導它們的演化——並且實驗是該過程的關鍵部分。
實驗的可靠性
既然我們已經對執行實驗進行了案例說明,接著讓我們來討論怎麼做可以避免陷阱。實驗的配置和分析是複雜的。即使是正常的人類行為也很容易引起對結果的偏差和誤解。這裡有幾種實踐方法,可以降低風險。
需求假設
通常實驗工具能夠揭示大量資料,常常允許實驗者設計自定義的指標來衡量變更的影響。但這可能觸發 A/B測試中最隱匿的陷阱之一:“cherry-picking”和“HARKing”——從許多資料點中選擇僅僅支援你的假設的指標,或者看到資料後調整假設,從而讓它匹配實驗結果。在 Twitter,一個實驗收集上百個指標是很常見的,這些指標可以分解成大量的維度(使用者屬性、裝置型別、國家等等),生成數以千計的觀測值——如果你希望擬合使其適應任何故事,就需要從中挑選。
我們指導實驗者遠離 cherry-picking的一個方法是,要求他們在配置階段明確指定希望改進的指標。實驗者願意跟蹤多少指標都可以,但是隻有少數指標可以用這種方式明確標記。然後工具在結果頁面突出顯示這些指標。實驗者可以自由探索所有其它已經被收集的資料,建立新的假設,但是最初的主張應該是固定的,並且要容易檢查。
實驗過程
無論工具有多好,一套配置不完善的實驗仍然會交付不理想的結果。在 Twitter,我們已經對建立實驗過程進行了投資,從而提高實驗成功、正確執行的概率。在這個過程中大多數步驟是可選的——但是我們發現,使其可用和詳細記錄能夠大大降低重新執行實驗的時間損失從而收集更多資料,並降低等待 App Store釋出週期的時間損失,等等。
所有的實驗者都被要求記錄他們的實驗。你在改變什麼?你期望的結果是什麼?期望的“受眾規模”(將要看到這一特性的使用者比例)?收集這些資料不僅保證了實驗者考慮過這些問題,而且讓我們能夠建立一個制度性學習的資料庫——一份已經實驗的正式記錄和實驗結果,包括負面結果。我們可以用此提醒後面的實驗。
實驗者還可以利用實驗牧羊人的優勢。實驗牧羊人都是經驗豐富的工程師和資料科學家,負責評審實驗假設和擬定的指標,以減少實驗出錯的機率。這是可選的,建議不具有約束力。隨著人們對實驗正確配置、跟蹤正確的指標、能夠正確分析實驗結果有了更多的信心,該專案也從參與者中收到了大量的反饋。
一些團隊也會舉行每週例會,在例會上評審實驗結果以便決定哪些應該哪些不應該釋出給更廣泛的受眾。這有助於解決 cherry-picking和誤解統計顯著性的問題。重要的是要注意這不是一場“給我一個理由說不”的例會——我們已經明確,“紅色”實驗釋出,“綠色”實驗不釋出。這裡重要的是坦誠及明確我們引入變更的期望和結果,而不是容忍停滯和獎勵短期收益。引入這些評審顯著提高了我們釋出的變更的整體質量。同時這也是個有趣的會議,因為我們能夠看到團隊正在進行的所有工作以及人們對產品的看法。
另一個我們經常使用的實踐是使用 “holdbacks”,如果可能——向99%(或者其它高百分比)的使用者推送該特性,並觀測隨著時間推移關鍵指標是如何偏離被阻止的1%的。這使得我們能夠快速迭代和釋出,同時密切關注實驗的長期影響。這也是一種很好的驗證實驗中真正實現的收益的方法。
實驗培訓
確保實驗者提防陷阱最有效的方法之一就是培訓他們。Twitter資料科學家會開設多門實驗和統計直覺課程,其中統計直覺是所有新工程師加入公司後的前幾周都要參加的課程。目標是使工程師、PM、EM和其它一些角色熟悉實驗過程、警告、陷阱和最佳實踐。增強實驗品質和陷阱的意識有助於我們避免在可避免的錯誤和誤解上浪費時間,讓人們更快洞察和改進節奏和質量。
即將推出
在後面的文章中,我們將介紹我們的實驗工具 DDG是如何工作的;我們將直接介紹一些我們遇到的有趣的統計問題——檢測有偏差的分桶,使用(或不使用)第二控制(control)進行合理性檢查,自動確定合適的 bucket大小,基於會話的指標和處理異常值。
致謝
感謝 Lucile Lu,Robert Chang,Nodira Khoussainova和 Joshua Lande對此文章的反饋。很多人都為 Twitter實驗背後的理念和工具作出了貢獻。我們想特別感謝 Cayley Torgeson,Chuang Liu,Madhu Muthukumar,Parag Agrawal,和Utkarsh Srivastava。
注:本文最初釋出於 Twitter部落格,InfoQ中文站在獲得作者授權的基礎上對文章進行了翻譯。