2014年7月29日 星期二

從Facebook情緒實驗到A/B Testing

    還記得上個月(六月份)有一項震驚各界的IT消息嗎?那是一則關於Facebook以人為干預方式更改使用者在個人動態消息頁面上所看到的友人訊息,以進行他們所謂的「Online emotional contagion 網路情緒感染測試」的新聞;據稱該實驗目的是用以瞭解Facebook用戶的朋友們在社交網站上所表達的正面或負面情緒會不會傳染給該用戶,並影響該用戶後續的張貼行為,此消息經曝光後遭致強烈的批評,外界普遍認為此實驗惡劣的操弄使用者情緒,違反了保護使用者的原則,讓他們在非情願的狀態下成為受試者。

網路情緒感染測試

    實驗中Facebook更動的所謂「動態訊息」,此功能是用來展示該用戶的朋友們最新即時的消息,內容包含了影片、相片、留言、轉載訊息、所在位置等等不同的資訊,這些來自四面八方不同朋友們的動態消息以上下垂直的時間軸方式顯示在每個用戶的首頁,當用戶一登入Facebook時便可看到每個朋友的最新消息及互動情況。
 
  這項情緒測試實驗是在兩年前由一位擔任Facebook Data Scientist(數據科學家)的Adam Kramer所領銜,其最初目的是研究社交網路(Positive & Negative積極與消極)影響的傳播方式,他們在2012/ 1/11到2012/1/ 18期間進行了一個星期的測試,透過隨機方式選擇了約七十萬組用戶(實際為689,003名)並分為AB兩組,此兩組所看到友人的動態訊息都是經過調整的,其中一組帶有消極情緒的貼文被隱藏,另一組則是積極情緒的貼文被隱藏,他們最後的研究結果顯示,當用戶在看到朋友們較為積極性(Positive)的訊息變少後,自己發佈的積極性訊息也會變少而消極性的增多,反之亦然。
    在事件揭發後,輿論的壓力迫使該項實驗的負責人Adam Kramer代表Facebook跟大眾道歉,但事後Facebook仍堅稱所有的實驗目的都是為了提供使用者更好的服務,並解釋那些訊息內容實際上並沒有被隱藏,使用者若經過多次的Refresh之後還是會被顯示出來,而且根據使用者註冊時同意的使用條款內容,其實Facebook是不需要用戶另行簽署表格才能進行試驗(如下圖)。
  不過,在此事件中我們感到興趣的,除了這項實驗的結果之外,還有一項就是Facebook進行這個測試所採用的「隨機對照實驗」,也就是近幾年來廣泛被應用在網路相關領域,稱之為「A/B測試」或「split testing分割測試」的實驗統計方法,在本文中我們將使用「A/B測試」這個較為常用的名詞。

現代統計學之父:Ronald Aylmer Fisher   

    在談到A/B測試之前,我們不得不先提到這位著名的統計學家Ronald Aylmer Fisher(羅納德。費雪),他不但是近代最著名的統計學家,同時他也是演化生物學與遺傳學方面的專家,近百年來現代化的統計學與演化論在他手裏奠定了發展基礎,而前述我們所提到的「隨機對照實驗」這個實驗方法學,幾乎是由費雪一人之力所獨立建構而成的;「隨機對照實驗」方法學不僅動揺了科學的哲學觀,也啟動統計學理論與應用新領域的發展,對科學發展和世界福祉做出革命性的影響。

奶茶的故事
  費雪於1935年所寫旳「The Design of Experiments實驗設計」一書中首度將「隨機對照實驗」系統化,並在該書中提到一個奶茶的故事,這個故事可算是世界上首次的隨機對照實驗,且至今仍為人所津津樂道:(以下內容參考自「統計學,最強的商業武器」一書)




當時在場的所有人對於該女士的發言幾乎都一笑置之,因為依據一般人的理解,紅茶與牛奶誰先誰後的混合次序,理論上對其化學性質並不會產生影響,因此最終味道上不可能會有差異,但是,當時也在場的費雪,卻覺得這個女士的說法很有意思,,故提議「要不要來試看看?」,他立刻拿出兩個茶杯,然後在女士看不到的地方以不同的順序沖泡了兩杯奶茶,接著,以隨機的順序讓該女士試喝並寫下她的答案,重複進行了數次,之後再進行一些機率的運算;書中最後並未寫出那位女士的回答結果與實驗的最終結論,但據說試驗的結果是,這位女士真的能分辨出每一杯茶,且完全答對,因此結論就是下午茶的調製順序對風味有很大的影響。
兩種版本:A.先茶後奶 B.先奶後茶   
隨機產生:每次隨機試喝兩杯(A或B其中一種)
固定測試時間:在相同試喝時間內A或B皆有可能測試
實驗方法:讓該女士隨機試喝A/B兩種奶茶,並驗証其答對率,這就是隨機對照實驗的基本概念。
  該受測女士若要用猜測的方式全部答對,那麼假設她喝了五杯奶茶,全部要猜對的機率為1/2的五次方,亦即1/32約3.1%的機率,若是試喝十杯全部答對,偶然全部猜對的機率就變成1/1024約0.1%,由這樣的機率來看,我們認為她能以某種方式判別出奶茶應是比較合理的。
    那麼,為何牛奶與茶的先後順序會影響到最終奶茶的風味呢?答案就在2003年英國皇家化學學會發表的一篇名稱為「如何泡出一杯完美的紅茶」新聞稿中:
    應該要先倒牛奶再倒紅茶,原因在於牛奶中的蛋白質會在攝氏75度時產生變化(變質)。若是將牛奶倒入熱茶中,由於牛奶會散開,在高溫紅茶的包圍之下便會產生變化。而若是將熱茶倒進冷牛奶裏,就不容易發生這種狀況。

