一、項目介紹
? ? 該項目數據來源于阿里天池——淘寶應用上的用戶行為數據:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
????代碼地址:https://github.com/LittleStarYing/taobao.git
????數據集由阿里巴巴集團提供,這里我只采用了其第一部分數據集D。
????其數據集詳細信息如下:

二、用戶畫像標簽體系介紹
? ??用戶畫像的核心在于給用戶“打標簽”,每一個標簽通常是人為規(guī)定的特征標識,用高度精煉的特征描述一類人,例如年齡、性別、興趣偏好等,不同的標簽通過結構化的數據體系整合,就可與組合出不同的用戶畫像。
????梳理標簽體系是實現用戶畫像過程中最基礎、也是最核心的工作,后續(xù)的建模、數據倉庫搭建都會依賴于標簽體系。
????為什么需要梳理標簽體系,因為不同的企業(yè)做用戶畫像有不同的戰(zhàn)略目的,廣告公司做用戶畫像是為精準廣告服務,電商做用戶畫像是為用戶購買更多商品,內容平臺做用戶畫像是推薦用戶更感興趣的內容提升流量再變現,金融行業(yè)做用戶畫像是為了尋找到目標客戶的同時做好風險的控制。
????所以第一步,我們要結合所在的行業(yè),業(yè)務去分析我們用戶畫像的目的。這其實就是戰(zhàn)略,我們要通過戰(zhàn)略去指引我們最終的方向。

????對于電商企業(yè)來說,可能最重要的兩個問題就是:
????現有用戶- 我的現存用戶是誰?為什么買我的產品?他們有什么偏好?哪些用戶價值最高?
????潛在客戶- 我的潛在用戶在哪兒?他們喜歡什么?哪些渠道能找到他們?獲客成本是多少?
????而對于金融企業(yè),還要加上一條:
????用戶風險—用戶的收入能力怎么樣?他們是否有過貸款或者信用卡的逾期?他們的征信有問題嗎?
????我們做用戶畫像的目的也就是根據我們指定的戰(zhàn)略方向最終去解決這些問題。
????在梳理標簽的過程還要緊密的結合我們的數據,不能脫離了數據去空想,當然如果是我們必須要的數據,我們可能需要想辦法去獲取這些數據,這就是數據采集的問題,我們之后會深入的討論。
????先展示兩種常見的標簽體系,隨后我們將按步驟建立我們的標簽體系。
電商類標簽體系
? ??

????可以看到電商類的標簽體系,更關注用戶的屬性,行為等等信息。那么我們需要的數據也就來源于用戶可提供的基本信息,以及用戶的行為信息,這些我們可以通過埋點獲取,而用戶的訂單情況也是非常的重要的標簽。
?金融類標簽體系
? ??

????對于金融行業(yè),最明顯的區(qū)別是增加了用戶的價值和用戶風險的信息。這些信息在用戶申請貸款時一般都可以提供,還有很多信息需要通過征信獲取。
????最終,不管是電商還是金融或者其他領域,我們都可以通過數據對用戶進行畫像,最終建立標簽體系,影響我們的業(yè)務,最終實現戰(zhàn)略目的。
????下面我們來具體看一下如何一步步的分析建立整體標簽體系。
標簽的維度與類型
? ??在我們建立用戶標簽時,首先要明確基于哪種維度去建立標簽。
????一般除了基于用戶維度(userid)建立用戶標簽體系外,還有基于設備維度(cookieid)建立相應的標簽體系,當用戶沒有登錄設備時,就需要這個維度。當然這兩個維度還可以進行關聯。
????而兩者的關聯就是需要ID-Mapping算法來解決,這也是一個非常復雜的算法。更多的時候我們還是以用戶的唯一標識來建立用戶畫像。
????而標簽也分為很多種類型,這里參照常見的分類方式,
????從對用戶打標簽的方式來看,一般分為三種類型:1、基于統計類的標簽;2、基于規(guī)則類的標簽、3、基于挖掘類的標簽。下面我們介紹這三種類型標簽的區(qū)別:
????統計類標簽:這類標簽是最為基礎也最為常見的標簽類型,例如對于某個用戶來說,他的性別、年齡、城市、星座、近7日活躍時長、近7日活躍天數、近7日活躍次數等字段可以從用戶注冊數據、用戶訪問、消費類數據中統計得出。該類標簽構成了用戶畫像的基礎;
????規(guī)則類標簽:該類標簽基于用戶行為及確定的規(guī)則產生。例如對平臺上“消費活躍”用戶這一口徑的定義為近30天交易次數>=2。在實際開發(fā)畫像的過程中,由于運營人員對業(yè)務更為熟悉、而數據人員對數據的結構、分布、特征更為熟悉,因此規(guī)則類標簽的規(guī)則確定由運營人員和數據人員共同協商確定;
????機器學習挖掘類標簽:該類標簽通過數據挖掘產生,應用在對用戶的某些屬性或某些行為進行預測判斷。例如根據一個用戶的行為習慣判斷該用戶是男性還是女性,根據一個用戶的消費習慣判斷其對某商品的偏好程度。該類標簽需要通過算法挖掘產生。
????標簽的類型是對標簽的一個區(qū)分,方便我們了解標簽是在數據處理的哪個階段產生的,也更方便我們管理。
標簽分級分類
????標簽需要進行分級分類的管理,一方面使得標簽更加的清晰有條件,另一方面也方便我們對標簽進行存儲查詢,也就是管理標簽。
? ??

