數(shù)據(jù)科學入門三個月的一些隨想

這個學期旁聽了統(tǒng)數(shù)學院的三門課:馬景義老師的[數(shù)據(jù)挖掘]饮寞,劉苗老師的[時間序列分析],李豐老師的[統(tǒng)計計算]列吼。

我以前說幽崩,沒有數(shù)學的日子里,我的生活中只剩下了鄙視鏈和毒雞湯寞钥,無法進行深層次的思考』派辏現(xiàn)在上了三個月的課,仍是十分贊同這句話理郑。三個月來蹄溉,在數(shù)據(jù)科學這個行業(yè)里摸爬滾打,算是有不少收獲您炉,在這里寫一些隨想吧柒爵。全文的結(jié)構(gòu)是:

  • 數(shù)據(jù)挖掘
    • 關(guān)于這門課程的收獲
    • 關(guān)于數(shù)據(jù)科學與經(jīng)濟學
    • 關(guān)于數(shù)據(jù)挖掘?qū)崙?zhàn)
    • 關(guān)于測試誤差和科學哲學
    • 關(guān)于今后的努力方向
  • 時間序列
  • 統(tǒng)計計算
  • 結(jié)語

數(shù)據(jù)挖掘

關(guān)于這門課程的收獲

遇到馬老師是一件值得感激的事情,一位很棒的帶領(lǐng)我走進數(shù)據(jù)科學行業(yè)的領(lǐng)路人邻吭。

這門課主要是介紹機器學習里的一些基本算法(目前已經(jīng)教的回歸算法有逐步回歸餐弱、嶺回歸和lasso/lars宴霸,分類算法有分類樹囱晴、隨機森林、bagging trees和AdaBoost trees等)和一些重要的概念(交叉驗證瓢谢、訓練集和測試集畸写、bootstrap、boosting氓扛、ensemble methods枯芬、bias-variance分解等)论笔,重點不在于介紹很多的算法,而在于深入了解每個算法背后的思想和數(shù)學原理千所,所以每次上課都是用馬老師自己寫的R代碼狂魔,而不是調(diào)用R里面現(xiàn)有的算法包。

上課用的參考書是斯坦福大學的Hastie教授的《An Introduction to Statistical Learning》淫痰,(但是課上基本沒怎么提這本書最楷,因為里面幾乎不提數(shù)學原理,著重在思想待错,而課上主要是講馬老師這十多年來在數(shù)據(jù)科學行業(yè)的一些鉆研的收獲籽孙,各種推導公式和算法優(yōu)化都是他自己原創(chuàng)的想法,在書上找不到火俄,這也是我非常感激這門課的原因之一)犯建,毫無疑問是一本深入淺出、高屋建瓴的大師之作瓜客, 用簡潔明了的語言闡明各種算法和概念的思想與本質(zhì)适瓦,讀來有醍醐灌頂之感,排版和畫圖也十分美觀谱仪、清晰犹菇。

書名簡稱 ISLR

k-Nearest Neighbor

印象很深刻的是在介紹過度擬合(overfitting)的時候,說了這么一句:

When a given method yields a small training MSE but a large test MSE, we are said to be overfitting the data. This happens because our statistical learning procedure is working too hard to find patterns in the training data, and may be picking up some patterns that are just caused by random chance rather than by true properties of the unknown function f.

講的非常生動清楚芽卿,對于理解測試誤差和訓練誤差的不同之處也很有幫助揭芍。我覺得,ISLR是本很適合自學的書卸例。

這門課的代碼實現(xiàn)是用R語言称杨,和python一樣是解釋型語言,很好上手筷转。我之前接觸過一段時間的python姑原,覺得代碼相當簡潔,開始學習R之后呜舒,發(fā)現(xiàn)R比python還要簡潔锭汛,甚至簡潔得過分。

predictt <- function(tx) LETTERS[which.max(summary(unlist(lapply(TREE,predictt0,tx))))]
cl <- makeCluster(getOption("cl.cores", 3))
pre <- parApply(cl,TX,1,predictt)

這是課上的一段代碼袭蝗,短短三行唤殴,調(diào)用了很多的函數(shù),都濃縮到一塊兒去了到腥。當然朵逝,寫得簡潔,運行起來速度就慢了不少乡范,不像C語言和C++配名,雖然寫得多啤咽,但運行起來快得很。老師在課上說:“別小看這三行代碼渠脉,可把計算機給累壞了”宇整。

雖然接觸R語言的時間不長,但是我自覺進步很快芋膘,我這才意識到我之前在Coursera上學的python課程是多么的水没陡,既沒有學到干貨,也沒有掌握基本的學習模式/體系∷魃停現(xiàn)在雖然不敢說有很強的寫代碼能力盼玄,但至少掌握了如何學習R,學習python潜腻,即便離開了老師離開了課堂埃儿,也能夠自己完整地學下去。

對接觸過的一些package做筆記