什麼是A/B測試

    「隨機對照實驗」是現代統計學中相當重要的方法,它的進行方式是:研究者在實驗前,先將受試者隨機分為實驗組和控制組(又稱對照組);所謂的實驗組,是接受實驗變數處理的對象組,而控制組對於實驗假設而言,則是不接受實驗變數所處理的,至於哪個作為實驗組,哪個作為控制組,一般是隨機決定,這樣從理論上說,由於實驗組與對照組兩者相關的變數影響是相等、平衡的,故實驗組與對照組兩者之差異,則可認定為是來自實驗變數本身的影響而非外部的影響,因此實驗結果是可信任的。
ab testing
    將此實驗方法應用在現今的網路行為上,我們則簡化並稱為A/B測試,它的核心目的就是讓我們能在兩個以上的元素或版本(A和B…)中確定並選擇出一個最好的版本。實驗方式是在一個時間同時測試兩種版本A與B,此兩者的差異可能是不同顏色的版面、或是不同大小的廣告等等,一般來說,我們將版本A視為目前存在的Control控制組,版本B則為修正過的Challenger對照組,之後再依測試結果產生的數據來決定哪一個版本比較好。
請注意在測試期間內,訪客們看到A或B版本是隨機決定的,因此兩種版本的使用者群與測試環境是在同一時間內隨機的分組進行,所以實驗結果並不會受到時間或樣本差異的影響。
我們以下圖來簡要說明A/B測試的方式,這是一個A/B測試的流程,目的是要確定a版還是b版的版面layout更能夠吸引網友註冊(Singup)成為會員;首先我們先隨機選擇一批使用者(如下方黑色的人形),這批使用者再以隨機的方式分為兩組(藍色與綠色的人形)分別讓他們讀取到不同版本的版面(藍色組為版本a,綠色組為版本b),經過一段時間後,兩種版本分別會產生不同的註冊會員數,此數目便可作為要採用A或B版本的關鍵因數了。(如下圖,在相同的測試人數下,a版本吸引50註冊,b版則為75人,因此b版本明顯優於a版)
http://www.biaodianfu.com/wp-content/uploads/2010/07/ab-testing.png   

「隨機分組」與「頁面產生」

    在進行A/B測試時,我們的「隨機」會發生在:1.隨機選擇使用者與2.隨機產生A/B網頁的兩個時間點,請注意,此隨機必須真正的以亂數去抽取,不能有任何的人為干預或先入為主的變數干擾,否則會影響到最終結果的正確性。
  1. 隨機選擇使用者:決定該使用者是否要參加A/B測試。
  2. 隨機產生A/B網頁:若該使用需要參加A/B測試,則決定他要讀取的網頁版本。
可利用Cookie ID進行分組
  我們可以利用Cookie ID來劃分用戶的組別,並決定顯示那一個版本的畫面給他,但是前提必須在網站上設定並給予每一位訪客在第一次訪問時有一個不重複的Cookie ID,並且該Cookie ID在測試期間必須保持不變;有了Cookie ID之後,先亂數決定該使用者是否要參加測試,再依據這個Cookie ID 的最後一個號碼來進行組別劃分,比如單數的顯示A版本,偶數的顯示B版本。
在後端或前端產生頁面?
  「隨機產生A/B網頁」的位置,可能發生在後端(Server端)或是前端(Client端),兩者差異在於我們要進行的分析內容,如果我們要分析的是兩份不同的網頁,則適合於後端(Server端)來產生,但若要分析的是使用者在同一份網頁上不同的區塊上的互動行為,由於這些行為需要利用Javascript透過瀏覽器來收集資訊,因此較適合由前端(Client端)來產生。
如下圖,左側由上而下分別代表「非A/B測試的user」、「基於後端的A/B測試user」、「基於前端的A/B測試user」,在這裏所謂「基於前端」與「基於後端」如前段所述的,表示隨機產生頁面的位置。

進行A/B測試的注意事項

  1. 不止兩個測試方案:雖然稱為A/B測試,但並不代表我們僅能進行兩種方案的測試,事實上我們可以同時進行數個方案,而非限定在A/B兩個。
  2. 單變量的關係:要注意在這些不同的方案之間應是單變量的關係,亦即它們彼此之間僅有一個變異存在,才能避免不同變異之間的干擾而影響到結果的準確性;例如,我們不確定要將「讚」這個按鈕擺在那裏才能吸引用戶他們更有意願去按它,此時,我們可以設計出數個頁面例如A、B以及C三個版本,此三個版本的頁面排版應該都類似,而只有「讚」按鈕的位置不同,所以這三個版本的變異指的就是「讚」按鈕位置。
  3. 多變量可拆為多個實驗:如同第二項所提到的,每次的的測試應是單變量的,若要進行多變量,應設法將其拆分為多的實驗,而不要一次測試多個變數,否則得到結果可能毫無參考價值。
  4. 用戶永遠看到相同的版本:要確定不同組別的用戶看到的都是該組別的方案;例如B組的用戶他看到的應該永遠是B的版面,那麼,我們就要確定在實驗期間他每次進入該畫面時,隨機顯示的都是B的版本。
  5. 只要變量相同,可加入新版本持續測試:如果C版帶給使用者的感覺比B版好,但又沒有A版這麼好,那麼,我們只要知道B和C之間的差異是什麼,如果可以剖析比較A版和C版,並且將較好的原因設計成為一個新版本D再加入持續進行測試。

沒有留言:

張貼留言