埋點(diǎn)事件的結(jié)構(gòu)化設(shè)計(jì)方法

埋點(diǎn)事件的結(jié)構(gòu)化設(shè)計(jì)方法
文|4339字
估計(jì)閱讀|13分鐘
埋點(diǎn)的坑
近期負(fù)責(zé)了一款A(yù)PP的數(shù)據(jù)相關(guān)工作。該APP是一個自制游戲內(nèi)容產(chǎn)品,上架了很多個獨(dú)立主題的小游戲,并按游戲的類型,分為5個類型。為了解整體數(shù)據(jù)情況,我向數(shù)據(jù)開發(fā)提出了一個數(shù)據(jù)提取需求:以周為單位,統(tǒng)計(jì)最近一年每個類型的游戲累計(jì)被打開的次數(shù)。
本以為幾分鐘就可以拿到數(shù)據(jù),但開發(fā)1個小時后才給我結(jié)果。經(jīng)過詳細(xì)了解,發(fā)現(xiàn)是因?yàn)閿?shù)據(jù)埋點(diǎn)存在極大的坑,導(dǎo)致的數(shù)據(jù)統(tǒng)計(jì)效率低下。埋點(diǎn)需求見下圖:
?
通過這套方案采集到的數(shù)據(jù),要實(shí)現(xiàn)按類型統(tǒng)計(jì)的需求,有2個問題:
1. 每一個游戲,都單獨(dú)定義了一個打開游戲事件。也就是說,打開不同的游戲時,觸發(fā)的是不同的事件。要想統(tǒng)計(jì)每個類型的游戲累計(jì)打開次數(shù),必須先按事件名逐個統(tǒng)計(jì)每個游戲的打開次數(shù)。
2. 只采集了打開某個游戲,但游戲所屬分類是沒有采集的。要統(tǒng)計(jì)每個類型游戲累計(jì)被打開的次數(shù),就需要對照游戲信息表,查到每個游戲的所屬類型,再按游戲的所屬類型,對打開次數(shù)做一次累加。
整個數(shù)據(jù)提取過程如下圖所示:
?
每一個步驟都無法省略,因此,數(shù)據(jù)提取才耗費(fèi)了很長的時間。
帶來的問題
在這個埋點(diǎn)方案中,主要有兩個問題:相似行為未做聚類抽象、事件信息采集不完整。
??相似行為未做聚類抽象
相似行為是指用戶操作過程和目標(biāo)高度相似的行為,如用戶分享一篇文章,有分享給微信好友、分享到朋友圈、分享到微博。
將相似行為都定義為一個個獨(dú)立的事件,會導(dǎo)致以下2個問題:
1. 埋點(diǎn)事件數(shù)量很多,開發(fā)和維護(hù)成本高。APP中有1000個游戲,就對應(yīng)了有1000個打開游戲事件。只要增加新的游戲,對應(yīng)的埋點(diǎn)代碼都需要單獨(dú)開發(fā),并在表格中進(jìn)行維護(hù),一旦沒有及時維護(hù),或因員工離職時交接不到位,可能導(dǎo)致事件管理出現(xiàn)混亂,如重復(fù)事件、無效事件等。
2. 數(shù)據(jù)統(tǒng)計(jì)和分析效率低下。當(dāng)需要統(tǒng)計(jì)全部游戲的打開次數(shù)時,必須要先分別找到每個游戲點(diǎn)擊對應(yīng)的事件,然后逐個統(tǒng)計(jì)每個事件的觸發(fā)次數(shù),再做一次匯總。
聚類抽象是指用一個抽象的主題來概括多個相似信息。如分享給微信好友、分享到朋友圈、分享到微博3個行為,都是在描述用戶分享文章的行為,可以聚類抽象為“分享文章”。
將相似行為聚類抽象后,原本1000個游戲的打開事件減少為1個,事件數(shù)量大幅度降低。統(tǒng)計(jì)全部游戲的打開次數(shù)也能一步完成,數(shù)據(jù)統(tǒng)計(jì)和分析效率提升一倍。
??事件信息采集不完整
一個用戶行為,往往可以從多個維度來描述,每一個描述維度,都是一個信息。這些信息,有些是有分析價值的,有些沒有。埋點(diǎn)采集到所有具備分析價值的信息,才是完整采集事件信息。
如果我們在梳理埋點(diǎn)需求時,沒有完整采集信息的意識,或考慮不全面,就很容易遺漏,導(dǎo)致相應(yīng)的分析無法進(jìn)行。