一開始上這門課是很吃力的融涣,一個原因是我沒什么寫代碼的基礎(chǔ)童番,另一個是我的微積分/線性代數(shù)/概率論與數(shù)理統(tǒng)計掌握得不夠扎實。老師上課的時候總愛說“我這一段講清楚了嗎?” “你們聽明白了嗎?”碱呼,每當他說這么一句時,我就意識到幼东,我又有一個知識點沒有掌握。科雳。(捂臉)

上課的時候根蟹,跟不上老師的進度,總有一種“老師正在高速駕駛著汽車糟秘,車尾掛著一條繩子简逮,綁住我的雙手,拖著我往前”的感覺尿赚,我一路顛沛散庶,在地上打著滾,被強行拖向前凌净。悲龟。

好在情況有了好轉(zhuǎn),逐漸熟悉了機器學習之后泻蚊,有漸入佳境之感躲舌。生活進入到了一種很純粹的狀態(tài):基礎(chǔ)不好,那就多投入一些時間唄性雄,第一遍沒看懂没卸,那就多看幾遍唄,勤能補拙秒旋,simple life约计。漸漸地,我能夠理解代碼迁筛,能夠把代碼和背后對應的思想聯(lián)系起來煤蚌。

老師說過一句對我觸動很大的話,“要判斷你有沒有看懂我的代碼细卧,其實很簡單尉桩,你把我的代碼關(guān)了,自己創(chuàng)建一個空白文檔贪庙,從零開始寫起蜘犁,你要是寫出來了,運行沒出錯止邮,得到了和我一樣的運行結(jié)果这橙,這就說明你看明白了,也說明你的寫代碼能力過關(guān)了导披∏” 這話像是雞血,我立刻行動起來撩匕,花了幾個小時把逐步回歸(stepwise regression)給重構(gòu)了出來鹰晨。

自己寫的逐步回歸

這一經(jīng)歷給了我很大的信心,雖然寫的時候各種error各種報錯止毕,但至少并村,我獨立地檢查了錯誤排除了bug,最終實現(xiàn)了算法滓技。在此之后哩牍,我認識到我的代碼能力其實并不差,它就實打?qū)嵉財[在那兒令漂,畢竟能力不足的話是寫不出來的膝昆。我甚至發(fā)現(xiàn)了老師的原代碼里的可以改進的地方,里面有一層不必要的賦值計算叠必,有幾個不必要存在的變量荚孵,徒增復雜,我去了這幾個變量纬朝,刪了那幾行代碼收叶,對flag這個向量進行修改,用最后一個位置記錄常數(shù)項共苛,永不變動判没,前面的位置用來記錄自變量是進入還是退出蜓萄,用FLASE和TRUE進行切換。最后實現(xiàn)的效果是一樣的澄峰,但是代碼更為簡潔嫉沽。

很是興奮,跑去和老師分享俏竞。他先是贊賞了我的做法绸硕,然后問我有沒有試著模擬一套數(shù)據(jù)去測試算法。我當時沒太明白魂毁,后來才慢慢意識到玻佩,我這幾行代碼的修改其實無足輕重,真正重要的算法優(yōu)化席楚,要么是大幅度縮短了運算時間咬崔,要么是大幅度提升了預測精度。

Anyway酣胀,這次重構(gòu)代碼是不錯的嘗試刁赦,而且也讓我認識到了這門數(shù)據(jù)挖掘課和網(wǎng)絡上的那些培訓課的區(qū)別。其實逐步回歸在R里面調(diào)用現(xiàn)成函數(shù)只需要兩行代碼就能實現(xiàn)了:

lm1 =  lm(formula = lpsa~.,data)
step(lm1, direction="both")

實現(xiàn)相同的效果闻镶,自己卻寫了一百五十多行甚脉,其實是在鍛煉自己運用數(shù)學獨立解決問題的能力。


隨著課程的進行铆农,我開始思考兩個大問題:

  • 為什么叫做機器學習牺氨?和人類學習有什么區(qū)別和聯(lián)系?機器能夠?qū)W到什么墩剖?為什么OLS回歸這么簡單的方法也算是機器學習猴凹?
  • 數(shù)據(jù)科學行業(yè)的從業(yè)者的核心競爭力是什么?是代碼能力岭皂?統(tǒng)計能力郊霎?還是業(yè)務場景的insight能力?老師所說的“你需要比那些只會調(diào)用R里面現(xiàn)成的函數(shù)/工具的人更厲害爷绘,能適應和解決更多更復雜的問題书劝,才具有競爭力”究竟是什么意思?

第一個問題土至,在讀了豆瓣上偶然遇到的《Hands-On Machine Learning with Scikit-Learn and TensorFlow》之后基本上想明白了购对。書中對機器學習下了個定義:

A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.
—Tom Mitchell, 1997

