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