打開游戲時,所在頁面是事件相關(guān)的信息。統(tǒng)計(jì)用戶打開游戲時所在的頁面,可以分析不同頁面對游戲的引流效果,指導(dǎo)運(yùn)營工作方向。
若沒有采集該信息,就無法統(tǒng)計(jì)在某個頁面打開游戲的次數(shù)。
解決方案
很明顯,為每個獨(dú)立的、最小顆粒度的用戶行為單獨(dú)定義一個事件,不是一個好方法。那么,我們應(yīng)該怎么設(shè)計(jì)埋點(diǎn)事件呢?
答案是采用“事件-屬性-屬性值”的結(jié)構(gòu),對事件進(jìn)行多維度描述。
結(jié)構(gòu)化是指一個完整的埋點(diǎn)事件,分為事件、屬性、屬性值三層,包含一個事件定義(用戶行為)和若干個屬性定義(描述用戶行為的屬性)。

下圖是打開游戲事件的結(jié)構(gòu)化設(shè)計(jì)案例:
?
點(diǎn)擊游戲圖標(biāo)打開游戲的行為,定義為“打開游戲”事件;該事件有2個屬性,分別為“游戲分類、游戲ID”;游戲分類指游戲所屬的類型,其屬性值為“A、B、C、D、E”;游戲ID是唯一識別游戲的編號,其屬性值為“001、002、003···999”。實(shí)際使用時,還可以增加更多屬性。
游戲ID屬性,將相似行為聚類抽象為一個事件,即使有新的游戲上線,也只需要增加一個屬性值,事件數(shù)量從1000個減少到1個,開發(fā)和管理成本大幅度降低。
增加的屬性,使采集到的行為信息更完整。通過“游戲分類”屬性的值,即可統(tǒng)計(jì)每個類型的游戲累計(jì)被打開的次數(shù),滿足更多數(shù)據(jù)分析需求。
??屬性的定義
一個用戶行為,通??梢詮亩鄠€維度進(jìn)行描述。描述事件的維度,稱之為“事件屬性”,簡稱“屬性”。每個屬性,都有若干個值,為屬性值。

用戶打開游戲,如果從玩家性別維度描述,分為男、女;從玩家年齡維度描述,有15、16、17、18等,從游戲分類維度描述,分為A類、B類···
“玩家性別、玩家年齡、游戲分類”就是用來描述“打開游戲”事件的屬性。
“男、女”是屬性“玩家性別”的屬性值,“15、16、17”是屬性“玩家年齡”的屬性值,“A類、B類”是屬性“游戲分類”的屬性值。
從上一篇文章中,我們已經(jīng)知道,數(shù)據(jù)埋點(diǎn)能采集4w1h多個維度的信息。
從不同的維度對事件進(jìn)行數(shù)據(jù)分析,要么能指導(dǎo)產(chǎn)品的迭代,獲得更高的用戶價值;要么能更好地達(dá)成業(yè)務(wù)目標(biāo),獲得更高的商業(yè)價值。
因此,在數(shù)據(jù)采集時,不僅要采集事件本身,還要采集事件的屬性信息。

游戲被打開次數(shù)的性別分布,體現(xiàn)了不同性別的用戶對該游戲的興趣高低。如游戲灰度發(fā)布的3天內(nèi),選取了男女用戶各1000人推送內(nèi)測邀請,其中900個男性用戶打開了游戲,而女性用戶僅10人,說明該男性用戶對該游戲更感興趣。
為了在盡可能少消耗推送次數(shù)的條件下,讓該游戲獲得更高的打開率,游戲上線時,運(yùn)營只給男性用戶全量推送了游戲。
??設(shè)計(jì)方法
結(jié)構(gòu)化事件設(shè)計(jì)的關(guān)鍵,是定義好事件、觸發(fā)機(jī)制、屬性、屬性值類型、屬性值5個要點(diǎn)。
1.定義事件
數(shù)據(jù)埋點(diǎn)是要采集對數(shù)據(jù)分析有價值的過程數(shù)據(jù),因此,需要先根據(jù)數(shù)據(jù)分析需求,找出對應(yīng)的用戶行為,再抽象出事件名。
數(shù)據(jù)分析需求是目標(biāo),確定了目標(biāo),才能找到能達(dá)成該目標(biāo)的用戶行為。事件名是對該事件的概括,幫助相關(guān)同事統(tǒng)一溝通話術(shù)和名詞定義,提高溝通效率。