機器通過算法從數(shù)據(jù)中學到了數(shù)據(jù)之間的內(nèi)在相互關(guān)聯(lián),挖掘出了我們不容易發(fā)現(xiàn)的信息陶因。用考試作比方的話骡苞,考試成績用MSE/RMSE/MAPE等指標來衡量,給的數(shù)據(jù)越多,機器學到的知識也就越多解幽,考試成績也就越好(預測精度越高)贴见。一個具體的例子的是,Califonia Housing這個數(shù)據(jù)集亚铁,當前任務是蝇刀,給定某地區(qū)的人口螟加、人均收入徘溢、房屋大小、房間數(shù)量捆探、房屋使用年限等信息然爆,讓機器預測該地區(qū)的房價,機器從數(shù)據(jù)中學到知識的方法(算法)有很多種黍图,有簡單的算法(OLS)曾雕,也有復雜些的算法(Lasso),方法越好助被,學習的效率越高(這和人類很像)剖张,而且,另外一個和人類學習相似之處在于揩环,學得越多(數(shù)據(jù)量越大)搔弄,能力越強(測試集誤差越小)丰滑,不過對人類來說這種單調(diào)性可能沒這么明顯顾犹。

至于第二個問題,我現(xiàn)在還沒有想清楚褒墨,大概需要到互聯(lián)網(wǎng)公司里實戰(zhàn)才能夠有更深的體會炫刷。我原本認為,只有統(tǒng)計和計算機知識是不夠的郁妈,畢竟算法和算法實現(xiàn)只是你的一種工具浑玛,是你實現(xiàn)目標的途徑而已,你還需要對業(yè)務噩咪、對應用場景顾彰、對專業(yè)知識、對context有足夠深入的洞見剧腻。但是拘央,在讀了Hastie教授的另外一本教材《The Elements of Statistical Learning》(很著名的一本書,ISLR的深入拓展书在,寫得非常好灰伟,培養(yǎng)了一大批數(shù)據(jù)科學家)之后,我發(fā)現(xiàn)我的這個想法似乎還比較稚嫩。

In data mining applications, usually only a small fraction of the large number of predictor variables that have been included in the analysis are actually relevant to prediction. Also, unlike many applications such as pattern recognition, there is seldom reliable domain knowledge to help create especially relevant features and/or filter out the irrelevant ones, the inclusion of which dramatically degrades the performance of many methods.

希望以后有了更多的體會之后栏账,能夠好好地回答這個問題吧帖族。


說回到數(shù)據(jù)挖掘這門課。馬老師實在是我很敬佩的一位老師挡爵,他的統(tǒng)計知識竖般、對數(shù)據(jù)結(jié)構(gòu)和計算機的認識、編寫代碼的能力茶鹃,都遠遠在我之上涣雕,思維極為敏捷順暢,表達能力很好闭翩,人也很謙遜挣郭、風趣,(而且很擅長記住學生的名字)疗韵。

最開始的時候兑障,我是懷著敬畏之心的,輕易不敢去問他問題蕉汪,因為我提的問題都太幼稚了流译,沒什么技術(shù)含量。后來逐漸混熟了者疤,我說我是經(jīng)濟學院的福澡,是來旁聽的,他就用這個去調(diào)侃選修這門課的應用統(tǒng)計和信息計算科學專業(yè)的同學:“你們看宛渐,廖致君他是學經(jīng)濟學的竞漾,以前沒怎么接觸過編程,他都看懂了我的代碼窥翩,你們沒理由看不懂啊”业岁。和老師打好關(guān)系還是有好處,前幾天邀請我加入了他和其他幾位同學組成的團隊寇蚊,團隊當前的目標是以R為主笔时,C++為輔去改進現(xiàn)有的Elastic Net的算法,希望封裝成一個package仗岸,上傳到CRAN上面開源允耿,給全世界的同行使用,比起當前現(xiàn)有的package要大幅度縮短計算時間扒怖。我覺得這是個很酷的項目较锡,雖然不會C++,但是希望從別的方面給團隊做一些貢獻吧盗痒。老師說蚂蕴,學經(jīng)濟的和學統(tǒng)計/計算機的思考問題的角度很不相同,能給團隊帶來不一樣的貢獻。但愿如此骡楼。

我寫代碼有個習慣熔号,就是先在草稿本上寫寫畫畫,把大致的邏輯框架給想清楚鸟整,借助草圖把變量之間的依附關(guān)系和細節(jié)弄明白引镊,然后才開始在電腦上敲代碼。后來老師在課上說篮条,就應該這么做弟头,別一上來就對著電腦干想。原以為是我這個初學者的壞習慣兑燥,卻得到了敬佩的老師的認可亮瓷。微妙的幸福感琴拧。

當然降瞳,人無完人,老師也有缺點蚓胸,其中之一就是代碼的可讀性差(老師自己也承認)挣饥,變量命名不清楚,排版太擁擠沛膳。他要是沒有在課上給你講明白他的思想和實現(xiàn)方法扔枫,你直接去讀他的代碼,會相當吃力锹安,因為你根本不知道某個變量究竟是什么意思短荐。。

貼一些他課上說的話吧叹哭,挺有意思忍宋。

  • 給我們講怎么運用數(shù)學:

數(shù)學進入到代碼中的時候,別把計算公式給放進去风罩,把你要實現(xiàn)的效果和最核心的思想給放進去糠排。

  • 一句讓我回味了很久的話:

求1+2+3+…+100的結(jié)果。
搞計算機的寫了一個for循環(huán)超升,搞統(tǒng)計的寫了個公式(n+1)*n/2

  • 對data science的看法:

