掌握資料生命週期:初識資料埋點
談到資料驅動業務,離不開資料是怎麼來的,資料收集是整個資料生命週期的初始環節。
資料生命週期的大體介紹,在過去的一篇文章中有提到。雖然文章的部分內容我準備重新構造,但是對於這部分的基礎環節,並沒有太多的變換。

文章會涉及到不少技術相關的知識,我會盡量減少這部分的細節。相信經過一系列的講解,你會明白埋點資料怎麼成為驅動業務的指標,文章也會提供網上的公開資料,幫助你實際上手操作。
需要收集的資料主要能劃分成四個主要型別:行為資料、網站日誌資料、業務資料、外部資料。
Web日誌資料
網站日誌資料是Web時代的概念。
使用者瀏覽的每一個網頁,都會向伺服器傳送請求,具體的技術細節不用關注。只要知道,當伺服器和使用者產生資料互動,伺服器就會把這次互動記錄下來,我們稱之為日誌。
127.0.0.1 - - [20/Jul/2017:22:04:08 +0800] "GET /news/index HTTP/1.1" 200 22262 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.66 Safari/537.36"
上圖就是一條伺服器日誌,它告訴了我們,什麼樣的使用者who在什麼時間段when進行了什麼操作what。
127.0.0.1是使用者IP,即什麼樣的使用者。不同使用者的IP並不一致,通過它能基本的區分並定位到人。 [20/Jul/2017:22:04:08 +0800] 是產生這條記錄的時間,可以理解為使用者訪問的時間戳。
"GET /news/index HTTP/1.1"是伺服器處理請求的動作,在這裡,姑且認為是使用者請求訪問了某個網站路徑,/news/index。這裡省略了域名,如果域名是 http://www. aaa.com ,那麼使用者訪問的完整地址就是 http://www. aaa.com/news/index ,從字面意思理解,是使用者瀏覽了新聞頁。也就是what。
who、when、what構成了使用者行為分析的基礎。Mozilla/5.0這個欄位是使用者瀏覽時用的瀏覽器,它的分析意義不如前三者。
如果我們基於who分析,可以得知網站每天的PVUV;基於when分析,可以得知平均瀏覽時長,每日訪問高峰;what則能得知什麼內容更吸引人、使用者訪問的頁面深度、轉化率等屬性。
上面的示例中,我們用IP資料指代使用者,但使用者的IP並不固定,這對資料口徑的統一和準確率不利。實際應用中還需要研發們通過cookie或token獲取到使用者ID,並且將使用者ID傳遞到日誌中。它的形式就會變成:
127.0.0.1 - 123456 [20/Jul/2017:22:04:08 +0800]…
123456就是使用者ID,通過它就能和後臺的使用者標籤資料關聯,進行更豐富維度的分析。
案例的伺服器日誌,記錄了使用者的瀏覽資料,是標準的流量分析要素。但是網站上還會有其他功能,即更豐富的what,譬如評論、收藏、點贊、下單等,要統計這些行為靠日誌就力有未逮了。所以業內除了伺服器日誌,還會配合使用JS嵌入或者後臺採集的方式,針對各類業務場景收集資料。
在這裡我提供一份網上公開的資料集,年代比較古老,是學生在校園網站的瀏覽行為資料集。資料原始格式是log,可以txt開啟。需要的同學可以關注微信公眾號:tracykanc,後臺傳送「日誌下載」。

它是標準的伺服器日誌檔案,對分析師來說,IP,時間、瀏覽了哪些網頁,這三個欄位足夠做出一份完整的分析報告。後續的章節我將圍繞它進行演練,為了照顧新手,會同時用Excel和Python演示。
首先進行簡單的清洗。如果是Excel,直接將內容複製,檔案開頭的內容只需要保留第四行Fields資訊,它是資料的欄位。將內容複製黏貼到Excel中。
按空格進行分列,初步的資料格式就出來了。

我們仔細觀察cs-uri-stem,會發現有很多無用資料。比如/images/index_r2_c1.jpg,它是向伺服器請求了圖片資料,對我們分析其實沒有多大幫助。使用者訪問的具體網頁,是/index.asp這類以.asp為結尾的。
利用過濾功能,將含有.asp字串的內容提取出來,並且只保留date、time、c-ip、cs-uri-stem、cs-uri-stem。按c-ip和time按從小到大排序,這樣使用者在什麼時間做了什麼的行為序列就很清晰了。