需要分析用戶打開某個游戲或某類次數(shù)、人數(shù),對應(yīng)的用戶行為是用戶點(diǎn)擊并打開游戲,可以將該行為抽象為“打開游戲”事件,作為內(nèi)部溝通統(tǒng)一名稱。
2.定義觸發(fā)機(jī)制
埋點(diǎn)代碼被觸發(fā)執(zhí)行的條件,即為觸發(fā)機(jī)制,通常取決于事件的定義和目的。如點(diǎn)擊了某個元素、打開了某個頁面、展示了某個內(nèi)容等。

“打開游戲”事件中,打開游戲的定義,是點(diǎn)擊游戲圖標(biāo),并進(jìn)入游戲界面,事件的目的是要準(zhǔn)確記錄打開游戲的行為。
因此,當(dāng)用戶通過各種方式(點(diǎn)擊游戲圖標(biāo)、點(diǎn)擊推送消息、點(diǎn)擊進(jìn)入游戲按鈕等)進(jìn)入游戲界面時,才觸發(fā)事件。
只有在正確的時機(jī)觸發(fā)埋點(diǎn)事件,才能準(zhǔn)確采集用戶行為。觸發(fā)時機(jī)錯誤,必然導(dǎo)致數(shù)據(jù)不可信,失去分析價值。

若以“點(diǎn)擊游戲圖標(biāo)”為“打開游戲”事件的觸發(fā)機(jī)制,就遺漏了其他兩種打開游戲的方式帶來的行為記錄;同時,游戲被點(diǎn)擊時,可能未完成下載,此時點(diǎn)擊游戲圖標(biāo),并沒有打開游戲,但也被采集為一次打開游戲。
最終無法分析幾種打開游戲方式的次數(shù)分布,也不能準(zhǔn)確評估游戲真實(shí)的消費(fèi)情況。
3.定義屬性
梳理事件的屬性,主要有兩種方法:梳理事件的分析需求、尋找事件內(nèi)部的分類維度。
梳理事件的分析需求
不同的事件,分析需求不同,需要采集的事件屬性也不同。因此,需要先梳理事件的分析需求,再針對性地尋找能滿足該需求的屬性。

“打開游戲”事件中,需要分析不同游戲被打開的次數(shù),以驗(yàn)證游戲的受歡迎程度。如果在觸發(fā)“打開游戲”事件時,采集被打開的游戲ID,在分析該事件時,即可通過“游戲ID”統(tǒng)計(jì)不同游戲的打開次數(shù)。
尋找事件的分類維度
事件是對用戶行為的抽象,本身還可以從不同的維度來分類,這些分類維度,也可以作為屬性來描述事件。

從游戲的獲取方式維度,可以將游戲分為付費(fèi)游戲和免費(fèi)游戲。為了統(tǒng)計(jì)付費(fèi)游戲和免費(fèi)游戲的打開次數(shù)差異,可以將“是否付費(fèi)游戲”作為一個屬性。
4.明確屬性值類型
找到需要的屬性后,還需要明確屬性的值類型,如枚舉型、字符串型、布爾型、數(shù)值型。

游戲ID是一串?dāng)?shù)字,如008,是數(shù)值型;游戲分類是可以窮舉的選項(xiàng),是枚舉型;是否付費(fèi)游戲是只有2個選項(xiàng),是布爾型···
不同類型的屬性值,取值來源和儲存形式都不同。定義屬性值類型,可以幫助相關(guān)同事理解埋點(diǎn)需求,并合理使用。

