Data Mining - 10月總結(jié)

前言

最近去Kaggle觀摩學(xué)習(xí)了各路大牛們分享的數(shù)據(jù)挖掘(DM,Data Mining)思路趋厉,收獲頗豐寨闹,因此想記錄一下這段時間的一些感悟。

這篇文章主要結(jié)合個人實(shí)踐經(jīng)歷和在Kaggle上的學(xué)習(xí)觅廓,依據(jù)Guide to Intelligent Data Analysis (Berthold, et al., 2010)提供的CRISP-DM流程圖鼻忠,梳理一下(我認(rèn)為的)DM過程中每一步的要點(diǎn)。

有些地方可能理解有偏差或者概括不全,歡迎指正:)

DM流程與要點(diǎn)總結(jié)

先上流程圖帖蔓。

CRISP-DM Process

上圖涵蓋了DM的6大步驟矮瘟,每個步驟對應(yīng)有需要思考的一系列問題。以下我僅遵循大步驟的邏輯塑娇,各個步驟下涉及的細(xì)節(jié)可能和圖上的有所不同澈侠。

0. 數(shù)據(jù)收集(Data Collection)

先簡單談?wù)劦?步,數(shù)據(jù)收集埋酬。

數(shù)據(jù)收集并不包含在上面的DM流程里哨啃,事實(shí)上由于對DM的定義不同,不少書本都把數(shù)據(jù)收集排除在DM流程之外写妥。這一步主要涉及數(shù)據(jù)平臺(e.g. hadoop, spark)拳球、開發(fā)語言(e.g. c++, java, phthon)等方面的知識,我個人不是太了解珍特,就不細(xì)說了祝峻。

提數(shù)據(jù)收集的原因,一是我發(fā)現(xiàn)國內(nèi)不少數(shù)據(jù)挖掘崗都有涉及到數(shù)據(jù)收集扎筒、數(shù)據(jù)平臺搭建等工作莱找,二是高質(zhì)量的數(shù)據(jù)對后續(xù)的分析工作來說實(shí)在是太重要了。

研究生期間我給英國某個公司做DM項(xiàng)目嗜桌,那個公司使用的是第三方的數(shù)據(jù)系統(tǒng)(非常爛)奥溺,并且沒有專門的數(shù)據(jù)工程師/程序員做數(shù)據(jù)處理和維護(hù),我和小伙伴拿到一堆亂碼的時候真的相當(dāng)崩潰骨宠。也因?yàn)檫@樣浮定,我們當(dāng)時花了很多力氣來從頭整理數(shù)據(jù),耽誤了不少時間诱篷。但無論再怎么整理壶唤,我們的數(shù)據(jù)質(zhì)量始終不高(大量的信息缺失和無法溯源的數(shù)據(jù)錄入失誤),導(dǎo)致最終模型不太理想棕所。如果數(shù)據(jù)收集環(huán)節(jié)能得到把控闸盔,結(jié)果可能會不一樣。(望天

1. 問題理解(Project Understanding)

準(zhǔn)確來說project應(yīng)該翻譯成「項(xiàng)目」琳省,但一個DM項(xiàng)目的最終目的是解決問題迎吵,所以我就直接把這一步譯作「問題理解」了。

我個人認(rèn)為這一步關(guān)鍵是弄明白兩件事:

  • 對方想要得到什么問題的答案
  • 怎么把這個問題數(shù)學(xué)語言化

前者的關(guān)鍵在于「聽」和「問」:聽明白對方說了什么针贬,問清楚對方?jīng)]說明白或者沒被挖掘的需求击费。有時候一個DM項(xiàng)目的需求會很模糊,舉個極端點(diǎn)的例子桦他,比如對方說“我想要產(chǎn)品A和用戶之間的insight”蔫巩,insight是一個很廣的詞,TA真正想知道的可能是“哪些用戶能帶來更多的利潤”,也有可能是“下個月哪些用戶會繼續(xù)購買產(chǎn)品A”圆仔。問題稍微不一樣垃瞧,很可能就會導(dǎo)致完全不同的分析過程。所以一定要先和問題的提出方在需求上達(dá)成百分之百的共識坪郭,并且需求越詳細(xì)越好个从。