什么是數(shù)據(jù)科學家入宦?搞統(tǒng)計的里面編程能力最強的那些人,或者搞計算機的里面統(tǒng)計能力最強的那些人室琢。

  • 強調(diào)要自己動手寫代碼乾闰,不要只停留在看懂一段代碼上面,給我們打了個比方:

你去看一場電影盈滴,當時很興奮涯肩,印象很深刻,但是過了很久以后,你會遺忘電影里的內(nèi)容和細節(jié)宽菜,但如果你拍攝了一部電影谣膳,你會對這部電影記憶極其深刻,你知道每個道具铅乡、每個布景继谚、每個視角、每段劇情阵幸,這段記憶無法磨滅花履。

  • 介紹隨機森林的時候:

隨機森林是一個技驚四座的算法,不僅計算量小挚赊,預測精度還提高了诡壁。

  • 上課時常常強調(diào)算法的優(yōu)化:

你得非常愛惜你的計算機,心疼它荠割,舍不得讓它跑那么大的運算量妹卿,才能夠不斷寫出更優(yōu)秀的算法


關(guān)于數(shù)據(jù)科學與經(jīng)濟學

我是十分喜歡數(shù)據(jù)科學這個學科的,每天都充滿干勁地去學蔑鹦,學一個新的算法夺克、新的概念、新的package嚎朽,都能給我?guī)砭薮蟮目鞓泛托迈r感铺纽。寫代碼的時候,興奮而投入哟忍,常常是在電腦前專注地思考狡门,洗手間都沒去過,一眨眼就是兩三個小時锅很∑淞螅看python的document,看CRAN上的專題粗蔚,看CSDN上的算法尝偎,充滿了對未知領(lǐng)域的好奇和渴望,每天都期待著能夠?qū)W到更多更有用的知識鹏控。熱衷開源致扯,熱衷交流,熱衷分享当辐,也是我喜歡這個行業(yè)的原因抖僵。

直到今年三月份之前,我的申請計劃專業(yè)都是美國的商業(yè)分析(business analytics)缘揪,簡單地說它是statistics/business/coding三者的交互耍群,是個交叉學科义桂,我認為比較適合我,那時的我還沒怎么了解machine learning蹈垢。三個月過去了慷吊,我意識到我還是更喜歡技術(shù),喜歡偏tech的方向曹抬,BA大概滿足不了我溉瓶,所以我的目標變?yōu)榱薲ata science。我還不能準確地量化我從經(jīng)濟學本科轉(zhuǎn)到data science碩士的難度谤民,而且我也沒查到和我相似的案例堰酿。不過,我查了一些學校的項目和對應課程张足,發(fā)現(xiàn)其實它們所教授的內(nèi)容也沒那么高深困難触创。前幾天,上了哈佛的master-of-science-in-data-science項目官網(wǎng)为牍,去了<Introduction to Data Science>和<Advanced Topics In Data Science>這兩門課的Github頁面哼绑,下載了它們的全部課件、代碼和作業(yè)資料吵聪。我發(fā)現(xiàn)凌那,哈佛也是在用Hastie的那本ISLR做教材,而且講課側(cè)重點在于覆蓋面廣吟逝,對每個算法背后的數(shù)學原理,講得并不夠深入赦肋】樵埽總之,轉(zhuǎn)行成功的希望是有的佃乘,好好努力便是了囱井。但行好事,莫問前程趣避。

Harward:CS 109A, STAT 121A, AC 209A, <Introduction to Data Science>

至于經(jīng)濟學庞呕,我在四月中旬的時候做了一個重要的決定,我對經(jīng)濟學重新進行了定位:

對我而言程帕,經(jīng)濟學可以當作是一種閑暇的興趣愛好住练,像釣魚、登山那樣的陶冶情懷愁拭、蕩滌世俗勢利的愛好讲逛,閑來感興趣讀讀即可,不求甚解岭埠,不求成果盏混,只求獲取靈感蔚鸥、轉(zhuǎn)化思維、活躍大腦许赃,卻不可拿來當作事業(yè)止喷,要求我去研讀經(jīng)典著作、體會大師的思想意識混聊、深入思考經(jīng)濟現(xiàn)象并得出有洞見的觀點和給出有力合理的解釋启盛,或是給我設置考題考察我對「經(jīng)濟學」的理解,就像是村上春樹本人喜歡跑步技羔,卻非常厭惡在學校里老師的強制鍛煉“快僵闯,都給我跑動起來”一般。