枚舉型的屬性值,通常是事先窮舉的若干個值,存儲時通常用數(shù)字替代,使用時再轉(zhuǎn)化成真實(shí)的內(nèi)容。
布爾型的屬性值,只有2個值,存儲內(nèi)容為0和1。
5.給出屬性值
定義好屬性值類型后,再根據(jù)不同的屬性值類型,給出對應(yīng)的屬性值或示例:
枚舉型:窮舉所有值;
字符串型:給出示例,并約定最大字符長度;
布爾型:給出值名稱;
數(shù)值型:給出示例,并約定最大字符長度。
屬性值或示例是研發(fā)編寫埋點(diǎn)代碼和測試的標(biāo)準(zhǔn),幫助開發(fā)理解埋點(diǎn)需求。

研發(fā)不理解業(yè)務(wù)的前提下,可能都不知道游戲分類是什么,也不清楚有哪些分類。但當(dāng)他看到窮舉出來的屬性值時,就能立刻理解。
通過以上五個步驟,即可完成事件的結(jié)構(gòu)化設(shè)計(jì)。整理成表格后,如下所示:
?
??建議:整理公共屬性
在梳理事件屬性時,我們會發(fā)現(xiàn)有一些屬性是大部分事件都需要采集的。如每一個事件都要采集發(fā)生時間、用戶ID、設(shè)備類型、APP版本···
如果每一個事件都需要將這些屬性在數(shù)據(jù)需求文檔中列出來,就會帶來大量的重復(fù)工作。因此,可以將這些屬性定義為公共屬性,即每個事件都默認(rèn)需要采集的屬性,單獨(dú)整理在一個表格中。
常見的公共屬性見下表:
?
結(jié)構(gòu)化事件設(shè)計(jì)的價值
??減少事件數(shù)量,降低成本
采用“事件-屬性-屬性值”的結(jié)構(gòu)化設(shè)計(jì),可以將相似度更高、但有細(xì)微差異的多個行為聚類抽象為一個事件,而不同行為之間的差異,通過屬性值來區(qū)分,從而減少事件數(shù)量。

在APP中購買商品時,有5種支付方式。若為每一種支付方式單獨(dú)定義事件,就需要5個訂單支付事件。
而使用結(jié)構(gòu)化設(shè)計(jì),只需要一個事件,就能滿足需求。原方案中,5個支付訂單事件的差異,通過“支付方式”屬性來區(qū)分。
獨(dú)立事件的數(shù)量越多,開發(fā)的工作量越大。通過屬性值對多個事件進(jìn)行合并后,只需要新增屬性值,就可以完成埋點(diǎn),開發(fā)和維護(hù)的成本就大幅度越低。
??提高數(shù)據(jù)分析效率
在做數(shù)據(jù)分析時,經(jīng)常需要對同類型的多種用戶行為進(jìn)行匯總,以了解整體情況。
若為每一個獨(dú)立用戶行為單獨(dú)定義事件,再需要進(jìn)行匯總統(tǒng)計(jì)時,就會出現(xiàn)前文所述的效率問題。而結(jié)構(gòu)化的事件設(shè)計(jì),能指數(shù)級降低數(shù)據(jù)分析效率。

當(dāng)需要統(tǒng)計(jì)最近一年所有游戲的打開次數(shù)時,只需要統(tǒng)計(jì)“打開游戲”事件一年內(nèi)累計(jì)被觸發(fā)的次數(shù),而不是先統(tǒng)計(jì)每個游戲打開事件被觸發(fā)的次數(shù),再進(jìn)行二次匯總。
總結(jié)
在設(shè)計(jì)埋點(diǎn)事件時,不應(yīng)該為每一個獨(dú)立的、最小顆粒度的用戶行為單獨(dú)定義事件,而應(yīng)該將同類型的用戶行為抽象為一個事件,并從數(shù)據(jù)分析需求和事件本身的分類方法出發(fā),梳理事件的屬性,最后再形成數(shù)據(jù)埋點(diǎn)需求文檔。
結(jié)構(gòu)化的事件設(shè)計(jì)方法,能有效降低開發(fā)和維護(hù)成本,提高數(shù)據(jù)分析效率,是一種更好的事件設(shè)計(jì)方法。

5年產(chǎn)品經(jīng)理
專注后端產(chǎn)品方向長按掃碼可關(guān)注

