天池挖掘幸福感新人賽——個(gè)人賽后總結(jié)

一、參賽背景

一條通信專業(yè)的閑魚(yú)突然對(duì)AI產(chǎn)生了濃厚的興趣,天天看著各種新聞報(bào)導(dǎo)AI相關(guān)的東西,只是知道它的相關(guān)應(yīng)用,但具體是怎么回事一直困擾著我,求知欲迫使自己開(kāi)始了這段艱難的學(xué)習(xí)歷程。一開(kāi)始是在朋友推薦下先看了吳恩達(dá)老師關(guān)于機(jī)器學(xué)習(xí)的視頻,后來(lái)又在朋友推薦下學(xué)習(xí)了李航老師的《統(tǒng)計(jì)學(xué)習(xí)方法》、周志華老師的《機(jī)器學(xué)習(xí)》,然后就是實(shí)現(xiàn)所需的計(jì)算機(jī)語(yǔ)言,也就是python了,因?yàn)樽约阂菜懔恕翱瓢喑錾怼?,?duì)C比較熟悉,用的非常多,一些編程思想還是有的,再加上python比較簡(jiǎn)單,所以學(xué)起來(lái)也是比較快,再然后便是學(xué)習(xí)了《利用python進(jìn)行數(shù)據(jù)挖掘》這本書(shū)。學(xué)了這么多,是騾子是馬,當(dāng)然要拉出來(lái)練練,和數(shù)學(xué)題一樣,看得懂和做得出是兩回事,于是在朋友推薦下參加了這個(gè)比賽,也是感謝天池提供了一個(gè)這么好的平臺(tái)讓我練手。

二、賽題說(shuō)明

賽題使用公開(kāi)數(shù)據(jù)的問(wèn)卷調(diào)查結(jié)果,選取其中多組變量,包括個(gè)體變量(性別、年齡、地域、職業(yè)、健康、婚姻與政治面貌等等)、家庭變量(父母、配偶、子女、家庭資本等等)、社會(huì)態(tài)度(公平、信用、公共服務(wù)等等),來(lái)預(yù)測(cè)其對(duì)幸福感的評(píng)價(jià)。賽事訓(xùn)練集提供了8000條訓(xùn)練數(shù)據(jù),139個(gè)特征、測(cè)試集是有2968條數(shù)據(jù),數(shù)據(jù)量偏小。得分計(jì)算公式為:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??score = \frac{1}{n} \sum_{1}^n(y_{i}- y^*)^2

其中n代表測(cè)試集樣本數(shù),y_{i} 代表第i個(gè)樣本的預(yù)測(cè)值,y^*代表真實(shí)值。

比賽地址:【新人賽】快來(lái)一起挖掘幸福感!-天池大賽-阿里云天池

三、數(shù)據(jù)預(yù)處理

首先是對(duì)label的整體觀測(cè):如圖,60.3%滿意度為4,然后是17.7%為5,3占比是14.5%,2為6.2%,其余為1。關(guān)于happiness的解釋是:1 = 非常不幸福; 2 = 比較不幸福; 3 = 說(shuō)不上幸福不幸福; 4 = 比較幸福; 5 = 非常幸福。通過(guò)對(duì)餅狀圖和柱形圖的觀察,發(fā)現(xiàn)label“happiness”值為4和5的樣本占比高達(dá)80%以上,這是很明顯的數(shù)據(jù)不均衡,這可能導(dǎo)致我們訓(xùn)練出來(lái)的模型對(duì)3、4、5的預(yù)測(cè)相對(duì)于對(duì)1、2的預(yù)測(cè)會(huì)更加準(zhǔn)確,甚至很大概率對(duì)1和2的預(yù)測(cè)發(fā)生很大偏差。


happiness分布

然后是對(duì)異常值、缺失值的處理:對(duì)于label值“happiness”存在8個(gè)異常值-8,占比較小,自己也是選擇果斷丟棄了這八個(gè)樣本?!皊urvey_time”與“出生日期”這兩項(xiàng)的數(shù)據(jù),因?yàn)閿?shù)據(jù)類型的原因不好處理,所以選擇用調(diào)查時(shí)間減去出生日期得到年齡“age”這一列作為新的特征,同時(shí)舍棄其他兩個(gè)特征。關(guān)于家庭年總收入與個(gè)人年總收入這兩列,數(shù)據(jù)跨度較大,選擇使用簡(jiǎn)單sigmoid函數(shù)將其映射至(0,1)區(qū)間使數(shù)據(jù)更加平滑,模型更好處理。另外其他的一些分?jǐn)?shù)類數(shù)據(jù)比如:public_service等,則是選擇將其離散化,劃分為六個(gè)等級(jí)。0至5,這里切分點(diǎn)的選擇是關(guān)鍵,我這里是參照describe打印的數(shù)據(jù)進(jìn)行的切分點(diǎn)選擇,不是很理想,建議參考卡方,信息增益,基尼指數(shù)或者WOE(要求目標(biāo)變量是兩元變量)等。另外發(fā)現(xiàn)有三列數(shù)據(jù)類型為object,而且是大量缺失,缺失比例高達(dá)90%以上,然后描述的問(wèn)題差不多,只是文字不同,所以我這里選擇的是對(duì)缺失值填0,其他填1:

data_train["property_other"] = data_train["property_other"].map(lambda x: 0 if pd.isnull(x) else 1)

再如其他缺失值,通過(guò).describe觀測(cè)其數(shù)據(jù)基本符合正態(tài)分布,這里采用最簡(jiǎn)單常用的均值填充。

四、數(shù)據(jù)初步分析

(1)相關(guān)性分析:?

