Data Science 引擎
本文將詳細介紹一下Data Science引擎的定義和意義。這是對於 消除對數據科學家的錯誤認識 - 知乎專欄 中,關於數據科學家的「軟體工程師」屬性的分析和解釋。
引擎的產生是由於以下一些問題
重複使用:在數據科學軟體公司,通常有大量數據科學家平行進行各種項目的開發和研究,例如對不同模型的開發和使用。這個過程涉及許多函數的重複使用,這些函數常常是和領域相關而並沒有直接對應的軟體包。不同的數據科學家可能需要分開編寫完成同樣或者類似功能的函數,為了避免重複性勞動,需要有定期維護和升級的公司/小組內常用函數軟體包。
標準化:一些模型的診斷分析,以及模型表現的總結通常需要固定的格式。有些甚至精確到html文件的字體,顏色。需要有統一標準的腳本來實現這一目標
模塊化:數學科學模型幾乎不可避免的需要Feature Engineering以及一些其他常用pipeline功能。讓每一個數據科學家來書寫自己需要的函數來完成這一目標除了會產生大量重複勞動,更會導致函數效率低下,函數包含各種未知bug。需要有固定維護的軟體包來給數據科學家提供常用的功能。
產品化:數據科學軟體公司一個最大的問題並不是訓練模型,而是將訓練完畢的模型儘快地投放產品。一些不以軟體為最終產品的公司的流程可能是:
- 模型組寫模型
- 軟體組重新編寫模型來產品化
- 模型組和軟體組進行交流比對確認結果統一
- 用戶組使用並進行反饋
這裡面2,3兩步通常會持續相當長的時間並出現各種未知問題。例如:
- 模型組並沒有考慮scale up的問題(量級提升),導致模型運行速度緩慢。
- 軟體組並沒有理解模型組的各種考慮而產生新的bug
- 重新編寫的模型與原有模型結果並不完全統一
這些問題極大影響了公司效率,托慢了產品周期。需要有一個自動的腳本或軟體包來完成2,3兩步。或者讓模型組和產品組分別考慮不同的問題而不用進行干涉。
以上這些重大問題的解決方案就是Data Science 引擎。
很多數據科學軟體公司都會擁有自己的數據科學引擎,facebook有數百名軟體工程師/數據科學家維護他們的引擎,從而把產品分析和建模交給數據分析師來完成。
數據科學家喜歡使用的語言包括Scala, python, R等。它們的共同特點就是「get things done, quick and dirty」。到模型的產品化有很長距離。而最終的產品為了追求效率高、界面友好,需要底層軟體工程師和UX設計師的共同工作,基於C,C++,Java和php, javascript等完成。數據科學引擎則是連接兩者的工具箱。理想的數據科學引擎將在模型建立完畢的同時,創建一些標準化、已驗證的文件,保證產品線的效率以及結果的統一。
當然數據科學引擎有它的局限性和適用性。
- 如果公司只是需要少數幾個模型。設計數據科學引擎則是浪費資金的投入。
- 如果公司的模型並不需要24/7的運行,或者並不需要保證用戶使用速度。比如某些模型只需要每個月運行一次。直接用Python, R腳本就足夠完成任務。當然擁有一定量的可重複使用函數包也會方便新入職員工或者模型升級使用。
- 如果公司的模型經常需要使用各種複雜的函數,引擎會限制數據科學家可以使用的功能。這是因為引擎為了完成產品話會把各種Feature Engineer限制到一些基本模塊。要加入新的基本模塊會有延遲(引擎組的調試和推送,甚至產品組伺服器軟體的更新)。這裡要指出的是,此類問題的嚴重性取決於引擎本身的優秀程度和公司服務的類型。在很多情況下,此類局限性並不像它描述的那麼嚴重。
總結一下,一個數據科學引擎可以包含以下這些重要因素:
- 保證函數的效率。
- 參數的可定製性。
- 輸出的標準化。
- 對結果進行單位測試,盡量減少bug。
- 提供足夠的信息反饋(log)以方便數據科學家和軟體工程是debug和調試。
- 提供足夠多的模塊來實現日常需要的各種建模,分析和模型評估要求。
- 盡量縮短從模型到產品的距離。
相關閱讀:
The Data Science Machine, or 『How To Engineer Feature Engineering』
推薦閱讀:
※Python 中的科學計算工具:Jupyter Notebook
※聚類演算法第一篇-概覽
※利用Python實現卷積神經網路的可視化
※R語言《視頻》-汽車金融信用違約預測模型案例-1
※teradata SQL基礎:字元串處理
TAG:數據科學 |