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

5 評(píng)論 10856 瀏覽 94 收藏 18 分鐘

編輯導(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è)問題:

  1. 每一個(gè)游戲,都單獨(dú)定義了一個(gè)打開游戲事件。也就是說,打開不同的游戲時(shí),觸發(fā)的是不同的事件;要想統(tǒng)計(jì)每個(gè)類型的游戲累計(jì)打開次數(shù),必須先按事件名逐個(gè)統(tǒng)計(jì)每個(gè)游戲的打開次數(shù)。
  2. 只采集了打開某個(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è)問題:

  1. 埋點(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ù)事件、無效事件等。
  2. 數(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é)議。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 日活可以用這種方式定義嗎

    來自上海 回復(fù)
    1. 日活是一個(gè)統(tǒng)計(jì)數(shù)據(jù),不是一個(gè)事件。埋點(diǎn)是記錄事件的,然后根據(jù)埋點(diǎn)數(shù)據(jù),通過統(tǒng)計(jì)的方式算出日活。

      來自廣東 回復(fù)
  2. 不錯(cuò)

    來自廣東 回復(fù)
  3. 學(xué)習(xí)了!?。?!

    回復(fù)
  4. 邏輯清晰,簡(jiǎn)明易懂,寫的很好,受教了

    來自上海 回復(fù)