埋點事件的結構化設計方法

5 評論 10746 瀏覽 94 收藏 18 分鐘

編輯導語:對于產品來說,用戶在你的產品里怎么使用、使用了什么板塊、路徑等等都是需要從埋點中進行監控;一個科學有效的埋點方式,可以一定程度上提高渠道轉化,并且改善產品;本文作者分享了關于埋點事件的結構化設計方法,我們一起來看一下。

一、埋點的坑

近期負責了一款APP的數據相關工作。該APP是一個自制游戲內容產品,上架了很多個獨立主題的小游戲,并按游戲的類型,分為5個類型。

為了解整體數據情況,我向數據開發提出了一個數據提取需求:以周為單位,統計最近一年每個類型的游戲累計被打開的次數。

本以為幾分鐘就可以拿到數據,但開發1個小時后才給我結果;經過詳細了解,發現是因為數據埋點存在極大的坑,導致的數據統計效率低下。

埋點需求見下圖:

通過這套方案采集到的數據,要實現按類型統計的需求,有2個問題:

  1. 每一個游戲,都單獨定義了一個打開游戲事件。也就是說,打開不同的游戲時,觸發的是不同的事件;要想統計每個類型的游戲累計打開次數,必須先按事件名逐個統計每個游戲的打開次數。
  2. 只采集了打開某個游戲,但游戲所屬分類是沒有采集的;要統計每個類型游戲累計被打開的次數,就需要對照游戲信息表,查到每個游戲的所屬類型,再按游戲的所屬類型,對打開次數做一次累加。

整個數據提取過程如下圖所示:

每一個步驟都無法省略,因此,數據提取才耗費了很長的時間。

二、帶來的問題

在這個埋點方案中,主要有兩個問題:相似行為未做聚類抽象、事件信息采集不完整。

1. 相似行為未做聚類抽象

相似行為是指用戶操作過程和目標高度相似的行為,如用戶分享一篇文章,有分享給微信好友、分享到朋友圈、分享到微博。

將相似行為都定義為一個個獨立的事件,會導致以下2個問題:

  1. 埋點事件數量很多,開發和維護成本高。APP中有1000個游戲,就對應了有1000個打開游戲事件;只要增加新的游戲,對應的埋點代碼都需要單獨開發,并在表格中進行維護,一旦沒有及時維護,或因員工離職時交接不到位,可能導致事件管理出現混亂,如重復事件、無效事件等。
  2. 數據統計和分析效率低下。當需要統計全部游戲的打開次數時,必須要先分別找到每個游戲點擊對應的事件,然后逐個統計每個事件的觸發次數,再做一次匯總。

聚類抽象是指用一個抽象的主題來概括多個相似信息。如分享給微信好友、分享到朋友圈、分享到微博3個行為,都是在描述用戶分享文章的行為,可以聚類抽象為“分享文章”。

將相似行為聚類抽象后,原本1000個游戲的打開事件減少為1個,事件數量大幅度降低;統計全部游戲的打開次數也能一步完成,數據統計和分析效率提升一倍。

2. 事件信息采集不完整

一個用戶行為,往往可以從多個維度來描述,每一個描述維度,都是一個信息,這些信息,有些是有分析價值的,有些沒有;埋點采集到所有具備分析價值的信息,才是完整采集事件信息。

如果我們在梳理埋點需求時,沒有完整采集信息的意識,或考慮不全面,就很容易遺漏,導致相應的分析無法進行。

打開游戲時,所在頁面是事件相關的信息,統計用戶打開游戲時所在的頁面,可以分析不同頁面對游戲的引流效果,指導運營工作方向。

若沒有采集該信息,就無法統計在某個頁面打開游戲的次數。

三、解決方案

很明顯,為每個獨立的、最小顆粒度的用戶行為單獨定義一個事件,不是一個好方法。那么,我們應該怎么設計埋點事件呢?

答案是采用“事件-屬性-屬性值”的結構,對事件進行多維度描述。

結構化是指一個完整的埋點事件,分為事件、屬性、屬性值三層,包含一個事件定義(用戶行為)和若干個屬性定義(描述用戶行為的屬性)。

下圖是打開游戲事件的結構化設計案例:

點擊游戲圖標打開游戲的行為,定義為“打開游戲”事件;該事件有2個屬性,分別為“游戲分類、游戲ID”;游戲分類指游戲所屬的類型,其屬性值為“A、B、C、D、E”;游戲ID是唯一識別游戲的編號,其屬性值為“001、002、003···999”。實際使用時,還可以增加更多屬性。