????用戶畫像體系和標簽分類從兩個不同角度來梳理標簽,用戶畫像體系偏戰(zhàn)略和應用,標簽分類偏管理和技術實現側。
????把標簽分成不同的層級和類別,一是方便管理數千個標簽,讓散亂的標簽體系化;二是維度并不孤立,標簽之間互有關聯;三可以為標簽建模提供標簽子集。
????梳理某類別的子分類時,盡可能的遵循MECE原則(相互獨立、完全窮盡),尤其是一些有關用戶分類的,要能覆蓋所有用戶,但又不交叉。比如:用戶活躍度的劃分為核心用戶、活躍用戶、新用戶、老用戶、流失用戶,用戶消費能力分為超強、強、中、弱,這樣按照給定的規(guī)則每個用戶都有分到不同的組里。
標簽命名
????標簽的命名也是為了我們可以對標簽進行統一的管理,也更好識別出是什么標簽。

????這是一種非常好的命名方式,解釋如下:
????標簽主題:用于刻畫屬于那種類型的標簽,如用戶屬性、用戶行為、用戶消費、風險控制等多種類型,可用A、B、C、D等 字母表示各標簽主題;
????標簽類型:標簽類型可劃為分類型和統計型這兩種類型,其中分類型用于刻畫用戶屬于哪種類型,如是男是女、是否是會員、 是否已流失等標簽,統計型標簽用于刻畫統計用戶的某些行為次數,如歷史購買金額、優(yōu)惠券使用次數、近30日登陸次數等 標簽,這類標簽都需要對應一個用戶相應行為的權重次數;
????開發(fā)方式:開發(fā)方式可分為統計型開發(fā)和算法型開發(fā)兩大開發(fā)方式。其中統計型開發(fā)可直接從數據倉庫中各主題表建模加工 而成,算法型開發(fā)需要對數據做機器學習的算法處理得到相應的標簽;
????是否互斥標簽:對應同一級類目下(如一級標簽、二級標簽),各標簽之間的關系是否為互斥,可將標簽劃分為互斥關系和 非互斥關系。例如對于男、女標簽就是互斥關系,同一個用戶不是被打上男性標簽就是女性標簽,對于高活躍、中活躍、低 活躍標簽也是互斥關系;
????用戶維度:用于刻畫該標簽是打在用戶唯一標識(userid)上,還是打在用戶使用的設備(cookieid)上??捎肬、C等字 母分別標識userid和cookieid維度。
三、指標構建
????主要從用戶行為、用戶屬性這2個維度為每個用戶構建標簽畫像:
? ??


????搭建的用戶標簽如下表:

四、代碼實現
????代碼實現流程如下圖:

導入所需庫,讀取數據

1.數據預處理

①數據抽取

②缺失值處理


③日期與時間的處理

④制作用戶標簽

2.用戶行為標簽
這部分只做部分代碼思路講解,給出第一部分的示例。
①用戶時間段分布
用戶瀏覽活躍時間段
第一步:最用戶和時段分組,統計瀏覽次數。使用函數:groupby 、count、reset_index

第二步:列重命名。使用函數:rename

第三步:統計每個用戶瀏覽次數最多的時段。使用函數:groupby、max、reset_index

第四步:列重命名。使用函數:rename

第五步:拼接原表和計算表。使用函數:merge

第六步:選取各用戶瀏覽次數最多的時段,如有并列最多的時段,用逗號連接。使用函數:loc、groupby、aggreate、reset_index
time_browse_hour = time_browse.loc[time_browse['hour_counts']==time_browse['read_counts_max'],'hour'].groupby(time_browse['user_id']).aggregate(lambda x:','.join(x)).reset_index()

第七步:將用戶瀏覽活躍時間段加入到用戶標簽表中

用戶購買活躍時間段
步驟同上,這里不做贅述

最后清除緩存

用戶傾向周幾瀏覽

用戶傾向周幾購買

②關于類目的用戶行為

瀏覽最多的類目

這里需要注意的是,一定要先將df_most_cate_browse['item_category']轉換成str類型,不然直接做join的話會拼接category類型,出現問題,得到非預期值


收藏最多的類目
? ??????代碼略
加購最多的類目
? ??????代碼略
購買最多的類目
? ??????代碼略
③30天用戶行為
????????數據集中的數據正好是一個月,30天的數據,即整個數據集的數據
近30天購買次數

近30天加購次數

近30天活躍天數

④7天用戶行為

近7天購買次數
????????代碼略
近7天加購次數
????????代碼略
近7天活躍天數
????????代碼略
⑤最后一次行為距今天數
上一次瀏覽距今天數
days_browse = df[df['behavior_type']==1].groupby('user_id')['date'].max().apply(lambda x:(datetime.strptime('2014-12-19','%Y-%m-%d')-x).days)

上次加購距今天數
? ??????代碼略
上次購買距今天數
? ??????代碼略
⑥其他
最近兩次購買間隔天數

是否瀏覽未下單


是否加購未下單

3.用戶屬性標簽
①是否復購用戶

②訪問活躍度


上圖可知,訪問次數多的訪客比訪問次數少的訪客數量多,且在20次左右為拐點,因此定義訪問次數小于等于18次的為低活躍度,訪問次數大于18次定義為高活躍度。 該圖中,訪問次數多的客戶比訪問次數少的客戶數量多,與絕大多數產品訪問規(guī)律相反。從側面反映了淘寶的用戶粘性強。

③購買活躍度


14次左右是一個拐點,因此定義購買次數小于等于14次為低活躍,大于14次為高活躍。 此定義只是從用戶的角度觸發(fā),工作中當從業(yè)務出發(fā)定義是否活躍

④購買的品類是否單一

⑤用戶價值分組(RFM)
因為沒有消費金額特征,所以這里只最近一次交易(上一次購買距今天數)和交易頻率(購買活躍度)兩個維度分析兩個維度分析:


ps:異常點為雙12


最后保存數據為csv文件
