一、背景
數據采集層中的用戶行為數據采集系統。
用戶行為:用戶與產品UI的交互行為(Android、iOS、Web頁面、H5)。
- 后端:后端服務日志、業務數據庫
- 前端:主動上報
用戶行為數據采集系統:從前端采集用戶完整的行為信息,用於數據分析和其他業務。
例子1:營銷活動注冊流程
僅依靠后端業務數據庫,只能知道活動帶來多少新注冊用戶。
而通過采集用戶在前端的操作行為,可以分析出整個活動的轉化情況(轉化率分析)。
頁面瀏覽量 → 點擊注冊跳轉 → 獲取驗證碼 → 提交注冊 → 真實注冊(漏斗分析)
例子2:用戶評分系統 —— 抽取數據作為評分依據。
數據采集
結構化數據表 —— 存儲數據
前端 API 上報數據
前端位置埋點紊亂
二、解決辦法
統一的用戶行為采集系統。原則:
- 統一上報方式
- 統一數據格式
- 統一數據集中存儲
- 盡可能全量采集
具體到實現上,歸納為三個問題:
1. 采集什么
需要什么數據?抽象出統一的數據格式。
行為包括三類:
- 瀏覽:頁面、元數據
- 輸入
- 點擊(移動端:滑動):頁面的元素、關聯信息、元數據
瀏覽和點擊是引起頁面變化和邏輯處理的重要事件,而輸入總是與點擊事件關聯在一起。
頁面、元素、元數據。
瀏覽和點擊便是我們采集的對象。
- Android & iOS :View名稱
- Web頁面:URL鏈接(hostname + pathname)、參數、跟蹤代碼
用戶維度:隨機UUID,后端生成,前端緩存。
已登錄用戶:通過元數據中的用戶id關聯。
時間維度:數據統計,前端延遲上報,時間自動同步。
例如:
{
"uuid": "2b8c376e-bd20-11e6-9ebf-525499b45be6",
"event_time": "2016-12-08T18:08:12",
"page": "www.example.com/poster.html",
"element": "register",
"attrs": {
"title": "test",
"user_id": 1234
}
}
2.前端怎么采集
前端有效埋點、全量采集的問題。
傳統的埋點方式,在需要上報的位置組織數據、調用API、將數據傳給后端,比如:百度統計、google analysis。
需要在代碼里嵌入調用,也業務邏輯耦合在一起。
“無埋點”概念。
通過在底層hook所有的點擊事件,采集所有事件,稱之為“全埋點”。
- hook底層點擊事件 —— 數據整理
- UI元素屬性值設置關聯關系
3.后端存儲
數據集中存儲、易於分析。
數據進入后台,接入kafka隊列,采用生產消費者模式(Elasticsearch)處理。
- 功能分離
- 數據緩沖
- 易於擴展
增加5個維度信息:
- 客戶端類型(web、android、iOS)
- 事件類型(瀏覽、點擊)
- 事件
- 客戶端IP
- User Agent
將Page + element 、事件名稱進行關系映射,可進行頁面配置,手動關聯。
傳統的行列二維數據結構。
用戶行為數據、日志數據都屬於半結構化數據,使用NoSQL數據庫作為存儲。
ElasticSearch 數據存儲
實時分布式搜索引擎和分析引擎,具有很強的數據搜索和聚合分析能力。
三、技術路線圖
- 原始數據存儲ODS層
- 服務器日志接收
- 服務器日志
- URL解析
- JS回傳
- 客戶端日志接收
- SDK
- API接口
- 全量/增量/Binlog
- 數據庫
- 服務器日志接收
服務器日志,指Web服務器軟件,例如Httpd、Nginx、Tomcat等自帶的日志,例如Nginx的access.log日志等。
URL解析,指訪問服務器時,將URL信息及攜帶的參數進行解析后,上傳服務器,例如訪問百度首頁:https://www.baidu.com/s?ie=utf-8&wd=你好,我們可以獲得本次訪問的word為“你好”。
JS回傳,指在Web頁面上添加的各類統計插件,通過在頁面嵌入自定義的Javascript代碼來獲取用戶的訪問行為(比如鼠標懸停的位置,點擊的頁面組件等),然后通過Ajax請求到后台記錄日志。
- 統計重要指標
- 頁面瀏覽:PV、UV、IP、跳出率、平均訪問時長、轉化次數等
- 頁面交互:搜索詞、控件點擊、頁面跳轉等
- 其他:轉化路徑分析、設備分析、訪客分析、系統環境、地域分布等
用戶點擊網頁 → HTTP請求 → 相應結果返回瀏覽器 → 解析 → 展示
ODS基礎日志
大數據平台半結構化特征
轉化為DWD基礎日志
數據清洗:數值歸一、標准化處理、無效數據剔除
四、漏斗模型介紹
Web端的分析常用到漏斗模型,例如淘寶的SPM體系。
漏斗模型全稱為:搜索營銷效果轉化漏斗。
對應了企業搜索營銷的各個環節,反映了從展現、點擊、訪問、咨詢,直到生成訂單過程中的客戶數量及流失。
漏斗模型是一個線性流程,從開始到結束,用戶在每一個環節,都會產生流失,就像漏斗一樣。
以電商為例,最常見漏斗模型就是:瀏覽/搜索-加購-下單-支付-復購。
- 關鍵環節優化
- 縮短用戶路徑 優化產品體驗
工具:Google GA
對比分析
五、淘寶SPM碼
漏斗模型比較優秀的應用案例為淘寶SPM碼。
查看淘寶網頁的源代碼會經常看到http://detail.tmall.com/item.htm?id=XXX&&spm=2014.123456789.1.2這樣的例子,這是淘寶提供的SPM是淘寶社區電商業務(xTao)為外部合作伙伴(外站)提供的一套跟蹤引導成交效果數據的解決方案。
簡單說來,SPM編碼是一種用來跟蹤頁面模塊位置的編碼,標准SPM編碼由4段組成,采用a.b.c.d的格式(建議全部使用數字)。
基於SPM可以得到的效果統計指標:
- PV:通過指定spm編碼引導到寶貝詳情頁面的PV。
- UV:通過指定spm編碼引導到寶貝詳情頁面的UV。
- 支付寶成交人數:通過指定spm編碼引導到寶貝詳情頁面的用戶當天對同店商品的支付寶成交人數。
- 轉化率=支付寶成交人數/UV,代表通過指定spm編碼引導的用戶最終轉化為購買用戶的比率。
六、客戶端日志采集
手機 SDK 延遲發送日志
統計數據延遲
根據類型的不同,可以分為頁面事件(類比頁面瀏覽)和控件點擊事件(類比頁面交互)。
- 設備及用戶的基本信息,例如IMEI、用戶賬號等。
- 被訪問頁面的信息,例如商品ID、瀏覽店鋪等。
- 訪問的路徑信息,例如上一個頁面來源等。
SDK具有聚合和壓縮的功能,可以適當的合並日志,減少數據量。
工具:友盟、TalkingData、百度統計、騰訊雲分析、GA等第三方統計工具。
- 唯一設備標識符
網頁有統一的Cookie進行識別,客戶端沒有。
IMEI/IMSI/MAC地址、UDID等。
- 原生態APP & H5頁面嵌入
Native頁面數據統計通過SDK進行,H5頁面基於瀏覽器的頁面日志進行。
由於采集方式的不同,很多情況下兩個頁面互相跳轉時,便無法還原用戶訪問路徑,對於數據的統計分析產生很嚴重的影響。
解決的思路有兩種,一種是Native日志歸攏到H5日志中,另一種是H5日志歸攏到Native日志中,但綜合考慮,歸攏到Native日志更為合理,因為SDK能夠采集更為全面的日子信息。具體實現方式上,可以在H5頁面中嵌入JS代碼,通過調用WebView框架中的JSBridge接口,來實現參數的傳入,並由統計SDK進行日志的封裝。當然方法不是萬能的,有其他的好方式也可以嘗試。
- 日志處理
通過限制流量、消息隊列削弱峰值、異步處理、內存緩沖、擴展服務等方式進行,在日志采集環節中,可以通過延遲非核心日志上傳的方式,優先處理核心日志,以保障統計效果。
參考鏈接1:用戶行為數據采集系統
參考鏈接2:數據采集技術簡介