數據科學入門三個月的一些隨想

這個學期旁聽了統數學院的三門課:馬景義老師的[數據挖掘],劉苗老師的[時間序列分析],李豐老師的[統計計算]。

我以前說,沒有數學的日子里,我的生活中只剩下了鄙視鏈和毒雞湯,無法進行深層次的思考。現在上了三個月的課,仍是十分贊同這句話。三個月來,在數據科學這個行業里摸爬滾打,算是有不少收獲,在這里寫一些隨想吧。全文的結構是:

  • 數據挖掘
    • 關于這門課程的收獲
    • 關于數據科學與經濟學
    • 關于數據挖掘實戰
    • 關于測試誤差和科學哲學
    • 關于今后的努力方向
  • 時間序列
  • 統計計算
  • 結語

數據挖掘

關于這門課程的收獲

遇到馬老師是一件值得感激的事情,一位很棒的帶領我走進數據科學行業的領路人。

這門課主要是介紹機器學習里的一些基本算法(目前已經教的回歸算法有逐步回歸、嶺回歸和lasso/lars,分類算法有分類樹、隨機森林、bagging trees和AdaBoost trees等)和一些重要的概念(交叉驗證、訓練集和測試集、bootstrap、boosting、ensemble methods、bias-variance分解等),重點不在于介紹很多的算法,而在于深入了解每個算法背后的思想和數學原理,所以每次上課都是用馬老師自己寫的R代碼,而不是調用R里面現有的算法包。

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

書名簡稱 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是本很適合自學的書。

這門課的代碼實現是用R語言,和python一樣是解釋型語言,很好上手。我之前接觸過一段時間的python,覺得代碼相當簡潔,開始學習R之后,發現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)

這是課上的一段代碼,短短三行,調用了很多的函數,都濃縮到一塊兒去了。當然,寫得簡潔,運行起來速度就慢了不少,不像C語言和C++,雖然寫得多,但運行起來快得很。老師在課上說:“別小看這三行代碼,可把計算機給累壞了”。

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

對接觸過的一些package做筆記

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

上課的時候,跟不上老師的進度,總有一種“老師正在高速駕駛著汽車,車尾掛著一條繩子,綁住我的雙手,拖著我往前”的感覺,我一路顛沛,在地上打著滾,被強行拖向前。。

好在情況有了好轉,逐漸熟悉了機器學習之后,有漸入佳境之感。生活進入到了一種很純粹的狀態:基礎不好,那就多投入一些時間唄,第一遍沒看懂,那就多看幾遍唄,勤能補拙,simple life。漸漸地,我能夠理解代碼,能夠把代碼和背后對應的思想聯系起來。

老師說過一句對我觸動很大的話,“要判斷你有沒有看懂我的代碼,其實很簡單,你把我的代碼關了,自己創建一個空白文檔,從零開始寫起,你要是寫出來了,運行沒出錯,得到了和我一樣的運行結果,這就說明你看明白了,也說明你的寫代碼能力過關了。” 這話像是雞血,我立刻行動起來,花了幾個小時把逐步回歸(stepwise regression)給重構了出來。

自己寫的逐步回歸

這一經歷給了我很大的信心,雖然寫的時候各種error各種報錯,但至少,我獨立地檢查了錯誤排除了bug,最終實現了算法。在此之后,我認識到我的代碼能力其實并不差,它就實打實地擺在那兒,畢竟能力不足的話是寫不出來的。我甚至發現了老師的原代碼里的可以改進的地方,里面有一層不必要的賦值計算,有幾個不必要存在的變量,徒增復雜,我去了這幾個變量,刪了那幾行代碼,對flag這個向量進行修改,用最后一個位置記錄常數項,永不變動,前面的位置用來記錄自變量是進入還是退出,用FLASE和TRUE進行切換。最后實現的效果是一樣的,但是代碼更為簡潔。

很是興奮,跑去和老師分享。他先是贊賞了我的做法,然后問我有沒有試著模擬一套數據去測試算法。我當時沒太明白,后來才慢慢意識到,我這幾行代碼的修改其實無足輕重,真正重要的算法優化,要么是大幅度縮短了運算時間,要么是大幅度提升了預測精度。

Anyway,這次重構代碼是不錯的嘗試,而且也讓我認識到了這門數據挖掘課和網絡上的那些培訓課的區別。其實逐步回歸在R里面調用現成函數只需要兩行代碼就能實現了:

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

