良好的資料分析

作者:Patrick Riley

特別感謝:Diane Tang、Rehan Khan、Elizabeth Tucker、Amir Najmi、 Hilary Hutchinson、Joel Darnauer、Dale Neal、Aner Ben-Artzi、Sanders Kleinfeld、David Westbrook 和 Barry Rosenberg。

記錄

總覽

從一大群資料中獲取真實性和見解是一項強大卻容易出錯的工作。最優秀的資料分析師和資料志同道合的工程師,因利用資料而產生可信的發音,因此能樹立良好聲譽。但這件事可以提高他們的可信度嗎?我常聽到像是謹慎思考方法等形容詞,但最謹慎且有理論的分析師究竟做些什麼?

這並不是很棘手的問題,尤其是 Google 會定期收集的資料類型。我們不只會用到非常大型的資料集 這些資料集也非常豐富也就是說,每一列資料通常都有許多屬性。當您將特定使用者事件與事件的暫時序列結合在一起時,系統可以透過多種方式查看資料。相比之下,研究人員一般來說是難以檢視每個單一資料點的學術心理實驗,這點與一般學術心理實驗不同。我們的大型高維度資料集與大多數科學工作領域中遇到的問題大不相同。

本文件歸納了審慎運用大型高維度資料集的方法與技術,這些提案與技術。雖然本文件著重於記錄和實驗分析的資料,但其中有許多技術較適用。

本文的其餘部分包含三個部分,分別說明不同的資料分析層面:

  • 技術:有關操控及檢查資料的想法和技術。
  • 程序:處理資料的方式、需要詢問哪些問題,以及要檢查的內容等建議。
  • 思維:如何與他人合作並傳達深入分析資料。

技術

以下是檢查資料的一些技巧。

查看發行情形

多數從業人員會使用摘要指標 (例如平均值、中位數、標準差等) 來傳達分佈情形。不過,通常應透過產生直方圖、累計分佈函式 (CDF)、四分位數 (Q-Q) 圖等,檢查更豐富的分佈表示法。這些更豐富的表示法可讓您偵測資料的重要特徵,例如多模態行為或重要的離群值。

考量離群值

仔細檢查離群值,因為它們可能是煤礦中的初期測試,也就是代表分析時更根本的問題。您可以在資料中排除離群值,也可以將離群值合併為「不尋常」類別,但請確保您已瞭解該類別中的資料為何。

舉例來說,查看點擊次數最低的查詢,可能會發現無法計算的元素點擊次數。查看點擊次數最多的查詢,可能就會發現不該計算的點擊次數。另一方面,有些離群值可能根本無法解釋,因此請謹慎思考您投入多少時間完成這項工作。

考量雜訊

隨機性存在,會騙我們。有些人以為:「Google 擁有大量資料,雜訊會去背。」但情況並非如此。您應該針對產生的每一個資料數量或摘要,一併附上您的信心預估值 (透過信賴區間和 p-values等測量方法)。

查看示例

每次產生新的分析程式碼時,您需要查看基礎資料的範例,以及您的程式碼如何解讀這些範例。在幾乎不執行這個步驟的情況下,無法產生任何複雜度的工作程式碼。分析會從基礎資料中擷取許多詳細資料,以產生實用的摘要。藉由檢視個別範例的完整複雜度,您可以確定摘要是合理的。

這些範例的取樣方式非常重要:

  • 如果您要對基礎資料進行分類,請查看屬於各類別的範例。
  • 如果類別較大,請查看更多範例。
  • 如果要計算數值 (例如網頁載入時間),請務必查看極端範例 (也許速度最快且最慢 5%;您知道分佈情形會是什麼樣子,對吧?),以及測量整個測量範圍的資料點。

切割資料

區隔是指將資料分為子群組,並分別查看每個子群組的指標值。我們通常會區隔維度,例如瀏覽器、語言代碼、網域、裝置類型等。如果潛在現象在各子群組中運作方式可能不同,您就必須對資料進行切割,確認這是否確實如此。即使您不會預期切片產生不同的結果,查看一些內部一致性的配量可讓您更安心地評估的是正確的項目。在某些情況下,特定區塊可能包含錯誤資料、使用者互動中斷,或是完全不同。

只要將資料劃分成兩個群組 (例如實驗組和控制組,或甚至「時間 A」和「時間 B」),就必須注意混合變化。混合轉換是指每個群組的配量資料量不同。 史普森的惡魔和其他錯亂現象。一般來說,如果兩個群組的切片中相對的資料量相同,您就可以放心地進行比較。

考量實際重要性

當資料龐大時,您可能會忍不住只著眼於統計顯著性,或是調整到每個資料細節的細節。但您需要問問自己:「即使 X 是真的,X 值比 Y 值高出 0.1%,是否重要?」如果您無法瞭解/分類資料中的某些部分,就必須特別注意這一點。如果您無法理解記錄中的某些使用者代理程式字串,無論是代表 0.1% 還是 10% 的資料,您判斷這些案例的程度都大不相同。