游戲ID屬性,將相似行為聚類抽象為一個事件,即使有新的游戲上線,也只需要增加一個屬性值,事件數量從1000個減少到1個,開發和管理成本大幅度降低。

增加的屬性,使采集到的行為信息更完整。通過“游戲分類”屬性的值,即可統計每個類型的游戲累計被打開的次數,滿足更多數據分析需求。

1. 屬性的定義

一個用戶行為,通常可以從多個維度進行描述,描述事件的維度,稱之為“事件屬性”,簡稱“屬性”;每個屬性,都有若干個值,為屬性值。

用戶打開游戲,如果從玩家性別維度描述,分為男、女;從玩家年齡維度描述,有15、16、17、18等,從游戲分類維度描述,分為A類、B類···

“玩家性別、玩家年齡、游戲分類”就是用來描述“打開游戲”事件的屬性。

“男、女”是屬性“玩家性別”的屬性值,“15、16、17”是屬性“玩家年齡”的屬性值,“A類、B類”是屬性“游戲分類”的屬性值。

從上一篇文章中,我們已經知道,數據埋點能采集4w1h多個維度的信息。

從不同的維度對事件進行數據分析,要么能指導產品的迭代,獲得更高的用戶價值;要么能更好地達成業務目標,獲得更高的商業價值。

因此,在數據采集時,不僅要采集事件本身,還要采集事件的屬性信息。

游戲被打開次數的性別分布,體現了不同性別的用戶對該游戲的興趣高低;如游戲灰度發布的3天內,選取了男女用戶各1000人推送內測邀請,其中900個男性用戶打開了游戲,而女性用戶僅10人,說明該男性用戶對該游戲更感興趣。

為了在盡可能少消耗推送次數的條件下,讓該游戲獲得更高的打開率,游戲上線時,運營只給男性用戶全量推送了游戲。

2. 設計方法

結構化事件設計的關鍵,是定義好事件、觸發機制、屬性、屬性值類型、屬性值5個要點。

1)定義事件

數據埋點是要采集對數據分析有價值的過程數據,因此,需要先根據數據分析需求,找出對應的用戶行為,再抽象出事件名。

數據分析需求是目標,確定了目標,才能找到能達成該目標的用戶行為;事件名是對該事件的概括,幫助相關同事統一溝通話術和名詞定義,提高溝通效率。

需要分析用戶打開某個游戲或某類次數、人數,對應的用戶行為是用戶點擊并打開游戲,可以將該行為抽象為“打開游戲”事件,作為內部溝通統一名稱。

2)定義觸發機制

埋點代碼被觸發執行的條件,即為觸發機制,通常取決于事件的定義和目的。如點擊了某個元素、打開了某個頁面、展示了某個內容等。

“打開游戲”事件中,打開游戲的定義,是點擊游戲圖標,并進入游戲界面,事件的目的是要準確記錄打開游戲的行為。

因此,當用戶通過各種方式(點擊游戲圖標、點擊推送消息、點擊進入游戲按鈕等)進入游戲界面時,才觸發事件。

只有在正確的時機觸發埋點事件,才能準確采集用戶行為。觸發時機錯誤,必然導致數據不可信,失去分析價值。

若以“點擊游戲圖標”為“打開游戲”事件的觸發機制,就遺漏了其他兩種打開游戲的方式帶來的行為記錄;同時,游戲被點擊時,可能未完成下載,此時點擊游戲圖標,并沒有打開游戲,但也被采集為一次打開游戲。

最終無法分析幾種打開游戲方式的次數分布,也不能準確評估游戲真實的消費情況。

3)定義屬性

梳理事件的屬性,主要有兩種方法:梳理事件的分析需求、尋找事件內部的分類維度。

梳理事件的分析需求:

不同的事件,分析需求不同,需要采集的事件屬性也不同。因此,需要先梳理事件的分析需求,再針對性地尋找能滿足該需求的屬性。

“打開游戲”事件中,需要分析不同游戲被打開的次數,以驗證游戲的受歡迎程度。如果在觸發“打開游戲”事件時,采集被打開的游戲ID,在分析該事件時,即可通過“游戲ID”統計不同游戲的打開次數。

尋找事件的分類維度:

事件是對用戶行為的抽象,本身還可以從不同的維度來分類,這些分類維度,也可以作為屬性來描述事件。

