摘 要:在“互聯網+”的迅猛發展時代,O2O消費成為一種吸引眼球的新模式,催生了優惠券吸引客戶的營銷方式。精準投放是提高優惠券使用率和節約營銷成本的重要手段。本文結合Python的pandas、sk-learn等庫,使用特征衍生方法提取用戶及商鋪的關鍵特征構建用戶畫像,建立梯度下降法分類SGDClassifier模型預測用戶對相應商鋪的優惠券使用情況進行概率預測,設定閾值規則對相應用戶進行優惠券發放。
關鍵詞:優惠券發放;特征衍生;分類模型;用戶畫像
一、背景介紹
隨著移動手機網絡的發展,各行各業都進入“互聯網+”的高速發展時代,其中O2O(Online to Offline)線上到線下消費模式成為一種全新的營銷方式。O2O行業通過移動互聯網關聯數億級消費者,各種手機APP記錄了超過百億條用戶每天的行為和位置記錄,因此也給大數據研究在商業化運營上的應用帶來一個契機。在O2O(Online to Offline)中重要營銷的手段之一是應用優惠券吸引新客戶以及盤活老用戶促進用戶消費。
在用戶的角度來說,對大多數用戶進行優惠券隨機投放,既無法達到預期的效果,相反也會對用戶的生活進行干擾。站在商家的角度,濫發優惠券在營銷成本和品牌聲譽上均會造成巨大的損失。在這種情形下,個性化投放不僅使得消費者得到了優惠,而且提高了商家的營銷能力,同時也是提升優惠券核銷率的重要方式。
二、logistic分類模型及AUC的介紹
SGDClassifier分類器是具有SGD訓練的線性分類器(SVM,邏輯回歸),該估計器利用隨機梯度下降(SGD)學習實現正則化線性模型:以此估計每個樣本的損失梯度,并且沿著減小強度計劃(即學習速率)的方式更新模型。SGD允許使用minibatch(在線/核心外)學習。為了使用默認學習速率計劃獲得最佳結果,數據應具有零均值和單位方差。此實現適用于表示為要素的密集或稀疏浮點值數組的數據。它適合的模型可以用損耗參數控制。
在用于大型數據時,可以獲得極高的訓練速度,然而有時候數據集非常巨大以致無法加載到內存中,針對這種情況,scikit_learn提供了SGDClassifier類供用戶選擇。SGDClassifier類背后的概念就是隨機梯度算法,基于隨機梯度下降的感知、邏輯斯蒂回歸以及支持向量機模型建立分類器。
AUC是一個模型評價指標,用于二分類模型的評價,對于二分類模型,還有很多其他評價指標,比如:logloss、accuracy、precision。AUC通常比accuracy常用,因為機器學習的模型對分類問題的預測結果都是概率。如果要計算accuracy,需要先把概率轉化成類別,這就需要手動設置一個閾值,對一個樣本的預測概率高于這個預測,就把這個樣本放進一個類別里面,低于這個閾值,放進另一個類別里面。所以這個閾值很大程度上影響了accuracy的計算。而使用AUC則可以避免將預測概率轉化成類別。
三、描述性統計分析及建模
1.數據說明
我們采用的是阿里云天池數據集中的O2O優惠券數據集,數據的字段描述如下,表1為用戶線下消費和優惠券領取行為表。其中的內容是客戶在2016年1月至2016年6月期間線上線下購買行為。我們的任務目標是預測客戶利用2016年7月領取優惠券后15天期限內的使用情況,判斷是否發放優惠券廣告。本文使用上述數據,建立分類模型后,繼續預測在15天的規定時間內商鋪的優惠券是否會被用戶使用。判斷預測使用情況準確的指標是對于2016年7月的用戶數據是否在投放優惠券后發生購買行為的平均AUC的大小。
2.數據讀取以及關于單字段數據分析
使用Python讀取表1的數據作為訓練數據集,該數據框中有17554884行數據,其中有5個字符型字段,2個整數型字段。再利用pandas庫對各字段進行數據清洗工作。
(1)用戶編號User_id和距離Merchant_id字段
User_id是數據集的主鍵編號,是唯一對應每一個用戶的。因此可以據此統計用戶的相關屬性,進一步可以拓展為用戶畫像。我們對用戶出現的次數進行統計和可視化分析,再結合“重度用戶”這個概念。結合圖1的結果可知,我們可以得到有1次記錄的用戶、有2-3次記錄的用戶、4-10次記錄、10-20次記錄、分別占總用戶的44%、41%、30.7%、19.4%、3.8%和1.3%,這確實符合常規現象。
類似User_id可視化處理方法,Merchant_id表示商鋪編號,我們對商鋪出現的次數進行統計和可視化分析。結合可視化的結果,可以得到商家出現次數小于10、大于10小于等于50次數、大于50小于等于500、超過500次的分別占總商家數的33.1%、42.1%、21.7%、3.2%。出現次數在10與50之間的商家最多。
(2)折扣率Discount_rate和距離Distance字段
在折扣率Discount_rate的初始字段中有許多不同形式的字符串數據類型如:Y:X,這種表示不夠直觀,我們將其轉化為更容易理解的折扣的形式用百分比表示。按照字符串經驗結合優惠券,我們可以用1-X/Y的形式進行數據轉換為折扣率,按照這種方式可以得到折扣率的統計結果。由圖2可知,沒有打折的優惠券(即沒有優惠)占比最大,打折的優惠券的折扣率大致集中分布在0.5至0.98之間,其中9折優惠券最多,8.3折第二。
對距離distance字段也進行數據可視化,從結果可以發現,Distance為0占總數的2/5以上,可以發現有一個不是數字的類型,對于這種空缺值可以使用數字-1替代,也可以把數字類型轉化為字符串類型。
我們在折扣率Discount_rate和距離distance字段的基礎上繼續衍生折扣券相關的特征discount_rate,discount_man,discount_jian,discount_type。
(3)領取優惠券日期Date_received和使用優惠券日期Date字段
這兩個字段均為時間類型字段,是非常重要的字段,為之后給訓練數據集和驗證數據集打標簽起到了至關重要的作用。我們使用Python的matplotlib包對數據進行可視化分析。
我們從可視化結果發現優惠券的發放集中在春節期間,可是其消費的比例卻并不高,因此可以知道這與我們想象中的特定節假日購物熱情隨之增高很多還是有一定出入,節日特征的選擇需要慎重。這種現象結合復合字段應該進一步討論,決定當天的優惠券折扣率是否應該提高。
對于優惠券領取時間Date_received字段,我們可以利用Python函數衍生出使用星期weekday這個字段,因為該字段是有7個類別,對其進行SKlearn庫的One-Hot編碼。結合該字段繼續衍生是否在周末領取weekday_type這個字段。
(4)對數據進行標注
我們將數據根據Date_received和Date字段增加y字段,該字段為[-1,1,0].賦值的方式為:
3.利用SGDClassifier模型建立分類模型
在上面的工作中,提取了折扣discount、距離distance、日期weekday類的初始特征,本文使用SGDClassifier模型建立分類模型。先對數據集進行訓練集和驗證集的劃分,用20160101-20160515的數據作為train集,20160515-20160615作為valid集。
我們通過python流水線pipeline函數將數據歸一化StandardScaler和One-hot處理,并使用K折交叉驗證評估模型性能。我們利用Python中的AUC函數對表1中的每個coupon預測的結果計算AUC,再對所有的coupon做平均,模型一的平均AUC為0.5323。
在此基礎上,我們設計需要繼續提取用戶user的進行特征衍生,比如:每個用戶領取的優惠券數、購買商品的次數、使用優惠券購買的次數、每個用戶到商鋪購買的次數以及用戶最近距離、最大距離、均值距離、中位數距離等。整理好數據特征后,將關于用戶UserID的特征添加進模型,將其命名為模型二,使用SGDClassifier模型建立分類模型,對數據集進行訓練集和驗證集的劃分,用20160101-20160515的數據作為train集,20160515-20160615作為valid集。我們通過流水線pipeline將數據歸一化StandardScaler,并使用K折交叉驗證評估模型性能。我們利用Python中的AUC函數對表1中的每個coupon預測的結果計算AUC,再對所有的coupon做平均,模型一的平均AUC為0.59716。添加上用戶User的各特征之后,AUC提高了6%。
根據這種思路,我們繼續對商戶merchantID特征進行提取,衍生出商戶相關特征如:商鋪的發放優惠券數量、已發放優惠券購買的數量、使用優惠券購買的數量,商鋪銷售最近距離、最大距離、均值距離、中位數距離等。重復上面的建模步驟,對數據進行訓練集和驗證集的劃分,再利用AUC函數對表1中的每個coupon預測的結果計算AUC,再對所有的coupon做平均,模型一的平均AUC為0.6024。添加上用戶User的各特征之后,AUC提高了1%。
在使用2016年6月15日之前的歷史數據,建立的最終預測模型對表1中的用戶編號對應商鋪領取優惠券在2016年6月15日至2016年7月使用的概率,我們輸出表1優惠券使用概率的結果。從表中可以發現,在概率值都不是很大,我們選取0.1為閾值,對其進行劃分。大于該閾值,進行優惠券的發放。否則,不進行優惠券發放。通過這種方式達到節約營銷成本和減少對用戶無效投放以及信息干擾。
四、結束語
目前隨著個性化推薦等服務在電子商務包括O2O產業的日益普及,電商企業需要為客戶提供的服務也逐漸朝個性化、精細化方向轉變。如何應用好數據挖掘技術結合用戶和商鋪的大數據解決電商平臺用戶持續購買問題已經成為一個重要的研究方向。本文以O2O平臺提供的優惠券使用數據,研究和拓展了用戶和商鋪的關鍵特征,建立分類模型并對未來時間段內是否使用進行概率預測,模型擬合的結果較好,達到了期待的預測效果。
參考文獻:
[1]李運.機器學習算法在數據挖掘中的應用.北京郵電大學碩士論文[J],2015.
[2]scikit-learn中文手冊[M].https://scikit-learn.org/stable/modules/ sgd.html#sgd.
[3]SebatianRaschka.python機器學習[M].機械工業出版社,2017.
[4]小小丘.來源:知乎,鏈接:https://www.zhihu.com/question/398 40928/answer/84906286.
[5]李航.統計學習方法[M].清華大學出版社,2012.3.
作者簡介:黃正(1993- ),男,安徽省安慶市人,廣西師范大學,碩士,研究方向:應用統計