
1. 介紹
1.1 項目概述
在商業直銷活動中,使用标簽化的使用者模型對進行營銷活動進行優化是實作精準營銷的一個重要工具。本項目要求根據一家德國郵購公司已有客戶的人口學特征資料,使用非監督學習技術來分析公司現有顧客的主要特征。然後利用監督學習技術搭建預測模型,在德國的總人口統計資料集上預測新客戶。這篇文章是與貝塔斯曼 Arvato Analytics 合作提供的優達學城資料科學家納米學位畢業項目的一部分。項目中的資料由貝塔斯曼子公司Arvato Financial Solutions提供。
項目分為三個主要步驟:客戶細分報告、監督學習模型和Kaggle競争:
- 現有客戶細分報告:采用EDA、PCA和聚類分析的方法對總體和客戶群進行分析,目的是能夠描述公司的核心客戶群。
- 新客戶的預測報告(監督學習):使用在第一步中觀察到的内容建立一個監督學習模型,用其預測一個人是否會響應郵件營銷活動。
- Kaggle 比賽: 在營銷活動的人口統計資料集上預測新客戶
1.2. 問題描述
根據Arvato Financial Solutions 的進階大客戶經理Time Reis的說法,該項目要解決的基本商業問題是:如何讓一家郵購公司更高效的獲得新客戶?
1.3. 度量名額
根據問題的類型,我們将使用兩種不同的度量:對非監督學習模型,要用PCA 和聚類來分析郵購公司現有客戶的特征,并将其與德國一般人群的人口統計資料進行對比,我們将采用的政策是肘部法則。 對監督學習模型,需要對營銷活動的對象(第三個資料集 MAILOUT)作預測,要判斷一個人是否會對一個郵件營銷活動有響應,該資料集有顯著的類别不平衡問題(僅有約1.24%的人會對該活動有響應)。是以我們采用ROC - AUC (Receiver Operating Characteristic - Area Under the Curve)名額進行衡量。
2. 探索資料和資料整理
本項目的資料包括四個資料檔案和兩個特征定義檔案:
AZDIAS: 德國的一般人口統計資料;891211 人(行)x 366 個特征(列)
CUSTOMERS: 郵購公司顧客的人口統計資料;郵購公司顧客的人口統計資料;191652 人(行)x 369 個特征(列)
MAILOUT_TRAIN: 營銷活動的對象的人口統計資料; 42982 人(行)x 367 個特征(列)
MAILOUT_TEST: 營銷活動的對象的人口統計資料;42833 人(行)x 366個特征(列)
2.1.加載和浏覽資料
德國的一般人口統計資料集(Azdias)有891221行和366列,郵購公司顧客資料集(Customers)有191652 行369列。Customers資料集包括三個額外的列('CUSTOMER_GROUP'、'ONLINE_PURCHASE' 和 'PRODUCT_GROUP'),提供了檔案中顧客的更多元度的資訊。原始的 "MAILOUT" 包括一個額外的列 "RESPONSE",表示每個收到郵件的人是否成為了公司的顧客。人口統計資料檔案的每一行代表一個人,但也包含個人以外的資訊,包括有關他們的家庭,建築物和鄰居的資訊。
加載資料集特征的統計資訊檔案:
建立資料集 EDA 對象:
2.2. 資料清洗
每次做飯的第一步都是要把菜洗幹淨,過一下開水。拿到的資料都需要先做清洗工作,排除異常值、空白值、無效值、重複值等。這項工作經常會占到整個資料分析過程将近一半的時間
步驟1: 把未知資料轉換為NaN
步驟2:删除缺失值多的行/列
上圖顯示,Azdias 資料集中,有154537行資料的缺失率超過0.25 ,這些行被删除。
列缺失率門檻值設定為0.37,如上圖所示,Azdias/Customers中有70列被删除。
步驟3: 删除未定義特征
删除缺少資訊和無定義的特征,共計26個, 另外還要從 Customers 資料集中删除三個專有的列 ('CUSTOMER_GROUP'、'ONLINE_PURCHASE' 和 'PRODUCT_GROUP'),因為後面比較Azdias 和 Customers兩個資料集時,這些未定義特征和專有特征沒有幫助。
步驟4: 删除資訊重複特征
資料集中有很多資訊重複的特征,例如 LP_FAMILIE_FEIN, LP_FAMILIE_GROB, 都是表示家庭類型資訊,LP_FAMILIE_FEIN表示細粒度資訊,LP_FAMILIE_GROB表示粗粒度資訊,二者隻是資訊粒度不同。
上圖中同一行的兩個特征都是表示相同的含義,左側字尾是_GROB的特征表示粗粒度資訊,_FEIN表示細粒度特征。我決定删除這幾個資訊重複特征,'ALTERSKATEGORIE_FEIN', 'LP_FAMILIE_GROB', 'LP_LEBENSPHASE_FEIN', 'LP_STATUS_GROB','CAMEO_DEU_2015'。因為他們有些是沒有定義,或者選擇對應的_GROB特征就夠用了。
步驟5: 特征重編碼
有很多特征需要重編碼,例如 OST_WEST_KZ 特征的數值中有兩個是字元 O, W. 由于要使用的非監督學習技術僅适用于以數字方式編碼的資料,是以我們需要對其進行重編碼。
還有一些特征是混合型分類特征,需要拆分為多個單一類型特征。
混合型特征LP_LEBENSPHASE_GROB - lifestage rough. 被拆分為三個包含年齡、家庭和收入的新特征(LP_LEBENSPHASE_GROB_SPLIT_FAMILY, LP_LEBENSPHASE_GROB_SPLIT_AGE, LP_LEBENSPHASE_GROB_SPLIT_INCOME)。
步驟6: 處理離群值
上面左側的散點圖中,特征GEBURTSJAHR ( year of birth) 中有很多零值,出生日期是0明顯不合理,需要轉換為NaN. 右側是處理後的結果。
對特征ARBEIT, ALTERSKATEGORIE_GROB,KOMBIALTER 中的離群值進行處理。
總結一下資料清理過程,我主要做了以下操作:
• 将未知資料還原為NaN,并删除缺失率百分比較高的行和列
• 清理了資訊重複的特征
• 特征重編碼和拆分混合特征
• 用歸一化進行特征縮放,并用“mean”填充缺少的值
資料清理是一個疊代的過程,也是最耗時的工序,本項目中,資料清理過程的消耗時間占總時間的80%以上。
3. 客戶細分報告
在本節中,我将使用非監督學習技術來刻畫郵購公司已有顧客和德國一般人群的人口統計資料的關系,發現一般人群中的哪一類人更可能是郵購公司的新顧客。接下來,我将使用兩種常用的非監督機器學習方法,降維和聚類進行客戶細分。
3.1. 資料比較Customers vs. Azdias
消費者郵購活動的相關特征 (以D19_開頭) 對比:
D19: This data contains unique data regarding the mail-order activity of consumers, differentiated 根據字典定義,以D19_開頭的特征是包含有關消費者郵購活動的唯一資料。
上圖中D19_SOZIALES 的值 1 在Customers中顯著高于Azdias,雖然特征字典沒有給出D19_SOZIALES的定義。但是可以猜到它表示的是一種商品,而值 1表示在過去一年中有多次購買 (Multibuyer 0-12 months). D19_SOZIALES 的值 1 在Customers中顯著高于Azdias, 雖然特征字典沒有給出D19_SOZIALES的定義。但是可以猜到它表示的是一種商品,而值 1表示在過去一年中有多次購買 (Multibuyer 0-12 months). D19_KONSUMTYP_MAX 的值 2 顯著高于Azdias, 8 和 9 明顯低于Azdias. 但字典沒有給出 D19_KONSUMTYP_MAX 的定義。
CAMEO_ 類特征對比:
3.2. 主成分分析 (PCA)
降維是将大量的特征壓縮為(通常是)更小的特征集。主成分分析 (PCA)是一種資料轉換技術,它删除次要資訊,隻保留主要特征而允許你保留資料中的主要資訊。我将使用scikit-learn 中的 PCA 來降低資料集的維數
最後我選擇保留200個主成分,其累積方差是0.97%,其已經能夠保留資料中的主要資訊。
3.3. K-Means 聚類
聚類是基于相似性對資料進行分組。在選擇好主成分後,我們希望通過聚集這些主成分來幫助細分客戶。我使用scikit-learn的K-Means來聚類主成分。
根據肘部法則,我選擇聚類數為10。
聚類比較 Customers vs. Azdias 顯示聚類 2, 0 和 1,Customers明顯高于Azdias。訓示這裡有特定人群對公司産品感興趣。
聚類 2, 0 和 1 中的重要特征 (Top/Tail 5) 如下:
4. 監督學習模型和Kaggle比賽
現在開始搭建預測模型,"MAILOUT"資料檔案的的每一行表示一個郵購活動的潛在顧客,我們将使用MAILOUT_TRAIN資料集訓練這個模型,然後再MAILOUT_TEST資料集上做預測,來決定是否該把他作為該活動的營銷對象。
浏覽訓練資料集(MAILOUT),我發現此訓練資料集存在類别高度不平衡問題,即在42962人中,隻有532人對郵遞活動做出了回應。正例數遠小于負例數量。是以在訓練模型時将使用 sklearn庫的分層k折交叉驗證工具“StratifiedKFold”來分割訓練資料和驗證資料,以保證充分利用有限的正例資料,同時在建立模型是設定參數 class_weight='balanced',
我們要解決的基本商業問題是:如何讓一家郵購公司更高效的獲得新客戶? 要解決這個問題我們需要一些工具,這些工具就是各種模型。可供選擇的模型有很多, 比如有線性或邏輯回歸,BaggingClassifier和決策樹。我使用 LGBMClassifier,并使用10折分層折交叉驗證方法,參數優化使用了 hyperopt。
4.1. 模型訓練結果
Top 15 主要特征:
4.2. Kaggle比賽
我把結果送出到 Kaggle上後,roc_auc_score(Receiver Operating Characteristic Curve) 分數是 0.76682。
5. 總結
在本部落格中,我介紹了一個實際生産中的機器學習項目,該項目是優達學城資料科學家納米學位的一個畢業項目,資料由貝塔斯曼的子公司Arvato Financial Solutions 提供,在本項目中,我作的主要事情如下:
• 探索了德國的一般人口統計資料和郵購公司顧客的人口統計資料集
• 清洗資料,包括排除異常值、空白值、無效值、重複值等等
• 通過資料對比可視化和非監督學習技術,即PCA和KMeans,将群體分割(分成不同的叢集),為公司推薦潛在客戶
• 利用監督學習來預測公司的新客戶
• 分析監督學習模型中的重要特征
最後,我要感謝Udacity、Arvato Bertelsmann和collaborate 公司提供如此精彩的資料集,讓我學習和實踐我的機器學習和資料科學技能。謝謝你的時間,希望你喜歡這個部落格。