后者考察的是analyst的經(jīng)驗(yàn)和功力。在拿到問題/需求的時候歪沃,腦子里應(yīng)該對「這個問題轉(zhuǎn)換成數(shù)學(xué)語言是什么」嗦锐、「能不能實(shí)現(xiàn)」、「適合什么分析方法/方向」有初步的把握沪曙。舉個簡單例子奕污,現(xiàn)在有一個需求:“我有產(chǎn)品A,我有用戶的歷史購買數(shù)據(jù)液走,能不能預(yù)測一下下個月每個用戶繼續(xù)購買產(chǎn)品A的概率菊值?” 對于這個問題,在著手分析數(shù)據(jù)之前育灸,一個可能的思路是:這是預(yù)測問題,預(yù)測的是用戶買產(chǎn)品A的概率昵宇,概率介于0和1之間磅崭,0代表用戶一定不買產(chǎn)品A,1代表用戶一定買產(chǎn)品A瓦哎,那么本質(zhì)上這是二元分類問題砸喻,可以通過二元分類算法來實(shí)現(xiàn)。

有不少思考框架可以幫助理清問題蒋譬,比如CLD(Causal Loop Diagram)割岛、Cognitive Map等等。我個人最常用的是思維導(dǎo)圖犯助。

2. 數(shù)據(jù)理解(Data Understanding)

這一步又叫Exploratory Analysis癣漆,意在通過數(shù)據(jù)分析(如平均值等統(tǒng)計量,各種圖表)來了解手上的數(shù)據(jù)剂买。(當(dāng)然啦惠爽,有時候數(shù)據(jù)分析本身就是一個項(xiàng)目。)

數(shù)據(jù)理解影響分析方法的選取和確立瞬哼。比如婚肆,理解我的目標(biāo)變量是數(shù)值還是文本,是離散的還是連續(xù)的坐慰,是截面數(shù)據(jù)還是時間序列较性。不同的數(shù)據(jù)類型有不同的分析方法。

與此同時,這一步也是探究數(shù)據(jù)質(zhì)量的關(guān)鍵:我的數(shù)據(jù)是否和問題相關(guān)赞咙,數(shù)據(jù)是否合理责循,有無缺失值和異常值等。任何一個環(huán)節(jié)一旦得到“否”的答案人弓,就需要相應(yīng)的對策去解決沼死。

很多復(fù)雜的DM項(xiàng)目,比如Kaggle里的各種競賽崔赌,涵蓋的都是幾百甚至上千兆的數(shù)據(jù)意蛀,有時候還不只一個數(shù)據(jù)集。這種量級的數(shù)據(jù)健芭,一開始也許根本懵得無從下手(好啦县钥,指的就是本渣渣我),不花費(fèi)大量時間去理解慈迈、分析若贮,很難察覺出其中的異常點(diǎn)或關(guān)聯(lián)性。只有對數(shù)據(jù)十分了解痒留,才有可能在后續(xù)步驟做出好的策略(e.g. 變量選取谴麦,變量構(gòu)造,算法選壬焱贰)匾效。

總而言之,對數(shù)據(jù)越了解恤磷,后續(xù)走的彎路越少面哼,項(xiàng)目成功率越高。

3. 數(shù)據(jù)準(zhǔn)備(Data Preparation)

這一步在機(jī)器學(xué)習(xí)中又叫特征工程(Feature Engineering)扫步,要考慮的事很多魔策。比如,這些變量(特征)需不需要處理異常值(outliers)河胎?用不用填補(bǔ)缺失值(missing values)闯袒?要不要做標(biāo)準(zhǔn)化/歸一化/離散化?哪些變量對我的分析有幫助仿粹?需不需要降維搁吓?有沒有必要構(gòu)造新變量?簡而言之就是對數(shù)據(jù)反復(fù)調(diào)戲反復(fù)處理吭历、轉(zhuǎn)換堕仔,直至可以丟進(jìn)模型里跑出好結(jié)果為止。