那么藤滥,我在經(jīng)濟學院的這三年是不是白讀了呢鳖粟?我覺得,經(jīng)濟學是一個十分重要的拙绊、大家都繞不開的基礎(chǔ)學科向图,即便我最初大一時念的是計算機或者應用統(tǒng)計,我也還是需要去學習經(jīng)濟學的有關(guān)知識标沪,這一條路徑榄攀,始終是要走的。問題在于金句,數(shù)據(jù)科學比起經(jīng)濟學更適合自學檩赢,對于經(jīng)濟學,還是需要有大師級別的人物(對此我感謝斌開和川川违寞,非常優(yōu)秀的導師)贞瞒,帶你走進經(jīng)濟學的世界,培養(yǎng)你的經(jīng)濟學直覺趁曼,一些系統(tǒng)的訓練必不可少军浆,經(jīng)濟學審美的形成尤為重要(使你能夠判斷,誰是在給出深刻的洞見挡闰,誰又是在瞎扯淡乒融,搞一套毫無意義的、障人眼目的數(shù)學模型)摄悯,好的經(jīng)濟理論一定要有被現(xiàn)實證偽的可能赞季。

我曾經(jīng)總結(jié)過這么兩種不懂經(jīng)濟學的人:一種是不懂數(shù)學,邏輯里存在著明顯的錯誤和矛盾射众;另一種是只懂數(shù)學碟摆,不知道經(jīng)濟現(xiàn)象背后的本質(zhì),忽略人類之間的交互叨橱,造出了華麗而無意義的數(shù)學模型典蜕。

2016年秋天断盛,上交的陸銘教授來我們學校辦了場講座,講的是中國的大城市問題愉舔,給我觸動很大钢猛。主要觀點是北京/上海這樣的城市不是太大了,而是太小了轩缤。初聽可能難以接受命迈,但是了解了背后的邏輯之后,你又會對這一點深信不疑火的。你會認同他所說的關(guān)于集聚的優(yōu)勢壶愤,關(guān)于供給和需求的對立統(tǒng)一。這場講座過后馏鹤,我意識到經(jīng)濟學其實是常識征椒,同時它也讓我從此愛上了聽經(jīng)濟學大家的學術(shù)報告。

經(jīng)濟學是困難的湃累,困難在于勃救,你不能明確地說出你掌握了某項知識,看清楚了某個經(jīng)濟現(xiàn)象治力。數(shù)據(jù)科學則不然蒙秒,你把公式推導理清楚,自己動手寫代碼實現(xiàn)宵统,在測試集上得到不錯的分數(shù)晕讲,這便是明白了。而且榜田,對經(jīng)濟學而言益兄,要想說服別人你的理論正確,既要費很多口舌箭券,又要拿出很多的證據(jù)(許多經(jīng)濟學家的口才都很好,“所有人都喜歡和弗里德曼辯論疑枯,尤其是弗里德曼不在的時候”)辩块。數(shù)據(jù)科學則簡單些,交叉驗證的誤差大小就擺在那兒荆永,你的算法好不好废亭,一看便知。

我喜歡經(jīng)濟學中對于中國現(xiàn)實問題的討論和思考“國有企業(yè)的預算軟約束問題如何解決具钥?” “中國的經(jīng)濟開發(fā)區(qū)眾多豆村,為什么成功,又為什么失斅钌尽掌动?” “戶籍制度和土地指標改革的聯(lián)動是否可行四啰?”等,不喜歡太方法論太抽象的問題 “經(jīng)濟學是不是一門科學粗恢?” “怎么看待經(jīng)濟學中大量運用數(shù)學柑晒?” “怎么看待經(jīng)濟理論中的模型假設?”等眷射。


因果識別是經(jīng)濟學中極為重要的內(nèi)容匙赞。而在機器學習里,是不涉及到因果推斷的妖碉。真正嚴格意義上的因果關(guān)系的定義涌庭,來自于Rubin的potential outcome framework。舉一例子欧宜,你今年高一坐榆,報了一個學習輔導班,想提高數(shù)學成績鱼鸠,而在平行時空里猛拴,有一個一模一樣的你和一個一模一樣的世界,在那個時空里蚀狰,你沒有報學習輔導班愉昆。到了期末,你們在各自的世界中參加數(shù)學考試麻蹋,用你的成績減去平行時空里你的成績跛溉,得到的差值,便是參加學習輔導班和提高數(shù)學成績之間的因果關(guān)系扮授。

大神Imbens和大神Rubin的新書芳室,個人認為是攻讀高級計量經(jīng)濟學,深入研究因果推斷的必讀作品

從本質(zhì)上說刹勃,因果識別是一個數(shù)據(jù)缺失問題堪侯,因為你觀察不到平行時空。對此的解決方法是荔仁,找到一個各方面都和你非常非常相似相近的人伍宦,他沒有報輔導班,看你們的成績對比乏梁。只有你們兩個人可能不夠次洼,得盡量找更多的相似的人,取個平均遇骑,這樣得出來的因果關(guān)系更穩(wěn)健卖毁。計量經(jīng)濟學中使用的randomized experiment,difference-in-difference落萎,regression discontinuity等方法亥啦,目的都是在做這種近似炭剪。討論因果識別,不可避免地要去討論內(nèi)生性問題禁悠。

Hastie在書里介紹念祭,機器學習的算法模型存在著Prediction Accuracy和Model Interpretability之間的trade-off,這里說的interpretability不是變量之間的因果關(guān)系碍侦,而是指是否方便你向老板匯報模型的結(jié)果粱坤,方便你向路人介紹你的算法的故事。