不過,有時資料其實很少,許多變化看起來並不具有統計顯著性,但這和聲明這些變更是「中立」的不同之處。因此,您必須問問自己:「這項變更確實存在的可能性有多高?」

檢查一段時間內的一致性

請盡量依時間單位切割資料,因為我們的系統隨著時間演進,基礎資料會受到許多幹擾。(我們通常用天,但其他時間單位或許也很有用)。 在新功能或新資料收集的首次發布期間,從業人員通常會仔細檢查所有功能是否正常運作。但隨著時間的推移,可能會有許多破壞或非預期的行為。

只因為某天或某幾天是離群值,不代表您應該捨棄對應資料。請用這些資料找出原因,找出日期或日期有所不同之前的因果原因。

查看逐日資料也能讓您瞭解資料的變化,最終會促成信賴區間或具有統計顯著程度的主張。這通常不會取代嚴格的信賴區間計算,但只要看到大幅變化,通常就只有每日圖表呈現在統計顯著性後會變得具有統計顯著性。

確認並計算篩選結果

幾乎所有大型資料分析都是從不同階段篩選資料開始。例如只將美國使用者、網路搜尋或內含廣告的搜尋納入考量。無論如何,您都必須:

  • 請明確指出您正在進行的篩選作業。
  • 計算每個步驟的篩選資料量。

一般來說,後者的最佳方法就是計算「所有」指標,即使是您排除的母體也沒問題。您可以查看這些資料來解答「在垃圾郵件篩選功能中,有多少部分的查詢會移除?」(視您篩選的原因而定,這類分析未必可能存在)。

比率應有明確的分子和分母

最值得注意的指標是基礎測量結果的比例。分子和分母的精確定義中,通常不會有有趣的篩選或其他資料選項。舉例來說,以下何者其實是「查詢 / 使用者」?

  • 查詢 / 使用者查詢
  • 查詢次數 / 今天造訪 Google 的使用者
  • 擁有有效帳戶的查詢 / 使用者 (是,必須定義「有效」)

力求明確,避免你和他人混淆。

另一個特殊情況是只能針對部分資料計算的指標。例如「點擊時間」通常是指「點擊發生前經過的時間」。您查看這類指標時,都需要確認篩選,並查看您要比較的群組篩選資料是否有變動。

處理

本節提供處理資料的相關建議、需要詢問哪些資料問題,以及要檢查哪些項目。

分別驗證、說明和評估

我們把資料分析視為三個相關階段:

  1. 驗證1我認為資料本身俱備一致性,收集的資料是否正確?這些資料是否代表了我的意思?
  2. 說明:這些資料的目標解釋為何?例如:「歸類為 X 的使用者較少查詢」、「在實驗群組中,X 到 Y 之間的時間比 Y 大 1%」,以及「前往下一頁結果的使用者人數變少」。
  3. 評估:從說明部分,資料是否告訴我們有益於使用者、Google 或全世界?

將這些階段區隔開來,可讓您更輕鬆地與其他人達成協議。說明應為每個人都能對資料議定的同意事項。進行評估或許會引發更多爭論。如果不分隔說明與評估,則更有可能只看到您想要查看的資料解讀。此外,評估會更難,因為建立指標的常態值 (通常是透過與其他特徵和指標進行嚴格的比較) 而需要大量投資。

這些階段不會以線性方式進展。查看資料時,您或許可以在階段之間來回切換,但您隨時都可以清楚瞭解目前所處的階段。

確認實驗和資料收集設定

在查看任何資料之前,請務必先瞭解收集資料的背景資訊。如果資料來自實驗,請查看實驗的設定。如果來自於新的用戶端檢測,請確保您至少大致瞭解資料的收集方式。您可能會發現異常/不當的設定或人口限制 (例如僅限 Chrome 的有效資料)。這裡的任何元素都可協助您日後建構及驗證理論。請考量以下事項:

  • 如果實驗正在執行,請自行測試。如果無法這麼做,請至少查看螢幕行為的螢幕截圖/說明。
  • 檢查實驗執行期間 (節慶、重大發布等) 期間是否有任何異常狀況。
  • 決定要對哪些使用者族群進行實驗。

確認不應變更的項目

在「驗證」階段中,請先排除您有興趣的問題 (例如「新增臉部相片是否增加或減少點擊次數?」),請先排除資料中可能影響實驗的任何任何其他變化。例如:

  • 使用者人數是否改變?
  • 我的所有子群組是否顯示了適當數量的查詢?
  • 錯誤率是否發生變化?

比較實驗組/控制組時,以及檢視長期趨勢時,這些問題都是可以發現的。

