




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Alibaba
天池實(shí)踐手冊(cè)
刖百
本手冊(cè)從天池選手的角度出發(fā),通過具體的案例場(chǎng)景引導(dǎo)用戶使用御膳房平臺(tái)進(jìn)行數(shù)據(jù)開發(fā)、數(shù)據(jù)
建模以及預(yù)測(cè)。
本手冊(cè)將從以下幾個(gè)步驟來描述如何使用御膳房進(jìn)行數(shù)據(jù)分析和建模:
?課題介紹
?環(huán)境和賬號(hào)
?獲取數(shù)據(jù)
?實(shí)現(xiàn)步驟
由于是基于特定案例引導(dǎo),本文展示的僅僅是ODPS和算法功能的冰山一角。關(guān)于詳細(xì)的ODPS
和算法功能,可以通過在線幫助手冊(cè)了解更多。
請(qǐng)參考ODPS在線幫助手冊(cè)。主要參考模塊:根本介紹、常用命令、SQL語法,MR語法。
關(guān)于MR的使用和配置方法請(qǐng)參考御膳房用戶手冊(cè)。
內(nèi)容
前言I
內(nèi)容II
1課題介紹1
1.1課題介紹錯(cuò)誤!未定義書簽。
數(shù)據(jù)說明1
輸出要求2
評(píng)估指標(biāo)3
1.2解題思路3
2環(huán)境、賬號(hào)4
2.1登錄御膳房錯(cuò)誤!未定義書簽。
3獲取數(shù)據(jù)5
3.1工程首頁5
3.2查看數(shù)據(jù)5
4實(shí)現(xiàn)步驟6
4.1數(shù)據(jù)開發(fā)平臺(tái)的使用(以下也稱IDE)7
準(zhǔn)備工作7
數(shù)據(jù)分析8
特征工程14
4.2PAI平臺(tái)29
PAI簡(jiǎn)介29
數(shù)據(jù)抽樣29
建模和評(píng)估32
PAI命令及模型同步36
線上測(cè)試集的訓(xùn)練和預(yù)測(cè)36
名詞解釋37
修訂歷史38
1課題介紹
1.1背景
隨著移動(dòng)電商業(yè)務(wù)的快速開展,用戶對(duì)移動(dòng)端網(wǎng)絡(luò)的訪問是隨時(shí)隨地的,具有更豐富
的場(chǎng)景數(shù)據(jù)。如何在這些巨大的信息數(shù)據(jù)中快速挖掘出對(duì)我們有用的信息已成為當(dāng)前
急需解決的問題。
對(duì)于移動(dòng)電商來說,可以運(yùn)用這些有用的信息以及個(gè)性化技術(shù)的手段,對(duì)用戶進(jìn)行一
系列的個(gè)性化推薦,幫助用戶從這些網(wǎng)絡(luò)過量的信息里面篩出他所需要的信息,提升
移動(dòng)端用戶的用戶體驗(yàn),提升個(gè)性化推薦引導(dǎo)的成交率,從而到達(dá)精準(zhǔn)營(yíng)銷(Precision
marketing)的目的。
如下是一個(gè)簡(jiǎn)單的個(gè)性化推薦的流程:
1.2課題介紹
本課題以阿里巴巴移動(dòng)電商平臺(tái)的真實(shí)用戶-商品行為數(shù)據(jù)為根底,同時(shí)提供移動(dòng)時(shí)代
特有的位置信息。您需要通過大數(shù)據(jù)和算法構(gòu)建面向移動(dòng)電子商務(wù)的商品推薦模型,
挖掘數(shù)據(jù)背后豐富的內(nèi)涵,為移動(dòng)用戶在適宜的時(shí)間、適宜的地點(diǎn)精準(zhǔn)推薦適宜的內(nèi)
容。
在真實(shí)的業(yè)務(wù)場(chǎng)景下,我們往往需要對(duì)所有商品的一個(gè)子集構(gòu)建個(gè)性化推薦模型。在
完成這件任務(wù)的過程中,我們不僅需要利用用戶在這個(gè)商品子集上的行為數(shù)據(jù),往往
還需要利用更豐富的用戶行為數(shù)據(jù)。
如下是一個(gè)真實(shí)的業(yè)務(wù)場(chǎng)景:
給出一定量用戶在時(shí)間段11月18日~12月18H內(nèi)的移動(dòng)端行為數(shù)據(jù)(D),
需要預(yù)測(cè)12月19日用戶對(duì)商品子集(P)的購(gòu)置數(shù)據(jù)。具體的數(shù)據(jù)說明下面將會(huì)詳
細(xì)介紹。
1.2.1數(shù)據(jù)說明
提供的數(shù)據(jù)包含兩個(gè)局部。第一局部是用戶在商品全集上的移動(dòng)端行為數(shù)據(jù)(D),
表名為tianchi_mobile_recommend_train_user,包含如下字段:
字段字段說明提取說明
userjd用戶標(biāo)識(shí)抽樣&字段脫敏
itemjd商品標(biāo)識(shí)字段脫敏
behaviorjype用戶對(duì)商品的行為類型包括瀏覽、收藏、加購(gòu)物車、購(gòu)
置,對(duì)應(yīng)取值分別是1、2、3、4o
user_geohash用戶位置的空間標(biāo)識(shí),可以為空由經(jīng)緯度通過保密的算法生成
item_category商品分類標(biāo)識(shí)字段脫敏
Time行為時(shí)間精確到小時(shí)級(jí)別
D集合的記錄顯示如下:
每一行代表了用戶userjd對(duì)屬于分類item_catsgory的物品itemjd在time這個(gè)
時(shí)間于地點(diǎn)user_geohash發(fā)生了交互,交互類型是behavio「_lype。
behaviorjype包括瀏覽、收藏、加購(gòu)物車、購(gòu)置,對(duì)應(yīng)取值分別是1、2、3、4。
給出的一共包含31天的交G數(shù)據(jù),最后要預(yù)測(cè)第32天有哪些user會(huì)購(gòu)置哪些計(jì)em。
第二個(gè)局部是商品『集(P),表名為tianchi_mobile_recommend_train_item,包含
如下字段:
字段字段說明提取說明
itemjd商品標(biāo)識(shí)抽樣&字段脫敏
item_geohash商品位置的空間標(biāo)識(shí),可以為空由經(jīng)緯度通過保密的算法生成
item_category商品分類標(biāo)識(shí)字段脫敏
這局部的數(shù)據(jù),&tianchi_mobile_recommend_train_user表中出現(xiàn)的物品itemid
的?個(gè)子集。官方的第32天的會(huì)發(fā)生購(gòu)置的user,item中的item都是這個(gè)數(shù)據(jù)表中
的item,所以我們預(yù)測(cè)的user,item需要根據(jù)這人文件來過濾掉一些結(jié)果。
訓(xùn)練數(shù)據(jù)包含了抽樣出來的一定量用戶在一個(gè)月時(shí)間(11.18-12.18)之內(nèi)的移動(dòng)端
行為數(shù)據(jù)(D),評(píng)分?jǐn)?shù)據(jù)是這些用戶在這個(gè)一個(gè)月之后的一天(12.19)對(duì)商品子集
(P)的購(gòu)置數(shù)據(jù)。您需要使用訓(xùn)練數(shù)據(jù)建立推薦模型,并輸出用戶在接下來一天對(duì)
商品子集購(gòu)置行為的預(yù)測(cè)結(jié)果。
1.2.2輸出要求
完成用戶對(duì)商品子集p的購(gòu)置預(yù)測(cè)之后,需要將結(jié)果放入指定格式的數(shù)據(jù)表(非分區(qū)
表)中,要求結(jié)果表名為:tianchi_mobile_recommendation_predict,包含userjd
和itemjd兩列(均為string類型),要求去除重復(fù)。
表名:tianchi_mobile_recommendation_predict
結(jié)果表樣例:
字段字段類型例如
UserjdString100001
ItemjdString12900
1.2.3評(píng)估指標(biāo)
比賽采用經(jīng)典的精確度(precision)、召回率(recall)和F1值作為評(píng)估指標(biāo)。具體計(jì)算
公式如下:
其中PredictionSet為算法預(yù)測(cè)的購(gòu)置數(shù)據(jù)集合,ReferenceSet為真實(shí)的答案購(gòu)置數(shù)
據(jù)集合。我們以F1值作為最終的唯一評(píng)測(cè)標(biāo)準(zhǔn)。
1.3解題思路
顯然,該問題可以轉(zhuǎn)為一個(gè)二分類問題:某個(gè)用戶對(duì)某個(gè)商品是否會(huì)購(gòu)置?
?分類方法:二分類
最終只有兩種結(jié)果:1:購(gòu)置:o:不購(gòu)置
?樣本選取
樣本選取一〉有交互(即:用戶對(duì)商品有行為,包括瀏覽、收藏、力II購(gòu)、購(gòu)置)的P
子集。
分析在哪一天交互的樣本可能會(huì)在19號(hào)購(gòu)置?16號(hào),17號(hào),18號(hào)?
可以基于18號(hào)的購(gòu)置數(shù)據(jù),分析16、17號(hào)的行為數(shù)據(jù)在18號(hào)購(gòu)置的概率。
?特征
分析什么樣的用戶在什么時(shí)候?qū)κ裁礃拥纳唐酚羞^什么樣的操作之后,可能會(huì)在19
號(hào)購(gòu)置?比方:是否曾經(jīng)買過?商品銷量?加購(gòu)物車?
?模型
分類、回歸。如LR、RF、GBDT等。
下面我們將圍繞這個(gè)課題,描述如何在御膳房平臺(tái)完成一系列的實(shí)現(xiàn)步驟。
2環(huán)境&賬號(hào)
1)登錄御膳房首頁。點(diǎn)擊右上角的〈登錄,,輸入已經(jīng)注冊(cè)好的淘寶、阿里云賬號(hào),如
下列圖所示:
圖1御略房登錄界面
注:
?如果您還沒有淘寶賬號(hào)或者阿里云賬號(hào),可以在上圖點(diǎn)擊〈注冊(cè)淘寶賬號(hào),或〈注
冊(cè)阿里云賬號(hào)》完成注冊(cè)。
?如果已經(jīng)注冊(cè),也可以使用號(hào)碼或郵箱登錄。
2)填寫注冊(cè)信息。
首次登錄,需填寫注冊(cè)信息。
單擊〈登錄〉,頁面跳轉(zhuǎn)到用戶信息注冊(cè)頁面。請(qǐng)使用真實(shí)信息,完成所有必鎮(zhèn)工程
(號(hào)、Email、聯(lián)系人為必填項(xiàng),注:號(hào)應(yīng)與淘寶賬號(hào)綁定),閱讀并勾選“同
意御膳房協(xié)議”。
圖2用戶信息注冊(cè)
3)點(diǎn)擊〈下一步》后,您的賬號(hào)已經(jīng)完成了在御膳房的注冊(cè)。
3獲取數(shù)據(jù)
當(dāng)用戶登錄后,即可進(jìn)入天池大賽授予的特定工程,進(jìn)行數(shù)據(jù)開發(fā)/處理/建模工作。
下面我們先來看看如何獲取和查看數(shù)據(jù)。
3.1工程首頁
可以從兩個(gè)入口進(jìn)入“工程〃。
1)點(diǎn)擊[御膳房->數(shù)據(jù)中心,工作臺(tái)],用戶可以在這個(gè)界面查看自己對(duì)應(yīng)的資產(chǎn),工
程名稱以及角色。點(diǎn)擊工程名,即可進(jìn)入工程。
圖3-進(jìn)入工程入口(1)
2)點(diǎn)擊[數(shù)據(jù)引擎,私有區(qū)],可以看到工程列表,點(diǎn)擊工程名稱后進(jìn)入工程。
圖4進(jìn)入工程入口(2)
圖5進(jìn)入工程入口(2)
3)進(jìn)入工程后,界面如下:
圖6進(jìn)入工程
3.2查看數(shù)據(jù)
1)進(jìn)入工程首頁后,點(diǎn)擊[工程數(shù)據(jù)-A數(shù)據(jù)資源,紐織內(nèi)申請(qǐng)的數(shù)據(jù)],即可查看組織
內(nèi)授權(quán)的表以及所屬工程(來源工程)信息:
圖7查看odps表
注:
在數(shù)據(jù)開發(fā)工作臺(tái)使用具體的表的時(shí)候,必須加上所屬工程前綴。如:用戶行為表
tianchi_mobile_recommend_train_user,查看到其所屬工程為tianchi_data,那么在
數(shù)據(jù)開發(fā)工作臺(tái)中引用時(shí),需這樣:tianchi_data.
tianchimobilerecommendtrainuser。
4實(shí)現(xiàn)步驟
接下來我們將介紹如何完成上述課題,主要包含以下幾個(gè)主要的步驟:
1)在數(shù)據(jù)開發(fā)平臺(tái)利用ODPSSQL進(jìn)行數(shù)據(jù)分析:
?統(tǒng)計(jì)總的用戶行為記錄
?統(tǒng)計(jì)所給數(shù)據(jù)中每天各種行為類型的記錄數(shù),了解每天會(huì)有多少瀏覽、收藏、加
購(gòu)、購(gòu)置,觀察是否有波動(dòng)。
?鎖定在P上有過交互的用戶行為。
?分析前一天加購(gòu)、收藏、瀏覽對(duì)后一天購(gòu)置的影響。取12/18為后一天,拿12/17
的數(shù)據(jù)來驗(yàn)證該設(shè)想。
?計(jì)算評(píng)估指標(biāo)。
?提交結(jié)果表。
2)特征工程:可以使用ODPSSQL進(jìn)行特征提取,也可以使用MR/UDF/GRAPH進(jìn)
行特征工程。這里主要介紹使用UDF進(jìn)行特征提取,MR/GRAPH的用法與之類似。
?Eclipse工具的下載和安裝
?新建工程(MavenProject)
?程序開發(fā)以及提交
?利用UDF在數(shù)據(jù)開發(fā)工作臺(tái)抽取特征,詳細(xì)步驟如下:
?樣本選?。海ㄕ龢颖荆┓謩e以2023/12/17的購(gòu)置,12/18的購(gòu)置來構(gòu)建驗(yàn)證集、
測(cè)試集。
?特征工程:利用已經(jīng)構(gòu)建的UDF函數(shù)來統(tǒng)計(jì)user-item對(duì)的點(diǎn)擊,收藏,力口購(gòu),
購(gòu)置次數(shù)。
?結(jié)合特征構(gòu)建驗(yàn)證集和測(cè)試集,包含訓(xùn)練和測(cè)試。
?檢查正負(fù)樣本比例。
?轉(zhuǎn)換特征的數(shù)據(jù)格式。
3)PAI平臺(tái)的使用
?數(shù)據(jù)抽樣
?負(fù)樣本抽樣1/15
?樣本合并
?建模和評(píng)估,包括:
?邏輯回歸
?隨機(jī)森林
?預(yù)測(cè)和評(píng)估
?PAI命令的執(zhí)行以及模型同步
?線上測(cè)試集的訓(xùn)練和預(yù)測(cè)
4.1數(shù)據(jù)開發(fā)平臺(tái)的使用(以下也稱IDE)
用戶在數(shù)據(jù)開發(fā)工作臺(tái)中以編寫和運(yùn)行基于ODPS的SQL、MapReduce.UDF和
Grapho
其中,SQL、MapReduc和UDF的編寫語法參考ODPS文檔,請(qǐng)點(diǎn)擊這里。
MapReduc.UDF卻Graph的配置請(qǐng)參考這里。
4.1.1準(zhǔn)備工作
1)進(jìn)入工程首頁:
圖8工程首頁
2)點(diǎn)擊“數(shù)據(jù)開發(fā)",即可進(jìn)入數(shù)據(jù)開發(fā)工作臺(tái):
圖9數(shù)據(jù)開發(fā)工作臺(tái)
為了方便管理代碼,可以新建一個(gè)文件夾,把自己的代碼都放在這個(gè)文件夾中(天池
歷屆比賽中,通常都是一個(gè)隊(duì)伍所有成員共享一個(gè)project)。
3)新建文件夾。
右鍵點(diǎn)擊“工作流”并點(diǎn)擊<+文件夾,,新增一個(gè)工作文件夾,輸入文件夾名稱,選擇
文件夾位置,提交即可,如:
圖10新建文件夾
4)新增工作流節(jié)點(diǎn)。
在數(shù)據(jù)開發(fā)工作臺(tái)左側(cè)導(dǎo)航選擇“數(shù)據(jù)開發(fā)”。
圖11數(shù)據(jù)開發(fā)圖標(biāo)
點(diǎn)擊圖標(biāo),選擇“工作流節(jié)點(diǎn)"。
圖12"+”圖標(biāo)
右鍵點(diǎn)擊文件夾,匕方“nj_work〃,并點(diǎn)擊v+工作流節(jié)點(diǎn),,在頁面配置一個(gè)ODPS
SQL節(jié)點(diǎn)如下:
圖13新增工作流節(jié)點(diǎn)
點(diǎn)擊〈提交〉,此時(shí)在新的頁面上就可以編寫ODPSSQL代碼了?,F(xiàn)在我們可以查一
Ttianchi_mobile_recommend_train_user的表結(jié)構(gòu),如下:
圖14運(yùn)行ODPS命令
點(diǎn)擊A.運(yùn)行代碼(或按F8鍵)。
注意:
對(duì)于選手而言,所有的操作只需要在開發(fā)環(huán)境運(yùn)行,也就是說,不需要提交數(shù)據(jù)到生
產(chǎn)環(huán)境,也不需要進(jìn)行調(diào)度和發(fā)布。
如上述介紹,在數(shù)據(jù)開發(fā)工作臺(tái)內(nèi)運(yùn)行的表或資源都屬于開發(fā)環(huán)境,如果需要發(fā)布到
生產(chǎn)環(huán)境,那么需要通過發(fā)布管理模塊將工作流節(jié)點(diǎn)調(diào)度并發(fā)布,方可同步到生產(chǎn)環(huán)
境。具體描述請(qǐng)參考御膳房最正確實(shí)踐之?dāng)?shù)據(jù)同步章節(jié)1)。
4.1.2數(shù)據(jù)分析
下面我們根據(jù)上面的課題在IDE上先進(jìn)行相關(guān)的數(shù)據(jù)分析。
給出一定量用戶在之內(nèi)的移動(dòng)端行為數(shù)據(jù)(D),需要預(yù)測(cè)12.19對(duì)商
品子集(P)的購(gòu)置數(shù)據(jù)。行為分為四種:1(瀏覽),2(收藏),3(加購(gòu)物車),4(購(gòu)置)。
首先,由于賽題數(shù)據(jù)來源于其他project(工程空間),為方便起見及后續(xù)在算法平臺(tái)(PAI)
中使用,可以考慮將工程表拷貝到本隊(duì)伍所在工程空間。
SQL如下:
Createtabletianchi_mobile_recommend_train_useras
select*fromtianchi_data.tianchLmobile_recommend_train_user;
Createtabletianchi_mobile_recommend_train_it9mas
select*fromtianchidata.tianchimobilerecommendtrainitem;
下面我們就可以在IDE利用ODPSSQL進(jìn)行相關(guān)的數(shù)據(jù)統(tǒng)計(jì):
?統(tǒng)計(jì)D集合的數(shù)量:
selectcount(*)fromtianchimobilerecommendtrainuser;
一包含了58億用戶的行為記錄。
?統(tǒng)計(jì)針對(duì)P子集的用戶行為數(shù)據(jù):
createtablet_mj_p_useras
select
t.*,b.itemgeohasnfromtianchimobilerecomnendjrainusert
jointianchi_moble_recommend_train_itembonb.item_id=t.item_idandb.item_
category=t.item_category;
selectcount(1)fromtmjpuser;
—10.7億
?統(tǒng)計(jì)所給數(shù)據(jù)中每天各種行為類型的記錄數(shù),了解每天會(huì)有多少瀏覽、收藏、加
購(gòu)、購(gòu)置,觀察是否有波動(dòng):
select
substr(time,1,10)asday
,behavior_type
,count(1)ent
from
tianchi_mobilerecommendJrainuser
groupby
substr(time,1,10)
,behaviortype;
從用戶的購(gòu)置行為動(dòng)機(jī)和流程來看,人們通常在購(gòu)置時(shí)會(huì)經(jīng)歷瀏覽一收藏/加到購(gòu)物車
一下單付款這一系列動(dòng)作,有的可能會(huì)搜索后就直接購(gòu)置,有的可能會(huì)操作得多一點(diǎn),
反復(fù)挑選和比擬。如果說用戶都已經(jīng)把寶貝加到購(gòu)物車了,那么購(gòu)置的概率會(huì)不會(huì)更
高?最近加到購(gòu)物車的是不是應(yīng)該更有可能被購(gòu)置?基于這個(gè)設(shè)想,下面我們示范下
如何在數(shù)據(jù)平臺(tái)上進(jìn)行這個(gè)分析,并完成結(jié)果提交。這是一個(gè)通過簡(jiǎn)單規(guī)那么來判斷
購(gòu)置從而提交結(jié)果的例如,較為簡(jiǎn)單粗暴,但可以讓我們先熟悉下從拿到課題到提交
結(jié)果的整個(gè)流程,以及初嘗結(jié)果驗(yàn)證設(shè)想。
1)由于所給數(shù)據(jù)tianchLmobile_recommend_train_user為用戶在所有商品類目上的
行為,而要預(yù)測(cè)的是在商品子集P上的購(gòu)置,故先鎖定在P上有過交互的用戶行為:
createtablet_mj_p_useras
select
t.*,b.item_geohas*ifromtianchi_mobile_recomriend_train_usert
jointianchi_moble_recommend_train_itembonb.item_id=t.itemjdandb.item_
category=t.item_category;
selectcount(1)fromt_mj_p_user;
……1074139328(用戶對(duì)P子集商品的交互記錄數(shù))
selectcount(1)fromt_mj_p_userwherebehavior_type=4;
9309353(其中對(duì)P子集商品有購(gòu)置的記錄數(shù))
selectcount(1)from
(select
userjd
,item_id
,count(1)ent
from
t_mj_p_user
groupby
userjd
JtemJd
)t;
——202430141[user,item]對(duì)
2)分析前一天加購(gòu)、收藏、瀏覽對(duì)后一天購(gòu)置的影響。取12/18為后一天,拿12/17
的數(shù)據(jù)來驗(yàn)證該設(shè)想。
createtablet_mj_u_i_1dayas
select
userjd
JtemJd
,casewhensubstr(time,1,10)='2023-12-17'andbehavior_type=1then1
else0endasis_1day_view
,casewhensubstr(time,1,10)=2023-12-17*andbehavior_type=2then1
else0endasis_1dayjav
,casewhensubstr(time,1,10)=2023-12-17*andbehavior_type=3then1
else0endasis_1day_cart
,casewhensubstr(time,1,10)=2023-12-17'andbehaviorjype=4then1
else0endasis_1day_buy
,casewhensubstr(time,1,10)=2023-12-18'andbehavior_type=4then1
else0endasis_buy
from
tmjpuser;
計(jì)算評(píng)估指標(biāo):
select
precision
,recall
,2*precision*recall/(precision+recall)asf1
from
(select
hit_cnt/p_cntasprecision
,hit_cnt/r_cntasrecall
from
(select
sum(if(a.user_idisnotnullanda.itemjdisnotnullandb.userjdis
notnullandb.itemjdisnotnull,1,0))ashit_cnt一命中
,if(sum(a.r_cnt)isnull,0,sum(a.r_cnt))asr_cnt一實(shí)際
,if(sum(b.p_cnt)isnull,0,sum(b.p_cnt))asp_cnt--預(yù)測(cè)
from
(
selectuserjdjtemjd,count(1)asr_cnt
from
day
where
is_buy=1
anduserjdisnotnull
anditemJdisnotnull
groupbyuser_id,itemjd
)a
fullouterjoin
(
selectuserjd.itemjd,count(1)aso_cnt
from
t_mj_u_i_1day
where
is_1day_cart=1
anduserjdisnotnull
anditemjdisnotnull
groupbyuserjd,itemjd
)b
ona.userjd=b.userjdanda.iterrjd=b.itemjd
)t
)tb;
返回如下結(jié)果,可以看到F1=2.99%,召回率高于準(zhǔn)確率,均有較大提升空間:
H115返回結(jié)果
3)提交結(jié)果:
以比賽要求的12/19為預(yù)測(cè)日期,將用戶在12/18對(duì)商品子集P加購(gòu)最多的商品作為
預(yù)測(cè)結(jié)果tianchi_mobile_recommendation_predict,生成該表即完成了提交,注:大
賽進(jìn)行的時(shí)候,天池的評(píng)測(cè)系統(tǒng)會(huì)自動(dòng)去掃描各project中指定命名的表(本例中即:
tianchi_mobile_recommendation_prodict)并評(píng)測(cè)。
droptableifexiststianchi_mobile_recommendation_predict;
createtabletianchi_mobile_recommendation_predict
as
select
userjd
,itemjd
from
(
select
Lserjd
,itemjd
,row_number()over(partitionbyuserjdorderbynumdesc)as
rank
from
(
select
a.userjd
,a.item_id
,a.num
from
select
userid
JtemJd
,count(1)asnum
from
tianchimobile_recommendtrainuser
where
substrftime,1,10)='2023-12-18,
andbehavior_type=3
groupby
userjd
,item_id
)a
join
(
selectdistinct
itemid
from
tianchi_mobile_recommend_train_item
)b
ona.itemjd=b.itemjd
v/here
b.itemjdisnotnull
)c
)d
whererank<=1;
counttianchi_mobile_recommendation_predict;——166068(與上述數(shù)據(jù)分析時(shí)所統(tǒng)
計(jì)的每日購(gòu)置數(shù)據(jù)最相仿)
基于這個(gè)提交的結(jié)果,可以拿到這樣一個(gè)分?jǐn)?shù):準(zhǔn)確率=1%,召回率=0.9%,F1=0.96%o
說明:
上述SQL語法涉及到的主要知識(shí)點(diǎn)包括:
?創(chuàng)立表/刪除表
?聚合函數(shù)count
?字符串函數(shù)substr
,Join語法
?row_number函數(shù)
?casewhen/if條件困數(shù)
關(guān)于SQL的更多語法,請(qǐng)參考ODPS用戶手冊(cè)。
4.1.3特征工程
經(jīng)過一番數(shù)據(jù)探查和分析,可大致確定深入的解題方案。假設(shè)考慮采取“按用戶?商品
對(duì)抽取特征,再進(jìn)行分類”這樣一種方案,那么接卜來就要抽取特征。假設(shè)我們的特
征使用近1天,3天,7天,10天的用戶行為數(shù)量(點(diǎn)擊數(shù),瀏覽數(shù)…),我僅可以
直接使用sql來抽取特征,或者使用MapReduce(簡(jiǎn)稱MR),再或者使用
UDF(user-definedfunction),這些都可以在數(shù)據(jù)產(chǎn)發(fā)下添加相應(yīng)的節(jié)點(diǎn)來完成。以下
演示在平臺(tái)上如何配置和使用MR/UDF/Graph實(shí)現(xiàn)特征抽取,以UDF為例詳細(xì)操作,
MR同理,只是一兩處有些許差異,相應(yīng)的地方也會(huì)特別注明。
工具下載
請(qǐng)前往:〃/m2e/下載Eclipse插件。
請(qǐng)前往:///下載Maven插件,建議下載325版本.
下載完畢并解壓安裝后,翻開Eclipse插件,會(huì)看到以下界面:
圖16Eclipse主頁面
新建工程
MR&UDF開發(fā)工具全部基于Maven開發(fā),因此使用此工具前應(yīng)該對(duì)maven的概念
及根本使用有一定了解。使用IDE來開發(fā)MR&UDF,還要了解如何在IDE中使用相
關(guān)maven插件。
MR&UDF開發(fā)工具通過mavenarchetype機(jī)制新建程序工程,御膳房提供
base-mapreduce-archetype>base-udf-archetype和base-graph-archetype三個(gè)
archetypes,通過遠(yuǎn)程repository可直接使用。
?添加遠(yuǎn)程repository
注:請(qǐng)確保機(jī)器是上裝有maven,并且Eclipse中已安裝M2Eclipse插件。
1)如果您使用的是MAC系統(tǒng),請(qǐng)?jiān)贓clipse中依次點(diǎn)擊〈Preferences->Maven
->Arthetypes>,在翻開的對(duì)話框中點(diǎn)擊〈AddRemoteCatalog...>按鈕;如果您使
用的是WINDOWS或其他系統(tǒng),請(qǐng)?jiān)贓clipse中依次點(diǎn)擊〈Window-‘Preferences
->Maven->Arthetypes>,在翻開的對(duì)話框中點(diǎn)擊〈AddRemoteCatalog...〉按鈕。
IS17添力IIMavenArthetypes
2)在翻開的對(duì)話框中,CatalogFile填入,Description填入BaseArchetypes.
然后一路點(diǎn)擊vOK>就完成了遠(yuǎn)程repertory添加。
圖18設(shè)定遠(yuǎn)程目錄
?新建工程
1)如同新建一般maven工程一樣,在Eclipse中依次點(diǎn)擊vFile->New->Project...>,
在翻開的對(duì)話框中選擇[Maven->MavenProject]:
圖19新建Maven工程
2)一路點(diǎn)擊vNext>.在[SelectanArchetypes]界面,Catalog選擇Base
Archetypes,并選中Includesnapshotarchetypes復(fù)選框,此時(shí)可以看到列表中
出現(xiàn)base-graph-archetype>base-mapreduce-archetype和base-udf-archetype
三個(gè)archetypes,選擇需要?jiǎng)?chuàng)立的程序類型,點(diǎn)擊<Next>。
圖新建hasp-ijdf-arnhptypA
3)以base-udf-archetype為例,點(diǎn)擊〈Next〉后,會(huì)進(jìn)入常規(guī)的maven工程初始化配
置界面。注意Properties列表中會(huì)出現(xiàn)幾個(gè)御膳房特有的配置項(xiàng),分別是:
?baseId-用戶在御膳房上的用戶標(biāo)識(shí)
?projectld?用戶要?jiǎng)?chuàng)立程序到哪個(gè)御膳房工程ID
?token-工程證書
?idePath-程序?qū)⒁蟼鞯絀DE的哪個(gè)工作目錄/文件夾下,需要文件夾已經(jīng)在
IDE中創(chuàng)立好,例如“工作流/寧晶"。
獲取這些配置項(xiàng)的操作步驟如下:
A.點(diǎn)擊v我的賬號(hào),,如下列圖:
圖21獲取我的賬號(hào)
B.點(diǎn)擊證書管理,看到工程ID(對(duì)應(yīng)到projectld)>用戶標(biāo)識(shí)(對(duì)應(yīng)到baseld)、
工程證書1對(duì)應(yīng)到token)三個(gè)信息:
圖22證書管理
C.配置例如如下列圖:(其中,GroupID和ArtifactId,idePath,functionName
為自定義,注:命名中請(qǐng)勿使用一字符,否那么會(huì)報(bào)錯(cuò);另外3個(gè)ID項(xiàng)按照上述
方式獲取并填入)。假設(shè)為UDF,柞應(yīng)的配置會(huì)保存于配置文件
src/main/resoLrces/META-INF/base.udf.xml中.
圖23設(shè)定archetype參數(shù)
注:這里將idePath自定義配置成:工作流/寧晶(再次強(qiáng)調(diào)卜,這個(gè)文件需要在IDE
中先建好,否那么后續(xù)會(huì)報(bào)錯(cuò)),那么當(dāng)Maven工程開發(fā)完,在eclipse直接提交后,
提交的節(jié)點(diǎn)和對(duì)應(yīng)源代碼就會(huì)自動(dòng)在IDE的該目錄下創(chuàng)立。
D.填寫完成后,點(diǎn)擊〈Finish〉就會(huì)完成工程創(chuàng)立,隨后即可在Eclipse的工程管
理器中看到新建的工程了。
圖24配置好的工程
程序開發(fā)及提交
.1工程結(jié)構(gòu)
通過archetypes新創(chuàng)立的程序具有完整的mavenproject骨架(如初始化好的pom
文件等)、腳手架代碼(用戶可直接在其中實(shí)現(xiàn)自己的業(yè)務(wù))和例如代碼;其中
mapreduce程序還帶有本地運(yùn)行環(huán)境和mock數(shù)據(jù),用于通過local模式運(yùn)行
mapreduce程序,以便本地調(diào)試。
下面我們將介紹UDF程序開發(fā)步驟。
.2UDF程序開發(fā)步驟
1)-E程結(jié)構(gòu)
一個(gè)新創(chuàng)立的udf程序工程結(jié)構(gòu)如下:(與mapreduce程序類似,但是udf程序目前
不支持本地調(diào)試)
Ilib
|pom.xml
1src
Imain
IIjava
II1my
II1group
I|1myudf
I||MyUDAF.java
I||MyUDF.java
II|MyUDTF.java
II1examples
I||GcdUDF.java
I||NormalizeUDTF.java
I|1VarianceUDAF.java
I1resources
I|META-INF
I1perties
1test
Ijava
I1-my
I1group
I1myudf
1resources
其中,用戶的程序?qū)懺趕rc/main/java下。
2)證書配置
證書文件位于src/main/resources/perties,其中存儲(chǔ)BaseID、Project
ID和Token,是完成鑒權(quán)及身份認(rèn)證的重要文件,
圖25證書配置頁面
3)配置文件
不管是mapreduce還是udf程序,都有一個(gè)主配置文件。這個(gè)配置文件是整個(gè)工程
的核心,許多重要信息都需要在這里配置。
,形如下列圖。其中:baseld、projectld來源于maven工程初始化配置;functionName
必填,為最終注冊(cè)的UDF名稱,即需要在SQL中調(diào)用的函數(shù)名;className-必填,
為實(shí)現(xiàn)UDF的class全名。
圖26UDF程序配置文件
4)程序開發(fā)
在src/main/java中新建class,右擊src/main/java并點(diǎn)擊vNew->Package>:
圖27新建package
在彈出的NewJavaPackage對(duì)話框中填入根本信息,如:
圖28新建Javapackage
點(diǎn)擊〈Finish》之后,將會(huì)在src/main/java節(jié)點(diǎn)下新增”mj.udf"這個(gè)節(jié)點(diǎn),如:
圖29新增的package
右擊mj.udf這個(gè)package,并點(diǎn)擊vNew->Class〉。填入Name(LBSUtils)后即可翻
開程序編輯框。
圖30新建Class
在編輯框編寫程序代碼:
packagetaijixiong.udf;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassLBSUtls
(
publicstaticintDateSubtract(Stringd1,Stringd2)throwsParseException
(
SimpleDateFormatfmt=newSimpleDateFormat("yyyy-MM-dd");
Datedatel=fmt.parse(dl);
Datedate2=fmt.parse(d2);
return(int)((datel.getTime()-date2.getTime()y(1000L*60*60*24));
)
publicstaticStringJoin(int[]arr,Stringsep)
(
if(arr.length==O)
(
return
)
StringBuffersb=newStringBuffer();
sb.append(arr[0]);
for(inti=1;i<arr.length;i++)
(
sb.append(sep):
sb.append(arr[i]i;
}
returnsb.toString();
)
publicstaticvoidmain(Stringargs[])throwsParseException
(
System.out.println(DateSubtract("2023-02-192O'\"2023-12-18"));
)
}
圖31編寫UDF代碼
采用同樣的方法,開發(fā)ExtractPairCount.java用干統(tǒng)計(jì)user-item對(duì)的點(diǎn)擊,收藏,
購(gòu)物車,購(gòu)置次數(shù)。代碼如下:
packagemj.udf;
importjava.text.ParseException;
importjava.util.Arrays;
importcom.aliyun.odps.udf.ExecutionContext;
importcom.aliyun.odps.udf.UDTF;
importcom.aliyun.odps.udf.annotation.Resolve;
importcom.aliyun.odps.udf.UDFException;
@Resolve({"string,string,bigint,string,string,bigint->string,string,string,string"))
//TODOdefineinputandoutputtypes,e.g.,"string,string->string,bigint".
publicclassExtractPairCountextendsUDTF{
publicStringlastUid="n;
publicStringlastlid=
publicint[]intervals={1,3,7,100);
publicintcurrentindex=0;
publicint[]counts=newint[4*4];
publicStringptime=
?Override
publicvoidsetup(ExecutionContextctx)throwsUDFException
(
)
/**
*UDTFProcess接口
*每條記錄都會(huì)調(diào)用此接口。
7
publicvoidprocess(Object[]args)throwsUDFException
(
Stringuid=(String)args[0];
Stringiid=(String)args[1];
intbehavior=((Long)args[2]).intValue();
Stringatime=(String)args[3];
Stringptime=(String)args[4];
intent=((Long)args[5]).intValue();
this.ptime=ptime;
if(uidpareTo(this.lastUid)==0&&iidpareTo(this.lastlid)==0)
{
}
else
{
//newpair
//outputoldpair
if(this.lastllid.length()>0&&this.lastlid.length()>0)
(
this.output();
}
//addnewpair
this.lastllid=uid;
this.lastlid=iid;
this.cearStatus();
)
intdateDiff;
try{
dateDiff=LBSUtils.DateSubtract(ptime,atime);
}catch(ParseExceptione){
//TODOAuto-generatedcatchblock
thrownewRuntimeException(e);
)
while(dateDiff>ervals[this.currentlndex])
{
this.cjrrentlndex+=1;
)
this.counts[this.currentlndex*4+behavio"-1]+=cnt;
)
publicvoidclearStatus()
(
Arrays.fill(this.counts,0);
this.currentlndex=0;
)
publicvoidoutput()throwsUDFException
(
if(this.lastUid.length()>0&&this.lastlid.length()>0)
{
for(inti=O;i<ervals.length-1;i++)
(
for(intk=0;k<4;k++)
(
this.counts[(i+1)*4+k]+=this.counts[i*4+k];
}
)
Stringfeature=LDSUtils.Join(this.counts,"");
this.forward(this.lastUid,this.lastlid,
this.ptime
feature);
)
)
/**
*UDTFClose接口
★
.任務(wù)最后調(diào)用此接口,規(guī)格化所有數(shù)據(jù)并輸出。forward方法用于輸出結(jié)果
7
publicvoidclose()throwsUDFException
(
this.output();
)
}
5)提交程序
UDF程序開發(fā)完畢,提交到IDE中運(yùn)行遠(yuǎn)程試跑和部署。提交是通過maven插件完
成的,以Eclipse為例,提交程序步驟如下:
?配置settings.xml
御膳房依賴的mavenplugin不屬于官方插件,所以首先需要配置maven以使得
maven運(yùn)彳j時(shí)可以找至ijbase-maven-plugirio
配置需要放在.m2/settings.xml中,.m2的位置艱據(jù)不同操作系統(tǒng)不一致,可查閱
maven的官方文檔確定本機(jī).m2目錄所在位置。
一般而言,m2文件夾是隱藏文件夾,需要首先在文件夾選項(xiàng)中“顯示隱藏的文件、
文件夾和驅(qū)動(dòng)器",然后檢索”.m2”文件夾所在位置。
以Windows7系統(tǒng)為例:
圖32文件夾和搜索選項(xiàng)
圖33顯示隱藏的文件、文件夾和驅(qū)動(dòng)器
圖34搜索.m2文件夾
圖35settings.xml
配置的settings.xml工程內(nèi)如如下:(假設(shè)用戶系統(tǒng)中沒有settings.xml可將下面的
內(nèi)容直接新建為settings.xml:否那么請(qǐng)將如下配置項(xiàng)合并進(jìn)已有的settings.xml。)
<?xmlversion="1.0"encoding=*'UTF-8',?>
<settingsxmlns=":///SETTINGS/1.0.0"
xmlns:xsi="'JI/2001/XMLSchema-instance"
xsi:schemaLocation=0:///SETTINGS/1.0.0://maven.ap
/xsd/settings-1.0.0.xsd">
<pluginGroups>
<pluginGroup>com.alibaba.base.plugins</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>base</id>
<pluginRepositories>
<pluginRepository>
<id>base-snapshots</id>
<url>://maven.sdk.de.yushanfang
/SNAPSHOT</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>base</activeProfile>
</activeProfiles>
</settings>
?base-maven-plugin
御膳房的mavenplugin有三個(gè)功能:
#檢查工程是否完整
mvnbase:check
#對(duì)工程進(jìn)行打包并生成哈希文件,為提交做好準(zhǔn)備
mvnbase:zip
#提交工程到IDE
mvnbase:submit
base-maven-plugin的幾個(gè)特有的配置項(xiàng)如下:
gram.type-程序類型??梢允莔apreduce或udf
base.ide.resource.url-僅mapreduce需要。御膳房實(shí)例的資源地址模式,用于生成
mrscripto://@{env}.codebase.de.yushanfang/scheduler/res?id={rid]
?提交:在Eclipse中通過base-maven-plugin提交程序:
A.在工程上點(diǎn)擊右鍵點(diǎn)擊,依次選擇RunAs->RunConfigurations...
圖36運(yùn)行按鈕
B.在RunConfigurations對(duì)話框左側(cè)列表中右鍵點(diǎn)擊vMavenBuild->New>,
C.右側(cè)窗口中,Basedirectory選擇工程所在目錄??梢渣c(diǎn)擊vBroswe
Workspace...>或<BrowseFileSys
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療健康領(lǐng)域中的教育機(jī)器人技術(shù)探討
- 智慧辦公空間設(shè)計(jì)與舒適度研究
- 教育游戲化的設(shè)計(jì)原則與技巧
- 鐵路勞動(dòng)安全培訓(xùn)課件
- 醫(yī)療健康領(lǐng)域的教育政策與實(shí)效性教學(xué)策略
- 教育大數(shù)據(jù)庫在智慧校園建設(shè)中的應(yīng)用研究
- 技術(shù)驅(qū)動(dòng)的教育變革工具選擇與操作培訓(xùn)
- 教育領(lǐng)域的技術(shù)革新大五人格的引領(lǐng)作用
- 探索教育心理學(xué)的奧秘激發(fā)個(gè)人潛能
- 智慧城市公共服務(wù)平臺(tái)的創(chuàng)新設(shè)計(jì)與應(yīng)用
- 老年教育中的心理健康與社會(huì)支持研究-洞察闡釋
- 2025年工程造價(jià)與管理考試題及答案
- 2025年第一季度煙花爆竹安全作業(yè)特種作業(yè)操作證考試試卷(新手實(shí)戰(zhàn)卷)
- 2025版護(hù)理十大安全目標(biāo)
- 2025年 荊州市荊發(fā)控股集團(tuán)招聘考試筆試試卷附答案
- 學(xué)校關(guān)工委管理制度
- 三年級(jí)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)及答案
- 出納應(yīng)聘試題及答案
- 2025至2030中國(guó)清分機(jī)行業(yè)發(fā)展趨勢(shì)分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- DB31-T 1593-2025 基于自動(dòng)駕駛功能的公交運(yùn)營(yíng)技術(shù)要求
- 地理●甘肅卷丨2024年甘肅省普通高中學(xué)業(yè)水平等級(jí)性考試高考地理真題試卷及答案
評(píng)論
0/150
提交評(píng)論