實現相同的效果,自己卻寫了一百五十多行,其實是在鍛煉自己運用數學獨立解決問題的能力。


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

  • 為什么叫做機器學習?和人類學習有什么區別和聯系?機器能夠學到什么?為什么OLS回歸這么簡單的方法也算是機器學習?
  • 數據科學行業的從業者的核心競爭力是什么?是代碼能力?統計能力?還是業務場景的insight能力?老師所說的“你需要比那些只會調用R里面現成的函數/工具的人更厲害,能適應和解決更多更復雜的問題,才具有競爭力”究竟是什么意思?

第一個問題,在讀了豆瓣上偶然遇到的《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

機器通過算法從數據中學到了數據之間的內在相互關聯,挖掘出了我們不容易發現的信息。用考試作比方的話,考試成績用MSE/RMSE/MAPE等指標來衡量,給的數據越多,機器學到的知識也就越多,考試成績也就越好(預測精度越高)。一個具體的例子的是,Califonia Housing這個數據集,當前任務是,給定某地區的人口、人均收入、房屋大小、房間數量、房屋使用年限等信息,讓機器預測該地區的房價,機器從數據中學到知識的方法(算法)有很多種,有簡單的算法(OLS),也有復雜些的算法(Lasso),方法越好,學習的效率越高(這和人類很像),而且,另外一個和人類學習相似之處在于,學得越多(數據量越大),能力越強(測試集誤差越小),不過對人類來說這種單調性可能沒這么明顯。

至于第二個問題,我現在還沒有想清楚,大概需要到互聯網公司里實戰才能夠有更深的體會。我原本認為,只有統計和計算機知識是不夠的,畢竟算法和算法實現只是你的一種工具,是你實現目標的途徑而已,你還需要對業務、對應用場景、對專業知識、對context有足夠深入的洞見。但是,在讀了Hastie教授的另外一本教材《The Elements of Statistical Learning》(很著名的一本書,ISLR的深入拓展,寫得非常好,培養了一大批數據科學家)之后,我發現我的這個想法似乎還比較稚嫩。

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.

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


說回到數據挖掘這門課。馬老師實在是我很敬佩的一位老師,他的統計知識、對數據結構和計算機的認識、編寫代碼的能力,都遠遠在我之上,思維極為敏捷順暢,表達能力很好,人也很謙遜、風趣,(而且很擅長記住學生的名字)。

最開始的時候,我是懷著敬畏之心的,輕易不敢去問他問題,因為我提的問題都太幼稚了,沒什么技術含量。后來逐漸混熟了,我說我是經濟學院的,是來旁聽的,他就用這個去調侃選修這門課的應用統計和信息計算科學專業的同學:“你們看,廖致君他是學經濟學的,以前沒怎么接觸過編程,他都看懂了我的代碼,你們沒理由看不懂啊”。和老師打好關系還是有好處,前幾天邀請我加入了他和其他幾位同學組成的團隊,團隊當前的目標是以R為主,C++為輔去改進現有的Elastic Net的算法,希望封裝成一個package,上傳到CRAN上面開源,給全世界的同行使用,比起當前現有的package要大幅度縮短計算時間。我覺得這是個很酷的項目,雖然不會C++,但是希望從別的方面給團隊做一些貢獻吧。老師說,學經濟的和學統計/計算機的思考問題的角度很不相同,能給團隊帶來不一樣的貢獻。但愿如此。

我寫代碼有個習慣,就是先在草稿本上寫寫畫畫,把大致的邏輯框架給想清楚,借助草圖把變量之間的依附關系和細節弄明白,然后才開始在電腦上敲代碼。后來老師在課上說,就應該這么做,別一上來就對著電腦干想。原以為是我這個初學者的壞習慣,卻得到了敬佩的老師的認可。微妙的幸福感。

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

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

  • 給我們講怎么運用數學:

數學進入到代碼中的時候,別把計算公式給放進去,把你要實現的效果和最核心的思想給放進去。

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

求1+2+3+…+100的結果。
搞計算機的寫了一個for循環,搞統計的寫了個公式(n+1)*n/2

  • 對data science的看法:

什么是數據科學家?搞統計的里面編程能力最強的那些人,或者搞計算機的里面統計能力最強的那些人。

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

你去看一場電影,當時很興奮,印象很深刻,但是過了很久以后,你會遺忘電影里的內容和細節,但如果你拍攝了一部電影,你會對這部電影記憶極其深刻,你知道每個道具、每個布景、每個視角、每段劇情,這段記憶無法磨滅。

  • 介紹隨機森林的時候:

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

  • 上課時常常強調算法的優化:

你得非常愛惜你的計算機,心疼它,舍不得讓它跑那么大的運算量,才能夠不斷寫出更優秀的算法


關于數據科學與經濟學

我是十分喜歡數據科學這個學科的,每天都充滿干勁地去學,學一個新的算法、新的概念、新的package,都能給我帶來巨大的快樂和新鮮感。寫代碼的時候,興奮而投入,常常是在電腦前專注地思考,洗手間都沒去過,一眨眼就是兩三個小時。看python的document,看CRAN上的專題,看CSDN上的算法,充滿了對未知領域的好奇和渴望,每天都期待著能夠學到更多更有用的知識。熱衷開源,熱衷交流,熱衷分享,也是我喜歡這個行業的原因。

直到今年三月份之前,我的申請計劃專業都是美國的商業分析(business analytics),簡單地說它是statistics/business/coding三者的交互,是個交叉學科,我認為比較適合我,那時的我還沒怎么了解machine learning。三個月過去了,我意識到我還是更喜歡技術,喜歡偏tech的方向,BA大概滿足不了我,所以我的目標變為了data science。我還不能準確地量化我從經濟學本科轉到data science碩士的難度,而且我也沒查到和我相似的案例。不過,我查了一些學校的項目和對應課程,發現其實它們所教授的內容也沒那么高深困難。前幾天,上了哈佛的master-of-science-in-data-science項目官網,去了<Introduction to Data Science>和<Advanced Topics In Data Science>這兩門課的Github頁面,下載了它們的全部課件、代碼和作業資料。我發現,哈佛也是在用Hastie的那本ISLR做教材,而且講課側重點在于覆蓋面廣,對每個算法背后的數學原理,講得并不夠深入。總之,轉行成功的希望是有的,好好努力便是了。但行好事,莫問前程。

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

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

對我而言,經濟學可以當作是一種閑暇的興趣愛好,像釣魚、登山那樣的陶冶情懷、蕩滌世俗勢利的愛好,閑來感興趣讀讀即可,不求甚解,不求成果,只求獲取靈感、轉化思維、活躍大腦,卻不可拿來當作事業,要求我去研讀經典著作、體會大師的思想意識、深入思考經濟現象并得出有洞見的觀點和給出有力合理的解釋,或是給我設置考題考察我對「經濟學」的理解,就像是村上春樹本人喜歡跑步,卻非常厭惡在學校里老師的強制鍛煉“快,都給我跑動起來”一般。

那么,我在經濟學院的這三年是不是白讀了呢?我覺得,經濟學是一個十分重要的、大家都繞不開的基礎學科,即便我最初大一時念的是計算機或者應用統計,我也還是需要去學習經濟學的有關知識,這一條路徑,始終是要走的。問題在于,數據科學比起經濟學更適合自學,對于經濟學,還是需要有大師級別的人物(對此我感謝斌開和川川,非常優秀的導師),帶你走進經濟學的世界,培養你的經濟學直覺,一些系統的訓練必不可少,經濟學審美的形成尤為重要(使你能夠判斷,誰是在給出深刻的洞見,誰又是在瞎扯淡,搞一套毫無意義的、障人眼目的數學模型),好的經濟理論一定要有被現實證偽的可能

我曾經總結過這么兩種不懂經濟學的人:一種是不懂數學,邏輯里存在著明顯的錯誤和矛盾;另一種是只懂數學,不知道經濟現象背后的本質,忽略人類之間的交互,造出了華麗而無意義的數學模型。

2016年秋天,上交的陸銘教授來我們學校辦了場講座,講的是中國的大城市問題,給我觸動很大。主要觀點是北京/上海這樣的城市不是太大了,而是太小了。初聽可能難以接受,但是了解了背后的邏輯之后,你又會對這一點深信不疑。你會認同他所說的關于集聚的優勢,關于供給和需求的對立統一。這場講座過后,我意識到經濟學其實是常識,同時它也讓我從此愛上了聽經濟學大家的學術報告。

經濟學是困難的,困難在于,你不能明確地說出你掌握了某項知識,看清楚了某個經濟現象。數據科學則不然,你把公式推導理清楚,自己動手寫代碼實現,在測試集上得到不錯的分數,這便是明白了。而且,對經濟學而言,要想說服別人你的理論正確,既要費很多口舌,又要拿出很多的證據(許多經濟學家的口才都很好,“所有人都喜歡和弗里德曼辯論,尤其是弗里德曼不在的時候”)。數據科學則簡單些,交叉驗證的誤差大小就擺在那兒,你的算法好不好,一看便知。