像172.16.100.11這位遊客,在凌晨30分的時候訪問了網站首頁,然後瀏覽了校園新聞和一週安排相關的內容,整個會話持續了半小時左右的時間。
Python相關的清洗留待下一篇文章,這裡就不多花時間講解了。感興趣,大家可以先自行練習一下。
APP行為資料
資料埋點,抽象理解便是記錄使用者在客戶端的關鍵操作行為,一行資料便等於一條行為操作記錄。點選「立即搶購」是,在文章頁面停留5min是,發表文章評論是,進行退出登入操作是,視訊網站首頁看到了10條新視訊的內容曝光也是...反必要的,我們都採集。
APP行為資料是在日誌資料的基礎上發展和完善的。雖然資料的載體是在APP端,但它同樣可以抽象出幾個要素:who、when、where、what、how。
who即唯一標識使用者,在移動端,我們可以很方便地採集到user_id,一旦使用者註冊,就會生成新的user_id。
這裡有一個問題,如果使用者處於未登入狀態呢?如果使用者有多個賬號呢?為了更好地統一和識別唯一使用者,移動端還會採集device_id,通過手機裝置自帶的唯一標識碼進行區分。
實際的生成邏輯要複雜的多,安卓和iOS不一樣,device_id只能趨近於唯一、使用者更換裝置後怎麼讓資料繼承,未登入狀態的匿名賬戶怎麼繼承到註冊賬戶,這些都會影響到分析的口徑,不同公司的判斷邏輯不一致,此處注意踩坑。
回到使用者行為:
when依舊是行為發生的時間。
where即行為發生的地點,手機上,通過GPS定位許可權,獲取使用者比IP更詳細的經緯度資料並不難。
what是具體的行為,瀏覽、點贊、評論、分享、關注、下單、舉報、打賞,均是行為,如何統計取決於分析的維度。
如果我們想知道使用者的點贊行為,那麼在使用者點讚的時候要求客戶端上報一條like資訊即可。
如果只是到這裡,還稱不上埋點,因為點贊本身也會寫入到資料庫中,並不需要客戶端額外採集和上報,這裡就引入了全新的維度:how。
如何點贊,拿微信朋友圈舉例。絕大部分的點贊都是在朋友圈timeline中傳送,但是小部分場景,是允許使用者進入到好友的個人頁面,對釋出內容單獨點讚的。服務端/後臺並不知道這個點贊在哪裡發生,得iOS或安卓的客戶端告訴它,這便是how這個維度的用處。
換一種思考角度,如果很多點贊或留言的發生場景不在朋友圈,而是在好友個人頁。這是不是能討論一下某些產品需求?畢竟朋友圈資訊流內的內容越來越多,很容易錯過好友的生活百態,所以就會有那麼一批使用者,有需要去好友頁看內容的需求。這裡無意深入展開產品問題,只是想說明,哪怕同樣是點贊,場景發生的不同,資料描述的角度就不同了:朋友圈的點贊之交/好友頁的點贊至交。
除了場景,互動行為方式也是需要客戶端完成的。例如點選內容放大圖片、雙擊點贊、視訊自動播放、觸屏右滑回退頁面...產品量級小,這些細節無足輕重,產品變大了以後,產品們多少會有這些細節型需求。
行為埋點,通常用json格式描述和儲存,按點贊舉例:

params是巢狀的json,是描述行為的how,業內通常稱為行為引數,event則是事件。action_type指的是怎麼觸發點贊,page是點贊發生的頁面,page_type是頁面的型別,現在產品設計,在推薦為主的資訊流中,除了首頁,還會在頂欄劃分子頻道,所以page=feed,page_type=game,可以理解成是首頁的遊戲子頻道。item_id指對哪篇具體的內容點贊,item_type是內容型別為視訊。
上述幾個欄位,就構成了APP端行為採集的how和what了。如果我們再考慮的齊全一些,who、when及其他輔助欄位都能加上。

埋點怎麼設計,不是本篇文章的重點(實際上也複雜的多,它需要很多討論和文件and so on,有機會再講),因為各家公司都有自己的設計思路和方法,有些更是按控制元件統計的無痕埋點。如果大家感興趣,可以網路上搜索文章,不少賣使用者分析平臺的SaaS公司都有文章詳細介紹。
除了行為「點」,埋點統計中還包含「段」的邏輯,即使用者在頁面上停留了多久,這塊也是客戶端處理的優勢所在,就不多做介紹了。
這裡提供一份來源於網上的我也不知道是啥內容產品的行為資料來源,雖然它的本意是用作推薦模型的演算法競賽,不過用作使用者行為分析也是可以的。

