2023-06-28 08:57:43來(lái)源:DataFunTalk
常見的數(shù)據(jù)分析就是對(duì)業(yè)務(wù)數(shù)據(jù)或者行為數(shù)據(jù)進(jìn)行分析和管理。
(資料圖片僅供參考)
業(yè)務(wù)數(shù)據(jù)主要是指用戶行為發(fā)生之后,實(shí)際產(chǎn)生的結(jié)果,我們使用數(shù)倉(cāng)建模來(lái)給業(yè)務(wù)提供指標(biāo),從而指導(dǎo)業(yè)務(wù)進(jìn)行一些正向的操作或者修改之前的一些操作。行為數(shù)據(jù)主要是指用戶使用產(chǎn)品上的各種行為,我們可以對(duì)面向行為分析的數(shù)據(jù)進(jìn)行加工和分析,從用戶的行為中推導(dǎo)出來(lái)到底是哪些環(huán)節(jié)沒有做好,從而調(diào)整和優(yōu)化這些環(huán)節(jié)。
二、數(shù)倉(cāng)建模方法在引入行為分析方法之前,先介紹一下數(shù)倉(cāng)建模的方法。
數(shù)倉(cāng)建模方法主要流程如下:
用戶空間:以音樂播放為例,用戶在APP上的操作會(huì)產(chǎn)生行為日志,比如廣告請(qǐng)求、曝光、點(diǎn)擊,APP打開、用戶注冊(cè)和播放、下載歌曲等操作日志。數(shù)倉(cāng)建模:我們將用戶的行為日志采集過(guò)來(lái),形成ODS、DWD層的表,再往后是各個(gè)主題表。不同業(yè)務(wù)團(tuán)隊(duì)會(huì)創(chuàng)建自己的業(yè)務(wù)寬表,從用戶空間中抽取感興趣的事件放到各自的主題業(yè)務(wù)寬表中。主題應(yīng)用:再往下是這些主題寬表所支撐的業(yè)務(wù),比如報(bào)表建設(shè)、特征挖掘、機(jī)器學(xué)習(xí)、OneID系統(tǒng)建設(shè)等等,最終為增長(zhǎng)團(tuán)隊(duì)、經(jīng)營(yíng)團(tuán)隊(duì)和產(chǎn)品團(tuán)隊(duì)等提供支持。三、數(shù)倉(cāng)建模方法的優(yōu)劣勢(shì)1、優(yōu)勢(shì)方法論成熟 : 已經(jīng)在無(wú)數(shù)的公司中被驗(yàn)證過(guò),更有像《阿里巴巴大數(shù)據(jù)實(shí)踐》《Building The Data Warehouse》 等優(yōu)秀的指導(dǎo)書籍。技術(shù)棧成熟:無(wú)論是從消息中間件、數(shù)據(jù)ETL管路,數(shù)據(jù)湖、數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)集市的各種選型等,工業(yè)界已經(jīng)誕生了無(wú)數(shù)優(yōu)秀的框架和數(shù)據(jù)庫(kù)。l技術(shù)供應(yīng)商支持完善:Google,Amazon,Microsoft,阿里云,騰訊云等供應(yīng)都提供幾乎一站式的服務(wù)。技術(shù)人才供給: 各個(gè)互聯(lián)網(wǎng)公司都有數(shù)據(jù)倉(cāng)庫(kù)建模的需求,人才供應(yīng)充分,培養(yǎng)體系完備。公司推動(dòng)阻力小: 數(shù)倉(cāng)的重要性經(jīng)歷了充分的市場(chǎng)教育,推動(dòng)起來(lái)會(huì)比較順暢,投入產(chǎn)出比也比較好闡述。應(yīng)用場(chǎng)景:適合指標(biāo)類的多維分析數(shù)據(jù)運(yùn)算。2、劣勢(shì)建設(shè)鏈條長(zhǎng): 數(shù)據(jù)采集->ODS->DWD->DWT->數(shù)據(jù)報(bào)表和應(yīng)用。數(shù)據(jù)一致性保證有挑戰(zhàn):不同數(shù)據(jù)主題之間會(huì)有指標(biāo)和字段的重合,在工程和業(yè)務(wù)之間,不同的工程團(tuán)隊(duì)之間都可能造成理解的偏差。擴(kuò)展字段流程復(fù)雜:表結(jié)構(gòu)需要預(yù)先定義, 擴(kuò)展新字段往往需要較長(zhǎng)的開發(fā)周期和回溯數(shù)據(jù)周期。工程實(shí)現(xiàn)很難統(tǒng)一: 架構(gòu)評(píng)估往往取決于承接的工程團(tuán)隊(duì)的過(guò)往經(jīng)驗(yàn)和喜好,同樣需求的實(shí)現(xiàn)差異較大。不適合時(shí)序行為數(shù)據(jù)分析:因?yàn)樾枰凑沼脩艟S度shuffle和開窗,用戶行為分析往往比較耗資源。預(yù)聚合不夠靈活:當(dāng)維度不能命中預(yù)聚合的維度時(shí),查詢會(huì)退化成全表聚合。四、面向行為分析的分析方法-概念基于以上數(shù)倉(cāng)建模的優(yōu)缺點(diǎn),我們需要對(duì)行為數(shù)據(jù)進(jìn)行一些不一樣的抽象,用一些不一樣的查詢方式來(lái)解決面向用戶行為數(shù)據(jù)的問(wèn)題。首先來(lái)介紹一些概念:
用戶空間:和數(shù)倉(cāng)建模一樣,這部分不變。用戶事件序列:和數(shù)倉(cāng)建模方式不同,我們這里不將用戶的行為日志抽象到ODS、DWD層,在這里將行為日志數(shù)據(jù)抽象成用戶事件序列,比如對(duì)于播放歌曲事件會(huì)包含用戶屬性和事件屬性,用戶屬性回答誰(shuí)在什么樣的設(shè)備上這個(gè)問(wèn)題,事件屬性回答這個(gè)人主要做了什么事, 這個(gè)事我怎么去描述它。對(duì)于所有事件,我們都可以用這兩種類型的元數(shù)據(jù)來(lái)描述這個(gè)事件,在一個(gè)時(shí)間軸上串起來(lái),就可以知道這件事是誰(shuí)做的,以及做了這件事后發(fā)生了什么。事件抽象:有了用戶序列的抽象,我們可以聚焦一下,看某個(gè)人在某個(gè)具體事件序列上的抽象。比如圖中會(huì)員升級(jí)的例子。用戶群計(jì)算:有了事件抽象之后,最重要的就是我們?cè)趺词褂眠@些數(shù)據(jù),我們可以利用這些數(shù)據(jù)來(lái)獲取新增用戶群、活躍用戶群以及滿足X條件的用戶群等等。如上圖所示,以7日Android用戶的留存率為例,左邊是傳統(tǒng)數(shù)倉(cāng)的解決方案,右邊是行為分析的解決方案。
傳統(tǒng)數(shù)倉(cāng)的解決方案:主要是寫一個(gè)SQL來(lái)看7天前的新增用戶在今天的活躍用戶中是否有,如果有的話,7天的新增用戶作為分母,今天的活躍用戶作為分子,除出來(lái)一個(gè)比例計(jì)算留存率。但是可能在數(shù)倉(cāng)里面,一條記錄并不是用用戶的ID來(lái)劃分的,所以最終想要計(jì)算出用戶ID的結(jié)果會(huì)有一個(gè)shuffle、關(guān)聯(lián)、數(shù)據(jù)傾斜的過(guò)程,這都是在傳統(tǒng)輸出解決方案當(dāng)中我們需要去考慮的一些點(diǎn)。行為分析的解決方案:這是另外一種簡(jiǎn)化的計(jì)算用戶留存的方式,本質(zhì)上是在圖中的三個(gè)圈圈選的用戶中做計(jì)算,三個(gè)圈的交集就是7天前的新增用戶在今日活躍用戶中的比例。我們將復(fù)雜留存SQL轉(zhuǎn)成了三個(gè)用戶群之間并集和交集的計(jì)算。所以我們現(xiàn)在已經(jīng)有了兩層抽象,對(duì)于數(shù)據(jù)的抽象,是用時(shí)間線排進(jìn)來(lái)的一個(gè)個(gè)的事件,對(duì)于計(jì)算的抽象,是把一個(gè)查詢拆解成一個(gè)個(gè)用戶群的計(jì)算,再根據(jù)計(jì)算的結(jié)果回答我們一個(gè)個(gè)關(guān)于用戶群相關(guān)的問(wèn)題。
五、面向行為分析的分析方法-整體架構(gòu)下面是面向行為數(shù)據(jù)分析的整體架構(gòu)(該架構(gòu)可供參考,但并非唯一解)。
從下往上看,最下面是數(shù)據(jù)的存儲(chǔ),采用列式存儲(chǔ),并在其中應(yīng)用一些對(duì)用戶群更友好的技術(shù),從而減少數(shù)據(jù)的加載量和分發(fā)量。往上是文件元數(shù)據(jù)/列元數(shù)據(jù)。再上面是用戶數(shù)據(jù)訪問(wèn)層,本質(zhì)上就是計(jì)算層。IDMapping層主要解決不同ID對(duì)應(yīng)同一用戶的問(wèn)題。查詢緩存層、查詢結(jié)果聚合層,以及最上面的查詢接入層,都是為了提高查詢效率。
下圖是對(duì)于7日的Android用戶留存率,在面向行為數(shù)據(jù)分析的架構(gòu)中的實(shí)現(xiàn)過(guò)程抽象:
接下來(lái)是對(duì)于面向行為數(shù)據(jù)分析架構(gòu)中關(guān)鍵節(jié)點(diǎn)的介紹。
1、列存儲(chǔ)首先介紹我們自定義的列存儲(chǔ)。我們沒有使用ORC、Parquet這些列存儲(chǔ)格式,主要是因?yàn)镺RC、Parquet格式不會(huì)對(duì)用戶存儲(chǔ)做一些自定義的優(yōu)化,市面上的Druid、HBase也是為了加速數(shù)據(jù)訪問(wèn)引用了很多的組件。對(duì)于特定的場(chǎng)景,我們可以把更多的組件應(yīng)用過(guò)來(lái),比如說(shuō)BloomFilter(布隆過(guò)濾器),目的是快速判斷一個(gè)用戶是否在當(dāng)前文件中,因?yàn)槲覀兯械牟樵兤鋵?shí)都是面向用戶ID的。還有Delta encoding(差分編碼),用來(lái)對(duì)時(shí)間格式進(jìn)行存儲(chǔ),減少時(shí)間戳的存儲(chǔ)體積。
2、元數(shù)據(jù)列存儲(chǔ)再往上一層就是元數(shù)據(jù)。首先是文件元數(shù)據(jù)。文件的第一級(jí)索引是按時(shí)間的,而時(shí)間是動(dòng)態(tài)的,因?yàn)橛脩舻幕钴S時(shí)間可能是在晚上或者中午的休息時(shí)間,凌晨可能用戶并不活躍。這就導(dǎo)致我們文件中存儲(chǔ)的用戶數(shù)據(jù)在時(shí)間上不是平均分配的,比如想要查詢凌晨1點(diǎn)到早上9點(diǎn)的數(shù)據(jù),有可能需要訪問(wèn)多個(gè)文件。這個(gè)時(shí)候我們需要知道應(yīng)該在動(dòng)態(tài)時(shí)間切片文件中訪問(wèn)哪些文件。因此我們就需要一個(gè)元數(shù)據(jù)的管理,基于查詢的起止時(shí)間,找出存儲(chǔ)的位置,這樣可以確保每個(gè)文件存儲(chǔ)的大小是相近的,盡可能減少數(shù)據(jù)計(jì)算過(guò)程中的數(shù)據(jù)偏移。
其次是列元數(shù)據(jù)。我們查詢的時(shí)候并不是要把所有的列都加載進(jìn)來(lái),計(jì)算的時(shí)候只加載文件中對(duì)應(yīng)偏移量的列數(shù)據(jù),這樣可以減少網(wǎng)絡(luò)傳輸?shù)拈_銷、磁盤IO和內(nèi)存使用量。
3、OneIDOneID的建設(shè)在每家公司是不一樣的,但本質(zhì)上都是用來(lái)追蹤用戶的設(shè)備變化,還原用戶事件的最真實(shí)狀態(tài),進(jìn)而提供IDMapping、ID Encoding的能力。
4、緩存層緩存層主要是對(duì)以前訪問(wèn)數(shù)據(jù)的緩存,加速訪問(wèn)。緩存key中有時(shí)間的版本號(hào),數(shù)據(jù)可能會(huì)因?yàn)榛靥畹仍蛞胄聰?shù)據(jù),通過(guò)時(shí)間版本號(hào)的方式可以自動(dòng)刷新緩存。
5、用戶數(shù)據(jù)訪問(wèn)層用戶數(shù)據(jù)訪問(wèn)層包括數(shù)據(jù)的聚合層、用戶群算子層以及元數(shù)據(jù)管理和底層時(shí)序數(shù)據(jù)的加載。首先,用戶請(qǐng)求會(huì)包含時(shí)間范圍、過(guò)濾條件、用戶群聚合條件等;第二步,根據(jù)用戶請(qǐng)求,請(qǐng)求元數(shù)據(jù),確定要訪問(wèn)的文件和列在哪里;第三步,知道了數(shù)據(jù)在哪后,加載數(shù)據(jù)到計(jì)算節(jié)點(diǎn),并緩存到本地;第四步,用戶分區(qū)計(jì)算,最大化并行查詢效果;最后,進(jìn)行聚合計(jì)算。
通過(guò)以上架構(gòu),我們希望在查詢時(shí),只去加載最低密度的數(shù)據(jù),在不同節(jié)點(diǎn)之間通訊時(shí)只去通訊最必要的用戶群的bit數(shù)組,最終也是通過(guò)bit運(yùn)算的方式返回,再通過(guò)OneID將bit數(shù)組還原成所關(guān)心的用戶群的一個(gè)詳細(xì)的描述。
六、面向行為分析的分析方法-分析舉例下面是行為分析的幾個(gè)例子。
首先是用戶留存分析。
上圖中包含了7月29日至8月8日(第5天到第10天)之間的留存率。對(duì)于行,只需要計(jì)算7月29日至8月8日之間每天的新增用戶。對(duì)于列,只需要計(jì)算行時(shí)間+偏移量的活躍用戶數(shù)。而整個(gè)表格的計(jì)算就是對(duì)兩個(gè)用戶群進(jìn)行邏輯與。這樣就把表格的計(jì)算拆成了一個(gè)個(gè)單元格的獨(dú)立的計(jì)算,每一個(gè)獨(dú)立的計(jì)算都可以通過(guò)預(yù)計(jì)算保存在緩存中,還可以通過(guò)一些好的用戶交互方式,實(shí)現(xiàn)自助的留存率分析。
第二個(gè)常用的分析是漏斗分析。比如分析做了播放的用戶中,有多少進(jìn)行了收藏,收藏的用戶又有多少進(jìn)行了購(gòu)買,購(gòu)買的用戶中有多少下載了歌曲。漏斗分析又有時(shí)序嚴(yán)格和非嚴(yán)格之分。時(shí)序嚴(yán)格的轉(zhuǎn)化漏斗,必須是發(fā)生在時(shí)序嚴(yán)格遞增的場(chǎng)景下,同一個(gè)session內(nèi),一定是先播放,再收藏,再購(gòu)買,最后下載。非時(shí)序嚴(yán)格的轉(zhuǎn)化漏斗常用來(lái)進(jìn)行趨勢(shì)分析,有可能先購(gòu)買再播放。對(duì)于非時(shí)序嚴(yán)格的轉(zhuǎn)化漏斗,采用垂直切,我們只需要去分別計(jì)算每一個(gè)事件的用戶群,再做與關(guān)系。時(shí)序嚴(yán)格的轉(zhuǎn)化漏斗,要采用水平切,計(jì)算一個(gè)session內(nèi)既播放,又收藏,購(gòu)買并且下載了的用戶群,再用搭積木的方式計(jì)算出來(lái)。
第三個(gè)分析的例子是路徑分析。常用于某個(gè)業(yè)務(wù)指標(biāo)轉(zhuǎn)化不好時(shí)進(jìn)行分析。首先定義事件的入度和出度,也就是一個(gè)事件的前一個(gè)和后一個(gè)事件。計(jì)算采用深度遍歷的方式。
關(guān)鍵詞:
一、常見的數(shù)據(jù)分析場(chǎng)景常見的數(shù)據(jù)分析就是對(duì)業(yè)務(wù)數(shù)據(jù)或者行為數(shù)據(jù)進(jìn)行
6月28日消息,埃隆·馬斯克(ElonMusk)表示,特斯拉的自動(dòng)駕駛技術(shù)“意
前言你見過(guò)斷點(diǎn)+內(nèi)存映射,制造了一個(gè)另類隱藏極深,強(qiáng)悍的BUG嗎?這是
1背景介紹1 1要解決什么問(wèn)題系統(tǒng)文檔是當(dāng)前對(duì)業(yè)務(wù)系統(tǒng)知識(shí)進(jìn)行沉淀的主
Python模塊是Python代碼的組織單位,可以包含變量、函數(shù)、類和其他Pyth
薪資專家BobbyMarks在今日的《NBAToday》節(jié)目中談到了湖人隊(duì)接下來(lái)的情
定增方案披露后僅一夜,杭州銀行(600926 SH)就將計(jì)劃的募資規(guī)模大幅
1、《我是歌手》第三集譚維維強(qiáng)勢(shì)踢館,本來(lái)挺高興的事情,但是她的經(jīng)
中新網(wǎng)6月28日電(中新財(cái)經(jīng)葛成)6月28日24時(shí),國(guó)內(nèi)新一輪成品油調(diào)價(jià)窗口
一般說(shuō)來(lái),過(guò)期合同即合同期限屆滿,一般合同就終止了,但是在買賣合同
今天小紅來(lái)為大家?guī)?lái)的是蜜桃烏龍茶做法,蜜桃烏龍,讓我們一起往下看
6月27日,國(guó)泰金鷹增長(zhǎng)混合最新單位凈值為1 3685元,累計(jì)凈值為5 2933
紅單分別是:?jiǎn)螕?jù)、清代納稅的單據(jù)。指UPS國(guó)際快遞在郵寄包裹時(shí),填寫
6月27日,21世紀(jì)經(jīng)濟(jì)報(bào)道記者從建行獲悉,當(dāng)日廣州海關(guān)、長(zhǎng)沙海關(guān)及建
中新網(wǎng)成都6月27日電 (杜成)人民銀行成都分行27日下午召開的新聞發(fā)