標準優先,自訂秒數

查看新功能和新資料時,您特別會想直接切入這項新功能的新功能或特殊指標。不過,即使您預期標準指標會有所變動,仍應先查看該指標。舉例來說,在網頁中加入新的通用區塊時,請務必瞭解對標準指標 (例如「網頁搜尋結果的點擊次數」) 造成的影響,再深入研究這項新結果的自訂指標。

標準指標的驗證結果比自訂指標更好,且更可能正確。如果您的自訂指標與標準指標沒有意義,則自訂指標可能會出錯。

至少評估兩次

特別是在嘗試捕捉新的現象時,嘗試以多種方式測量相同的基礎元素。接著,判斷這些測量方式是否一致。您可以使用多種測量方法,找出評估或記錄程式碼中的錯誤、基礎資料的非預期的特徵,或篩選重要的步驟。如果您可以使用不同的資料來源進行測量,則更加有效。

檢查可重現性

隨著時間的推移和一致性,都是檢查可複製性的具體範例。如果這個現象很重要且意義重大,那麼您應該能在不同的使用者人口和時間之間看見這個現象。但驗證可重現性意味著要執行這兩項檢查。如果要建構資料模型,會希望基礎資料在小規模波動中保持穩定。使用不同時間範圍或隨機子樣本,也能告訴您這個模型的可靠/重現程度。

如果無法重現模型,您可能就無法擷取有關產生資料的基礎程序基本資料。

檢查過去測量結果是否一致

您通常會計算與過去計數類似的指標。您應比較自己的指標與過去回報的指標,即使這些測量結果是來自不同的使用者人口亦然。

舉例來說,如果您查看特殊族群的查詢流量,並評估平均網頁載入時間為 5 秒,但過去所有使用者的分析結果顯示平均網頁載入時間為 2 秒,就需要調查。您的數據也許能用於當地人口,但現在您需要採取更多行動來驗證這一點。

您不需要取得確切協議,但應該在同一個球場上。如果不是,假想自己是錯的,直到能夠完全相信為止。其中最出乎意料的資料視為錯誤,而非大量的新深入分析結果。

新指標應先套用至舊的資料/功能

如果您建立新指標 (可能藉由收集新的資料來源) 並嘗試學習新指標,就無法得知新指標是否正確。有了新指標,請先將指標套用至已知的功能或資料。舉例來說,如果您有一個新的使用者滿意度指標,您就應該確保該指標能夠說明最適合用來提升使用者滿意度的功能。如果有新指標能記錄使用者引導注意力前往網頁的位置,請確保這個指標符合我們所掌握,也就是圖片對網頁注意力的影響,所得知的內容。這樣當您學習新事物時 就能進行驗證。

提出假設並尋找證據

一般來說,複雜問題的資料分析會反覆疊代2。您會瞭解資料的異常狀況、趨勢或其他特徵。你當然會發展出理論來解釋這項資料。不要只是研擬理論,並主張其屬實。尋找證據 (在資料內部或外部) 以確認/拒絕這個理論。例如:

  • 如果發現看起來像是學習趨勢,請檢查這項活動是否受高頻率使用者展現最強烈的風格。
  • 如果您認為自己是因推出某些功能而產生異常狀況,請確認啟動該功能的人口是唯一受到異常狀況影響的人口。或者,請確保變更幅度符合上市的預期。
  • 如果您發現某個語言代碼的使用者成長率有變化,請嘗試找出可驗證使用者人口變化率的外部來源。

好的資料分析完成後,你才能掌握成效。想確定報導是正確的 就必須跟自己說故事,然後找出錯的證據。其中一個做法是問問自己:「我該進行哪些實驗可以驗證/無法驗證我說的故事?」即使並未/無法進行這些實驗,或許也會提供相關想法,讓您瞭解如何驗證手中的資料。

好消息是,這些理論和可能的實驗可能會導致新的查詢項目從嘗試學習任何特定的功能或資料。接著,您不只輸入了這些資料,還能取得新的指標和技術,以利進行各種未來分析。

端對端疊代帶來的探索性分析優勢

執行探索分析時,請盡可能對完整分析執行多次疊代。您通常會擁有多個步驟來收集、處理、建立信號等。如果花費的時間太長,導致初始信號的第一階段品質完美,就會錯失在相同時間內執行更多疊代的機會。此外,最後查看資料後,您可能會發現方向改變了方向。因此,您最初的焦點不應只是完美的表現,而是要一路秉持合理原則。請留下附註,並對像是篩選步驟和無法剖析或不尋常的要求等細節進行確認,但不要浪費時間嘗試在探索性分析開始時完全移除這些要求。

留意意見回饋

我們通常會定義各種有關使用者成功的指標。例如使用者是否點選搜尋結果?如果您之後將資料傳回系統 (實際上我們在許多地方執行這些動作),就等於是很多在評估時混淆的機會。