使用了皮爾遜相關(guān)系數(shù)(取值是(-1,1)),分析了各個(gè)特征與label的相關(guān)系數(shù),其中排名前五的特征分別為:depression(0.32),family_status(0.30),equity(0.28),class(0.25),health(0.24),這說(shuō)明這些特征在之后的建模中會(huì)擁有更高的權(quán)重,也說(shuō)明實(shí)際生活中,一個(gè)人幸不幸福,與之相關(guān)的前五項(xiàng)因素分別是:沮喪成度、家庭經(jīng)濟(jì)狀況、社會(huì)公平性、本人所處等級(jí)和目前身體狀況。這也符合當(dāng)今社會(huì)的社會(huì)現(xiàn)實(shí),有一項(xiàng)不是很理想,都會(huì)嚴(yán)重影響一個(gè)人的幸福感!最后選擇了相關(guān)性大于0.01的作為建模所需特征。

(2)depression分布

depression的解釋是:在過(guò)去的四周中您感到心情抑郁或沮喪的頻繁程度,1 = 總是; 2 = 經(jīng)常; 3 = 有時(shí); 4 = 很少; 5 = 從不;在相關(guān)系數(shù)里排名最高達(dá)0.32,最大值為5,最小值為-8,有18個(gè),均值為3.81。1/4與3/4中位數(shù)分別為3和5,中位數(shù)為4,符合正態(tài)分布。與happiness的關(guān)系分布如圖:

幸福感與沮喪程度關(guān)系圖


可以發(fā)現(xiàn)18個(gè)異常值-8的幸福指數(shù)均為3,所以我做的是提取所有幸福指數(shù)為3的樣本然后用這些樣本的depression的平均值填充這18個(gè)異常值。

五、算法選擇

關(guān)于算法的選取自己其實(shí)是模糊的,不是很清楚對(duì)于這種問(wèn)題什么算法最好,只是知道xgboost是kaggle比賽大殺器,再基于前輩們的經(jīng)驗(yàn),一開(kāi)始使用的是xgboost作為第一個(gè)算法模型,用了sklearn里的cv作為驗(yàn)證集調(diào)參,發(fā)現(xiàn)訓(xùn)練誤差還可以,但是上傳.csv文件后發(fā)現(xiàn)排名140多,測(cè)試誤差讓人不是很滿意,于是陸續(xù)用了lightgbm和cat boost結(jié)果也不是很讓人滿意,最后選擇了使用stacking模型融合,將三種強(qiáng)大的算法融合在一起。效果還是很明顯的,排名瞬間上身100多。

六、初步成績(jī)

通過(guò)數(shù)據(jù)預(yù)處理、數(shù)據(jù)分析,選擇了三種強(qiáng)大算法的stacking融合,最后成績(jī)是0.4687(四舍五入為0.469),排在第31名。這個(gè)結(jié)果也只能是差強(qiáng)人意,自己也有信心如果繼續(xù)往下做下去應(yīng)該是可以進(jìn)前十(第十名成績(jī)0.466,只差0.003),但因?yàn)樾氯速?,自己也走了一個(gè)完整的流程,還需要很多時(shí)間去完善各個(gè)方面的知識(shí)并朝著神經(jīng)網(wǎng)絡(luò)進(jìn)發(fā),也是打算這個(gè)比賽到此為止了。


最終成績(jī)排名

雖然現(xiàn)在mse的值與整體排名相對(duì)靠前,但是模型對(duì)幸福度1、2的預(yù)測(cè)還是相對(duì)不準(zhǔn)的,在實(shí)際業(yè)務(wù)中,對(duì)于1、2的區(qū)分相比3、4、5弱了很多,這里只是計(jì)算均方差不高,但實(shí)際對(duì)每個(gè)程度的幸福感的區(qū)分不是特別理想的。而且,個(gè)人感覺(jué)這個(gè)0.469的誤差大部分是來(lái)自對(duì)1、2的預(yù)測(cè),原因上面也提到了,這兩項(xiàng)的訓(xùn)練數(shù)據(jù)太少,生成的模型對(duì)這兩項(xiàng)的預(yù)測(cè)能力相對(duì)是低的。關(guān)于如何提高整體排名,個(gè)人覺(jué)得還是要回到數(shù)據(jù)中去,因?yàn)閿?shù)據(jù)和特征才是決定機(jī)器學(xué)習(xí)上限的地方,算法與模型只能逼近這個(gè)上限,通過(guò)對(duì)數(shù)據(jù)的觀察,某些特征是存在聯(lián)系的,去找出這些聯(lián)系,提取出特征,成績(jī)應(yīng)該還能再往上提一提。

七、模型分析

關(guān)于自己的這個(gè)模型,感覺(jué)是存在over-fitting現(xiàn)象的,訓(xùn)練誤差要比測(cè)試誤差大一些,雖然差的不多。關(guān)于對(duì)數(shù)據(jù)的處理也做得不是很理想,可惜數(shù)據(jù)量不夠,不然可以將訓(xùn)練數(shù)據(jù)采樣出一部分作為驗(yàn)證集,讓自己的模型在驗(yàn)證集上表現(xiàn)好一些,這樣不至于每天只有兩次機(jī)會(huì)(每天中午12點(diǎn)和晚上八點(diǎn)更新排名)測(cè)試自己模型的表現(xiàn),關(guān)于處理over-fitting也可以:早停止,數(shù)據(jù)集擴(kuò)增,正則化,交叉驗(yàn)證等方法防止。最后講講對(duì)stacking模型融合的分析,這里stacking是將三種強(qiáng)大的分類器(xgboost、lightgbm、catboost)作為弱分類器,將他們得出的結(jié)果作為第一階段的預(yù)測(cè),然后作為下一階段的特征,比起相互獨(dú)立的預(yù)測(cè)模型能夠有更強(qiáng)的非線性表述能力,降低泛化誤差。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容