在介紹之前陈莽,首先感謝組內(nèi)小伙伴提供的資料,讓我有機(jī)會(huì)學(xué)習(xí)虽抄,得到自己的理解走搁,如果有理解不對(duì)的地方或者有更好的解決方案以及想法,歡迎一起交流迈窟,感激不盡
ACM介紹
"ACM"是蘑菇街算法數(shù)據(jù)流的總稱私植,主要包含四個(gè)模塊:埋點(diǎn)模塊、ab實(shí)驗(yàn)?zāi)K车酣、數(shù)據(jù)清洗模塊曲稼、數(shù)據(jù)聚合模塊索绪,通過(guò)這四個(gè)模塊解決蘑菇街搜索(廣告與自然)、反作弊算法組同學(xué)的對(duì)各種數(shù)據(jù)收集贫悄、分析需求瑞驱,幫助算法同學(xué)迭代算法模型,提升算法效果的目的
Tips:ACM的名稱窄坦,參考了淘寶的打點(diǎn)參數(shù)SCM唤反;同時(shí)由于與ACM競(jìng)賽同名,也蘊(yùn)含了"算法"的意義鸭津。
ACM的發(fā)展史
2016.03 TOPN層改造彤侍,為每個(gè)商品增加ACM字段覆蓋所有圖墻(包括自然與廣告的類目、搜索)相關(guān)業(yè)務(wù)
|
2016.05 團(tuán)購(gòu)逆趋、推薦+麥田達(dá)爾文系統(tǒng)增加ACM字段覆蓋猜你喜歡等相關(guān)推薦業(yè)務(wù)盏阶,資源位相關(guān)業(yè)務(wù)
|
2016.07 蘑菇街PC店鋪內(nèi)圖墻、美麗說(shuō)闻书、淘世界經(jīng)過(guò)整合后與蘑菇街保持一致名斟,使用ACM打點(diǎn)方式,覆蓋到淘世界圖墻惠窄、美麗說(shuō)圖墻
|
2016.09 蘑菇街app店鋪內(nèi)圖墻蒸眠、快搶等業(yè)務(wù)加入ACM打點(diǎn)邏輯,同時(shí)蘑菇街魔方數(shù)據(jù)接入ACM打點(diǎn)數(shù)據(jù)杆融,ACM開(kāi)始進(jìn)入全站打點(diǎn)行列
|
......
ACM出現(xiàn)的背景
背景
對(duì)于算法策略組的同學(xué)經(jīng)常需要收集用戶的行為數(shù)據(jù)進(jìn)行算法模型的回歸楞卡,不斷的通過(guò)樣本數(shù)據(jù)來(lái)調(diào)參使得算法模型預(yù)測(cè)更加準(zhǔn)確,但是不同業(yè)務(wù)場(chǎng)景的算法模型需要篩選相關(guān)的樣本數(shù)據(jù)才會(huì)使得模型效果更佳脾歇,對(duì)于樣本數(shù)據(jù)的篩選過(guò)程對(duì)應(yīng)到日常流程大體需要經(jīng)過(guò)三個(gè)系統(tǒng)模塊:后端服務(wù)鏈路蒋腮、用戶行為追蹤鏈路、行為數(shù)據(jù)采集以及清洗鏈路藕各。后端服務(wù)鏈路,目前大部分的業(yè)務(wù)場(chǎng)景是3,4層:業(yè)務(wù)層,投放層,引擎層, 每個(gè)層涉及到的業(yè)務(wù)系統(tǒng)較分別對(duì)應(yīng)到很多不同的小團(tuán)隊(duì),每層鏈路之間要協(xié)商如何將數(shù)據(jù)進(jìn)行標(biāo)記和定義池摧。用戶行為追蹤鏈路也同樣涉及到很多業(yè)務(wù)團(tuán)隊(duì),如何約定規(guī)則以及對(duì)應(yīng)后端標(biāo)記數(shù)據(jù)傳遞到曝光、點(diǎn)擊激况、交易行為鏈路, 其中曝光行為的收集還存在一定的狀態(tài)作彤。后端采集鏈路需要大量的清洗工作、風(fēng)控環(huán)節(jié)乌逐、系統(tǒng)的高可用竭讳、實(shí)時(shí)性等這些之后從而完成算法訓(xùn)練階段的行為樣本數(shù)據(jù)的篩選。
算法數(shù)據(jù)流
從背景中我們了解到浙踢,數(shù)據(jù)大致會(huì)經(jīng)過(guò)三個(gè)系統(tǒng)模塊绢慢,這三個(gè)大的系統(tǒng)模塊中又包含了很多子服務(wù)層,下面我以服務(wù)層來(lái)描述一個(gè)完整的數(shù)據(jù)流轉(zhuǎn)圖洛波,如下:在數(shù)據(jù)流轉(zhuǎn)圖中骚露,在左邊的每一個(gè)層級(jí)都包含諸多子服務(wù),每個(gè)子服務(wù)在線上都會(huì)存在數(shù)據(jù)打點(diǎn)需求缚窿,比如對(duì)于“投放推薦層"來(lái)說(shuō)棘幸,主要有搜索和推薦兩條線,每條線都需要進(jìn)行數(shù)據(jù)源信息打點(diǎn)滨攻、算法同學(xué)的算法實(shí)驗(yàn)信息打點(diǎn)够话;“業(yè)務(wù)層”有針對(duì)各種業(yè)務(wù)信息的打點(diǎn);“前端”有一些針對(duì)UI策略AB的打點(diǎn)光绕。這些打點(diǎn)數(shù)據(jù)最終都會(huì)在前端進(jìn)行收集女嘲,然后通過(guò)統(tǒng)一的日志服務(wù)器收集后進(jìn)行各自的數(shù)據(jù)清洗和分析,這意味著在右邊的每一個(gè)層級(jí)诞帐,都會(huì)存在與左邊服務(wù)相對(duì)應(yīng)的清洗服務(wù)欣尼。
存在的問(wèn)題
從背景以及算法數(shù)據(jù)流中可以看出,數(shù)據(jù)的一次完整流轉(zhuǎn)流程停蕉,涉及到每一個(gè)環(huán)節(jié)的數(shù)據(jù)打點(diǎn)愕鼓,最終透出到頁(yè)面端,通過(guò)頁(yè)面端進(jìn)行數(shù)據(jù)收集慧起。而在缺乏ACM的情況下會(huì)存在以下問(wèn)題:
- 各個(gè)系統(tǒng)之間的打點(diǎn)方案不一致菇晃,導(dǎo)致后續(xù)對(duì)數(shù)據(jù)進(jìn)行清洗時(shí)存在多個(gè)邏輯
- 系統(tǒng)涉及透?jìng)麈溌吩介L(zhǎng),可靠性越差(特別是底層算法同學(xué)的打點(diǎn)數(shù)據(jù))
- 出現(xiàn)透?jìng)鲉?wèn)題時(shí)蚓挤,排查困難
- 相似工作在多個(gè)團(tuán)隊(duì)之間存在重復(fù)
舉個(gè)數(shù)據(jù)打點(diǎn)例子
打點(diǎn)需求1:
算法組的小q同學(xué)想要在數(shù)據(jù)流中增加一個(gè)打點(diǎn)參數(shù)A(位于投放推薦層)
做法:小q通知上游的業(yè)務(wù)層(投放層磺送、圖墻業(yè)務(wù)層、前端層)同學(xué)灿意,我要增加打點(diǎn)參數(shù)A估灿,你們處理數(shù)據(jù)的時(shí)候記得幫我透?jìng)饕幌? 實(shí)現(xiàn):業(yè)務(wù)層(投放層、圖墻業(yè)務(wù)層缤剧、前端層)同學(xué)吭吭哧哧改透?jìng)鬟壿嫶a
打點(diǎn)需求2:
投放組的小w同學(xué)想要在數(shù)據(jù)流中增加一個(gè)打點(diǎn)參數(shù)B
做法:小w通知下游的業(yè)務(wù)組馅袁、前端組同學(xué):我要增加打點(diǎn)參數(shù)B了,你們處理數(shù)據(jù)的時(shí)候記得幫我透?jìng)饕幌? 實(shí)現(xiàn):業(yè)務(wù)組荒辕、前端組的同學(xué)吭吭哧哧改透?jìng)鬟壿嫶a
打點(diǎn)需求XXX
汗销、、抵窒、弛针、
前端同學(xué):停!誰(shuí)再提打點(diǎn)的事我就從天臺(tái)跳下去估脆!
眾人:行行行钦奋,高處風(fēng)大座云,你先下來(lái)疙赠,都好說(shuō).....
ACM的目標(biāo)
初期目標(biāo)
主要解決算法訓(xùn)練數(shù)據(jù)的篩選以及統(tǒng)計(jì)困難問(wèn)題(服務(wù)算法策略同學(xué))
最終目標(biāo)(全站標(biāo)準(zhǔn)化)
- 承擔(dān)全站曝光打點(diǎn)的使命付材,通過(guò)統(tǒng)一數(shù)據(jù)鏈路來(lái)保障數(shù)據(jù)口徑一致
- 提高打點(diǎn)的準(zhǔn)確性以及可維護(hù)性
- 為算法策略&BI團(tuán)隊(duì)&數(shù)倉(cāng)提供可靠的數(shù)據(jù)鏈路
- 通過(guò)監(jiān)控快速發(fā)現(xiàn)并定位埋點(diǎn)丟失問(wèn)題
- 為整個(gè)數(shù)據(jù)鏈路提供相關(guān)通用服務(wù)(如算法數(shù)據(jù)源、ab報(bào)表圃阳、其他實(shí)時(shí)統(tǒng)計(jì)數(shù)據(jù))
ACM的實(shí)現(xiàn)方案
具體方案
在背景與目標(biāo)中厌衔,我們已經(jīng)了解到我們所面對(duì)的問(wèn)題以及我們需要達(dá)到的目標(biāo),所以具體的實(shí)現(xiàn)分為兩個(gè)階段:1捍岳、實(shí)現(xiàn)初期目標(biāo)富寿;2、在初期的基礎(chǔ)上锣夹,往全站標(biāo)準(zhǔn)化發(fā)展页徐。
一期主要完成一些基礎(chǔ)的功能模塊,以解決算法數(shù)據(jù)收集需求银萍。在ACM的介紹部分变勇,對(duì)各個(gè)模塊就有所提及,一共分為四大塊:acmSDK(埋點(diǎn))贴唇、ABTest(ab實(shí)驗(yàn)支持)搀绣、acmEtl(數(shù)據(jù)清洗)、acmAgg(數(shù)據(jù)聚合)戳气,按照各個(gè)模塊的性質(zhì)總的又分為兩個(gè)方面:1链患、在線部分(acmSDK、ABTest)瓶您;2麻捻、離線部分(acmEtl、acmAgg)
各部分解決的問(wèn)題(系統(tǒng)實(shí)現(xiàn)以后有機(jī)會(huì)補(bǔ)上)
acmSDK
1芯肤、提供統(tǒng)一的打點(diǎn)API,提供到各個(gè)有打點(diǎn)需求的業(yè)務(wù)系統(tǒng)(統(tǒng)一打點(diǎn)口徑)
2压鉴、統(tǒng)一打點(diǎn)數(shù)據(jù)格式(增加acm字段崖咨,作為透?jìng)鞔螯c(diǎn)數(shù)據(jù)的載體)
acm字段格式定義
版本.業(yè)務(wù)域.站點(diǎn)_內(nèi)容類型_內(nèi)容.資源位.實(shí)驗(yàn).簽名.自定義值
acm字段舉例
3.mce.1_4_1kdf96m.39084.30655-30653.qtIkXqnaRktq3.p_11_615935107-mid_39084-lc_201
abTest
1、為算法同學(xué)提供靈活的ab配置
2油吭、提供統(tǒng)一的ab配置管理平臺(tái)
acmEtl
1击蹲、按照acm字段的格式定義對(duì)數(shù)據(jù)進(jìn)行解析
2、按照不同的維度產(chǎn)出不同的數(shù)據(jù)表
acmAgg
1婉宰、按照不同的指標(biāo)對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)
2歌豺、報(bào)表產(chǎn)出
ACM上線后帶來(lái)的收益
ACM引入以后:
- 大幅度節(jié)省了算法組進(jìn)行數(shù)據(jù)分析時(shí),在打點(diǎn)心包、數(shù)據(jù)清洗工作上的投入
- 降低打點(diǎn)協(xié)商的成本类咧,去掉打點(diǎn)導(dǎo)致的全流程代碼變更,提升了全站的開(kāi)發(fā)效率
后端同學(xué):打點(diǎn)變得方便可靠,不再因?yàn)樵黾右粋€(gè)打點(diǎn)參數(shù)痕惋,而需要一一通知上下游了区宇。
前端同學(xué):按照ACM定義規(guī)則進(jìn)行單次開(kāi)發(fā),就不用為打點(diǎn)規(guī)則變更而頻繁修改代碼啦值戳!
兩個(gè)成功的案例:
案例說(shuō)明:
a.新品冷啟動(dòng)問(wèn)題(EE項(xiàng)目)
b.廣告輪詢出造成的問(wèn)題
案例a
新商品往往只能與常規(guī)商品共同展示议谷。但由于排序分的缺少,排序靠后堕虹,無(wú)法與常規(guī)商品競(jìng)爭(zhēng)流量卧晓。EE項(xiàng)目在保障不對(duì)用戶有過(guò)多體驗(yàn)傷害的前提下,針對(duì)新品
給予一定的曝光機(jī)會(huì)。通過(guò)曝光期用戶對(duì)該新品的一些行為數(shù)據(jù)赴捞,確定他是否具有成為爆款或者是具有較好發(fā)展前景逼裆。如果能夠進(jìn)入下一個(gè)階段就會(huì)基于更多
的展現(xiàn)機(jī)會(huì),否則進(jìn)行淘汰赦政。經(jīng)過(guò)第二個(gè)階段的商品通常會(huì)已經(jīng)進(jìn)行了一段時(shí)間的曝光,排序分也有了一定的提升波附,可以正常的納入到常規(guī)排序模型。形式表現(xiàn)
在圖墻上面對(duì)一小部分用戶做a/b,讓其看到的部分商品中包含一定的新品數(shù)量昼钻。這個(gè)過(guò)程我們需要標(biāo)記哪些商品是新品,需要將標(biāo)記傳遞到各個(gè)行為,收集完成
針對(duì)性的訓(xùn)練掸屡。
案例b
在某些查詢條件下,廣告數(shù)量有限為了不影響廣告的收入,我們需要將展現(xiàn)過(guò)的商品重新展現(xiàn)然评。但是首次看到商品點(diǎn)擊意愿度和第二次看到點(diǎn)擊的意愿度是不一
樣的仅财,此時(shí)不能用相同的分析策略去處理兩類點(diǎn)擊行為。為了分析這種場(chǎng)景下的用戶行為碗淌,我們需要對(duì)廣告出現(xiàn)的次數(shù)進(jìn)行標(biāo)記盏求。
ACM需要注意的問(wèn)題
1、acm格式的定義需要在擴(kuò)展性上有足夠的考慮亿眠。從整個(gè)方案中可以看出acm字段格式雖然由acmSDK統(tǒng)一管控碎罚,但是分布面很廣,因此升級(jí)acm字段的格式代價(jià)是很大的纳像,從在線部分的改動(dòng)升級(jí)荆烈,到線上多個(gè)版本共存離線部分處理的兼容,工作量都很大竟趾,稍不注意就會(huì)帶來(lái)大面積的ACM問(wèn)題
2憔购、ACM的穩(wěn)定性需要得到很好的保障,在ACM前期上線后岔帽,經(jīng)常出現(xiàn)數(shù)據(jù)問(wèn)題玫鸟,導(dǎo)致算法訓(xùn)練是數(shù)據(jù)不可用
3、自定義值的管控犀勒,一是ACM使用者眾多屎飘,缺少自定義值的管控是非常危險(xiǎn)的妥曲,很容易導(dǎo)致acm字段值的長(zhǎng)度暴增,二是各個(gè)層級(jí)之間的擴(kuò)展參數(shù)名可能會(huì)存在重復(fù)的情況钦购,不妥善管理則會(huì)存在覆蓋問(wèn)題逾一,導(dǎo)致字段值丟失
4、在線部分埋點(diǎn)需要進(jìn)行監(jiān)控肮雨,能及時(shí)發(fā)現(xiàn)以及定位問(wèn)題(對(duì)于跨多級(jí)的長(zhǎng)鏈路中,缺少必要信息的情況下查詢問(wèn)題是一件苦惱的事)
5箱玷、acm字段最好能記錄整個(gè)后端到前端所經(jīng)過(guò)的鏈路怨规,對(duì)后續(xù)問(wèn)題查詢很有幫助