機器學習以預測為目標瓷产,從這種意義上說站玄,它比經(jīng)濟學要簡單,因為預測結(jié)果是清晰可見的濒旦,測試誤差就擺在那兒株旷,不管你使用什么方法,不管多么扯淡尔邓,只要能把誤差給降低就行(Hastie管這種算法叫做black box method)晾剖,而要在經(jīng)濟現(xiàn)象中建立一條嚴密的因果推導鏈條,需要花費更多的精力梯嗽,搜集更多的證據(jù)齿尽。


噢對了,經(jīng)濟學家如何在科技公司求職灯节?是一篇對我決定轉(zhuǎn)行影響很大的文章循头,每次讀都有新的感悟,推薦給大家炎疆。


關(guān)于數(shù)據(jù)挖掘?qū)崙?zhàn)

四月中旬的時候卡骂,我報名參加了銀聯(lián)商務舉辦的一個數(shù)據(jù)挖掘比賽,是一個分類問題形入,根據(jù)用戶的基本資料和信貸記錄全跨,判斷他是否會有信貸違約問題(0-1變量)。那時才剛接觸數(shù)據(jù)挖掘不久亿遂,很多知識都還不懂螟蒸,precision和recall不懂,隨機森林不懂崩掘,權(quán)當是重在參與了。參加比賽最大的體會是少办,我意識到苞慢,有一項在現(xiàn)實生活中非常重要,但是課堂上又沒有教授的技術(shù):缺失值填補英妓。

數(shù)據(jù)挖掘界里有兩句常用的行話:

  • 數(shù)據(jù)和特征決定了機器學習的上限挽放,而模型和算法只是在逼近這個上限
  • garbage in,garbage out

現(xiàn)在越發(fā)贊同和認可這兩句話绍赛。

前幾天又報名參加了kaggle的一個比賽(原本想?yún)⒓犹斐氐谋荣惢彝埽前l(fā)現(xiàn)沒有合適的賽題)十酣,數(shù)據(jù)量挺大逼纸,估計我的筆記本帶不動黔帕。耗溜。anyway滥沫,希望這次好好做吧对人。

kaggle的比賽數(shù)據(jù)集

關(guān)于測試誤差和科學哲學

我們在談論算法的誤差的時候涛舍,我們談論的是測試誤差暂筝,而不是訓練誤差箩言,因為后者往往會有過度擬合的問題,給出的結(jié)果往往過于樂觀焕襟。數(shù)據(jù)是寶貴的陨收,容不得浪費,所以有了交叉驗證的思想鸵赖。我們訓練出一套模型务漩,得到了不錯的交叉驗證分數(shù),我們希望它褪,這套模型用到最新的饵骨,未知的數(shù)據(jù)上面時,也能夠有較好的表現(xiàn)列赎。這其中宏悦,隱含了一層假設:新的數(shù)據(jù)和我們評價模型時用的數(shù)據(jù),是相似的包吝,是可以類比的饼煞。類似地,計量經(jīng)濟學中常常談論內(nèi)部有效性和外部有效性诗越,說的是一個在當?shù)赜行У恼?項目砖瞧,推廣到別的地方,是否還能有相同的效果嚷狞。這二者實際上都是在用一種歸納法的思想块促,都是從已知到未知,從有限到無限床未。我們無法窮盡所有的可能性竭翠,所以我們需要使用外推的方法。我們的算法在已有數(shù)據(jù)上表現(xiàn)良好薇搁,在新的數(shù)據(jù)上表現(xiàn)會如何呢斋扰?直到數(shù)據(jù)被采集,驗證之前,我們都不知道問題的答案传货。

科學哲學中屎鳍,大衛(wèi)·休謨提出過一個概念,自然的齊一性问裕,說的是我們未檢驗過的物體將在某些相關(guān)的方面與我們已經(jīng)檢驗過的同類物體相似逮壁。我們很容易發(fā)現(xiàn),宇宙不是齊一的粮宛,并且宇宙每天都在任意地改變窥淆。即便如此,在時間間隔較短的條件下窟勃,我們有理由相信祖乳,齊一性是存在的。以上面提到的銀聯(lián)商務的比賽為例秉氧,主辦方要求我們訓練出一套模型眷昆,就是為了把模型推廣應用出去,預測和防范個人信貸欺詐汁咏,從而降低不良貸款率亚斋。在時間跨度不大的情況下,這個目標是可以實現(xiàn)的攘滩,而時間長了帅刊,信貸市場上千變?nèi)f化,模型的性能自然也就下降了漂问。我把這稱為模型的時效性赖瞒。

橫截面數(shù)據(jù)的預測已然困難,時間序列的預測則更使人畏懼蚤假。世界瞬息萬變栏饮,可能毫無征兆地便暴發(fā)一次沖擊(回想歷次金融危機)。

世界不是平穩(wěn)的磷仰。這便是為什么Hastie會在書的首頁引用這么一句話:

It’s tough to make predictions, especially about the future.
-Yogi Berra


關(guān)于今后的努力方向

