數(shù)據(jù)要埋點
淺談數(shù)據(jù)埋點
|0x00 如何理解埋點
埋點是數(shù)據(jù)采集的專用術(shù)語,在數(shù)據(jù)驅(qū)動型業(yè)務(wù)中,如營銷策略、產(chǎn)品迭代、業(yè)務(wù)分析、用戶畫像等,都依賴于數(shù)據(jù)提供決策支持,希望通過數(shù)據(jù)來捕捉特定的用戶行為,如按鈕點擊量、閱讀時長等統(tǒng)計信息。因此,數(shù)據(jù)埋點可以簡單理解為:針對特定業(yè)務(wù)場景進行數(shù)據(jù)采集和上報的技術(shù)方案。
數(shù)據(jù)埋點非常看重兩件事,一個是數(shù)據(jù)記錄的準確性,另一個則是數(shù)據(jù)記錄的完備性。
先講數(shù)據(jù)的準確性。數(shù)據(jù)埋點非常強調(diào)規(guī)范和流程,因為參數(shù)的規(guī)范與合法,將直接影響到數(shù)據(jù)分析的準確性,如果準確性得不到保障,那么所有基于埋點得出的結(jié)論,都是不可信的。辛辛苦苦做了很久的方案,一旦因為一個疏忽的小問題,導(dǎo)致下游集中投訴,其實非常劃不來。
道理每個人都懂,但現(xiàn)實情況中,數(shù)據(jù)埋點所面對的客觀環(huán)境,其實非常復(fù)雜,例如:
產(chǎn)品在移動場景下,既有原生的IOS和安卓端,也有H5和小程序端,每種場景的技術(shù)棧不同,出現(xiàn)問題的排查成本很高; 埋點準確性的驗證,需要人肉參與,不能保證完全正確,且一旦出現(xiàn)問題,只能隨著下次發(fā)版來修復(fù),修復(fù)問題的時間成本很高。
因此本文有非常長的篇幅來寫流程問題,其實是非常有必要的。
再講數(shù)據(jù)的完備性。因為埋點主要是面向分析使用,對用戶而言是個額外的功能,因此埋點的業(yè)務(wù)侵入性很強,很容易對用戶體驗造成影響。別的不說,僅僅是流量的消耗,就很容被用戶噴。因此,要提前想清楚,我們要采集哪些東西,因為修改方案的成本,是傷不起的。
通常情況下,我們需要記錄用戶在使用產(chǎn)品過程中的操作行為,通過4W1H模型可以比較好的保障信息是完備的。4W1H包括:
Who(誰); When(在什么時間); Where(在什么位置); What(看到了什么); How(做了哪些操作)。
規(guī)定好記錄信息的基本方法之后,按照固定的頻率,如每小時、每天,或者是固定的數(shù)量,比如多少條日志,或者是網(wǎng)絡(luò)環(huán)境,比如在Wifi下上傳,我們就可以開心的把埋點數(shù)據(jù)用起來了。
當然,數(shù)據(jù)記錄的時效性也比較重要,但因為埋點數(shù)據(jù)通常量級會比較大,且各個端數(shù)據(jù)回傳的時間不同,因此想做到實時統(tǒng)計,還是需要分場景來展開。在Flink技術(shù)日漸成熟的今天,全鏈路的實時采集與統(tǒng)計,已經(jīng)不是什么難題。
|0x01 埋點的技術(shù)方案
在埋點的技術(shù)方案中,首先要重視的,是用戶唯一標識的建設(shè)。如果做不到對用戶的唯一識別,那么基礎(chǔ)的UV統(tǒng)計,都將是錯誤的。
因此,在數(shù)據(jù)埋點方案中,有兩個信息是一定要記錄的,即設(shè)備ID+用戶ID。設(shè)備ID代表用戶使用哪個設(shè)備,如安卓的ANDROID_ID/IMEI,IOS中的IDFA/UDID,瀏覽器的Cookie,小程序的OpenID等。用戶ID,代表用戶在產(chǎn)品中所注冊的賬號,通常是手機號,也可以是郵箱等其他格式。
當這兩個信息能夠獲得時,不論是用戶更換設(shè)備,或者是同一臺設(shè)備不同賬號登錄,我們都能夠根據(jù)這兩個ID,來識別出誰在對設(shè)備做操作。
其次,我們來看一下Web的數(shù)據(jù)采集技術(shù)。Web端數(shù)據(jù)采集主要通過三種方式實現(xiàn):服務(wù)器日志、URL解析及JS回傳。
服務(wù)器日志:指Web服務(wù)器軟件,例如Httpd、Nginx、Tomcat等自帶的日志,例如Nginx的access.log日志等; URL解析:指訪問服務(wù)器時,將URL信息及攜帶的參數(shù)進行解析后,上傳服務(wù)器,例如訪問百度首頁:https://www.baidu.com/s?ie=utf-8&wd=你好,我們可以獲得本次訪問的word為“你好”; JS回傳:指在Web頁面上添加的各類統(tǒng)計插件,通過在頁面嵌入自定義的Javascript代碼來獲取用戶的訪問行為(比如鼠標懸停的位置,點擊的頁面組件等),然后通過Ajax請求到后臺記錄日志。
瀏覽器的日志采集種類又可以分為兩大類:頁面瀏覽日志和頁面交互日志。
頁面瀏覽日志:別名為“展現(xiàn)日志”;指當一個頁面被瀏覽器加載時所采集的日志,該類型為最基礎(chǔ)的互聯(lián)網(wǎng)日志,也是PV及UV統(tǒng)計的基礎(chǔ)。 頁面交互日志:別名為“點擊日志”;指當頁面加載和渲染完成后,用戶可以在頁面上執(zhí)行的各類操作,以便量化感知用戶的興趣點。
除此之外,還有一些針對特定場合統(tǒng)計的日志,例如頁面曝光時長日志、用戶在線操作監(jiān)控等,但原理都基于上述兩類日志,只是在統(tǒng)計上有所區(qū)分。
再次,我們來看下客戶端的數(shù)據(jù)采集。與網(wǎng)頁日志對應(yīng)的,是手機應(yīng)用為基礎(chǔ)的客戶端日志,由于早期手機網(wǎng)絡(luò)通訊能力較差,因而SDK往往采用延遲發(fā)送日志的方式,也就是先將日志統(tǒng)計在本地,然后選擇在Wifi環(huán)境下上傳,因而往往會出現(xiàn)統(tǒng)計數(shù)據(jù)延遲的情況。現(xiàn)如今網(wǎng)絡(luò)環(huán)境好了很多,4G、5G流量充足,尤其是視頻類APP基本上都是一直聯(lián)網(wǎng),因而很多統(tǒng)計能夠做到實時統(tǒng)計。
客戶端的日志統(tǒng)計主要通過SDK來完成,根據(jù)不同的用戶行為分成不同的事件,“事件”是客戶端日志行為的最小單位,根據(jù)類型的不同,可以分為頁面事件(類比頁面瀏覽)和控件點擊事件(類比頁面交互)。對于頁面事件,不同的SDK有不同的方式,主要區(qū)別為是在頁面創(chuàng)建時發(fā)送日志,還是在頁面瀏覽結(jié)束后發(fā)送日志,區(qū)別在于業(yè)務(wù)統(tǒng)計是否需要采集用戶的頁面停留時長。
頁面事件的統(tǒng)計主要統(tǒng)計如下三類信息:
設(shè)備及用戶的基本信息,例如IMEI、用戶賬號等; 被訪問頁面的信息,例如商品ID、瀏覽店鋪等; 訪問的路徑信息,例如上一個頁面來源等。
最后,我們還需要考慮小程序等場景的埋點方案,小程序通常情況下,開發(fā)者會聲明好相應(yīng)的方法,按照需求調(diào)用即可,例如微信提供了API上報和填寫配置兩種方案。
埋點其實還需要考慮數(shù)據(jù)上傳的方案,批量的數(shù)據(jù)可以通過Flume直接上報,流式的可以寫到Kafka,或者直接使用Flink來處理。這些框架相關(guān)的內(nèi)容不是本文考慮的重點,有興趣的可以自行查閱資料。
|0x02 埋點的流程規(guī)范
有了指導(dǎo)思路和技術(shù)方案后,我們就可以著手制定相應(yīng)的數(shù)據(jù)埋點流程規(guī)范了。
籠統(tǒng)上,流程規(guī)范會分成五個步驟,即需求評審、埋點申請、技術(shù)開發(fā)、埋點驗證、發(fā)布上線。
第一步,需求評審。
前文提到過,數(shù)據(jù)埋點的方案一旦確定,返工和排查問題的成本都很高,但數(shù)據(jù)埋點之后的分析工作,又涉及到了PD、BI、算法、數(shù)據(jù)等多個角色。因此非常有必要,將需求內(nèi)容和數(shù)據(jù)口徑統(tǒng)一收口,所有人在一套口徑下,將需求定義出來,隨后業(yè)務(wù)側(cè)再介入,進行埋點方案的設(shè)計和開發(fā)。
以前文提到的4W1H模型為例,常見的記錄內(nèi)容如下:
Who:設(shè)備ID、用戶ID、手機號、微信識別碼等; Where:在Web、移動端還是小程序下,如果是移動端,GPS地址在哪,使用的是哪個APP; When:記錄日志的時間戳、日志上報的時間戳; What:操作系統(tǒng)、設(shè)備型號、網(wǎng)絡(luò)環(huán)境、APP版本、當前頁面、展示內(nèi)容等信息; How:如果是搜索行為,則記錄關(guān)聯(lián)詞;如果是內(nèi)容點擊,則記錄內(nèi)容ID、內(nèi)容類型、列表位置;如果是交易動作,記錄交易的商品ID、類型、數(shù)量;如果是支付過程,記錄付款的方式與付款金額。
最后我們統(tǒng)計時,按照上述約定,統(tǒng)計用戶在某個時間和地點中,看到了哪些信息,并完成了怎樣的動作。上下游的相關(guān)人員,在使用這份數(shù)據(jù)時,產(chǎn)生的歧義或者是分歧,會小很多。
第二步,埋點申請。
當下的熱門應(yīng)用,大多是以超級APP的形式出現(xiàn),比如微信、淘寶、支付寶、抖音,超級APP會承載非常多的業(yè)務(wù),因此技術(shù)方案上會十分統(tǒng)一。
因此,當我們的技術(shù)方案確定后,通常要在相應(yīng)的埋點平臺上,進行埋點申請。申請的內(nèi)容包括分配的SPM、SCM碼是什么,涉及到的平臺是哪些,等等。SPM、SCM是什么,有什么用,同樣可以自行查閱。
第三步,技術(shù)開發(fā)。
當需求確定、申請通過后,我們就可以開始開發(fā)動作了,這里基本上是對研發(fā)同學進行約束。埋點的開發(fā),簡單講,是分成行為埋點和事件埋點兩個大類,每一類根據(jù)端的不同進行相應(yīng)的開發(fā)。具體的技術(shù)方案詳見前文01章節(jié)。
詳細的設(shè)計規(guī)范,是需要留文檔的,因為代碼不能反應(yīng)業(yè)務(wù)的真實意圖,而不論是事后復(fù)盤與業(yè)務(wù)交接,都需要完整的文檔來闡述設(shè)計思路。
第四步,埋點驗證。
埋點的驗證很關(guān)鍵,如果上線后才發(fā)現(xiàn)問題,那么歷史數(shù)據(jù)是無法追溯的。
驗證有兩種方式,一種是實時的功能驗證,一種是離線的日志驗證。
實時功能驗證,指功能開發(fā)好后,在灰度環(huán)境上測試相應(yīng)的埋點功能是否正常,比如點擊相應(yīng)的業(yè)務(wù)模塊,日志是否會正確的打印出來。通常而言,我們需要驗證如下三個類型的問題:
記錄正確:APP發(fā)生相應(yīng)的動作,檢查日志是否打印正確,如:打開頁面(行為埋點)、點擊按鈕(事件埋點)時,是否日志會記錄; 位置正確:查看SPM、SCM碼與平臺申請的是否一致; 內(nèi)容正確:設(shè)備ID、用戶ID等必須記錄的內(nèi)容是否正確,行為、事件記錄內(nèi)容是否與頁面實際發(fā)生的一致。
除去實時驗證,我們也需要把日志寫到測試環(huán)境中,查看數(shù)據(jù)上報的過程是否正確,以及對上報后的數(shù)據(jù)進行統(tǒng)計,側(cè)面驗證記錄的準確性,如統(tǒng)計基本的PV、UV,行為、事件的發(fā)生數(shù)量。
很多時候,數(shù)據(jù)是需要多方驗證的,存在一定的上下游信息不同步問題,比如對某個默認值的定義有歧義,日志統(tǒng)計會有效的發(fā)現(xiàn)這類問題。
第五步,發(fā)布上線。
應(yīng)用的發(fā)布上線通常會有不同的周期,例如移動端會有統(tǒng)一的發(fā)版時間,而網(wǎng)頁版只需要根據(jù)自己的節(jié)奏走,因此數(shù)據(jù)開始統(tǒng)計的時間是不同的。最后,應(yīng)用應(yīng)當對所有已發(fā)布的埋點數(shù)據(jù),有統(tǒng)一的管理方法。
大多數(shù)時候,數(shù)據(jù)埋點的技術(shù)方案,只需要設(shè)計一次,但數(shù)據(jù)準確性的驗證,卻需要隨著產(chǎn)品的生命周期持續(xù)下去,因此僅僅依靠人肉來準確性驗證是不夠的,我們需要平臺來支持自動化的工作。埋點的準確性,大體有兩種方法保障:一種是灰度環(huán)境下驗證真實用戶數(shù)據(jù)的準確性;另一種則是在線上環(huán)境中,驗證全量數(shù)據(jù)的準確性。因此,發(fā)布上線之后,后續(xù)的管理動作,應(yīng)該是對現(xiàn)有流程的自動化管理,因為團隊大了,需要埋點的東西多種多樣,讓平臺自己測試、自動化測試,就是很多測試團隊必須走的路。
|0xFF 行業(yè)現(xiàn)狀
目前行業(yè)中,已經(jīng)有很多比較成熟的數(shù)據(jù)統(tǒng)計平臺,大家對于數(shù)據(jù)埋點也都有自己的方案。常見的有:GrowingIO、神策數(shù)據(jù)、百度統(tǒng)計、谷歌分析、友盟等。官網(wǎng)都有比較詳細的介紹,這里不再贅述。
數(shù)據(jù)埋點只是技能的一種,通過埋點的數(shù)據(jù),如何去做分析,其實也很重要。做過互聯(lián)網(wǎng)的同學,基本都會有自己的寶藏庫,來看看業(yè)界的同行都是如何分析問題的,著名的如艾瑞咨詢的數(shù)據(jù)報告。其實再高大上的報告,歸根結(jié)底,也是通過數(shù)據(jù)+模型來分析得到的結(jié)論。
最后說說自己做數(shù)據(jù)埋點方案的利弊。一些流量型的業(yè)務(wù)模式,使用第三方是沒有問題的,因為第三方通常提供了很強大、很完備的功能,穩(wěn)定性也有保障,但缺點是,無法做平臺規(guī)則之外的數(shù)據(jù)埋點。但如果業(yè)務(wù)數(shù)據(jù)是非常敏感的,比如金融相關(guān),那么還是建議自己做技術(shù)方案,且現(xiàn)有的數(shù)據(jù)埋點方法,都是基于流量分析平臺來做的,對于一些偏傳統(tǒng)的業(yè)務(wù)場景,其實并不是非常適用。
最后,數(shù)據(jù)埋點,只是一種技術(shù)或者是工具,想要得出有價值的分析成果,需要有有科學的分析模型做指導(dǎo),也需要有正確的學習路線來堅持。
