最近朋友推薦Yonghong Desktop,號(hào)稱(chēng)既有BI,又有AI,而且還是免費(fèi)的,于是二話(huà)不說(shuō),下載->安裝->啟動(dòng)產(chǎn)品,一系列操作快速搞定后,馬上就想體驗(yàn)一下。
這里我們使用天池開(kāi)放的數(shù)據(jù)資源(Baby Goods Info Data,里下載了兩個(gè)csv的數(shù)據(jù):
Tianchi_mum_baby_trade_history.csv(交易記錄)
作為體驗(yàn)該軟件的樣例數(shù)據(jù)。表結(jié)構(gòu)如下2圖所示。
表1 兒童信息
?
列名 | 描述 |
user_id | 整數(shù)類(lèi)型,用戶(hù)ID |
birthday | 時(shí)間類(lèi)型,出生年月日 |
gender | 性別(“0”是女,“1”是男,“2”是未知) |
?
表2 交易記錄
?
列名 | 描述 |
auction_id | 整數(shù)類(lèi)型,交易ID |
user_id | 整數(shù)類(lèi)型,用戶(hù)ID |
cat_id | 整數(shù)類(lèi)型,品類(lèi)ID |
cat1 | 整數(shù)類(lèi)型,基礎(chǔ)品類(lèi)ID |
property | 文本類(lèi)型,商品相關(guān)屬性 |
buy_mount | 整數(shù)類(lèi)型,購(gòu)買(mǎi)數(shù)量 |
day | 時(shí)間戳,交易日期 |
?
通過(guò)兩個(gè)表的數(shù)據(jù),實(shí)現(xiàn)“根據(jù)用戶(hù)購(gòu)買(mǎi)的兒童用品交易記錄預(yù)測(cè)兒童的年齡”。
后續(xù)就可以基于預(yù)測(cè)的結(jié)果向用戶(hù)推薦該年齡段可能需要的商品,促成更多商品銷(xiāo)售,用數(shù)據(jù)分析提升產(chǎn)品轉(zhuǎn)換,最終實(shí)現(xiàn)做成了一幅可視化報(bào)表,如下:
經(jīng)過(guò)研讀在線(xiàn)幫助文檔和一番摸索發(fā)現(xiàn),Yonghong Desktop功能確實(shí)強(qiáng)大,數(shù)據(jù)探索、準(zhǔn)備和處理、模型構(gòu)建和推理,報(bào)告制作等各方面功能都很完善。
接下來(lái)我們就來(lái)一起學(xué)習(xí)下,如何利用這些數(shù)據(jù)來(lái)實(shí)現(xiàn)分析與預(yù)測(cè)吧~
一、做好基礎(chǔ)準(zhǔn)備——數(shù)據(jù)的導(dǎo)入與探索
數(shù)據(jù)導(dǎo)入
數(shù)據(jù)源的格式為CSV格式,直接在Yonghong Desktop上選擇下圖1這個(gè)功能上傳數(shù)據(jù)即可形成數(shù)據(jù)集。
導(dǎo)入后的數(shù)據(jù)集分別存放在如下位置
數(shù)據(jù)探索
在Yonghong Desktop 上“深度分析”模塊創(chuàng)建一個(gè)新實(shí)驗(yàn),將數(shù)據(jù)集“baby”、“baby_trade_history”拖入畫(huà)布,在右側(cè)查看各個(gè)數(shù)據(jù)的元數(shù)據(jù)、探索數(shù)據(jù)功能。
可以發(fā)現(xiàn):
“baby”數(shù)據(jù)集的user_id字段唯一值數(shù)量為953個(gè),“baby_trade_history”數(shù)據(jù)集的user_id字段唯一值數(shù)量為29944個(gè),因此只有3.18%的用戶(hù)關(guān)聯(lián)有baby數(shù)據(jù)的。“baby_trade_history”數(shù)據(jù)集的property字段是關(guān)于購(gòu)買(mǎi)商品的屬性信息且均已脫敏,無(wú)法知道其具體含義。
這么多的交易記錄都查不到對(duì)應(yīng)的兒童信息,我的想法是通過(guò)有兒童信息的交易記錄,經(jīng)過(guò)模型構(gòu)建推理剩下那些交易記錄對(duì)應(yīng)的兒童信息。
二、簡(jiǎn)單五步——輕松完成數(shù)據(jù)處理
將“baby_trade_history”數(shù)據(jù)集關(guān)聯(lián)有兒童信息的交易記錄作為兒童年齡已標(biāo)注的訓(xùn)練集,未關(guān)聯(lián)兒童信息的記錄作為待預(yù)測(cè)數(shù)據(jù)集。根據(jù)對(duì)業(yè)務(wù)和數(shù)據(jù)集的理解,兒童年齡與字段cat_id (商品品類(lèi))、cat1 (商品基礎(chǔ)品類(lèi))、property (商品屬性)、buy_mount(購(gòu)買(mǎi)數(shù)量)相關(guān)性較高。
第一步,構(gòu)造“baby_trade_history_train”數(shù)據(jù)集作為模型的訓(xùn)練集
它是由數(shù)據(jù)集“baby”、“baby_trade_history”數(shù)據(jù)集內(nèi)部聯(lián)接而成。構(gòu)造數(shù)據(jù)流如下圖3所示,“聯(lián)接”算子的配置如圖4所示。
圖3 baby_trade_history_train數(shù)據(jù)集的工作流
圖4 訓(xùn)練集的內(nèi)部聯(lián)接配置
第二步,通過(guò)交易日期和生日,算出年齡字段
在“baby_trade_history_train”數(shù)據(jù)集上通過(guò)新建計(jì)算列生成一個(gè)計(jì)算列字段age,其取值為根據(jù)字段birthday計(jì)算出的兒童年齡。該計(jì)算列:
“roundUp((dateValue(parseDate(col['day'],'yyyyMMdd'))-dateValue(parseDate(col['birthday'],'yyyyMMdd')))/365,1)”
第三步,構(gòu)造“
baby_trade_history_predict”數(shù)據(jù)集作為模型推理用的待預(yù)測(cè)數(shù)據(jù)集
它是由數(shù)據(jù)集“baby”、“baby_trade_history”數(shù)據(jù)集右側(cè)聯(lián)接而成,如圖5所示。
圖5 測(cè)試集的右側(cè)聯(lián)接配置
第四步,待預(yù)測(cè)數(shù)據(jù)集過(guò)濾掉年齡字段不為空的數(shù)據(jù)行
由于“baby_trade_history”數(shù)據(jù)集的user_id唯一值數(shù)量多于“baby”數(shù)據(jù)集的記錄,右聯(lián)接后“
baby_trade_history_predict”數(shù)據(jù)集中關(guān)于”baby”的有大量空值,如圖6所示。在該數(shù)據(jù)集上添加過(guò)濾條件濾出birthday字段含有空值的行作為“baby_trade_history_predict”數(shù)據(jù)集最終輸出,過(guò)濾完的結(jié)果只剩下在baby數(shù)據(jù)集里查詢(xún)不到的數(shù)據(jù)。過(guò)濾條件配置如圖7所示。
圖6 有空值的字段
圖7 過(guò)濾條件
第五步,從property字段構(gòu)造新特征
property字段的數(shù)據(jù)如圖8所示。
圖8 baby_trade_history數(shù)據(jù)
該字段集中了商品的所有屬性名及其取值,但顯然不同類(lèi)型的商品,其屬性必然有差異,比如用途、尺寸、重量、材質(zhì)、商品細(xì)分類(lèi)型等等,不同年齡段的兒童用商品必然有所不同或者兒童偏好不同,這決定了商品屬性必然與年齡存在相關(guān)性。通過(guò)觀(guān)察數(shù)據(jù)(圖8)發(fā)現(xiàn),property字段將商品屬性及其取值以冒號(hào)分割同時(shí)以分號(hào)分割不同的屬性,雖然屬性及取值均已脫敏,但仍然有利用的價(jià)值,于是我嘗試用計(jì)算列拆分該字段構(gòu)造出新字段。由于商品屬性較多,我分離出了幾個(gè)常見(jiàn)的商品屬性作為計(jì)算列,如圖9所示,其中:property_len是商品屬性個(gè)數(shù),其內(nèi)容為:len(col['property'])-len(substitute(col['property'],';',''))。
property_21458是屬性21458對(duì)應(yīng)的值,其計(jì)算列內(nèi)容為:
if contains(ifNull(col['property'],'0'),'21458:') then
parseInt(split(split(col['property'],'21458:',2),';',1))/1000
else
0
end
其它屬性列對(duì)應(yīng)的計(jì)算列同property_21458列。
圖9 property分離出的新字段(紅框內(nèi))
經(jīng)過(guò)以上步驟,數(shù)據(jù)處理完成。
三、快速搭建實(shí)驗(yàn)——模型的構(gòu)建與推理
模型構(gòu)建
模型構(gòu)建涉及特征工程和訓(xùn)練過(guò)程,在深度分析中是以實(shí)驗(yàn)的形式存在的。經(jīng)過(guò)前面數(shù)據(jù)處理之后,搭建模型實(shí)驗(yàn)已經(jīng)比較簡(jiǎn)單了。在Yonghong Desktop上創(chuàng)建一個(gè)實(shí)驗(yàn),將“數(shù)據(jù)集”tab下的訓(xùn)練集“baby_trade_history_train”數(shù)據(jù)集和“操作”tab下“/算法/回歸/決策樹(shù)回歸”算子及視圖節(jié)點(diǎn)拖至實(shí)驗(yàn)畫(huà)布,構(gòu)建的實(shí)驗(yàn)如下圖10所示,用到的節(jié)點(diǎn)位于圖11中標(biāo)注的位置。
圖10 創(chuàng)建的模型訓(xùn)練實(shí)驗(yàn)工作流
圖11 使用的算子
決策樹(shù)回歸的參數(shù)配置表如圖12所示,調(diào)參過(guò)程略過(guò),這里大家可以根據(jù)對(duì)數(shù)據(jù)和業(yè)務(wù)的理解自行設(shè)置。特征列選擇如圖13所示,注意字段的順序是有用的,模型應(yīng)用的時(shí)候字段的含義和順序需要與這個(gè)特征列順序保持一致。
圖12 決策樹(shù)回歸算法的參數(shù)配置表
圖13 特征列
訓(xùn)練完模型后通過(guò)“多視圖”節(jié)點(diǎn)可以查看其性能指標(biāo)、特征重要性等,如下圖14所示。為了后續(xù)應(yīng)用訓(xùn)練好的模型,我通過(guò)“保存為訓(xùn)練模型”及時(shí)將模型保存下來(lái)(操作過(guò)程略),保存的訓(xùn)練模型存放于如圖15所示的位置,取名為:兒童年齡預(yù)測(cè)_訓(xùn)練模型。
圖14 模型性能指標(biāo)視圖
圖15 保存的訓(xùn)練模型
特別注意:在搭建模型訓(xùn)練實(shí)驗(yàn)的時(shí)候,遇到一個(gè)小坑。在“創(chuàng)建數(shù)據(jù)集”模塊構(gòu)建訓(xùn)練集時(shí),如果添加計(jì)算列或者更新了計(jì)算列的計(jì)算邏輯后,在深度分析實(shí)驗(yàn)工作流中的訓(xùn)練集“baby_trade_history_train”節(jié)點(diǎn)上需要鼠標(biāo)右鍵菜單點(diǎn)擊“刷新”。
模型推理
保存了訓(xùn)練模型,就可以開(kāi)始用它搭建模型推理服務(wù)工作流了。
第一步,新建一個(gè)實(shí)驗(yàn),將預(yù)測(cè)數(shù)據(jù)集:
baby_trade_history_predict,和剛保存的訓(xùn)練模型:兒童年齡預(yù)測(cè)_訓(xùn)練模型拖入畫(huà)布中,創(chuàng)建工作流如圖16所示。
第二步,配置模型應(yīng)用節(jié)點(diǎn)。由于訓(xùn)練集和測(cè)試集的所選的特征字段完全一樣,所以模型應(yīng)用中填寫(xiě)的特征列與訓(xùn)練模型的字段和順序完全一致,本實(shí)驗(yàn)中的配置如圖17所示。
圖16 模型推理工作流
圖17 模型應(yīng)用算子的配置項(xiàng)
predict_age字段是新建的字段,點(diǎn)擊圖18里的icon進(jìn)行創(chuàng)建。
圖18 新建字段寫(xiě)入模型預(yù)測(cè)的結(jié)果
第三步,設(shè)置制作報(bào)告可以使用的節(jié)點(diǎn)輸出。這里顯然模型應(yīng)用節(jié)點(diǎn)的輸出是我需要的,直接選擇該節(jié)點(diǎn)即可,節(jié)點(diǎn)設(shè)置頁(yè)面如圖19所示。
圖19 設(shè)置用于制作報(bào)告的節(jié)點(diǎn)
保存該實(shí)驗(yàn),取名為:兒童年齡預(yù)測(cè)實(shí)驗(yàn)。
四、讓結(jié)果一目了然——制作可視化報(bào)告
訓(xùn)練數(shù)據(jù)集baby_trade_history_train里有age字段,待預(yù)測(cè)數(shù)據(jù)集里有預(yù)測(cè)結(jié)果字段predict_age。現(xiàn)在的一個(gè)想法,就是把所有交易記錄的age和predict_age拼接到一列里,就可以得到所有交易記錄的年齡(一部分是實(shí)際的,一部分是預(yù)測(cè)的)。
第一步:合并訓(xùn)練數(shù)據(jù)集和待預(yù)測(cè)數(shù)據(jù)集
這里又用到了自服務(wù)數(shù)據(jù)集進(jìn)行數(shù)據(jù)處理,將待預(yù)測(cè)數(shù)據(jù)集
baby_trade_history_predict和訓(xùn)練數(shù)據(jù)集baby_trade_history_train做聯(lián)合得到新數(shù)據(jù)集baby_trade,如圖20。
圖20 聯(lián)合之后的數(shù)據(jù)集baby_trade
特別注意:聯(lián)合的數(shù)據(jù)集需要字段相同,字段類(lèi)型也匹配。
第二步:基于合并的數(shù)據(jù)集新建報(bào)告,并應(yīng)用實(shí)驗(yàn)
基于baby_trade新建報(bào)告,選擇綁定pane上的應(yīng)用實(shí)驗(yàn),如圖20。
圖20 應(yīng)用實(shí)驗(yàn)入口
在彈出的選擇實(shí)驗(yàn)窗口中,如圖21 選擇實(shí)驗(yàn)窗口,選擇兒童年齡預(yù)測(cè)實(shí)驗(yàn),并選擇模型應(yīng)用節(jié)點(diǎn),點(diǎn)擊確定。
圖21 選擇實(shí)驗(yàn)窗口
在此綁定數(shù)據(jù)集上,出現(xiàn)模型應(yīng)用上新增的字段,見(jiàn)圖22。
圖22 應(yīng)用實(shí)驗(yàn)
第三步:合并age和predict_age字段
新建計(jì)算列age_new,進(jìn)行拼接,見(jiàn)圖23。
圖23 字段拼接
第四步:對(duì)每個(gè)年齡段進(jìn)行分組
基于age_new字段新建數(shù)據(jù)分箱,設(shè)置見(jiàn)圖24。
圖24 數(shù)據(jù)分箱
第五步:制作報(bào)告
用上面預(yù)測(cè)和準(zhǔn)備的數(shù)據(jù),即可在Yonghong Desktop上通過(guò)可視化的方式拖拽得到消費(fèi)商品的年齡分布,不同年齡段的購(gòu)買(mǎi)情況,不同年齡的商品偏好,不同商品的年齡分布,并由此做精準(zhǔn)的商品推薦。我拖拽做了四個(gè)圖表,基本在分鐘級(jí)以?xún)?nèi)搞定,最終展示效果如圖25所示。
圖25 可視化效果
總結(jié):
回溯整個(gè)過(guò)程,可以發(fā)現(xiàn),Yonghong Desktop有強(qiáng)大的數(shù)據(jù)治理功能,其中自服務(wù)數(shù)據(jù)集和計(jì)算列異常驚艷。深度分析模塊內(nèi)置了豐富的算子,模型構(gòu)建和推理通過(guò)簡(jiǎn)單的工作流,拖拽即可實(shí)現(xiàn),無(wú)需編碼。通過(guò)在實(shí)驗(yàn)上設(shè)置可用于報(bào)告制作的算子節(jié)點(diǎn),即可實(shí)現(xiàn)AI和BI結(jié)合,將AI的預(yù)測(cè)結(jié)果通過(guò)報(bào)表進(jìn)行分析和呈現(xiàn)。
評(píng)論