您不能使用傳回系統的指標做為評估變更的基礎。如果您刊登的廣告獲得更多點擊,就不能利用「更多點擊」做為判斷使用者滿意度的依據,即使「點擊次數較多」通常也代表「更滿意」。此外,您也不應該切入冷流及操控的變數,因為這會導致無法理解的混合變化。

心態

本節將說明如何與他人合作及傳達深入分析資訊。

資料分析始於問題,而不是資料或技巧

分析資料始終是動力。將需求形成問題或假設,有助於確保您收集應收集的資料,以及考慮資料中可能出現的缺口。當然,您在查看資料時問的問題 也會有所改變然而,沒有問題的分析最終將無所適從

您不必費心尋找慣用的技術,只找出這項技巧處理的問題。同樣地,建立明確的問題有助於避免這些問題。

持之以恆

處理資料時,您必須成為對所取得深入分析的擁護者,並對這些資料抱持懷疑的態度。您希望能在目前檢視的資料中找到一些有趣的現象。當您發現有趣的現象時,可以問自己以下問題:

  • 我還可以收集哪些資料,才能展示這張圖有多實用?
  • 我能發現哪些方法會使之無效?」

特別是在為相當想要特定答案的人進行分析時 (例如「我的功能很棒!」),您必須保持懷疑的態度,以免犯錯。

關聯 != 因果關係

製作資料的理論時,我們通常會想要聲明「X 造成 Y」,例如「網頁載入速度慢,導致使用者點選較少的連結」。即使是 xkcd 也知道,由於關聯性的關係,您無法單純建立因果關係。只要考慮如何驗證因果理論,就能充分瞭解因果理論有多可信。

有時候,人們會試圖透過斷言,即使 A 與 B 之間沒有因果關係,依然可以保持某種關聯性,這樣其中一個信號才有利於另一個信號。這個領域對多個假設測試問題而言並不安全;因為 xkcd 也知道,憑藉足夠的實驗和充足的維度,一些信號會與特定實驗保持一致。這不表示相同的信號日後會保持一致,因此您也有義務考量因果理論 (例如「有隱藏效果 C,並同時造成 A 和 B),您可以嘗試驗證這是否合理。

資料分析師通常需要針對想要取用資料的人員,瀏覽這些因果問題。您必須明確告知這些消費者,釐清因果關係有哪些限制。

先與同業分享,外部消費者第二位

前幾點建議了幾個方式,讓自己可以進行適當的聲音檢查和驗證。但是,與朋友分享是強制自己完成所有這些事項的最好方法之一。相較於資料使用者,熟練的同事可以提供定性不同的意見回饋,特別是因為消費者通常知道要議程。透過分析,同業對於多個時間點很有用。您可盡早瞭解同業對於這個領域具備的挑戰、建議評估事項,以及過去的研究成果。在接近尾聲時,對等點可以很清楚地指出異常、不一致或其他令人混淆的情況。

在理想情況下,您應得到一位對您目前查看資料有所瞭解的同業人員提供意見,但即便是只有一般資料分析經驗的同業人員也極有價值。

預期並接受忽略和錯誤

從資料中學習的內容有很多限制。Nate Silver 運用《The Signal and the Noise》(信號和噪音) 做出了強而有力的論點,只要表達我們對於性的限制,我們就能做出更準確的預測。承認忽略的心態通常不會立即獲得好處。雖然現在感覺很糟糕,但長期下來對您和您的團隊來說都是極佳的效益。不小心誤點後 (甚至太晚!) 才發現錯誤,還得體會更糟糕,但主動把自己帶到錯誤手上時,您就會受到尊重。這項尊重能發揮可信度和影響力

總結

大部分可以做到有效的資料分析工作,可能無法在分析時立即顯現。事實上,您仔細檢查人口大小並驗證了各種瀏覽器的效果是否一致,或許無法讓試圖透過這些資料做決定的使用者能夠察覺到這一點。這也說明瞭為何優秀的資料分析需要比大多數人預期花費更長的時間 (尤其是他們只看到最終輸出內容時)。身為分析師,我們其中的一環是依據資料向消費者逐步說明這些步驟及其重要性。

對資料的所有操控和探索的需求,也意味著建立良好的資料分析語言和環境的要求。我們有許多工具可用於查看資料。不同的工具和語言較適合上述各種技術,對於分析師而言,挑選適當的工具是相當重要的技能。您不應受限於自己最熟悉的工具功能。您的工作是提供真實的洞察資訊,而非使用特定工具。

 


  1. 有時也稱為「初始資料分析」。請參閱 維基百科的資料分析相關文章 

  2. 嚴格說來,只有在進行探索性分析時,才需要反覆思考,而非確認性分析。