《哈佛商業評論》曾宣稱“數據科學家”是二十一世紀最性感的職業。所謂性感,既代表著難以名狀的誘惑,又說明了大家對它又不甚了解。
如何做好數據科學呢?
微軟高級數據科學家 Brandon Rohrer 概括了做數據科學的七大步驟,手把手教你做數據科學。
1. 獲取更多的數據
數據科學的原材料是數字和名稱的集合,測量、價格、日期、時間、產品、標題、行動等,數據科學無所不包。你也可以使用圖像、文字、音頻、視頻等復雜數據,只要你能將它們簡化為數字和名稱。
獲取數據的機制可能非常復雜,事實上,數據工程師就像忍者一樣。不過,本篇文章將主要聚焦于數據科學。
2. 問一個尖銳的問題
數據科學是通過數字和名稱組成的數據集合來回答問題的過程。你問的問題越精確,越容易找到令你滿意的答案。在選擇問題的時候,想象你的面前是一個可以用數字或字段來告訴你宇宙中一切奧秘的圣人,他的回答總是模糊不清、令人困惑,而你希望問一個精準而無懈可擊的問題,讓他忍不住告訴你問題的答案。
模糊的問題如“我的數據能告訴我什么?”、“我應該做什么?”我怎樣提高利潤?”會帶來無用的回答,而清晰的問題如“第三季度我能在蒙特利爾賣出多少產品?”、“我車隊中的哪一輛車會先壞?”會帶來清晰的答案。
在有了問題后,要看你的數據是否能夠回答這些問題。如果你的問題是“我的股票下周的價格是多少?”,那就要確保你的數據中有股票的歷史價格;如果你的問題是“ 88型航空發動機能夠工作多少小時?”,那就要確保你有多臺 88 型發動機故障次數的數據。這些就是你的 目標數據 (target) ,即你希望在未來預測或布置的量或種類。如果你沒有任何目標數據,需要回到步驟 1 ,獲取更多的數據,因為沒有目標數據則無法回答問題。
3. 將數據置于表格中
大部分機器學習算法假設數據以表格的形式呈現,每行是一個事件、項目或實例,每列是行數據的一個特征或屬性。在一個描述美國足球比賽的數據集中,每行可能代表一場比賽,列可能包括主場隊、客場隊、主場得分、客場得分、日期、開始時間、出場情況等等。表格中的列可以非常細致,有多少都可以。
選擇所需數據行
將數據集分割成行有許多方法,但只有一種方法能幫助你回答問題:每行有且只能有一個目標實例。以零售店數據為例,一行可以是一次交易、一天、一個零售店、一個顧客等等。如果你的問題是“剛進過店的顧客會回訪嗎?”,那應當以一個顧客作為一行,你的目標“顧客是否回訪”將呈現在每行,而如果以一個零售店或者一天作為每行的數據則不能回答目標問題。
有時你必須通過累積數據來獲得需要的數據。如果你的問題是“我每天賣出多少拿鐵咖啡?”,那你需要的數據是以天數作為行、賣出的拿鐵數作為列,但是你手頭的數據可能是帶有日期和時間的交易記錄。為了將這些數據變為每天的數據,需要對目前的數據進行累積,將每一天賣出的拿鐵數進行合計。在這個過程中,有些信息會丟失,例如每杯拿鐵賣出的時間,但沒有關系,因為它不會幫助你回答問題。
4. 檢查數據質量
檢視
下一步是認真地排查數據。檢查數據有兩個目的:第一,發現錯誤數據,修復或去除;第二,充分了解每一行每一列。這一步不能跳過,否則無法讓數據發揮最大功效。只有你對你的數據表示出愛,它才會愛你哦 ~
以一列數據為例,它的標簽是什么?數值與標簽匹配嗎?標簽對你來說有意義嗎?這一列數據有記錄嗎?是怎樣測量的?誰來測量的?如果你幸運地認識錄入數據的人,不妨約他們出來吃甜甜圈,問問他們是怎樣測量的,問問他們錄入中有沒有有趣的故事,這一頓點心會給你帶來回報的。
現在,讓我們把用這一列畫一個柱狀圖。整體分布符合你的預期嗎?是否有異常數據點?異常點是否有意義?例如,如果這一列代表的是農業分布的經度,有沒有一個數據點落在太平洋中?如果這一列是關于考試分數,是否有人的分數是 1% 或者10000% ?用你所知的一切對數據做一個監測,如果有的數據看起來有些奇怪,找出為什么。
校正
在排查數據中,你可能發現一些標簽和記錄的錯誤,記錄并分享你的發現。
你也可能發現一些值是錯誤的。一些值可能超過了正常范圍,比如一個人竟然 72 米高,或者有些值是不可能出現的,例如一個寫成“中心路 7777777777 號”的地址。這種情況下,你有三個選擇:如果這個值很容易更改,那就改為正確的值,例如把高 72 米改成 72 英寸;如果錯誤的值不明顯,你可以刪掉這個值、注明缺失;如果這個值是關鍵信息,你可以刪除整行或者整列。這樣可以讓你訓練的模型遠離錯誤數據。錯誤數據可比缺失數據危害更大。
你可能很想移除看起來不理想的數據,例如異常數據或者不支持你的理論的數據——但千萬別這樣做,否則不僅違背學術倫理,更可怕的是可能會導致錯誤結果。
替換缺失值
幾乎每一個數據集都存在缺失值,可能是由于數值錯誤被刪除了,也可能是你在實驗途中去測量了一個新的變量,還可能是這些數據來自不同的數據源。但不管什么情況,大部分機器學習算法要么要求數據無缺失,要么會用默認值填充。而你可以比機器做得更好,因為你了解你的數據。
替換缺失值有很多方法, 處理缺失值的方法 一文 提供了一個辦法,而最佳的處理辦法取決于每一列的意義和數值缺失帶來的影響,每一個數據集的情況可能都有所不同。
替換完所有的缺失值后,你的數據們現在已經“連上”了,每一個數據點對每一個特征都有意義。現在,這些數據是干凈的、可以拿來用了。
有時候你可能發現,在數據清理后,幾乎沒有剩余的數據了……這是件好事情,因為你剛剛避免了走上用錯誤的數據建立模型、得到錯誤的結論、被客戶嘲笑、激怒老板的不歸路 …… 如果是這樣,那就回到第一步,從頭獲取更多的數據吧!
5. 變換特征
在進入機器學習之前還有一步:特征工程 (feature engineering) ,即對現有特征數據進行創意組合,以更好地預測你的目標。舉個 ,如果我們把火車到達和出發的時間相減,可以得到火車的運輸時間,這個特征對完成目標即預測火車的最大速度更加有用。
嚴格來講,特征工程并不會增加任何數據信息,只是使用各種方法對原有數據進行組合。然而,僅僅對兩欄的數據進行組合就有無限種方式,而大部分組合方式對解決目標并沒有什么幫助。通常情況下,只有在對數據有充分了解的情況下才可能選出一個好的方式。你需要充分調用你所有的相關知識,讓數據為你所用。
特征工程是數據科學中最微妙的一步,沒有一成不變的辦法,而是要不斷試錯、依靠直覺和經驗。深度學習試圖讓這個過程自動完成,但大多以失敗告終,也許這就是人類智能的特別之處吧。
不過,即使你還不是特征工程的黑帶高手,也有一個可以使用的小技巧。你可以根據你的目標,用不同的顏色標識變量,這可以幫你發現變量之間的關系。這可能工作量較大,不過你一定要花些時間過一遍。每當你發現有兩個變量與目標相關,那可能就是一個特征工程,意味著這兩個變量結合在一起可能比孤立來看更有幫助。
有時候,你會發現你的數據中沒有任何變量或變量的組合能夠幫你預測目標,這可能意味著你需要測量一些其他變量。那么,重回第一步,獲取更多的數據吧 !
6. 回答問題
終于到了數據科學家最愛的部分了 —— 機器學習!簡單地說,你需要 確定你的問題屬于哪種算法 ,然后 ,使用傳統的機器學習技巧來分割數據進行訓練、調整、測試數據集、根據選擇的模型優化參數。
如果你的模型無法很好地解決問題,或者你不想用機器學習,還有兩種非傳統的方法:
第一種,簡單地看一下你的數據圖像,很多情況下,只要對數據進行可視化就能找到答案。例如,如果你的問題是“波士頓明年 7 月 4 號的最高氣溫是多少?”,那么只要看一下過去 100 年間波士頓每年 7 月 4 日最高氣溫的直方圖就基本可以解決問題了。
第二種方法技術含量更高一些。如果你是因為數據集太小而得不到結果,你可以考慮進行優化。機器學習基于弱先驗假設,也就是說,機器學習對數據結構做一些較弱的假設。這種方法的優點在于使用算法之前不需要對數據有太多了解,它能夠訓練出一些大致的模型,而缺點在于需要大量數據才能獲得一個可信的答案。一個替代方法是根據你對數據的了解,對數據做更多的假設。例如,如果你想預測一個物體的飛行軌跡,你可以收集大量物體自由落體的數據,用它們訓練機器學習算法。你其實還可以用你了解的牛頓力學知識來制作一個更豐富的模型。這樣,只需要一個包括位置和速度的數據點就可以預計這個物體在未來任何一點的位置和速度。這種方法的風險在于你的假設可能不完全正確,但優點是你不需要大量的數據就能完成任務。
如果這些辦法對你都不適用,也許意味著你需要收集更多的數據,或者重新思考一下你測量的數據。回到第一步,獲取更多數據吧 ~
7 .應用答案
不管你如何優雅地用數據回答提出的問題,你的工作直到有用戶使用才算完成。將你的結果以某種形式呈現給用戶,用戶可以用它做決策、完成任務或進行學習。展示的方式有很多:你可以將結果放在 web 頁面上,把你發現的最有用的信息呈現在 PDF上,可以在 GitHub 上分享你的代碼,可以把結論做成視頻分享給你的商業客戶,可以制作美觀的數據可視化成果發在 Twitter 上,等等。不管采用哪種方式,要讓其他人使用你的成果。
森林中的一棵樹倒下,即使附近沒有人聽見,仍然會有響聲,但如果你建造了一個精良的模型卻沒人用,你肯定不會得到贊譽。
那么就從頭開始吧,回到第一步,獲取更多的數據!