從游戲的獲取方式維度,可以將游戲分為付費游戲和免費游戲;為了統計付費游戲和免費游戲的打開次數差異,可以將“是否付費游戲”作為一個屬性。

4)明確屬性值類型

找到需要的屬性后,還需要明確屬性的值類型,如枚舉型、字符串型、布爾型、數值型。

游戲ID是一串數字,如008,是數值型;游戲分類是可以窮舉的選項,是枚舉型;是否付費游戲是只有2個選項,是布爾型···

不同類型的屬性值,取值來源和儲存形式都不同。定義屬性值類型,可以幫助相關同事理解埋點需求,并合理使用。

枚舉型的屬性值,通常是事先窮舉的若干個值,存儲時通常用數字替代,使用時再轉化成真實的內容。

布爾型的屬性值,只有2個值,存儲內容為0和1。

5)給出屬性值

定義好屬性值類型后,再根據不同的屬性值類型,給出對應的屬性值或示例:

  • 枚舉型:窮舉所有值;
  • 字符串型:給出示例,并約定最大字符長度;
  • 布爾型:給出值名稱;
  • 數值型:給出示例,并約定最大字符長度。

屬性值或示例是研發編寫埋點代碼和測試的標準,幫助開發理解埋點需求。

研發不理解業務的前提下,可能都不知道游戲分類是什么,也不清楚有哪些分類。但當他看到窮舉出來的屬性值時,就能立刻理解。

通過以上五個步驟,即可完成事件的結構化設計。整理成表格后,如下所示:

3. 建議:整理公共屬性

在梳理事件屬性時,我們會發現有一些屬性是大部分事件都需要采集的。如每一個事件都要采集發生時間、用戶ID、設備類型、APP版本···

如果每一個事件都需要將這些屬性在數據需求文檔中列出來,就會帶來大量的重復工作;因此,可以將這些屬性定義為公共屬性,即每個事件都默認需要采集的屬性,單獨整理在一個表格中。

常見的公共屬性見下表:

四、結構化事件設計的價值

1. 減少事件數量,降低成本

采用“事件-屬性-屬性值”的結構化設計,可以將相似度更高、但有細微差異的多個行為聚類抽象為一個事件,而不同行為之間的差異,通過屬性值來區分,從而減少事件數量。

在APP中購買商品時,有5種支付方式;若為每一種支付方式單獨定義事件,就需要5個訂單支付事件。

而使用結構化設計,只需要一個事件,就能滿足需求;原方案中,5個支付訂單事件的差異,通過“支付方式”屬性來區分。

獨立事件的數量越多,開發的工作量越大。通過屬性值對多個事件進行合并后,只需要新增屬性值,就可以完成埋點,開發和維護的成本就大幅度越低。

2. 提高數據分析效率

在做數據分析時,經常需要對同類型的多種用戶行為進行匯總,以了解整體情況。

若為每一個獨立用戶行為單獨定義事件,再需要進行匯總統計時,就會出現前文所述的效率問題;而結構化的事件設計,能指數級降低數據分析效率。

當需要統計最近一年所有游戲的打開次數時,只需要統計“打開游戲”事件一年內累計被觸發的次數,而不是先統計每個游戲打開事件被觸發的次數,再進行二次匯總。

五、總結

在設計埋點事件時,不應該為每一個獨立的、最小顆粒度的用戶行為單獨定義事件;而應該將同類型的用戶行為抽象為一個事件,并從數據分析需求和事件本身的分類方法出發,梳理事件的屬性,最后再形成數據埋點需求文檔。

結構化的事件設計方法,能有效降低開發和維護成本,提高數據分析效率,是一種更好的事件設計方法。

#專欄作家#

誓博,微信公眾號:產品慎思錄。人人都是產品經理專欄作家。5年產品經驗,電商售后平臺后端產品負責人。

本文原創發布于人人都是產品經理,未經作者許可,禁止轉載。

題圖來自Unsplash,基于CC0協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 日活可以用這種方式定義嗎

    來自上海 回復
    1. 日活是一個統計數據,不是一個事件。埋點是記錄事件的,然后根據埋點數據,通過統計的方式算出日活。

      來自廣東 回復
  2. 不錯

    來自廣東 回復
  3. 學習了!?。?!

    回復
  4. 邏輯清晰,簡明易懂,寫的很好,受教了

    來自上海 回復