谷歌數(shù)據(jù)科學(xué)團隊負(fù)責(zé)人:處理極大復(fù)雜數(shù)據(jù)的三類實際建議
許多年來,我一直領(lǐng)導(dǎo)谷歌搜索日志的數(shù)據(jù)科學(xué)團隊。經(jīng)常需要我們對一些亂七八糟的結(jié)果來賦予意義,對日志記錄的操作來挖掘新現(xiàn)象,驗證別人的分析,以及用于解釋用戶行為的度量指標(biāo)。有些人似乎天生就擅長做這種高質(zhì)量的數(shù)據(jù)分析。這些工程師和分析師常常被描述為“謹(jǐn)慎”、“有技術(shù)”。但實際上這些形容詞是什么意思?您怎么做才能贏得這些標(biāo)志?
為了回答這些問題,我將Google公司的經(jīng)驗整理進一篇文檔,并得意地將他簡單命名為“好的數(shù)據(jù)分析”。令我驚奇的是,這篇文檔比我在谷歌過去十一年做的其他任何文檔的閱讀量都高。在上次大改版之后的四年時間里,每次檢查的時候,我甚至發(fā)現(xiàn)有許多Goolge員工翻看它。
為什么經(jīng)過這段時間,這個文檔使那么多人產(chǎn)生共鳴?我認(rèn)為最主要的原因是全文都是關(guān)于具體的可以實施的方案,不只是抽象的理想。我見過許多工程師和分析師養(yǎng)成了這些(文中涉及的)習(xí)慣,并進行高質(zhì)量的工作。我將在這個博客中分享那篇文檔的內(nèi)容。
建議總結(jié)起來,分為三大類:
- 技術(shù):如何操作和檢測數(shù)據(jù)的思想和技術(shù)。
- 過程:一些建議,關(guān)于怎樣處理您的數(shù)據(jù),應(yīng)提出怎樣的問題,還有一些需要檢查的事情。
- 溝通:如何與他人合作及交流,關(guān)于您的數(shù)據(jù)和見解。
技術(shù)
看看你的數(shù)據(jù)分布
雖然我們一般會使用總體度量(均值、中值、標(biāo)準(zhǔn)差,等等)和人交流數(shù)據(jù)分布,但是您應(yīng)該常常關(guān)注分布的更豐富的表示形式。直方圖、累積分布函數(shù)(CDFs)、Q-Q圖,諸如此類給予您了解是否存在重要有趣的數(shù)據(jù)特征,如多模態(tài)行為或是一個明顯的異常類,您需要決定如何總結(jié)它們。
考量異常值
您應(yīng)當(dāng)關(guān)注您數(shù)據(jù)中的異常值。它們會成為煤堆中的金絲雀,是您的分析所暴露的更基本的問題。從您的數(shù)據(jù)中將他們排除,或把它們放在一起形成一個“異常”類別,這樣做可以,但您應(yīng)該確保您知道為什么一些數(shù)據(jù)***被放在這一類。例如,點擊率(CTR)***的查詢,可能顯示了在用戶界面中有一些點擊元素是您無法統(tǒng)計的。點擊率***的查詢,可能又會反映了您不應(yīng)統(tǒng)計的點擊。另一方面,一些異常值是您永遠無法解釋的,所以這里投入多少時間您需要特別留意。
報告噪音或者置信度
首要的是,我們必須意識到存在隨機性,這很坑。如果您不小心,您發(fā)現(xiàn)的模式就混著噪聲。每個您生成的估計量,您應(yīng)當(dāng)附上估計的置信度。有時這可以相當(dāng)正式和精確(采取一些測量方法,如估計量的置信區(qū)間或可信區(qū)間,以及結(jié)論的p值或貝葉斯因子),有時也沒那么嚴(yán)格。例如,假如一個同事問您,多少查詢關(guān)于周一我們獲得的青蛙數(shù)量,您可能會做一個快速分析,看了兩個星期一就報告“通常介于1000萬到1200萬”(而不是真實數(shù)字)。
看實例(這里的實例指數(shù)據(jù)的實際情況)
當(dāng)您在編寫新的分析代碼,您需要看下這些底層數(shù)據(jù)的實例,您寫的代碼是如何解釋這些實例的。不這樣做,要用的分析代碼復(fù)雜一些您基本上就寫不出來了。您的分析能從底層數(shù)據(jù)挖出許多特征,并梳理成有用的總結(jié)。通過查看個體實例的全部復(fù)雜情況,您會得到合理的總結(jié),從而信心百倍。
您應(yīng)該做分層抽樣,在整個分布中都得到采樣,這樣就不會只集中在最普遍的例子上。
舉例來說,如果您要計算“點擊時間”(TimetoClick),確保您能看到整個分布的實例,特別是極端情況。如果您沒有合適的工具或者可視化方式來查看您的數(shù)據(jù),您需要先完成這個。
劃分?jǐn)?shù)據(jù)
這里的劃分意味著將數(shù)據(jù)劃分為不同的子集,分別看下在這些子集中您測到的值。在網(wǎng)站流量分析中,我們一般按照一些維度來劃分,如“移動端還是桌面端”、“瀏覽器種類”、“所在地”等等。如果底層現(xiàn)象可能在子集之間以不同的方式工作,您必須劃分?jǐn)?shù)據(jù)看看是否是這樣。即使您不期望一段數(shù)據(jù)能有什么用,看下幾個段之間的內(nèi)部一致性(譯者注:原本是一列數(shù)據(jù),但是被劃分到不同子集中),如果您測量的是正確的東西,那也帶給您更大的信心。在某些情況下,個別子集可能存在壞數(shù)據(jù)、損毀的記錄,或者在某種程度上是完全不同的東西。
每次您劃分?jǐn)?shù)據(jù)來比較兩組(比如實驗組/控制組,但即使是時間A與時間B的比較),您都需要注意混淆的遷移(mixshift,譯者注:按照下文辛普森悖論的推論,這里指原本存在某種特征的兩個組,分別討論時存在這種特征,但是兩組混在一起時這種特征卻消失)?;煜倪w移出現(xiàn)在當(dāng)每段的數(shù)據(jù)量在各比較組之間不同的時候。這可能是辛普森悖論和其他混淆導(dǎo)致的。一般來說,如果在您的兩組中,一段的數(shù)據(jù)量是大致相同的,您可以放心進行比較。
考慮實際意義
有大量數(shù)據(jù)的話,只關(guān)注統(tǒng)計學(xué)意義,或處理每一小組數(shù)據(jù)的細節(jié),都是十分誘人的。但是您需要反問您自己,“如果X的值確實比Y的值多0.1%,這有影響么?”這可能特別重要,如果您不能很好理解或是歸類您的部分?jǐn)?shù)據(jù)。如果您不能理解我們的日志中的一些用戶代理字段,不管它是0.1%還是10%有很大的差異,取決于多大程度上您要研究這些案例。
另一方面,您有時會有一個較小的數(shù)據(jù)集。許多變化達不到統(tǒng)計學(xué)顯著意義,可是又不同于說這是“中性”。您必須問自己“實際上仍然具有顯著性變化的可能性有多大”?
檢查經(jīng)過時間后的一致性
您應(yīng)該總是使用的一種特定劃分方法,就是以時間為單位劃分(我們經(jīng)常使用的是日期,但其他單位可能也行)。這是因為許多基礎(chǔ)背后的干擾因素系統(tǒng)隨時間演進而產(chǎn)生的。通常一個特征或初始數(shù)據(jù)集的初始版本將會受到仔細的檢查,但是依這種方法繼續(xù),出現(xiàn)例外并不罕見。
僅僅因為某一天或某些天出現(xiàn)異常,并不意味著您應(yīng)該舍棄它。在您丟棄之前,使用這個異常數(shù)據(jù)作為一個鉤子,找到為什么這天出現(xiàn)異常的原因。
看這種“一天又一天”的數(shù)據(jù)的另一個好處是,它給您數(shù)據(jù)不斷變化的感覺,最終將形成一個置信區(qū)間或聲明其統(tǒng)計學(xué)顯著性。這通常不能取代嚴(yán)格的置信區(qū)間計算,但僅從“一天又一天”圖表中您往往可以看到統(tǒng)計顯著的大致變化。
過程
分開驗證、描述、評估
我認(rèn)為探索性數(shù)據(jù)分析有三個相互關(guān)聯(lián)的階段:
驗證或初步數(shù)據(jù)分析:我是否相信數(shù)據(jù)是自我一致的(self-consistent),是否采用正確的數(shù)據(jù)收集方法,我認(rèn)為這些數(shù)據(jù)代表什么?這通常叫做“健康檢查”。例如,如果完成了手動測試某種特征,那么我可以看看手動測試的日志嗎?移動設(shè)備功能推出的特性,日志是否記錄了臺式機也存在這種特性?
描述:這個數(shù)據(jù)的客觀解釋是什么?例如,“用戶很少用7字查詢這些數(shù)據(jù)嗎?”,“點擊頁面加載的時間(這里經(jīng)過點擊后)超過1%”,還有“進入下一個結(jié)果的頁面的用戶比例更小。”
評估:鑒于描述,數(shù)據(jù)告訴我們,對于用戶、對于谷歌、對于世界一些好事將會發(fā)生嗎?例如,“用戶可以更快找到結(jié)果”或“點擊質(zhì)量更高了”。
分成這些階段,您可以更容易地與他人達成共識。描述應(yīng)該是每個人都能從數(shù)據(jù)達成一致的事情。評估可能會存在更多的爭議,因為您對數(shù)據(jù)灌輸了一些意義和價值。如果您不把描述和評價分開,您更有可能只看到您希望看到的數(shù)據(jù)解釋。此外,因為要建立規(guī)范的測度值,通常是通過與其他特征和測量進行嚴(yán)格的比較,需要大量的投入,評估往往會更加困難。
這些階段不是按順序遞進的。當(dāng)您要探索數(shù)據(jù),您可能在這些階段之間反復(fù),但在任何時候您應(yīng)該清楚您處于什么階段。
確認(rèn)實驗及數(shù)據(jù)收集的建立
看任何數(shù)據(jù)之前,確保您了解實驗和數(shù)據(jù)收集的設(shè)置。實驗者和分析師之間交流融洽,是一個巨大的挑戰(zhàn)。如果您能直接看到實驗協(xié)議或配置,那您就應(yīng)當(dāng)這樣做。否則,寫下您自己理解的設(shè)置,確保負(fù)責(zé)采數(shù)據(jù)的人能明白它的正確性。
您可能會發(fā)現(xiàn)不正常或不好的配置,或樣本集的限制(如僅在一個特定的瀏覽器下能得到有效數(shù)據(jù))。這里提到的可能會幫助您構(gòu)建并驗證理論。下面一些方面需要考慮:
如果它是一個產(chǎn)品的特征,那么就要試著找出它。如果不能,至少要看行為的截圖或是描述;
尋找任何實驗運行時間內(nèi)的不尋常事件(假期、大新聞的發(fā)布,等等)。
檢查關(guān)鍵標(biāo)記
在真正回答您感興趣的問題之前(例如,“用戶使用我厲害的新功能了嗎?”),您需要檢查大量的相關(guān)事宜,這些可能不是您感興趣的,但這可能對以后的分析或指出數(shù)據(jù)的問題是很有用的。用戶數(shù)量變化了嗎?受影響查詢數(shù)量是否正確得顯示在我所有的子組當(dāng)中?出錯率變了嗎?就像您的醫(yī)生每次總是檢查您的身高、體重、和血壓,檢查您的生命體征數(shù)據(jù)是否潛在大問題。這是一個“驗證”階段的重要組成部分。
標(biāo)準(zhǔn)化***,個性化第二
這是一個不容改變的檢查規(guī)則。特別是當(dāng)看到新特性和新數(shù)據(jù)的時候,那么用新的或特別的測量這個新特征的方法往往很誘人。但是您應(yīng)該先看看標(biāo)準(zhǔn)測量方法,即使您希望改變他們。例如,當(dāng)添加一個全新的UI特征來搜索頁面,您應(yīng)該確保您先理解標(biāo)準(zhǔn)測量,比如結(jié)果的點擊數(shù)的影響,然后對這個新的UI功能采用特別的測量方法。您這樣做是因為標(biāo)準(zhǔn)測量更加有效,更可能是正確的。如果您的新、自定義的測量與標(biāo)準(zhǔn)的測量不一致,那這個測量很可能是錯的。
測兩遍,甚至更多
尤其是如果您想要捕捉一個新現(xiàn)象,試圖用多種方式測量同樣的底層數(shù)據(jù)。然后,檢查這多個測量結(jié)果是否一致。通過使用多種測量,您可以鑒別測量或日志記錄代碼中的錯誤,底層數(shù)據(jù)的意外特征,或過濾出一些重要的步驟。如果您用這些測量方法測量不同的數(shù)據(jù)源,那將更好。
檢查再現(xiàn)性
分割和一致性隨著時間的推移是檢查再現(xiàn)性的特定例子。如果一個現(xiàn)象是重要的和有意義的,你應(yīng)該看到它穿過不同的用戶群體和時間。但再現(xiàn)性意味著比這更好。如果您正在構(gòu)建數(shù)據(jù)模型,則希望這些模型在基礎(chǔ)數(shù)據(jù)中的小擾動上保持穩(wěn)定。使用不同的時間范圍或隨機的子樣本的數(shù)據(jù)將告訴你這個模型如何可靠/可重復(fù)。如果它是不可重復(fù)的,你可能沒有捕捉到一些產(chǎn)生了這個數(shù)據(jù)基本的過程。
檢查與過去測量的一致性
通常你會計算一個與過去被用來計數(shù)相似的指標(biāo)。你應(yīng)該比較你的指標(biāo)和在過去報告中的指標(biāo),即使這些測量是在不同的用戶群。例如,如果你正在測量特殊人群的搜索量,并且測量值比普遍接受的數(shù)字要大得多,那么你需要調(diào)查。你的數(shù)字可能是正確的,但現(xiàn)在你必須做更多的工作來驗證這一點。你在測量同樣的東西嗎?是否有一個合理的理由相信這些人群是不同的?你不需要完全一致,但你應(yīng)該在同一個變動范圍。如果你不是,假設(shè)你是錯誤的,直到你可以充分說服自己。最令人驚訝的數(shù)據(jù)將變成一個錯誤,而不是一個極好的新的洞察。
新的指標(biāo)應(yīng)該首先適用于舊的數(shù)據(jù)/特征。
如果你收集了全新的數(shù)據(jù),并嘗試學(xué)習(xí)新的東西,你不會知道你是否回答正確。當(dāng)你收集一種新型數(shù)據(jù)時,您應(yīng)該首先將此數(shù)據(jù)應(yīng)用到已知的特征或數(shù)據(jù)。例如,如果你有一個對用戶滿意度的新標(biāo)準(zhǔn),你應(yīng)該確保它告訴你幫助滿意的***特征。這樣做對你后面學(xué)習(xí)新的東西提供了驗證。
提出假設(shè)和尋找證據(jù)
通常情況下,一個復(fù)雜問題的探索性數(shù)據(jù)分析是迭代的。您將發(fā)現(xiàn)數(shù)據(jù)的異常、趨勢或其他特征。很自然地,你會提出假設(shè)來解釋這個數(shù)據(jù)。這是必要的,你不只是做一個假設(shè),并宣布它是真實的。尋找證據(jù)(內(nèi)部或外部的數(shù)據(jù))來證實/否定這一理論。例如,如果你相信一個異常是由于一些其他特征的推出或在加德滿都(尼泊爾首都)度假,確保人口特征的推出是唯一一個被異常影響地。另外,確保更改的大小與推出的預(yù)期一致。
良好的數(shù)據(jù)分析將會告訴你一個故事。為了確保這是一個正確的故事,你需要告訴自己這個故事,還預(yù)測了什么你應(yīng)該在數(shù)據(jù)中能看到的,如果假設(shè)是真的,然后尋找證據(jù)表明它是錯誤的。這樣做就是問自己,“什么實驗會讓我講的故事變得有效/無效嗎?“即使你不做這些實驗,它也許可能會給你如何驗證你已有的數(shù)據(jù)的想法。
好消息是,這些假設(shè)和可能的實驗可能會引導(dǎo)超越試圖了解任何特定的特征或數(shù)據(jù)的新查詢線。然后,您進入理解的領(lǐng)域,不只是這個數(shù)據(jù),而產(chǎn)生能夠用于未來各種分析的新指標(biāo)和技術(shù)。
從端到端迭代獲益的探索性分析
在做探索性分析時,你應(yīng)該努力得到盡可能多的對于整體分析的迭代。通常情況下,你會有多個步驟的信號采集,處理,建模等。如果你在獲得初始信號***的***階段花太長時間,你將錯過在相同時間里獲取更多迭代的機會。此外,當(dāng)你***觀察你結(jié)束時的數(shù)據(jù),你可能會發(fā)現(xiàn)改變了你的方向。因此,你最初的重點不應(yīng)該是***,而是一路得到合理的東西。給自己留筆記,并承認(rèn)像過濾步驟和數(shù)據(jù)記錄這樣你不能分析/理解的東西,但所有在探索性分析開始時試圖擺脫這些就是在浪費時間。
溝通
數(shù)據(jù)分析從問題開始,而不是數(shù)據(jù)或技術(shù)
總是有一個你要做一些分析的理由。如果你花時間來把你的需求化為問題或假設(shè),它會是一個很長的路來確保你收集你應(yīng)該收集的數(shù)據(jù),并且你正在思考數(shù)據(jù)中可能存在的空白。當(dāng)然,你問的問題可以和應(yīng)該演變因為你在觀察數(shù)據(jù)。但不帶問題的分析會終止地毫無目的。
此外,你必須避免找到一些最喜歡技術(shù)的陷阱,并隨后只發(fā)現(xiàn)這些技術(shù)工作部分的問題。再次,確保你是明確問題是什么將幫助你避免這個問題。
注意到并計數(shù)你的過濾
幾乎每一個大的數(shù)據(jù)分析通過過濾在不同階段的數(shù)據(jù)開始。也許你只想考慮美國用戶,或網(wǎng)絡(luò)搜索,或結(jié)果點擊的搜索。不管是什么情況,你必須:
- 承認(rèn)并明確指定你在做什么樣的過濾
- 計數(shù)在你的每一個步驟中有多少是被過濾
通常***的方法來做后者實際上是計算所有你的指標(biāo),即使對你不包括的人口。然后你可以看看這些數(shù)據(jù)回答了像“查詢中哪部分被我的過濾刪除了?“的問題。
此外,尋找哪些被過濾了的例子對過濾步驟是必不可少的并且對您的分析是新穎的。當(dāng)你制定一個簡單數(shù)據(jù)排除規(guī)則的時候,很容易不小心包括了一些“好”的數(shù)據(jù)。
比率應(yīng)該有明確的分子和分母
許多有趣的指標(biāo)是潛在測量們的比值。不幸的是,你的比值是什么往往是模糊的。例如,如果說一個網(wǎng)站上搜索的結(jié)果的點擊率,它是:
- “點擊網(wǎng)站的次數(shù)/那個網(wǎng)站結(jié)果的數(shù)量
- “點擊該網(wǎng)站的搜索結(jié)果頁面的數(shù)量“/”網(wǎng)站顯示的搜索頁面數(shù)量
當(dāng)你交流結(jié)果時,你必須清楚這一點。否則你的觀眾(和你!)將有與過去結(jié)果進行比較和正確解釋一個指標(biāo)的麻煩。
教育你的消費者
你經(jīng)常會向那些不是數(shù)據(jù)專家的人展示你的分析和結(jié)果。你工作的一部分是教育他們?nèi)绾谓忉尯蛷哪愕臄?shù)據(jù)中得出結(jié)論。這可以達到各種目的,從確保他們理解置信區(qū)間到為什么某些測量在你的定義域里是不可靠的,到什么樣的典型影響大小是“好”和“壞”的變化,到了解樣本偏差效應(yīng)。
當(dāng)你的數(shù)據(jù)具有較高的被曲解或選擇性地列舉的風(fēng)險時這一點尤其重要。您負(fù)責(zé)提供上下文和一個完整的數(shù)據(jù)圖片,而不僅僅是消費者要求的數(shù)字。
同時做懷疑者和擁護者
當(dāng)你處理數(shù)據(jù)時,你必須做一個獲得見解的擁護者以及一個懷疑論者。你會希望在你觀察的數(shù)據(jù)中發(fā)現(xiàn)一些有趣現(xiàn)象。當(dāng)你發(fā)現(xiàn)一個有趣現(xiàn)象,你應(yīng)該問:“我能收集到什么其他數(shù)據(jù)顯示這有多么了不起?”和“我能找到什么來使它無效?“。尤其是你為真的想要一個特定回答的某人做分析的情況下,(例如“我的特征是了不起的”)你要扮演懷疑者來避免犯錯誤。
與同行分享***,外部消費者第二
一個熟練的同行評審可以比你數(shù)據(jù)的消費者提供更有質(zhì)量不同的反饋和健全的檢查,特別是因為消費者通常有一個他們想得到的結(jié)果。理想的情況下,你會有一個知道你正在尋找的數(shù)據(jù)的同行,但即使是一個有這樣觀察數(shù)據(jù)經(jīng)驗的同行,大體上是非常有價值的。以前的觀點提出了一些方法來讓自己做正確類型的健全檢查和驗證。但與同行分享是迫使自己做所有這些事情的***方法之一。同行在多維分析是有用的。在初期你能找到你的同伴所知道的事情,得到建議測量什么東西,和過去有哪些在這方面的研究。臨近結(jié)束時,同行很善于指出古怪、不一致,或者其他的困惑。
預(yù)期和接受無知和錯誤
我們能從數(shù)據(jù)中學(xué)到的東西有十分有限。NateSilver在信號和噪聲中指出,只有承認(rèn)我們對于確定的限制,我們才可以取得更好的預(yù)測。承認(rèn)無知是一種力量,但它通常不會立即得到回報。在當(dāng)時會感覺很糟糕,但最終你會贏得你有數(shù)據(jù)頭腦的同事和領(lǐng)導(dǎo)人的尊重。當(dāng)你犯了一個錯誤,并很晚發(fā)現(xiàn)(或太晚了!)會感覺更糟糕,但積極地承認(rèn)你的錯誤將轉(zhuǎn)化為信譽。信譽是任何數(shù)據(jù)科學(xué)家的關(guān)鍵社會價值。
***的想法
沒有什么縮減的建議列表可以是完整的,即使當(dāng)我們突破了前10名列表格式的障礙(對沒有計算的你們,這里有24個)。當(dāng)你將這些想法應(yīng)用于實際問題時,你會發(fā)現(xiàn)在你的領(lǐng)域中最重要的習(xí)慣和技術(shù),幫助你快速而正確地做這些分析的工具,以及你放在這個列表上的建議。確保你分享你所學(xué)到的東西,所以我們都可以成為更好的數(shù)據(jù)科學(xué)家。