埋點(diǎn)事件的結(jié)構(gòu)化設(shè)計(jì)方法
編輯導(dǎo)語(yǔ):對(duì)于產(chǎn)品來說,用戶在你的產(chǎn)品里怎么使用、使用了什么板塊、路徑等等都是需要從埋點(diǎn)中進(jìn)行監(jiān)控;一個(gè)科學(xué)有效的埋點(diǎn)方式,可以一定程度上提高渠道轉(zhuǎn)化,并且改善產(chǎn)品;本文作者分享了關(guān)于埋點(diǎn)事件的結(jié)構(gòu)化設(shè)計(jì)方法,我們一起來看一下。
一、埋點(diǎn)的坑
近期負(fù)責(zé)了一款A(yù)PP的數(shù)據(jù)相關(guān)工作。該APP是一個(gè)自制游戲內(nèi)容產(chǎn)品,上架了很多個(gè)獨(dú)立主題的小游戲,并按游戲的類型,分為5個(gè)類型。
為了解整體數(shù)據(jù)情況,我向數(shù)據(jù)開發(fā)提出了一個(gè)數(shù)據(jù)提取需求:以周為單位,統(tǒng)計(jì)最近一年每個(gè)類型的游戲累計(jì)被打開的次數(shù)。
本以為幾分鐘就可以拿到數(shù)據(jù),但開發(fā)1個(gè)小時(shí)后才給我結(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個(gè)問題:
- 每一個(gè)游戲,都單獨(dú)定義了一個(gè)打開游戲事件。也就是說,打開不同的游戲時(shí),觸發(fā)的是不同的事件;要想統(tǒng)計(jì)每個(gè)類型的游戲累計(jì)打開次數(shù),必須先按事件名逐個(gè)統(tǒng)計(jì)每個(gè)游戲的打開次數(shù)。
- 只采集了打開某個(gè)游戲,但游戲所屬分類是沒有采集的;要統(tǒng)計(jì)每個(gè)類型游戲累計(jì)被打開的次數(shù),就需要對(duì)照游戲信息表,查到每個(gè)游戲的所屬類型,再按游戲的所屬類型,對(duì)打開次數(shù)做一次累加。
整個(gè)數(shù)據(jù)提取過程如下圖所示:
每一個(gè)步驟都無法省略,因此,數(shù)據(jù)提取才耗費(fèi)了很長(zhǎng)的時(shí)間。
二、帶來的問題
在這個(gè)埋點(diǎn)方案中,主要有兩個(gè)問題:相似行為未做聚類抽象、事件信息采集不完整。
1. 相似行為未做聚類抽象
相似行為是指用戶操作過程和目標(biāo)高度相似的行為,如用戶分享一篇文章,有分享給微信好友、分享到朋友圈、分享到微博。
將相似行為都定義為一個(gè)個(gè)獨(dú)立的事件,會(huì)導(dǎo)致以下2個(gè)問題:
- 埋點(diǎn)事件數(shù)量很多,開發(fā)和維護(hù)成本高。APP中有1000個(gè)游戲,就對(duì)應(yīng)了有1000個(gè)打開游戲事件;只要增加新的游戲,對(duì)應(yīng)的埋點(diǎn)代碼都需要單獨(dú)開發(fā),并在表格中進(jìn)行維護(hù),一旦沒有及時(shí)維護(hù),或因員工離職時(shí)交接不到位,可能導(dǎo)致事件管理出現(xiàn)混亂,如重復(fù)事件、無效事件等。
- 數(shù)據(jù)統(tǒng)計(jì)和分析效率低下。當(dāng)需要統(tǒng)計(jì)全部游戲的打開次數(shù)時(shí),必須要先分別找到每個(gè)游戲點(diǎn)擊對(duì)應(yīng)的事件,然后逐個(gè)統(tǒng)計(jì)每個(gè)事件的觸發(fā)次數(shù),再做一次匯總。
聚類抽象是指用一個(gè)抽象的主題來概括多個(gè)相似信息。如分享給微信好友、分享到朋友圈、分享到微博3個(gè)行為,都是在描述用戶分享文章的行為,可以聚類抽象為“分享文章”。
將相似行為聚類抽象后,原本1000個(gè)游戲的打開事件減少為1個(gè),事件數(shù)量大幅度降低;統(tǒng)計(jì)全部游戲的打開次數(shù)也能一步完成,數(shù)據(jù)統(tǒng)計(jì)和分析效率提升一倍。
2. 事件信息采集不完整
一個(gè)用戶行為,往往可以從多個(gè)維度來描述,每一個(gè)描述維度,都是一個(gè)信息,這些信息,有些是有分析價(jià)值的,有些沒有;埋點(diǎn)采集到所有具備分析價(jià)值的信息,才是完整采集事件信息。
如果我們?cè)谑崂砺顸c(diǎn)需求時(shí),沒有完整采集信息的意識(shí),或考慮不全面,就很容易遺漏,導(dǎo)致相應(yīng)的分析無法進(jìn)行。
打開游戲時(shí),所在頁(yè)面是事件相關(guān)的信息,統(tǒng)計(jì)用戶打開游戲時(shí)所在的頁(yè)面,可以分析不同頁(yè)面對(duì)游戲的引流效果,指導(dǎo)運(yùn)營(yíng)工作方向。
若沒有采集該信息,就無法統(tǒng)計(jì)在某個(gè)頁(yè)面打開游戲的次數(shù)。
三、解決方案
很明顯,為每個(gè)獨(dú)立的、最小顆粒度的用戶行為單獨(dú)定義一個(gè)事件,不是一個(gè)好方法。那么,我們應(yīng)該怎么設(shè)計(jì)埋點(diǎn)事件呢?
答案是采用“事件-屬性-屬性值”的結(jié)構(gòu),對(duì)事件進(jìn)行多維度描述。
結(jié)構(gòu)化是指一個(gè)完整的埋點(diǎn)事件,分為事件、屬性、屬性值三層,包含一個(gè)事件定義(用戶行為)和若干個(gè)屬性定義(描述用戶行為的屬性)。
下圖是打開游戲事件的結(jié)構(gòu)化設(shè)計(jì)案例:
點(diǎn)擊游戲圖標(biāo)打開游戲的行為,定義為“打開游戲”事件;該事件有2個(gè)屬性,分別為“游戲分類、游戲ID”;游戲分類指游戲所屬的類型,其屬性值為“A、B、C、D、E”;游戲ID是唯一識(shí)別游戲的編號(hào),其屬性值為“001、002、003···999”。實(shí)際使用時(shí),還可以增加更多屬性。
游戲ID屬性,將相似行為聚類抽象為一個(gè)事件,即使有新的游戲上線,也只需要增加一個(gè)屬性值,事件數(shù)量從1000個(gè)減少到1個(gè),開發(fā)和管理成本大幅度降低。
增加的屬性,使采集到的行為信息更完整。通過“游戲分類”屬性的值,即可統(tǒng)計(jì)每個(gè)類型的游戲累計(jì)被打開的次數(shù),滿足更多數(shù)據(jù)分析需求。
1. 屬性的定義
一個(gè)用戶行為,通??梢詮亩鄠€(gè)維度進(jìn)行描述,描述事件的維度,稱之為“事件屬性”,簡(jiǎn)稱“屬性”;每個(gè)屬性,都有若干個(gè)值,為屬性值。
用戶打開游戲,如果從玩家性別維度描述,分為男、女;從玩家年齡維度描述,有15、16、17、18等,從游戲分類維度描述,分為A類、B類···
“玩家性別、玩家年齡、游戲分類”就是用來描述“打開游戲”事件的屬性。
“男、女”是屬性“玩家性別”的屬性值,“15、16、17”是屬性“玩家年齡”的屬性值,“A類、B類”是屬性“游戲分類”的屬性值。
從上一篇文章中,我們已經(jīng)知道,數(shù)據(jù)埋點(diǎn)能采集4w1h多個(gè)維度的信息。
從不同的維度對(duì)事件進(jìn)行數(shù)據(jù)分析,要么能指導(dǎo)產(chǎn)品的迭代,獲得更高的用戶價(jià)值;要么能更好地達(dá)成業(yè)務(wù)目標(biāo),獲得更高的商業(yè)價(jià)值。
因此,在數(shù)據(jù)采集時(shí),不僅要采集事件本身,還要采集事件的屬性信息。
游戲被打開次數(shù)的性別分布,體現(xiàn)了不同性別的用戶對(duì)該游戲的興趣高低;如游戲灰度發(fā)布的3天內(nèi),選取了男女用戶各1000人推送內(nèi)測(cè)邀請(qǐng),其中900個(gè)男性用戶打開了游戲,而女性用戶僅10人,說明該男性用戶對(duì)該游戲更感興趣。
為了在盡可能少消耗推送次數(shù)的條件下,讓該游戲獲得更高的打開率,游戲上線時(shí),運(yùn)營(yíng)只給男性用戶全量推送了游戲。
2. 設(shè)計(jì)方法
結(jié)構(gòu)化事件設(shè)計(jì)的關(guān)鍵,是定義好事件、觸發(fā)機(jī)制、屬性、屬性值類型、屬性值5個(gè)要點(diǎn)。
1)定義事件
數(shù)據(jù)埋點(diǎn)是要采集對(duì)數(shù)據(jù)分析有價(jià)值的過程數(shù)據(jù),因此,需要先根據(jù)數(shù)據(jù)分析需求,找出對(duì)應(yīng)的用戶行為,再抽象出事件名。
數(shù)據(jù)分析需求是目標(biāo),確定了目標(biāo),才能找到能達(dá)成該目標(biāo)的用戶行為;事件名是對(duì)該事件的概括,幫助相關(guān)同事統(tǒng)一溝通話術(shù)和名詞定義,提高溝通效率。
需要分析用戶打開某個(gè)游戲或某類次數(shù)、人數(shù),對(duì)應(yīng)的用戶行為是用戶點(diǎn)擊并打開游戲,可以將該行為抽象為“打開游戲”事件,作為內(nèi)部溝通統(tǒng)一名稱。
2)定義觸發(fā)機(jī)制
埋點(diǎn)代碼被觸發(fā)執(zhí)行的條件,即為觸發(fā)機(jī)制,通常取決于事件的定義和目的。如點(diǎn)擊了某個(gè)元素、打開了某個(gè)頁(yè)面、展示了某個(gè)內(nèi)容等。
“打開游戲”事件中,打開游戲的定義,是點(diǎn)擊游戲圖標(biāo),并進(jìn)入游戲界面,事件的目的是要準(zhǔn)確記錄打開游戲的行為。
因此,當(dāng)用戶通過各種方式(點(diǎn)擊游戲圖標(biāo)、點(diǎn)擊推送消息、點(diǎn)擊進(jìn)入游戲按鈕等)進(jìn)入游戲界面時(shí),才觸發(fā)事件。
只有在正確的時(shí)機(jī)觸發(fā)埋點(diǎn)事件,才能準(zhǔn)確采集用戶行為。觸發(fā)時(shí)機(jī)錯(cuò)誤,必然導(dǎo)致數(shù)據(jù)不可信,失去分析價(jià)值。
若以“點(diǎn)擊游戲圖標(biāo)”為“打開游戲”事件的觸發(fā)機(jī)制,就遺漏了其他兩種打開游戲的方式帶來的行為記錄;同時(shí),游戲被點(diǎn)擊時(shí),可能未完成下載,此時(shí)點(diǎn)擊游戲圖標(biāo),并沒有打開游戲,但也被采集為一次打開游戲。
最終無法分析幾種打開游戲方式的次數(shù)分布,也不能準(zhǔn)確評(píng)估游戲真實(shí)的消費(fèi)情況。
3)定義屬性
梳理事件的屬性,主要有兩種方法:梳理事件的分析需求、尋找事件內(nèi)部的分類維度。
梳理事件的分析需求:
不同的事件,分析需求不同,需要采集的事件屬性也不同。因此,需要先梳理事件的分析需求,再針對(duì)性地尋找能滿足該需求的屬性。
“打開游戲”事件中,需要分析不同游戲被打開的次數(shù),以驗(yàn)證游戲的受歡迎程度。如果在觸發(fā)“打開游戲”事件時(shí),采集被打開的游戲ID,在分析該事件時(shí),即可通過“游戲ID”統(tǒng)計(jì)不同游戲的打開次數(shù)。
尋找事件的分類維度:
事件是對(duì)用戶行為的抽象,本身還可以從不同的維度來分類,這些分類維度,也可以作為屬性來描述事件。
從游戲的獲取方式維度,可以將游戲分為付費(fèi)游戲和免費(fèi)游戲;為了統(tǒng)計(jì)付費(fèi)游戲和免費(fèi)游戲的打開次數(shù)差異,可以將“是否付費(fèi)游戲”作為一個(gè)屬性。
4)明確屬性值類型
找到需要的屬性后,還需要明確屬性的值類型,如枚舉型、字符串型、布爾型、數(shù)值型。
游戲ID是一串?dāng)?shù)字,如008,是數(shù)值型;游戲分類是可以窮舉的選項(xiàng),是枚舉型;是否付費(fèi)游戲是只有2個(gè)選項(xiàng),是布爾型···
不同類型的屬性值,取值來源和儲(chǔ)存形式都不同。定義屬性值類型,可以幫助相關(guān)同事理解埋點(diǎn)需求,并合理使用。
枚舉型的屬性值,通常是事先窮舉的若干個(gè)值,存儲(chǔ)時(shí)通常用數(shù)字替代,使用時(shí)再轉(zhuǎn)化成真實(shí)的內(nèi)容。
布爾型的屬性值,只有2個(gè)值,存儲(chǔ)內(nèi)容為0和1。
5)給出屬性值
定義好屬性值類型后,再根據(jù)不同的屬性值類型,給出對(duì)應(yīng)的屬性值或示例:
- 枚舉型:窮舉所有值;
- 字符串型:給出示例,并約定最大字符長(zhǎng)度;
- 布爾型:給出值名稱;
- 數(shù)值型:給出示例,并約定最大字符長(zhǎng)度。
屬性值或示例是研發(fā)編寫埋點(diǎn)代碼和測(cè)試的標(biāo)準(zhǔn),幫助開發(fā)理解埋點(diǎn)需求。
研發(fā)不理解業(yè)務(wù)的前提下,可能都不知道游戲分類是什么,也不清楚有哪些分類。但當(dāng)他看到窮舉出來的屬性值時(shí),就能立刻理解。
通過以上五個(gè)步驟,即可完成事件的結(jié)構(gòu)化設(shè)計(jì)。整理成表格后,如下所示:
3. 建議:整理公共屬性
在梳理事件屬性時(shí),我們會(huì)發(fā)現(xiàn)有一些屬性是大部分事件都需要采集的。如每一個(gè)事件都要采集發(fā)生時(shí)間、用戶ID、設(shè)備類型、APP版本···
如果每一個(gè)事件都需要將這些屬性在數(shù)據(jù)需求文檔中列出來,就會(huì)帶來大量的重復(fù)工作;因此,可以將這些屬性定義為公共屬性,即每個(gè)事件都默認(rèn)需要采集的屬性,單獨(dú)整理在一個(gè)表格中。
常見的公共屬性見下表:
四、結(jié)構(gòu)化事件設(shè)計(jì)的價(jià)值
1. 減少事件數(shù)量,降低成本
采用“事件-屬性-屬性值”的結(jié)構(gòu)化設(shè)計(jì),可以將相似度更高、但有細(xì)微差異的多個(gè)行為聚類抽象為一個(gè)事件,而不同行為之間的差異,通過屬性值來區(qū)分,從而減少事件數(shù)量。
在APP中購(gòu)買商品時(shí),有5種支付方式;若為每一種支付方式單獨(dú)定義事件,就需要5個(gè)訂單支付事件。
而使用結(jié)構(gòu)化設(shè)計(jì),只需要一個(gè)事件,就能滿足需求;原方案中,5個(gè)支付訂單事件的差異,通過“支付方式”屬性來區(qū)分。
獨(dú)立事件的數(shù)量越多,開發(fā)的工作量越大。通過屬性值對(duì)多個(gè)事件進(jìn)行合并后,只需要新增屬性值,就可以完成埋點(diǎn),開發(fā)和維護(hù)的成本就大幅度越低。
2. 提高數(shù)據(jù)分析效率
在做數(shù)據(jù)分析時(shí),經(jīng)常需要對(duì)同類型的多種用戶行為進(jìn)行匯總,以了解整體情況。
若為每一個(gè)獨(dú)立用戶行為單獨(dú)定義事件,再需要進(jìn)行匯總統(tǒng)計(jì)時(shí),就會(huì)出現(xiàn)前文所述的效率問題;而結(jié)構(gòu)化的事件設(shè)計(jì),能指數(shù)級(jí)降低數(shù)據(jù)分析效率。
當(dāng)需要統(tǒng)計(jì)最近一年所有游戲的打開次數(shù)時(shí),只需要統(tǒng)計(jì)“打開游戲”事件一年內(nèi)累計(jì)被觸發(fā)的次數(shù),而不是先統(tǒng)計(jì)每個(gè)游戲打開事件被觸發(fā)的次數(shù),再進(jìn)行二次匯總。
五、總結(jié)
在設(shè)計(jì)埋點(diǎn)事件時(shí),不應(yīng)該為每一個(gè)獨(dú)立的、最小顆粒度的用戶行為單獨(dú)定義事件;而應(yīng)該將同類型的用戶行為抽象為一個(gè)事件,并從數(shù)據(jù)分析需求和事件本身的分類方法出發(fā),梳理事件的屬性,最后再形成數(shù)據(jù)埋點(diǎn)需求文檔。
結(jié)構(gòu)化的事件設(shè)計(jì)方法,能有效降低開發(fā)和維護(hù)成本,提高數(shù)據(jù)分析效率,是一種更好的事件設(shè)計(jì)方法。
#專欄作家#
誓博,微信公眾號(hào):產(chǎn)品慎思錄。人人都是產(chǎn)品經(jīng)理專欄作家。5年產(chǎn)品經(jīng)驗(yàn),電商售后平臺(tái)后端產(chǎn)品負(fù)責(zé)人。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
日活可以用這種方式定義嗎
日活是一個(gè)統(tǒng)計(jì)數(shù)據(jù),不是一個(gè)事件。埋點(diǎn)是記錄事件的,然后根據(jù)埋點(diǎn)數(shù)據(jù),通過統(tǒng)計(jì)的方式算出日活。
不錯(cuò)
學(xué)習(xí)了!?。?!
邏輯清晰,簡(jiǎn)明易懂,寫的很好,受教了