這幾個欄位便是使用者行為的基礎欄位,像deep_view,雖然沒有明確說明是什麼含義,但也猜測是描述了使用者瀏覽的深度,比如看了50%+的文章內容,它只能以客戶端的形式統計,實際業務場景往往都需要這種有更深刻含義的資料。
具體的分析實操留待下一篇文章講解,感興趣的同學可以自行下載,和網頁日誌放一起了。
行為資料不是百分百準確的,採集使用者行為,也會有丟失和缺漏的情況發生。這裡不建議重要的統計口徑走埋點邏輯,比如支付,口徑缺失問題會讓人很抓狂的,相關統計還是依賴支付介面計算。支付相關的埋點僅做分析就行。
APP行為資料往往涉及到大資料架構,哪怕10萬DAU的一款產品,使用者在產品上的操作,也會包含數十個乃至上百的操作行為,這些行為都需要準確上報並落到報表,對技術架構是一個較大的挑戰。而行為資料的加工處理,也並不是mysql就能應付,往往需要分散式計算。
對資料來源的使用方,產品運營及分析師,會帶來一個取捨問題。如果我只想知道點贊和分享數,那麼通過api或者生產庫也能知道,是否需要細緻到行為層面?這便是一個收益的考量。
當然啦,我個人還是挺建議對分析有興趣的同學,去能接觸到使用者行為資料的公司去學習。
業務資料
業務資料是生產環境提供的,我們在APP端獲得了使用者user_id,文章或商品的item_id,乃至支付order_id,但它們只和使用者的行為有關。換句話說,我並不知道user_id是什麼樣的使用者。
是男是女,芳齡幾何?出生籍貫,從哪裡來?這些人口統計學的資訊必然不會在行為埋點中包含。商品內容訂單也是同理。
單依靠埋點的行為資料,我們並不能準確描述什麼樣的使用者做了事情,也不知道對什麼樣的內容做了行為。描述性質的資料/維度是分析的價值所在。男女的行為差異,不同城市的使用者群體購買習慣,這才構成了分析和精細化的基礎。
業務資料和行為資料的結合,在資料層面上可以簡單理解為join。比如把使用者行為資料的user_id和存放使用者資訊的user_id進行關聯起來。形成如下:

上圖是簡化後的欄位。user_name和sex就是取自業務資料的使用者資訊,item_tag也是取自內容資訊表中的欄位,而event則來源於行為埋點。三者共同構成了,什麼樣的使用者who在什麼時候when對什麼樣的內容做了什麼事what。
簡單說,很多使用者行為的建模,就是拿各種資料組合在一起計算。用user_id的粒度聚合,你算得是這些使用者喜歡哪些文章,用item_id的粒度聚合,你算得是這篇文章被哪類使用者喜歡。它們都是你看待/分析事物的角度。
從更深的層面上說,行為資料也是可以再加工和利用的,它是構成使用者標籤的基礎。拿瀏覽行為資料說,我們設計了埋點,知道王二狗看了哪些型別的文章,

item_tag是文章型別,遊戲、娛樂、科技這類。有些使用者可能各種各樣的型別都喜歡,有些使用者的口味偏好則比較集中,產品上可以拿使用者偏好來代稱,這裡專指興趣的集中度。
現在取所有使用者的瀏覽資料,算它們在不同型別tag下的瀏覽分佈(上文提供的行為資料就可以計算,cate_id便是內容型別)。比如王二狗可能90%的瀏覽都是遊戲,10%是其他,那麼就可以認為王二狗的興趣集中度高。
這裡有一個很簡易的公式,1-sum(p^2),將所有內容類別的瀏覽佔比平方後相加,最終拿1減去,就算出了使用者興趣的集中程度了。我們拿案例簡單看下。

上圖的李二狗,他的興趣90%集中在遊戲,所以興趣集中度= 1 - (0.9*0.9+0.1*0.1)=0.18,李三妞的興趣稍微平均點,所以1-(0.5*0.5+0.5*0.5)=0.5,興趣集中度比王二狗高。趙四有三個興趣點,所以比李三妞稍微高一些,王五是均衡的,所以是四人中最高的。可能有同學疑問,興趣程度為什麼不用標準差算呢?它也是算波動偏離的呀,這是一個思考題,大家可以新加一個tag類別再算一下。
1-sum(p^2)是趨近於1的,有四個類別,一位均衡的使用者(四個都是0.25)是0.75的集中度,當有十個型別,一位均衡的使用者(四個都是0.1)是0.9的集中度。這種公式的好處就是興趣類別越多,集中度的上限越接近1,這是標準差比不了的。
這裡並沒有涉及太高深的數學模型,只是用了加減乘除,就能快速的計算出興趣的集中程度了。通過行為資料算出使用者興趣集中度,便能在分析場景中發揮自己的用武之地了,它是使用者畫像的基礎,以後有機會再深入講解。
外部資料可以分為兩個部分,一個是行業市場調研類的,一個是爬蟲抓取的,它們也能作為資料來源分析,比如站外熱點內容和站內熱點內容、競品對手商家表現和自己產品的商家,大家有機會應用的不多,就不多講了,我也不怎麼熟。
到這裡為止,文章主要講了使用者行為層面的資料是怎麼來的,更多是基礎概念的講解,下一篇文章會通過具體的資料教大家使用者行為分析的技巧。不過,因為資料來源於網上,資料的豐富程度還是欠缺了不少,說白了,業務場景比較弱,希望大家自己在工作中多思考。
————
歡迎關注我的個人公眾號:tracykanc