我喜歡經濟學中對于中國現實問題的討論和思考“國有企業的預算軟約束問題如何解決?” “中國的經濟開發區眾多,為什么成功,又為什么失敗?” “戶籍制度和土地指標改革的聯動是否可行?”等,不喜歡太方法論太抽象的問題 “經濟學是不是一門科學?” “怎么看待經濟學中大量運用數學?” “怎么看待經濟理論中的模型假設?”等。


因果識別是經濟學中極為重要的內容。而在機器學習里,是不涉及到因果推斷的。真正嚴格意義上的因果關系的定義,來自于Rubin的potential outcome framework。舉一例子,你今年高一,報了一個學習輔導班,想提高數學成績,而在平行時空里,有一個一模一樣的你和一個一模一樣的世界,在那個時空里,你沒有報學習輔導班。到了期末,你們在各自的世界中參加數學考試,用你的成績減去平行時空里你的成績,得到的差值,便是參加學習輔導班和提高數學成績之間的因果關系

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

從本質上說,因果識別是一個數據缺失問題,因為你觀察不到平行時空。對此的解決方法是,找到一個各方面都和你非常非常相似相近的人,他沒有報輔導班,看你們的成績對比。只有你們兩個人可能不夠,得盡量找更多的相似的人,取個平均,這樣得出來的因果關系更穩健。計量經濟學中使用的randomized experiment,difference-in-difference,regression discontinuity等方法,目的都是在做這種近似。討論因果識別,不可避免地要去討論內生性問題。

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

機器學習以預測為目標,從這種意義上說,它比經濟學要簡單,因為預測結果是清晰可見的,測試誤差就擺在那兒,不管你使用什么方法,不管多么扯淡,只要能把誤差給降低就行(Hastie管這種算法叫做black box method),而要在經濟現象中建立一條嚴密的因果推導鏈條,需要花費更多的精力,搜集更多的證據。


噢對了,經濟學家如何在科技公司求職?是一篇對我決定轉行影響很大的文章,每次讀都有新的感悟,推薦給大家。


關于數據挖掘實戰

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

數據挖掘界里有兩句常用的行話:

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

現在越發贊同和認可這兩句話。

前幾天又報名參加了kaggle的一個比賽(原本想參加天池的比賽,但是發現沒有合適的賽題),數據量挺大,估計我的筆記本帶不動。。anyway,希望這次好好做吧。

kaggle的比賽數據集

關于測試誤差和科學哲學

我們在談論算法的誤差的時候,我們談論的是測試誤差,而不是訓練誤差,因為后者往往會有過度擬合的問題,給出的結果往往過于樂觀。數據是寶貴的,容不得浪費,所以有了交叉驗證的思想。我們訓練出一套模型,得到了不錯的交叉驗證分數,我們希望,這套模型用到最新的,未知的數據上面時,也能夠有較好的表現。這其中,隱含了一層假設:新的數據和我們評價模型時用的數據,是相似的,是可以類比的。類似地,計量經濟學中常常談論內部有效性和外部有效性,說的是一個在當地有效的政策/項目,推廣到別的地方,是否還能有相同的效果。這二者實際上都是在用一種歸納法的思想,都是從已知到未知,從有限到無限。我們無法窮盡所有的可能性,所以我們需要使用外推的方法。我們的算法在已有數據上表現良好,在新的數據上表現會如何呢?直到數據被采集,驗證之前,我們都不知道問題的答案。

科學哲學中,大衛·休謨提出過一個概念,自然的齊一性,說的是我們未檢驗過的物體將在某些相關的方面與我們已經檢驗過的同類物體相似。我們很容易發現,宇宙不是齊一的,并且宇宙每天都在任意地改變。即便如此,在時間間隔較短的條件下,我們有理由相信,齊一性是存在的。以上面提到的銀聯商務的比賽為例,主辦方要求我們訓練出一套模型,就是為了把模型推廣應用出去,預測和防范個人信貸欺詐,從而降低不良貸款率。在時間跨度不大的情況下,這個目標是可以實現的,而時間長了,信貸市場上千變萬化,模型的性能自然也就下降了。我把這稱為模型的時效性。

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

世界不是平穩的。這便是為什么Hastie會在書的首頁引用這么一句話:

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


關于今后的努力方向

“數據結構這門課非常重要”,馬老師如是說。

用一個例子說明這一點。

