一、用戶畫像的介紹
用戶畫像的核心工作是為用戶打標簽,打標簽的重要目的之一是為了讓人能 夠理解並且方便計算機處理,如,可以做分類統計:喜歡 iphone 的用戶有多少? 喜歡 iphone 的人群中,男、女比例是多少?也可以做數據挖掘工作:利用聚類 算法分析,喜歡 iphone 的人年齡段分布情況。
二、構建用戶畫像
2.1 標簽的命名
標簽主題:用於刻畫屬於那種類型的標簽,如用戶屬性、用戶行為、用戶消 費、風險控 制等多種類型,可用 A、B、C、D 等字母表示各標簽主題;
標簽類型:標簽類型可划為分類型和統計型這兩種類型,其中分類型用於刻畫用戶屬於哪種類型,如是男是女、是否是會員、是否已流失等標簽,統計型 標簽用於刻畫統計用 戶的某些行為次數,如收藏次數、近 30 日購買次數等標簽,這類標簽都需要對應一個 用戶相應行為的權重次數;
開發方式:開發方式可分為統計型開發和算法型開發兩大開發方式。其中統計型開發可 直接從數據倉庫中各主題表建模加工而成,算法型開發需要對數據做機器學習的算法處 理得到相應的標簽;
是否互斥標簽:對應同一級類目下(如一級標簽、二級標簽),各標簽之間的關系是否 為互斥,可將標簽划分為互斥關系和非互斥關系。例如對於男、女標簽就是互斥關系, 同一個用戶不是被打上男性標簽就是女性標簽,對於高活躍、中活躍、低活躍標簽也是 互斥關系;
用戶維度:用於刻畫該標簽是打在用戶唯一標識(userid)上,還是打在用 戶使用的設 備(cookieid)上或其他的唯一標識。可用 U、 C 等字母分別標識 userid 和 cookieid 維度。
示例:對於用戶是男是女這個標簽,標簽主題是用戶屬性,標簽類型屬於分 類型,開發 方式為統計型,為互斥關系,用戶維度為 userid。這樣給男性用戶打 上“A111U001_001”,女性用戶打上標簽“A111U001_002”,其中“A111U” 為上面介紹的命名 方式,“001”為一 級標簽的 id,后面對於用戶屬性維度的 其他一級標簽可用“002”、“003” 等方式追加 命名,“_”后面的“001” 和“002”為該一級標簽下的標簽明細,如果是划分高、中、低活 躍用戶的, 對應一級標簽下的明細可划分為“001”、“002”、“003”。
注:本案例中標簽主題以用戶屬性和用戶行為;開發方式以統計性開發為主;用戶維度使用userid為唯一標識。
2.2 sql語句
create table profile_tag_user_gender ( user_id string comment '用戶編碼', tag_id string comment '標簽 id', tag_name string comment '用戶性別', tag_type string comment '用戶屬性' ) comment '用戶性別標簽表'; insert into profile_tag_user_gender (user_id,tag_id,tag_name,tag_type) select user_id, case when gender='男' then 'A111U001_001' else 'A111U001_002' end, gender,'用戶性別' from user_info; ---------------- create table profile_tag_user_age_region ( user_id string comment '用戶編碼', tag_id string comment '標簽 id', tag_name string comment '用戶年齡段', tag_type string comment '用戶屬性' ) comment '用戶年齡段標簽表'; insert into profile_tag_user_age_region (user_id,tag_id,tag_name,tag_type) select user_id, case when age_region=1 then 'A111U002_001' when age_region=2 then 'A111U002_002' when age_region=3 then 'A111U002_003' when age_region=4 then 'A111U002_004' when age_region=5 then 'A111U002_005' when age_region=6 then 'A111U002_006' else 'A111U002_008' end, age_region_alias,'用戶年齡段' from user_info; ------------------ create table profile_tag_user_grade ( user_id string comment '用戶編碼', tag_id string comment '標簽 id', tag_name string comment '用戶等級', tag_type string comment '用戶屬性' ) comment '用戶會員標簽標簽表'; insert into profile_tag_user_grade (user_id,tag_id,tag_name,tag_type) select user_id, case when user_grade='銅牌會員' then 'A111U003_001' when user_grade='銀牌會員' then 'A111U003_002' when user_grade='金牌會員' then 'A111U003_003' when user_grade='鑽石會員' then 'A111U003_004' when user_grade='PLUS會員' then 'A111U003_005' end, age_region_alias,'用戶等級' from user_info; ---------------- create table person_user_tag_action ( user_id string comment '用戶編碼', tag_id string comment '標簽 id', tag_name string comment '標簽名稱', tag_type string comment '用戶行為', action_count int comment '行為次數' ) comment '用戶行為標簽表'; insert into person_user_tag_action (user_id,tag_id,tag_name,tag_type,action_count) select user_id, case when user_action='0' then 'A111U004_001' when user_action='1' then 'A111U004_002' when user_action='2' then 'A111U004_003' when user_action='3' then 'A111U004_004' end, case when user_action='0' then '加入購物車' when user_action='1' then '點擊' when user_action='2' then '購買' when user_action='3' then '刪除' end, '用戶行為', count(*) from action group by user_id,user_action; ---------------
2.3 效果