『 天池竞赛』O2O优惠券使用预测思路总结
目錄
- 數(shù)據(jù)與評(píng)價(jià)方式
- 解決方案
- 數(shù)據(jù)劃分
- 特征工程
- 算法及模型融合
- 模型融合
- 應(yīng)用
- 線下評(píng)估
- 回顧
賽題地址:https://tianchi.shuju.aliyun.com/competition/introduction.htm?spm=5176.100065.200879.2.6r6s4g&raceId=231587
第一賽季數(shù)據(jù)
目錄
正式開始做是從十月底開始的,我之前參加了新手賽,而這一次正式賽可以說(shuō)是真正認(rèn)真做的一次,中間和隊(duì)友一起學(xué)習(xí)了很多,也有小小的收獲,不管這次成績(jī)?nèi)绾?#xff0c;以后還有機(jī)會(huì)。
數(shù)據(jù)與評(píng)價(jià)方式
賽題提供用戶在2016年1月1日至2016年6月30日之間真實(shí)線上線下消費(fèi)行為,預(yù)測(cè)用戶在2016年7月領(lǐng)取優(yōu)惠券后15天以內(nèi)的使用情況。 使用優(yōu)惠券核銷預(yù)測(cè)的平均AUC(ROC曲線下面積)作為評(píng)價(jià)標(biāo)準(zhǔn)。 即對(duì)每個(gè)優(yōu)惠券coupon_id單獨(dú)計(jì)算核銷預(yù)測(cè)的AUC值,再對(duì)所有優(yōu)惠券的AUC值求平均作為最終的評(píng)價(jià)標(biāo)準(zhǔn)。
解決方案
提供數(shù)據(jù)的區(qū)間是2016-01-01~2016-06-30,預(yù)測(cè)七月份用戶領(lǐng)券使用情況,即用或者不用,轉(zhuǎn)化為二分類問題,然后通過分類算法預(yù)測(cè)結(jié)果。首先就是特征工程,其中涉及對(duì)數(shù)據(jù)集合的劃分,包括提取特征的區(qū)間和訓(xùn)練數(shù)據(jù)區(qū)間。接著就是從特征區(qū)間中提取特征,包括用戶特征、商戶特征、優(yōu)惠券特征、用戶商戶組合特征、用戶優(yōu)惠券組合特征。后期在測(cè)試區(qū)間提取了當(dāng)天的前后7/3/1天的領(lǐng)券信息(這里面后七天的特征其實(shí)是不能應(yīng)用于工業(yè)應(yīng)用的,因?yàn)閷?shí)際預(yù)測(cè)中你無(wú)法知道后7/3/1天的領(lǐng)券信息),提升較大。最后使用GBDT、RandomForest、LR進(jìn)行基于rank的分類模型融合
數(shù)據(jù)劃分
最初沒有使用數(shù)據(jù)劃分,導(dǎo)致特征中產(chǎn)生數(shù)據(jù)泄露,以至于在訓(xùn)練數(shù)據(jù)上效果很好,線下測(cè)試也還不錯(cuò),在線上表現(xiàn)確差強(qiáng)人意,后來(lái)劃分了之后有明顯提升。
| 預(yù)測(cè)集 | 領(lǐng)券:20160701~20160731 | 領(lǐng)券&消費(fèi):20160101~20160630 |
| 訓(xùn)練集 | 領(lǐng)券:20160515~20160615 消費(fèi):20160515~20160630 | 領(lǐng)券:20160101~20160501 消費(fèi):20160101~20160515 |
并沒有劃分多個(gè)訓(xùn)練集,這一點(diǎn)是要改進(jìn)之處。
特征工程
主要有五大特征類:用戶特征、商戶特征、優(yōu)惠券特征、用戶商戶組合特征、用戶優(yōu)惠券組合特征,賽題包括online和offline的數(shù)據(jù),由于里面只有部分用戶重合,商戶優(yōu)惠券等并未有重合,個(gè)人臆測(cè)線上應(yīng)該是淘寶天貓的購(gòu)買消費(fèi)數(shù)據(jù),有一定關(guān)聯(lián),但關(guān)系微弱,因此只向其中提取了用戶特征。而offline數(shù)據(jù)集就提取了所有五個(gè)特征類。一下是各部分特征:
- 用戶特征:u
- 線下領(lǐng)取優(yōu)惠券但沒有使用的次數(shù) u1
- 線下普通消費(fèi)次數(shù) u2
- 線下使用優(yōu)惠券消費(fèi)的次數(shù) u3
- 線下平均正常消費(fèi)間隔 u4
- 線下平均優(yōu)惠券消費(fèi)間隔 u5
- u3/u1 使用優(yōu)惠券次數(shù)與沒使用優(yōu)惠券次數(shù)比值 u6
- u3/(u2+u3) 表示用戶使用優(yōu)惠券消費(fèi)占比 u7
- u4/15 代表15除以用戶普通消費(fèi)間隔,可以看成用戶15天內(nèi)平均會(huì)普通消費(fèi)幾次,值越小代表用戶在15天內(nèi)普通消費(fèi)概率越大 u8
- u5/15 代表15除以用戶優(yōu)惠券消費(fèi)間隔,可以看成用戶15天內(nèi)平均會(huì)普通消費(fèi)幾次,值越大代表用戶 在15天內(nèi)普通消費(fèi)概率越大 u9
- 領(lǐng)取優(yōu)惠券到使用優(yōu)惠券的平均間隔時(shí)間 u10
- u10/15 表示在15天內(nèi)使用掉優(yōu)惠券的值大小,值越小越有可能,值為0表示可能性最大 u11
- 領(lǐng)取優(yōu)惠券到使用優(yōu)惠券間隔小于15天的次數(shù) u12
- u12/u3 表示用戶15天使用掉優(yōu)惠券的次數(shù)除以使用優(yōu)惠券的次數(shù),表示在15天使用掉優(yōu)惠券的可能,值越大越好。 u13
- u12/u1 F014 表示用戶15天使用掉優(yōu)惠券的次數(shù)除以領(lǐng)取優(yōu)惠券未消費(fèi)的次數(shù),表示在15天使用掉優(yōu)惠券的可能,值越大越好。 u14
- u1+u3 領(lǐng)取優(yōu)惠券的總次數(shù) u15
- u12/u15 F016 表示用戶15天使用掉優(yōu)惠券的次數(shù)除以領(lǐng)取優(yōu)惠券的總次數(shù),表示在15天使用掉優(yōu)惠券的可能,值越大越好。 u16
- u1+u2 一共消費(fèi)多少次 u17
- 最近一次消費(fèi)到當(dāng)前領(lǐng)券的時(shí)間間隔 u18
- 最近一次優(yōu)惠券消費(fèi)到當(dāng)前領(lǐng)券的時(shí)間間隔 u19
- 用戶當(dāng)天領(lǐng)取的優(yōu)惠券數(shù)目 u20
- 用戶前第i天領(lǐng)取的優(yōu)惠券數(shù)目 u20si
- 用戶后第i天領(lǐng)取的優(yōu)惠券數(shù)目 u20ai
- 用戶前7天領(lǐng)取的優(yōu)惠券數(shù)目 u21
- 用戶前3天領(lǐng)取的優(yōu)惠券數(shù)目 u22
- u22/u21 u23
- u20/u22 u24
- 用戶后7天領(lǐng)取的優(yōu)惠券數(shù)目 u25
- 用戶后3天領(lǐng)取的優(yōu)惠券數(shù)目 u26
- u26/u25 u27
- u20/u26 u28
- 用戶訓(xùn)練、預(yù)測(cè)時(shí)間領(lǐng)取的優(yōu)惠券數(shù)目 u29
- 用戶當(dāng)天領(lǐng)取的不同優(yōu)惠券數(shù)目 u30
- 用戶前第i天領(lǐng)取的不同優(yōu)惠券數(shù)目 u30si
- 用戶后第i天領(lǐng)取的不同優(yōu)惠券數(shù)目 u30ai
- 用戶訓(xùn)練、預(yù)測(cè)時(shí)間領(lǐng)取的不同優(yōu)惠券數(shù)目 u31
- 按照7/4/2分解訓(xùn)練、預(yù)測(cè)時(shí)間,提取此段窗口時(shí)間的特征
- 用戶7/4/2天領(lǐng)取的優(yōu)惠券數(shù)目 u32_i
- 用戶7/4/2天所領(lǐng)取的優(yōu)惠券優(yōu)惠率r1/r2/r3/r4排名 u_ri_ranki
- 用戶7/4/2天所領(lǐng)取的優(yōu)惠券優(yōu)惠率r1/r2/r3/r4排名 u_ri_dense _ranki
- u32_4/u32_7 u33
- u32_2/u32_4 u34
- u32_2/u32_7 u35
u20/u32_2 u36
- 線上領(lǐng)取優(yōu)惠券未使用的次數(shù) action=2 uo1
- 線上特價(jià)消費(fèi)次數(shù) action=1 and cid=0 and drate="fixed" uo2
- 線上使用優(yōu)惠券消費(fèi)的次數(shù) uo3
- 線上普通消費(fèi)次數(shù) action=1 and cid=0 and drate="null" uo4
- 線上領(lǐng)取優(yōu)惠券的次數(shù) uo1+uo3 uo5
- uo3/uo5 線上使用優(yōu)惠券次數(shù)除以線上領(lǐng)取優(yōu)惠券次數(shù),正比 uo6
- uo3/uo4 線上使用優(yōu)惠券次數(shù)除以線上普通消費(fèi)次數(shù),正比 uo7
uo2/uo4線上特價(jià)消費(fèi)次數(shù)除以線上普通消費(fèi)次數(shù) uo8
加入訓(xùn)練預(yù)測(cè)時(shí)間前一個(gè)月的窗口特征
- 線下領(lǐng)取優(yōu)惠券但沒有使用的次數(shù) uw1
- 線下普通消費(fèi)次數(shù) uw2
- 線下使用優(yōu)惠券消費(fèi)的次數(shù) uw3
- 線下平均正常消費(fèi)間隔 uw4
- 線下平均優(yōu)惠券消費(fèi)間隔 uw5
- uw3/uw1 使用優(yōu)惠券次數(shù)與沒使用優(yōu)惠券次數(shù)比值 uw6
- uw3/(uw2+uw3) 表示用戶使用優(yōu)惠券消費(fèi)占比 uw7
- uw4/15 代表15除以用戶普通消費(fèi)間隔,可以看成用戶15天內(nèi)平均會(huì)普通消費(fèi)幾次,值越小代表用戶在15天內(nèi)普通消費(fèi)概率越大 uw8
- uw5/15 代表15除以用戶優(yōu)惠券消費(fèi)間隔,可以看成用戶15天內(nèi)平均會(huì)普通消費(fèi)幾次,值越大代表用戶在15天內(nèi)普通消費(fèi)概率越大 uw9
- 領(lǐng)取優(yōu)惠券到使用優(yōu)惠券的平均間隔時(shí)間 uw10
- uw10/15 表示在15天內(nèi)使用掉優(yōu)惠券的值大小,值越小越有可能,值為0表示可能性最大 uw11
- 領(lǐng)取優(yōu)惠券到使用優(yōu)惠券間隔小于15天的次數(shù) uw12
- uw12/uw3 表示用戶15天使用掉優(yōu)惠券的次數(shù)除以使用優(yōu)惠券的次數(shù),表示在15天使用掉優(yōu)惠券的可能,值越大越好。 uw13
- uw12/uw1 F014 表示用戶15天使用掉優(yōu)惠券的次數(shù)除以領(lǐng)取優(yōu)惠券未消費(fèi)的次數(shù),表示在15天使用掉優(yōu)惠券的可能,值越大越好。 uw14
- uw1+uw3 領(lǐng)取優(yōu)惠券的總次數(shù) uw15
- uw12/uw15 F016 表示用戶15天使用掉優(yōu)惠券的次數(shù)除以領(lǐng)取優(yōu)惠券的總次數(shù),表示在15天使用掉優(yōu)惠券的可能,值越大越好。 uw16
F01+F02 一共消費(fèi)多少次 uw17
- 商戶特征:m
- 商戶一共的消費(fèi)筆數(shù):m0
- 商戶優(yōu)惠券消費(fèi)筆數(shù):m1
- 商戶正常的消費(fèi)筆數(shù):m2
- 沒有被使用的優(yōu)惠券: m3
- 商戶發(fā)放優(yōu)惠券數(shù)目:m3+m1 m4
- 商戶優(yōu)惠券使用率:m1/m4 m5
- 商戶在訓(xùn)練、預(yù)測(cè)時(shí)間發(fā)行的優(yōu)惠券數(shù)目 m6
- 商戶當(dāng)天發(fā)行的優(yōu)惠券數(shù)目 m7
- 商戶在訓(xùn)練、預(yù)測(cè)時(shí)間有多少人在此店領(lǐng)券 m8
- 商戶在當(dāng)天有多少人在此店領(lǐng)券 m9
- 按照7/4/2分解訓(xùn)練、預(yù)測(cè)時(shí)間,提取此段窗口時(shí)間的特征
- 7/4/2天此商店優(yōu)惠券發(fā)放數(shù)目 m10_i
- m9 / m10_7 m11
- m9 / m10_4 m12
- m9 / m10_2 m13
- m10_2 / m10_4 m14
- 優(yōu)惠券特征:c
- 折扣類的優(yōu)惠券折扣率 r1
- 滿減類優(yōu)惠券滿減金額 r2
- 滿減類優(yōu)惠券減的金額 r3
- 滿減類優(yōu)惠券優(yōu)惠率 (r2-r3)/r2 r4
- c1+c2 此優(yōu)惠券一共發(fā)行多少?gòu)?c0
- 此優(yōu)惠券一共被使用多少?gòu)?c1
- 沒有使用的數(shù)目 c2
- c1/c0 優(yōu)惠券使用率 c3
- 優(yōu)惠力度 c5
- 優(yōu)惠力度在當(dāng)天所領(lǐng)取優(yōu)惠券里面排名 c5_rank
- 優(yōu)惠力度在當(dāng)天所領(lǐng)取優(yōu)惠券里面排名 c5_denserank
- 優(yōu)惠力度在當(dāng)天同一店家所領(lǐng)取優(yōu)惠券里面排名 c5_rankm
- 優(yōu)惠力度在當(dāng)天所領(lǐng)取優(yōu)惠券里面百分比排名 c5_rankp
- 優(yōu)惠力度在當(dāng)天同一店家所領(lǐng)取優(yōu)惠券里面百分比排名 c5_rankmp
- 此優(yōu)惠券在訓(xùn)練、預(yù)測(cè)時(shí)間發(fā)行了多少?gòu)?c6
- 此優(yōu)惠券在當(dāng)天發(fā)行了多少?gòu)?c7
- 領(lǐng)券當(dāng)天周幾 c8
- 領(lǐng)券當(dāng)天是否周末 c9 c8,c9去掉效果更好了。。。。
- 此優(yōu)惠券在當(dāng)天被多少人領(lǐng)過 c10
- 此優(yōu)惠券在訓(xùn)練、預(yù)測(cè)時(shí)間被多少個(gè)人領(lǐng)過 c11
- 此優(yōu)惠券最后一次領(lǐng)券時(shí)間到此領(lǐng)券時(shí)間的間隔 c12
- 此優(yōu)惠券最后一次消費(fèi)時(shí)間到此領(lǐng)券時(shí)間的間隔 c13
- 按照7/4/2分解訓(xùn)練、預(yù)測(cè)時(shí)間,提取此段窗口時(shí)間的特征
- 7/4/2天此優(yōu)惠券發(fā)放數(shù)目 c14_i
- c10 / c14_7 AS c15
- c10 / c14_4 AS c16
- c14_2 / c14_4 AS c17
- c10 / c14_2 AS
- 用戶和商戶組合特征:um
- 用戶在商店總共消費(fèi)過幾次 um0
- 用戶在商店使用優(yōu)惠券幾次 um1
- 用戶在商店領(lǐng)取優(yōu)惠券未消費(fèi)次數(shù) um2
- 用戶在商店普通消費(fèi)次數(shù) um3
- um1/(um1+um2) 用戶在此商戶優(yōu)惠券使用率 um4
- um0/(u2+u3) 值大表示用戶比較常去的商戶 um5
- um1/u3 值大表示用戶比較喜歡在那個(gè)商戶使用優(yōu)惠券 um6
- 用戶在訓(xùn)練、預(yù)測(cè)時(shí)間在此商店領(lǐng)取的優(yōu)惠券數(shù)目 um7
- 用戶當(dāng)天在此商店領(lǐng)取的優(yōu)惠券數(shù)目 um8
- 按照7/4/2分解訓(xùn)練、預(yù)測(cè)時(shí)間,提取此段窗口時(shí)間的特征
- 7/4/2天此用戶在此商店領(lǐng)取的優(yōu)惠券發(fā)放數(shù)目 um9_i
- um8 / um9_7 um10
- um8 / um9_4 um11
- um8 / um9_2 um12
- um9_2 / um9_4 um13
- 用戶和優(yōu)惠券組合特征:uc
- 用戶領(lǐng)取的優(yōu)惠券數(shù)目 uc0
- 用戶領(lǐng)取未消費(fèi)的優(yōu)惠券數(shù)目 uc1
- 用戶消費(fèi)了此優(yōu)惠券的數(shù)目 uc2
- uc02/uc0 uc3
- 用戶在此期間領(lǐng)取了多少?gòu)埓藘?yōu)惠券 uc4 partiton by uid, cid
- 用戶在當(dāng)天領(lǐng)取了多少?gòu)埓藘?yōu)惠券 uc5
- 領(lǐng)取優(yōu)惠券時(shí)間-最后一次使用優(yōu)惠券時(shí)間 uc6
uc6/ u5 uc7 正比
- 用戶前第i天領(lǐng)取的此優(yōu)惠券數(shù)目 uc5si
- 用戶后第i天領(lǐng)取的此優(yōu)惠券數(shù)目 uc5ai
- 用戶前7天領(lǐng)取的此優(yōu)惠券數(shù)目 uc8
- 用戶前3天領(lǐng)取的此優(yōu)惠券數(shù)目 uc9
- uc9/uc8 uc10(若u21為0,則為1)
- uc4/uc9 uc11
- 用戶后7天領(lǐng)取的此優(yōu)惠券數(shù)目 uc12
- 用戶后3天領(lǐng)取的此優(yōu)惠券數(shù)目 uc13
- uc13/uc12 uc14
- uc4/uc13 uc15
- 按照7/4/2分解訓(xùn)練、預(yù)測(cè)時(shí)間,提取此段窗口時(shí)間的特征
- 7/4/2天此用戶在此商店領(lǐng)取的優(yōu)惠券發(fā)放數(shù)目 uc16_i
用戶前后2/4/7領(lǐng)取的優(yōu)惠券優(yōu)惠率排名 uc17_i
算法及模型融合
最初使用RF、GBDT兩種模型,GBDT效果優(yōu)于RF,后期使用了多個(gè)GBDT和XGBoost,分別使用不同的參數(shù)、不同的正負(fù)樣本比例以rank的方式進(jìn)行多模型的融合,效果有微小提升,但是由于計(jì)算量的限制沒有進(jìn)一步展開。
模型融合
由于評(píng)估指標(biāo)是計(jì)算每個(gè)coupon_id核銷預(yù)測(cè)的AUC值,然后所有優(yōu)惠券的AUC值平均作為最終的評(píng)估指標(biāo),而rank融合方式對(duì)AUC之類的評(píng)估指標(biāo)特別有效,所以采用此方法,公式為:
其中$n$表示模型的個(gè)數(shù), $Weight_i$表示該模型權(quán)重,所有權(quán)重相同表示平均融合。$Rank_i$表示樣本在第i個(gè)模型中的升序排名。它可以較快的利用排名融合多個(gè)模型之間的差異,而不需要加權(quán)融合概率。
應(yīng)用
基于參數(shù),樣本(采樣率),特征獲得多個(gè)模型,得到每個(gè)模型的概率值輸出,然后以coupon_id分組,把概率轉(zhuǎn)換為降序排名,這樣就獲得了每個(gè)模型的$Rank_i$,然后這里我們使用的是平均融合,$Weight_i=1/n$,這樣就獲得了最終的一個(gè)值作為輸出。
線下評(píng)估
雖然這次比賽每天有四次評(píng)測(cè)機(jī)會(huì),但是構(gòu)建線下評(píng)估在早期成績(jī)比較差的時(shí)候用處很大,早期添加特征之后線下評(píng)估基本和線上的趨勢(shì)保持一致(例如在添加了Label區(qū)間的領(lǐng)券特征之后,線下提升十多個(gè)百分點(diǎn),線上也是一致),對(duì)于新特征衡量還是有參照性的。后期差距在0.1%級(jí)別的時(shí)候,就沒有參照性了。
線下評(píng)估在訓(xùn)練集中采樣1/3 or 1/4 or 1/5做線下評(píng)估集合,剩下的做為訓(xùn)練集訓(xùn)練模型,并將評(píng)估集合中全0或者全1的優(yōu)惠券ID去掉,然后使用訓(xùn)練的模型對(duì)評(píng)估集合預(yù)測(cè),將預(yù)測(cè)結(jié)果和實(shí)際標(biāo)簽作異或取反(相同為1,不同為0),然后算出每個(gè)優(yōu)惠券ID的AUC,最后將每個(gè)ID的優(yōu)惠券AUC取均值就得到最終的AUC。
回顧
這一次比賽學(xué)習(xí)了很多,包括分布式平臺(tái)ODPS和機(jī)器學(xué)習(xí)平臺(tái)實(shí)現(xiàn)數(shù)據(jù)清洗,特征提取,特征選擇,分類建模、調(diào)參及模型融合等,學(xué)習(xí)摸索了一套方法,使自己建立了信心,明白還有很多需要學(xué)習(xí)的地方,之前一直對(duì)于算法都是當(dāng)做一個(gè)黑匣子,只會(huì)熟悉輸入輸出直接調(diào)用,要深入了解算法,才能突破目前的瓶頸有所提高。
同時(shí)我覺得大家一起探討交流也很重要,一個(gè)人做著做著就容易走偏,純屬個(gè)人看法。
CSDN博客鏈接:http://blog.csdn.net/shine19930820/article/details/53995369
授人以魚不如授人以漁:
參考 第一名隊(duì)伍:【詩(shī)人都藏在水底】:GitHub地址
python sklearn數(shù)據(jù)預(yù)處理:http://blog.csdn.net/shine19930820/article/details/50915361
廣義線性模型--Generalized Linear Models:http://blog.csdn.net/shine19930820/article/details/50997645
交叉驗(yàn)證的Java weka實(shí)現(xiàn),并保存和重載模型:http://blog.csdn.net/shine19930820/article/details/50921109
機(jī)器學(xué)習(xí)知識(shí)圖譜:http://lib.csdn.net/base/machinelearning/structure
轉(zhuǎn)載于:https://www.cnblogs.com/aaronchou820/p/6707200.html
總結(jié)
以上是生活随笔為你收集整理的『 天池竞赛』O2O优惠券使用预测思路总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jupyter Notebook: 解决
- 下一篇: Python Web框架——Flask