這一步有多重要呢晌区,這么說吧摩骨,Kaggle上的高分玩家通贞,除去對算法的設(shè)計、應(yīng)用外恼五,數(shù)據(jù)準(zhǔn)備(特征工程)都是做到了極致的昌罩。高質(zhì)量的數(shù)據(jù),光是跑benchmark模型都能得到不錯的結(jié)果灾馒。我最近觀摩的一個DM競賽(已結(jié)束)茎用,6組數(shù)據(jù)集,3,000,000+樣本睬罗,其中一個用XGBoost做benchmark模型跑出了很好結(jié)果的參賽者轨功,用了19個變量,其中18個是構(gòu)造出來的新變量容达。

此外古涧,想提一下WoE編碼(Weight of Evidence Encoding)。WoE編碼在提高二元分類模型的性能上花盐,真的屢試不爽羡滑。雖然WoE編碼和邏輯回歸是最加拍檔,但用在tree-based模型上算芯,效果也很不錯柒昏。但不知道為什么這個東西很少有人談?wù)摚?/p>

再說說工具。在實(shí)際操作一個DM項(xiàng)目的時候熙揍,無論是數(shù)據(jù)理解還是數(shù)據(jù)準(zhǔn)備昙楚,都涉及到大量的數(shù)據(jù)拆分、結(jié)合诈嘿、轉(zhuǎn)換。就這些方面而言削葱,R的dplyr+caret(對應(yīng)python的pandas+sklearn)是很好的實(shí)現(xiàn)工具奖亚。

4. 建模(Modeling)

建模整體上分為兩個方向:一是搭前人輪子造車,二是自行構(gòu)造算法析砸。后者就不說了昔字,說說前者。

大部分analyst都是依靠已有算法做分析首繁,而能否成功完成一個DM任務(wù)作郭,關(guān)鍵有兩點(diǎn):

一,有扎實(shí)的理論基礎(chǔ)弦疮,對各個類型的DM問題有所了解夹攒,對各類DM問題下的各類算法有所了解,知道什么算法對什么類型的數(shù)據(jù)有效胁塞,知道如何調(diào)參等咏尝。

二是創(chuàng)新能力压语,很多時候光靠一種算法是解決不了問題的,因?yàn)槊糠N算法都有自己的內(nèi)在缺陷编检,這個時候就需要組合算法去彌補(bǔ)這些缺陷胎食,即Ensemble Methods吓著,如 Bagging撑教、Boosting、Stacking等未檩,Kaggle里很多冠軍模型都屬于這種情況蕾总。(我曾經(jīng)見過某個冠軍團(tuán)隊(duì)的模型粥航,模型一共疊加了好幾層,而每一層基本都是算法組合谤专,看完我整個人都不好了躁锡。)

現(xiàn)在很多analyst喜歡拿XGBoost(Chen & Guestrin, 2016)或者GBM(Friedman, 2001) 做benchmark模型,因?yàn)檫@兩個算法性能很不錯置侍,在數(shù)據(jù)質(zhì)量好的前提下映之,一般都能得到不錯的結(jié)果。(我個人感覺這兩個算法比隨機(jī)森林要好使蜡坊;AdaBoost的話之前不知道為什么在我的電腦上跑不起來杠输,所以說不準(zhǔn)。) 用好這類模型的關(guān)鍵點(diǎn)在于調(diào)參秕衙,有經(jīng)驗(yàn)的analyst和好的計算機(jī)是關(guān)鍵蠢甲。

工具方面,R中當(dāng)之無愧是caret据忘,對應(yīng)python中的sklearn鹦牛。

5. 評估(Evaluation)

上文的流程圖把這一步定義為對整個DM項(xiàng)目的評估,但這里我想講講模型評估(這個部分在流程圖中被歸到建模那一步里了)勇吊。

一般來說曼追,跑模型的時候數(shù)據(jù)會被分為三部分:訓(xùn)練集(Training Set)、驗(yàn)證集(Validation Set)和測試集(Test Set)汉规。訓(xùn)練集拿來建模礼殊,驗(yàn)證集拿來調(diào)參,測試集拿來評估模型性能针史。