除了上面提到的逐步回歸算法以外,我還自己動手寫了分類樹的算法。同樣的,調用現有的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多行,來實現同樣的效果。看起來是不太劃算,一棵簡單的分類樹寫了這么多。但其實這是重要的基本元素,在它的基礎上,稍加修改,加一個抽樣函數,就能夠實現隨機森林、AdaBoost等很厲害的算法,甚至還能夠在它們的基礎上做調整和優化。

馬老師的原代碼里,有兩個非常brilliant的地方。一個是用data.frame來記錄和表達整棵分類樹,每一行表示一個樹節點,包括了它是否為葉節點,子節點的編號是什么,對應哪些觀測,劃分變量是什么,劃分節點在哪兒,預測值是多少等信息。我個人認為,分類樹本質上是一個多層嵌套的if...else...結構,而老師能夠想到用data.frame來表達這個結構,很厲害。

另一個點是,只用了一個向量index就把所有的樹節點所對應的觀測數據給記錄了下來,從一開始的1:n不斷精煉和調整順序,從而得到最終的index。而我最初的做法是用list來記錄信息,一個樹節點就對應一個list,這樣的做法,不必要地消耗了內存,效率也不高。

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實在是個很厲害的想法,我暗自贊賞了很久。

所以,如果沒有學過數據結構這門課,就不容易想到用data.frame和vector來記錄信息,上過這門課,才能知道什么樣的結構更適合用于表達呈現你的算法。

關于分類樹的代碼,還有一點值得說的是,里面有這么一行:

xvalues = sort(unique(subx))

在遍歷自變量選出最優劃分條件的時候,每次循環都要對自變量進行排序,非常耗時間。老師讓我們嘗試去優化,我試著試,一通瞎操作,結果運算時間不但沒有減少,反而多了將近一倍。我意識到,我沒法優化是因為我對于算法基礎不了解,不知道什么樣的運算對計算機而言是耗時的,不知道算法的時間復雜度是多少。要想繼續在這方面深造,這門課得補。

在大數據的背景下,并行式編程(parallel programming)也必不可少。老師在課上總是強調并行的重要性,R語言之所以這些年來被python趕超,是因為它背后的維護人員是統計背景的,而python的社區無疑更為強大,大量搞計算機的人在做著貢獻,使得它在并行計算方面做得更好。

另外,深度學習/神經網絡自然也是需要掌握的,不掌握CNN/DNN/RNN這樣的技能,便只能處理結構化的,整齊劃一的數據,對于這世界上大量的復雜結構的數據束手無策。不過在我當前這個階段,這倒不是當務之急,so,it can wait。

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

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


時間序列

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

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

參考書

關于吳喜之老師,有一個插曲。老師是統計圈內的一個大牛,三月初的時候來我們學校開了場講座,我去聽了,還和老師聊了會兒。后來我才發現,馬景義和劉苗都是吳喜之老師的學生,馬景義是劉苗的師兄。聽過吳老師的講座,現在上課用的又是老師的課件,真是一種奇妙的體驗。


吳喜之老師的課件

我現在明白了,這不是巧合。當你找到了喜歡做的事情之后,你會發現生活的方方面面開始串聯起來,聯系起來,逐漸地形成一個流暢的體系。

說回這門課,期中的時候布置了一份project作業,原本要求三個人一組合作完成,我覺得這個project還沒有大到需要分工合作才能完成的地步,索性一個人寫代碼,跑數據,寫文章。很高興的是得到了老師的認可,被當做范文講了大半節課。

時序project

當然,project里的問題有很多,比如一階單整序列預測之后怎么還原回差分之前的序列,比如怎么填補時間序列的缺失值(我覺得它比橫截面數據缺失問題更為嚴重,因為時間是連續的,不能出現斷點)。

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

  • 面板數據既有橫截面屬性又有時間序列屬性,那么為什么談論面板數據時不討論序列相關、序列平穩、單位根檢驗?為什么時間序列分析比面板數據分析更為復雜?
  • 時間序列背后對應的隨機變量是什么?再背后對應的隨機事件是什么?再再背后對應的隨機性是什么?我曾經偶然悟出這么一句話,“世界上絕大多數事件都是隨機事件,確定性事件是非常少的”,是否正確?

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


統計計算

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

倒是李豐老師的個人網站很吸引我,我覺得很酷。

李豐老師的個人網站

受到啟發,這幾天在試著用Github pages來建一個自己的個人網站,我覺得會很有意思。

噢對了,老師還寫了一個R包,關于隨機變量分布的,同樣也很酷。


李豐老師寫的一個R package

結語

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

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容