“數(shù)據(jù)結(jié)構(gòu)這門課非常重要”袍嬉,馬老師如是說。

用一個例子說明這一點灶平。

除了上面提到的逐步回歸算法以外伺通,我還自己動手寫了分類樹的算法。同樣的逢享,調(diào)用現(xiàn)有的R包只需要兩行代碼:

library(rpart)
fit <- rpart(Kyphosis~Age + Number + Start,  
    data = kyphosis, method = "class",control = ct,  
    parms = list(prior = c(0.65,0.35), split = "information"))

而我寫了150多行罐监,來實現(xiàn)同樣的效果÷髋溃看起來是不太劃算笑诅,一棵簡單的分類樹寫了這么多调缨。但其實這是重要的基本元素,在它的基礎(chǔ)上吆你,稍加修改,加一個抽樣函數(shù)俊犯,就能夠?qū)崿F(xiàn)隨機森林妇多、AdaBoost等很厲害的算法,甚至還能夠在它們的基礎(chǔ)上做調(diào)整和優(yōu)化燕侠。

馬老師的原代碼里者祖,有兩個非常brilliant的地方。一個是用data.frame來記錄和表達整棵分類樹绢彤,每一行表示一個樹節(jié)點七问,包括了它是否為葉節(jié)點,子節(jié)點的編號是什么茫舶,對應哪些觀測械巡,劃分變量是什么,劃分節(jié)點在哪兒饶氏,預測值是多少等信息讥耗。我個人認為,分類樹本質(zhì)上是一個多層嵌套的if...else...結(jié)構(gòu)疹启,而老師能夠想到用data.frame來表達這個結(jié)構(gòu)古程,很厲害。

另一個點是喊崖,只用了一個向量index就把所有的樹節(jié)點所對應的觀測數(shù)據(jù)給記錄了下來挣磨,從一開始的1:n不斷精煉和調(diào)整順序,從而得到最終的index荤懂。而我最初的做法是用list來記錄信息茁裙,一個樹節(jié)點就對應一個list,這樣的做法势誊,不必要地消耗了內(nèi)存呜达,效率也不高。

indexL = indexCurrent[subx[,tree$splitvariable[cur]] >= tree$splitpoint[cur]]
indexR = indexCurrent[subx[,tree$splitvariable[cur]] <  tree$splitpoint[cur]]
index[beginC:endC] = c(indexL,indexR) 

index實在是個很厲害的想法粟耻,我暗自贊賞了很久查近。

所以,如果沒有學過數(shù)據(jù)結(jié)構(gòu)這門課挤忙,就不容易想到用data.frame和vector來記錄信息霜威,上過這門課,才能知道什么樣的結(jié)構(gòu)更適合用于表達呈現(xiàn)你的算法册烈。

關(guān)于分類樹的代碼戈泼,還有一點值得說的是婿禽,里面有這么一行:

xvalues = sort(unique(subx))

在遍歷自變量選出最優(yōu)劃分條件的時候,每次循環(huán)都要對自變量進行排序大猛,非常耗時間扭倾。老師讓我們嘗試去優(yōu)化,我試著試挽绩,一通瞎操作膛壹,結(jié)果運算時間不但沒有減少,反而多了將近一倍唉堪。我意識到模聋,我沒法優(yōu)化是因為我對于算法基礎(chǔ)不了解,不知道什么樣的運算對計算機而言是耗時的唠亚,不知道算法的時間復雜度是多少链方。要想繼續(xù)在這方面深造,這門課得補灶搜。

在大數(shù)據(jù)的背景下祟蚀,并行式編程(parallel programming)也必不可少。老師在課上總是強調(diào)并行的重要性占调,R語言之所以這些年來被python趕超暂题,是因為它背后的維護人員是統(tǒng)計背景的,而python的社區(qū)無疑更為強大究珊,大量搞計算機的人在做著貢獻薪者,使得它在并行計算方面做得更好。

另外剿涮,深度學習/神經(jīng)網(wǎng)絡自然也是需要掌握的言津,不掌握CNN/DNN/RNN這樣的技能,便只能處理結(jié)構(gòu)化的取试,整齊劃一的數(shù)據(jù)悬槽,對于這世界上大量的復雜結(jié)構(gòu)的數(shù)據(jù)束手無策。不過在我當前這個階段瞬浓,這倒不是當務之急初婆,so,it can wait猿棉。

總之磅叛,要學的知識很多,要想掌握也不是一天兩天的事情萨赁。不然為啥要出國讀個碩士而不是待在家里自習呢弊琴?:)

喜歡的東西,感興趣的東西杖爽,總是有機會學明白的敲董。


時間序列

時間序列應該算是連接數(shù)據(jù)科學和經(jīng)濟學(計量經(jīng)濟學)之間的橋梁紫皇。有些時候它給我一種游離在主流體系之外的感覺。雖然書上沒有明確地說腋寨,但是可以看到聪铺,上面所提到的所有算法和模型,都是針對橫截面數(shù)據(jù)來談的精置。

這門課用的參考書是劉苗老師和吳喜之老師自己寫的書计寇。

參考書