但上述過程存在一個問題:這種方法只適用于數(shù)據(jù)量大的時候晶伦,數(shù)據(jù)量小的時候,測試集是不valid的啄枕。我之前做過的一個DM項(xiàng)目婚陪,因?yàn)榉N種原因樣本量非常小,在這種情況下频祝,分割數(shù)據(jù)的時候只能三選二近忙,也就是只要訓(xùn)練集和驗(yàn)證集竭业,或是訓(xùn)練集和測試集。但除此之外更大的問題是及舍,因?yàn)閿?shù)據(jù)量過小未辆,只要訓(xùn)練集和驗(yàn)證集/測試集中的樣本稍有變化,模型的評估結(jié)果(比如AUC值)就會有很大的不一樣锯玛。也就是說咐柜,單個評估結(jié)果不可靠。

針對這種情況攘残,建議做BootstrapCross Validation拙友,通過統(tǒng)計指標(biāo)(平均值,方差等)來評估模型歼郭。在R里遗契,通過caret包可以很容易實(shí)現(xiàn)。

6. Deployment

這部分略過:)

結(jié)語

說是總結(jié)病曾,結(jié)果寫的過程中磕磕碰碰牍蜂,很多思路理不清楚,句子寫不通順泰涂,果然要學(xué)習(xí)鲫竞、要思考的地方還有很多。(笑

再來就是逼蒙,打算今后每隔一段時間就做一次DM總結(jié)从绘。這篇因?yàn)槭堑谝黄鞣N亂七八糟的都想一次寫下來是牢,所以內(nèi)容比較多僵井,今后的話題應(yīng)該會更專,篇幅也不會那么大驳棱。

最后驹沿,立個flag,下一篇一定要比現(xiàn)在有進(jìn)步蹈胡。(握拳

References

Berthold, M. R., Borgelt, C., Hppner, F., & Klawonn, F. (2010). Guide to Intelligent Data Analysis: How to Intelligently Make Sense of Real Data. Springer London.

Chen, T., & Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System. ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (pp.785-794). ACM.

Friedman, J., 2001. Greedy function approximation: a gradient boosting machine. Annals of statistics, 29(5), pp. 1189-1232.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朋蔫,隨后出現(xiàn)的幾起案子罚渐,更是在濱河造成了極大的恐慌,老刑警劉巖驯妄,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荷并,死亡現(xiàn)場離奇詭異,居然都是意外死亡青扔,警方通過查閱死者的電腦和手機(jī)源织,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門翩伪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谈息,你說我怎么就攤上這事缘屹。” “怎么了侠仇?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵轻姿,是天一觀的道長。 經(jīng)常有香客問我逻炊,道長互亮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任余素,我火速辦了婚禮豹休,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桨吊。我一直安慰自己威根,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布屏积。 她就那樣靜靜地躺著医窿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炊林。 梳的紋絲不亂的頭發(fā)上姥卢,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音渣聚,去河邊找鬼独榴。 笑死,一個胖子當(dāng)著我的面吹牛奕枝,可吹牛的內(nèi)容都是我干的棺榔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼隘道,長吁一口氣:“原來是場噩夢啊……” “哼症歇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谭梗,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忘晤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后激捏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體设塔,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年远舅,在試婚紗的時候發(fā)現(xiàn)自己被綠了闰蛔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痕钢。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖序六,靈堂內(nèi)的尸體忽然破棺而出任连,到底是詐尸還是另有隱情,我是刑警寧澤难咕,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布课梳,位于F島的核電站,受9級特大地震影響余佃,放射性物質(zhì)發(fā)生泄漏暮刃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一爆土、第九天 我趴在偏房一處隱蔽的房頂上張望椭懊。 院中可真熱鬧,春花似錦步势、人聲如沸氧猬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盅抚。三九已至,卻和暖如春倔矾,著一層夾襖步出監(jiān)牢的瞬間妄均,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工哪自, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丰包,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓壤巷,卻偏偏與公主長得像邑彪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胧华,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容