一、場景分析1、場景案例
網際網路行業的朋友一定了解或者聽說過下列幾個場景:
阿里:千人千面,意思不同使用者使用阿里相關的產品感覺是不一樣的,例如支付寶首頁的推薦內容,和其他相關推薦流資訊是完全不同的。
如上幾種場景的邏輯就是:基於不斷分析使用者的行為,生成使用者的特徵畫像,然後再基於使用者標籤,定製化的推薦相關內容。
2、基本概念通過上面的場景,衍生出來兩個概念:
使用者畫像
使用者畫像,作為一種勾畫目標使用者、聯絡使用者訴求與設計方向的有效工具,把該使用者相關聯的資料的視覺化的展現,就形成了使用者畫像。使用者畫像在各領域得到了廣泛的應用,最初是在電商領域得到應用的,在大資料時代背景下,使用者資訊充斥在網路中,將使用者的每個具體資訊抽象成標籤,利用這些標籤將使用者形象具體化,從而為使用者提供有針對性的服務。
標籤資料
標籤在生活中非常常見,比如商品標籤,個人標籤,行業標籤,例如提到996就想到程式設計師,提到程式設計師就想到格子衫。
標籤是把分散的多方資料進行整合納入統一的技術平臺,並對這些資料進行標準化和細分,進行結構化儲存和更新管理,讓業務線可以把這些細分結果推向現有的互動營銷環境裡的平臺,產生價值,這些資料稱為標籤資料,也就是常說的標籤庫。資料標籤的概念也是在最近幾年大資料的發展中不斷火熱起來的。
標籤價值
精細運營的基礎,有效提高流量精準和效率。幫助產品快速定位需求人群,進行精準營銷;能幫助客戶更快切入到市場週期中;深入的預測分析客戶並作出及時反應;基於標籤的開發智慧推薦系統;基於某類使用者的分析,洞察行業特徵;標籤的核心價值,或者說最常用的場景:實時智慧推薦,精準化數字營銷。
二、資料標籤1、標籤劃分屬性標籤
屬性標籤是變化最小的,例如使用者實名認證之後,基於身份資訊獲取相關:性別,生日,出生年月,年齡,等相關標籤。變動頻率小,且最具有精準性。
行為標籤
行為標籤就是使用者通過在產品上的一系列操作,基於行為日誌分析得出:例如購買能力、消費愛好、季節性消費標籤等。在資訊流的APP上,通過相關瀏覽行為,不斷推薦使用者感興趣的內容就是基於該邏輯。
規則標籤
根據業務場景需求,配置指定規則,基於規則生成分析結果,例如:
近7天活躍使用者:近7天,每天都登入的使用者作為規則生成;丟失使用者:六個月內沒有任何操作,可以發放高額優惠劵;潛在使用者:使用或產生瀏覽資料,但是未發生任何交易行為;這類標籤可以基於動態的規則配置,經過計算和分析,生成描述結果,也就是規則標籤。
擬合標籤
擬合類的標籤最具有複雜性,通過使用者上述幾種標籤,智慧組合分析,給的預測值,例如:未婚、瀏覽相關婚禮內容,通過分析預測使用者將要舉辦婚禮,得到一個擬合結果:預測將要結婚。這個預測邏輯也可以反向執行,使用者購買嬰兒用品:預測已婚已育。
這就是資料時代常說的一句話:使用者在某個應用上一通操作之後,演算法分析的結果可能比使用者對自己的描述還要真實。
2、標籤加工流程資料採集
資料採集的渠道相對較多,比如同一APP內的各種業務線:購物、支付、理財、外賣、資訊瀏覽等等。通過資料通道傳輸到統一的資料聚合平臺。有了這些海量日誌資料的支撐,才具有資料分析的基礎條件。不管是資料智慧,深度學習,演算法等都是建立在海量資料的基礎條件上,這樣才能獲取具有價值的分析結果。
資料加工
結合如上業務,通過對海量資料的加工,分析和提取,獲取相對精準的使用者標籤,這裡還有關鍵的一步,就是對已有的使用者標籤進行不斷的驗證和修復,尤其是規則類和擬合類的相關標籤。
標籤庫
通過標籤庫,管理複雜的標籤結果,除了複雜的標籤,和基於時間線的標籤變,標籤資料到這裡,已經具有相當大的價值,可以圍繞標籤庫開放一些收費服務,例如常見的,使用者在某電商APP瀏覽某些商品,可以在某資訊流平臺看到商品推薦。大資料時代就是這麼令人感覺智慧和窒息。
標籤業務
資料走了一大圈轉換成標籤,自然還是要回歸到業務層面,通過對標籤資料的使用者的分析,可以進行精準營銷,和智慧推薦等相關操作,電商應用中可以提高成交量,資訊流中可以更好的吸引使用者。
應用層
把上述業務開發成服務,整合到具有的應用層面,不斷提升應用服務的品質,不斷的吸引使用者,提供服務。當然使用者的資料不斷在應用層面產生,在轉到資料採集服務中,最終形成完整的閉環流程。
3、應用案例從流程和業務層面描述都是簡單的,到開發層面都會變得複雜和不好處理,這可能就是產品和開發之間的隔閡。
標籤的資料型別
不同標籤的分析結果需要用不同的資料型別描述,在標籤體系中,常用描述標籤的資料型別如下:列舉、數值、日期、布林、文字型別。不同的型別需要不一樣的分析流程。
商品和標籤
這裡提供一個基礎案例,用商品的標籤來分析商品,例如通過商品產地,價格,狀態等條件,來查詢產品庫有多少符合條件的商品。
資料表設計
主要分四張表:標籤分類,標籤庫,標籤值,標籤資料。
CREATE TABLE `tc_tag_catalog` (\t`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',\t`catalog_name` VARCHAR (50) NOT NULL DEFAULT '' COMMENT '名稱',\t`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',\t`update_time` datetime DEFAULT NULL COMMENT '更新時間',\t`state` INT (1) DEFAULT '1' COMMENT '狀態1啟用,2禁用',\tPRIMARY KEY (`id`)) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '標籤層級目錄';CREATE TABLE `tc_tag_cloud` (\t`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',\t`catalog_id` INT (11) NOT NULL COMMENT '目錄ID',\t`tag_name` VARCHAR (100) DEFAULT '' COMMENT '標籤名稱',\t`tag_code` INT (11) DEFAULT NULL COMMENT '標籤編碼',\t`bind_column` VARCHAR (100) DEFAULT '' COMMENT '繫結資料列',\t`data_type` INT (2) NOT NULL COMMENT '1列舉,2數值,3日期,4布林,5值型別',\t`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',\t`update_time` datetime DEFAULT NULL COMMENT '更新時間',\t`remark` VARCHAR (150) DEFAULT NULL COMMENT '備註',\t`state` INT (1) DEFAULT '1' COMMENT '狀態1啟用,2禁用',\tPRIMARY KEY (`id`)) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '標籤雲';CREATE TABLE `tc_tag_data_enum` (\t`tag_code` INT (11) NOT NULL COMMENT '標籤編碼',\t`data_value` VARCHAR (150) NOT NULL COMMENT '列舉值',\t`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',\tKEY `tag_code_index` (`tag_code`) USING BTREE) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '標籤列舉值';CREATE TABLE `tc_tag_data_set` (\t`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',\t`product_name` VARCHAR (100) DEFAULT '' COMMENT '商品名稱',\t`unit_price` DECIMAL (10, 2) DEFAULT '0.00' COMMENT '單價',\t`is_shelves` INT (1) DEFAULT '1' COMMENT '是否上架:1否,2是',\t`origin_place` VARCHAR (100) DEFAULT '' COMMENT '產地',\t`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',\tPRIMARY KEY (`id`)) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '標籤資料集';
模擬入參介面
這裡的引數應該是基於需求,動態選取,進行組織到一起:
例如圖片中這裡給定的標籤值列表,稱為列舉值。
@RestControllerpublic class AnalyzeController { @Resource private TagDataSetService tagDataSetService ; @GetMapping("/analyze") public String analyze (){ List<TagParam> tagParamList = new ArrayList<>() ; TagParam tagParam1 = new TagParam(1,"產地","origin_place") ; List<String> valueList1 = new ArrayList<>() ; valueList1.add("深圳"); valueList1.add("廣東"); tagParam1.setValueList(valueList1); tagParamList.add(tagParam1) ; TagParam tagParam2 = new TagParam(2,"價格","unit_price") ; List<String> valueList2 = new ArrayList<>() ; valueList2.add("1999"); tagParam2.setValueList(valueList2); tagParamList.add(tagParam2) ; TagParam tagParam3 = new TagParam(3,"生產日期","create_time") ; List<String> valueList3 = new ArrayList<>() ; valueList3.add("2020-05-01 13:43:54"); tagParam3.setValueList(valueList3); tagParamList.add(tagParam3) ; TagParam tagParam4 = new TagParam(4,"是否上架","is_shelves") ; List<String> valueList4 = new ArrayList<>() ; valueList4.add("1"); tagParam4.setValueList(valueList4); tagParamList.add(tagParam4) ; TagParam tagParam5 = new TagParam(5,"產品名稱","product_name") ; List<String> valueList5 = new ArrayList<>() ; valueList5.add("智慧"); tagParam5.setValueList(valueList5); tagParamList.add(tagParam5) ; Integer count = tagDataSetService.analyze(tagParamList) ; return "Result:" + count ; }}
引數解析查詢
通過對引數的解析,最終形成查詢的SQL語句,獲取精準的結果資料。
@Servicepublic class TagDataSetServiceImpl extends ServiceImpl<TagDataSetMapper, TagDataSet> implements TagDataSetService { @Resource private TagDataSetMapper tagDataSetMapper ; @Override public Integer analyze(List<TagParam> tagParamList) { StringBuffer querySQL = new StringBuffer() ; for (TagParam tagParam:tagParamList){ querySQL.append(" AND ") ; querySQL.append(tagParam.getBindColumn()) ; // 1列舉,2數值,3日期,4布林,5值型別 List<String> valueList = tagParam.getValueList(); switch (tagParam.getDataType()){ case 1: querySQL.append(" IN (") ; for (int i = 0 ; i < valueList.size() ;i++){ if (i != valueList.size()-1){ querySQL.append("'").append(valueList.get(i)).append("',"); } else { querySQL.append("'").append(valueList.get(i)).append("'"); } } querySQL.append(" )") ; break; case 2: querySQL.append("=").append(tagParam.getValueList().get(0)) ; break; case 3: querySQL.append(">='").append(tagParam.getValueList().get(0)).append("'") ; break; case 4: querySQL.append("=").append(tagParam.getValueList().get(0)) ; break; case 5: querySQL.append(" LIKE '%").append(tagParam.getValueList().get(0)).append("%'") ; break; default: break; } } /* 最終執行的 SQL SELECT COUNT(*) FROM tc_tag_data_set WHERE 1 = 1 AND origin_place IN ('深圳', '廣東') AND unit_price = 1999 AND create_time >= '2020-05-01 13:43:54' AND is_shelves = 1 AND product_name LIKE '%智慧%' */ String whereCondition = String.valueOf(querySQL); return tagDataSetMapper.analyze(whereCondition); }}
可能有人會說這不就是個查詢流程嗎?如果有這樣的疑問,把上述案例換成使用者查詢,標籤資料的價值會更直觀。
三、智慧畫像1、基本概念使用者畫像
作為一種勾畫目標使用者、聯絡使用者訴求與設計方向的有效工具,使用者畫像在各領域得到了廣泛的應用。最初是在電商領域得到應用的,在大資料時代背景下,使用者資訊充斥在網路中,將使用者的每個具體資訊抽象成標籤,利用這些標籤將使用者形象具體化,從而為使用者提供有針對性的服務。
行業畫像
通過行業屬性標籤,行業下使用者標籤的綜合分析,生成行業分析報告,提供極有價值的導向,這是最近兩年極其熱門的應用。
畫像補全
通過不斷分析使用者資料,豐富標籤庫,使使用者的畫像更加豐富立體。
2、畫像報告通過標籤資料的分析,生成一份分析報告,報告內容包含豐富的使用者標籤統計資料。
例如:90後畫像報告