通過推薦演算法定製產生的特徵工程,對未經處理資料集(包括使用者表、物料表和行為表等)進行處理,並產生新的特徵表,以供後續的召回和排序使用。
前提條件
已開通PAI(Designer),並建立預設工作空間。具體操作,請參見開通PAI並建立預設工作空間。
已為工作空間綁定MaxCompute資源。具體操作,請參見管理工作空間計算資源。
已建立MaxCompute資料來源,並將該資料來源綁定為工作空間的引擎。具體操作,請參見建立MaxCompute資料來源。
資料集
為了示範以下特徵工程,本資料使用指令碼類比構造產生使用者(user)表、物料(item)表和行為(behavior)表,並非真實資料集。
使用者表:pai_online_project.rec_sln_demo_user_table
欄位名 | 類型 | 描述 |
user_id | bigint | 使用者唯一ID |
gender | string | 性別 |
age | bigint | 年齡 |
city | string | 城市 |
item_cnt | bigint | 創作內容數 |
follow_cnt | bigint | 關注數 |
follower_cnt | bigint | 粉絲數 |
register_time | bigint | 註冊時間 |
tags | string | 使用者標籤 |
ds | string | 表分區列名 |
物料表:pai_online_project.rec_sln_demo_item_table
欄位名 | 類型 | 描述 |
item_id | bigint | 物料ID |
duration | double | 視頻時間長度 |
title | string | 標題 |
category | string | 一級標籤 |
author | bigint | 作者 |
click_count | bigint | 累計點擊數 |
praise_count | bigint | 累計點贊數 |
pub_time | bigint | 發布時間 |
ds | string | 表分區列名 |
行為表:pai_online_project.rec_sln_demo_behavior_table
欄位名 | 類型 | 描述 |
request_id | bigint | 埋點ID/請求ID |
user_id | bigint | 使用者唯一ID |
exp_id | string | 實驗ID |
page | string | 頁面 |
net_type | string | 網路類型 |
event_time | bigint | 行為事件發生的時間 |
item_id | bigint | 物品ID |
event | string | 行為事件類型 |
playtime | double | 播放時間長度/閱讀時間長度 |
ds | string | 表分區列名 |
特徵工程
步驟一:進入Designer頁面
登入PAI控制台。
在左側導覽列單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
在工作空間頁面的左側導覽列選擇模型開發與訓練 > 可視化建模(Designer),進入Designer頁面。
步驟二:構建工作流程
在Designer頁面,單擊預置模板頁簽。
在模板列表的推薦解決方案-特徵工程地區,單擊建立。
在建立工作流程對話方塊,配置參數(可以全部使用預設參數)。
其中: 工作流程資料存放區配置為OSS Bucket路徑,用於儲存工作流程運行中產出的臨時資料和模型。
單擊確定。
您需要等待大約十秒鐘,工作流程可以建立成功。
在工作流程列表,雙擊推薦解決方案-特徵工程工作流程,進入工作流程。
系統根據預置的模板,自動構建工作流程,如下圖所示。
節點
描述
1
物料表預先處理:
將Tag特徵分隔字元替換為
chr(29)
供後續特徵產生步驟(FG)使用。產出是否是新上架物料的特徵。
2
行為表預先處理:產出day_h、week_day等行為時間的衍生特徵。
3
使用者表預先處理:
產出是否是新註冊使用者的特徵。
將Tag特徵分隔字元替換為
chr(29)
供後續特徵產生步驟(FG)使用。
4
關聯線為表、使用者表和物料表,形成帶統計屬性的行為日誌寬表。
5
產生物料特徵表,包含一段時間的物料統計特徵:
item__{event}_cnt_{N}d
:N天內該物料上發生某行為的數目,表徵物料熱門程度。item__{event}_{itemid}_dcnt_{N}d
:N天內該物料上發生某行為的唯一使用者數,表徵物料熱門程度。item__{min|max|avg|sum}_{field}_{N}d
:N天內發生在該物料的正向行為中,使用者某數值屬性上的統計分布,表徵物料被那哪種數值屬性的使用者偏好。item__kv_{cate}_{event}_{N}d
:N天內發生在該物料上的某行為中,使用者某類目屬性的統計,表徵物料被哪種類目屬性的使用者偏好。
6
產生使用者特徵表,包含一段時間的使用者統計特徵。
步驟三:添加函數
建立商務程序。具體操作,請參見建立商務程序。
按右鍵建立的商務程序下的MaxCompute,選擇count_cates_kvs.py的python指令碼資源。具體操作,請參見建立並使用MaxCompute資源。
,建立一個名稱為按右鍵建立的商務程序下的MaxCompute,選擇建立函數。建立一個名稱為COUNT_CATES_KVS的MaxCompute函數。其中類名配置為
count_cates_kvs.CountCatesKVS
,資源清單配置為count_cates_kvs.py
。具體操作,請參見建立並使用自訂函數。
步驟四:運行工作流程並查看輸出結果
本資料集預設使用的是45天的資料,將會運行較長時間。如果希望更快的完成運行,需要進行如下操作:
更新執行時間視窗參數,使用更少時間內的資料。
分別單擊以下節點,將右側參數設定頁簽的執行時間視窗參數由預設的
(-45,0]
改為(-9,0]
:1_rec_sln_demo_item_table_preprocess_v2
2_rec_sln_demo_behavior_table_preprocess_ v2
3_rec_sln_demo_user_table_preprocess_v2
4_rec_sln_demo_behavior_table_preprocess_wide_v2
分別單擊以下節點,將右側參數設定頁簽的執行時間視窗參數由預設的
(-31,0]
改為(-8,0]
:5_rec_sln_demo_item_table_preprocess_all_feature_v2
6_rec_sln_demo_user_table_preprocess_all_feature_v2
修改SQL指令碼代碼,選取一部分使用者。
單擊節點
2_rec_sln_demo_behavior_table_preprocess_ v2
,將右側參數設定頁簽的SQL指令碼參數配置代碼的第32行由WHERE ds = '${pai.system.cycledate}'
改為WHERE ds = '${pai.system.cycledate}' and user_id %10=1
。單擊節點
3_rec_sln_demo_user_table_preprocess_v2
,將右側參數設定頁簽的SQL指令碼參數配置代碼的第38行由WHERE ds = '${pai.system.cycledate}'
改為WHERE ds = '${pai.system.cycledate}' and user_id %10=1
。
單擊Designer工作流程畫布上方的運行按鈕。
工作流程運行結束後,查看以下MaxCompute表是否有30天的資料:
物料特徵表:
rec_sln_demo_item_table_preprocess_all_feature_v2
行為日誌寬表:
rec_sln_demo_behavior_table_preprocess_v2
使用者特徵表:
rec_sln_demo_user_table_preprocess_all_feature_v2
您可以在SQL查詢頁面,查詢上述表資料。具體操作,請參見使用DataWorks串連。
說明表所屬專案禁止了分區表全表掃描,需要指定分區條件。如果查詢表資料的SQL需要進行全表掃描,您可以在SQL語句前加
set odps.sql.allow.fullscan=true;
語句並一起提交運行。全表掃描會導致輸入量增加從而使成本增加。