關(guān)于吳喜之老師,有一個插曲脂倦。老師是統(tǒng)計圈內(nèi)的一個大牛,三月初的時候來我們學校開了場講座元莫,我去聽了赖阻,還和老師聊了會兒。后來我才發(fā)現(xiàn)踱蠢,馬景義和劉苗都是吳喜之老師的學生火欧,馬景義是劉苗的師兄。聽過吳老師的講座茎截,現(xiàn)在上課用的又是老師的課件苇侵,真是一種奇妙的體驗。


吳喜之老師的課件

我現(xiàn)在明白了企锌,這不是巧合榆浓。當你找到了喜歡做的事情之后,你會發(fā)現(xiàn)生活的方方面面開始串聯(lián)起來撕攒,聯(lián)系起來陡鹃,逐漸地形成一個流暢的體系。

說回這門課抖坪,期中的時候布置了一份project作業(yè)萍鲸,原本要求三個人一組合作完成,我覺得這個project還沒有大到需要分工合作才能完成的地步擦俐,索性一個人寫代碼脊阴,跑數(shù)據(jù),寫文章蚯瞧。很高興的是得到了老師的認可嘿期,被當做范文講了大半節(jié)課。

時序project

當然状知,project里的問題有很多秽五,比如一階單整序列預測之后怎么還原回差分之前的序列,比如怎么填補時間序列的缺失值(我覺得它比橫截面數(shù)據(jù)缺失問題更為嚴重饥悴,因為時間是連續(xù)的坦喘,不能出現(xiàn)斷點)盲再。

而且,對于這門課瓣铣,我有兩個基本問題還沒有想明白答朋。

  • 面板數(shù)據(jù)既有橫截面屬性又有時間序列屬性,那么為什么談論面板數(shù)據(jù)時不討論序列相關(guān)棠笑、序列平穩(wěn)梦碗、單位根檢驗?為什么時間序列分析比面板數(shù)據(jù)分析更為復雜蓖救?
  • 時間序列背后對應的隨機變量是什么洪规?再背后對應的隨機事件是什么?再再背后對應的隨機性是什么循捺?我曾經(jīng)偶然悟出這么一句話斩例,“世界上絕大多數(shù)事件都是隨機事件,確定性事件是非常少的”从橘,是否正確念赶?

again,還是好好學了之后再來回答吧恰力。


統(tǒng)計計算

李豐老師的這門課是開給大二同學的基礎(chǔ)課叉谜,主要講R語言的基本操作。因為我在上面兩門課程中R的訓練足夠了踩萎,所以在從門課里學到的知識相對較少(而且老師講課節(jié)奏偏慢)停局。比較有意思的內(nèi)容是Nelder–Mead算法和馬爾科夫鏈,還有用ggplot2來畫出很好看的圖驻民。

倒是李豐老師的個人網(wǎng)站很吸引我翻具,我覺得很酷。

李豐老師的個人網(wǎng)站

受到啟發(fā)回还,這幾天在試著用Github pages來建一個自己的個人網(wǎng)站裆泳,我覺得會很有意思。

噢對了柠硕,老師還寫了一個R包工禾,關(guān)于隨機變量分布的,同樣也很酷蝗柔。


李豐老師寫的一個R package

結(jié)語

官官給我推薦過一篇很不錯的文章給明年依舊年輕的我們闻葵,里邊有一句話我非常喜歡,送給自己癣丧,也送給大家槽畔。

你的理想就像一輛車,如果你覺得這輛車的一切都在你的控制之中胁编,那么可能說明你開得還不夠快 (Your dream is like your car. If you are in full control of it, you are not driving it fast enough)厢钧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳞尔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子早直,更是在濱河造成了極大的恐慌寥假,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霞扬,死亡現(xiàn)場離奇詭異糕韧,居然都是意外死亡,警方通過查閱死者的電腦和手機喻圃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門萤彩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斧拍,你說我怎么就攤上這事乒疏。” “怎么了饮焦?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窍侧。 經(jīng)常有香客問我县踢,道長,這世上最難降的妖魔是什么伟件? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任硼啤,我火速辦了婚禮,結(jié)果婚禮上斧账,老公的妹妹穿的比我還像新娘谴返。我一直安慰自己,他們只是感情好咧织,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布嗓袱。 她就那樣靜靜地躺著,像睡著了一般习绢。 火紅的嫁衣襯著肌膚如雪渠抹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天闪萄,我揣著相機與錄音梧却,去河邊找鬼。 笑死败去,一個胖子當著我的面吹牛放航,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播圆裕,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼广鳍,長吁一口氣:“原來是場噩夢啊……” “哼荆几!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搜锰,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伴郁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛋叼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焊傅,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年狈涮,在試婚紗的時候發(fā)現(xiàn)自己被綠了狐胎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡歌馍,死狀恐怖握巢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情松却,我是刑警寧澤暴浦,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站晓锻,受9級特大地震影響歌焦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砚哆,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一独撇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躁锁,春花似錦纷铣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匣吊,卻和暖如春儒拂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背色鸳。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工社痛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人命雀。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓蒜哀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撵儿,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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