如何看待公司里演算法崗位做數據挖掘大多都是抽特徵跑跑現成模型,而不是造框架造輪子?

本題已加入圓桌 ? 數據挖掘應用,更多「數據挖掘」相關的話題歡迎關注討論


第一個問題是,一個公司選擇自己造輪子,是否能比現有的輪子更出色?

tensorflow來自Google,

torch來自Facebook,

CNTK來自微軟。

以及還有些被認為更好用的ml/dl框架包括caffe,keras,xgboost等等

捫心自問,是否有哪個公司敢拍胸脯保證有更好的技術實力,造出更好的輪子?

第二個問題是,是否有這樣的人才。

一般而言,一個演算法框架,或者一個並行式演算法框架,需要對演算法和工程都有著相當深入的理解。

同時設計出合適的並行式架構和符合演算法本身訴求的架構,對人才的要求是相當高的,一般的公司不具備這樣的人才儲備。

第三個問題是,有沒有必要?

現有的框架不行,加機器行不行?

加機器便宜,還是自己造輪子便宜?

加機器撐到更好的框架出來,你又有更多機器可以用,何樂而不為?

反正就我目前看到的情況,公司就是每天加機器,每天加機器。

很慚愧,就提出了三個問題,做了一點微小的工作,謝謝大家。

------------------------------------------

看來各個公司都有了自己的答案。

Google: TensorFlow

FaceBook: pyTorch

微軟:CNTK

百度: PaddlePaddle

騰訊:Angel

阿里:PAI/數加平台/ODPS/鯤鵬

Amazon:MXNet(非官方,合作形式)


題主的語氣難免讓人覺得提特徵跑現成模型是很簡單的事情,然而並不是。我從data scientist的角度說一下我的看法。

特徵往往不是一下子就能設計好的,要做試驗。我說的好特徵要不但要有市場意義,至少不能違背銷售的經驗,又要容易解釋,還要有predictive power。舉個例子,有個東歐國家的統計數據顯示,運動會成績好的選手很多都是一月二月出生的,那我們能否設計一個dummy variable,是否一二月出生,作為預測運動員成績的特徵呢?從數據上來說可以(得到漂亮的test error),但這樣沒有意義。因為他們國家上學是拿一月算年齡,一月出生的和十二月出生的人同一年上學,因為身體發育的原因,年齡大的容易被選去當運動員。(我道聽途說,我哥們說是有本書叫outliers,裡面的一個例子)。

你看,當我們給客戶做模型的時候,每一個predictor都要小心,都要能解釋,要是出現上面那樣的模型,客戶肯定要罵,難道摩羯跟水瓶就更適合當運動員嗎?bullshit。

有時候做擬合,出來某個特徵跟需要預測的變數是負的關係,但是他倆微弱正相關,完蛋了,要不然我要設計別的特徵,要不然要用decile,normalization等預處理方法,要不然就要做很多驗證證明這個係數真的是合理的,反正就是要讓一切合理起來。

客戶買諮詢,要的不是或著不僅僅是預測的結果,要的是why,要的是insight。這並不簡單。

另一方面,項目是有時間限制的,你說讓我自己編寫梯度演算法么?是,我能編能設計能寫,學校裡面這都是家常便飯,但你也知道求邊界條件,求梯度,試驗各種梯度演算法,驗證,等等等都是很麻煩的。除非有必要,要不然不自己寫訓練演算法。有幾次我拼了老命搞了幾個時間序列分析的模型,那還是因為客戶慷慨,給的時間多。

稍微解釋一下,你把我想像成一個機器,我做一個項目要多少時間,就要收客戶時間乘以我的rate的錢。時間真的是money。

我有另一半時間是在做科研,不收客戶時間,收我們公司內部的時間。要發文章證明我司的能力,要開發新的模型滿足客戶更野蠻更離奇的要求。這種情況下,有時候我還真要自己設計輪子,因為現成的輪子可能不好用了。

總結:模型都是工具,數學,計算機全都是工具,牛逼到wgan也是工具,有個好工具炫一炫固然是好的,鎚子大一點,結實一點,功能多一點,但鎚子畢竟是鎚子。

設計feature,需要能夠把商業問題轉換成數學問題,有抽象能力,又對數據有深刻理解。其實挺難的。

ps:以後有興趣做商業分析的本科學生朋友們,去參加數學建模比賽吧。國賽美賽都參加,很鍛煉人。

我知道的data scientists,要不然就是企業內部諮詢,出分析結果幫助企業高層做決斷。要不然就是諮詢公司,接客戶的外包活。data driven,evidence based的分析結果,不簡單,還挺貴。


我認為這個問題應該是不成立的。簡單來說,數據挖掘本身職責就應該是深入理解業務和數據,生產出合理的模型,發揮出一定的商業價值。你說造輪子這件事情,不是數據挖掘工程師乾的,而是演算法工程師乾的,這在不少大廠都有一個類似的區分。

對於我司目前 BI 部門來說,也是簡單做了這兩個崗位的區分。演算法工程師往往需要保障數據驅動決策的底層正確及合理,為數據挖掘工程師提供必要的計算模型,並能優化計算模塊,提高集群的計算性能。所以題主吐槽的這件事情,是演算法工程師乾的活。

但對很多初創公司來講,這兩個崗位是模糊的。就拿我自己以前的經歷來說,我曾用 C++ 做過一個完全基於內存的分散式資料庫,管理 2TB 的內存池。不採用 Redis 是因為部分業務邏輯實在不適合用 Redis 的查詢方式。並且,這個輪子還直接為數據挖掘提供了 MapReduce 計算介面,用於實時風控決策。這可以算是自己造輪子做出來的框架了吧?我也因為這個項目獲得了 3.75 的 KPI(阿里系公司),但是呢,如果不是我們執著要做,當時的大技術 leader 是反對的。雖然我們展現出了比較強的技術實力,業務能力也得到了提升,但是隱含風險也會變大。當我從這家公司離開去創業之後,這個技術框架變成了 HBase / Redis / Spark / Kafka 等一系列開源項目的堆積,採購了大量的機器,犧牲了不少性能,但換來的是較低的運維成本和人力風險。所以如果你現在牛逼哄哄自己寫了一個替代了 TensorFlow,恐怕最後也會是這樣的結果。

最後,題主對數據挖掘本身的工作內容帶有一點輕蔑,對於老闆而言,數據挖掘是可以直接看見所得利益的,而底層的技術研發雖然看似高大上但反而會苦逼一些,因為老闆不會懂你把這個運算元複雜度從平方優化到了 NlogN 有何意義。題主帶著這樣的鄙視鏈成長,早晚是要吃苦頭的。


1.造不出,實力不夠

2.造出來的沒有google之類的好

3.效率低,公司不會給時間給你去造輪子

我說的是我自己


謝邀。

因為造不出。


學術界已經有很多成熟而穩定的、解決「問題」的方法和工具。工業界面臨的問題是把需求合理的定義成「問題」,而不是在解決這些「問題」的本身上下太多功夫。

因此可能工業界的的重點是拿什麼數據、跑什麼模型、抽什麼特徵,而不是考慮用什麼工具處理數據、跑模型、抽特徵。


大多數的時候演算法工程師的職責是解決問題而不是造輪子。


在機器學習領域干過兩年的人來強行回答一下。

在公司裡面最重要的是理解業務,要通過業務來看究竟使用哪種模型和特徵。就我所在的部門而言,有推薦業務,安全業務,運維業務這三大類業務需求。對於這三種業務,使用的模型和框架都是不一樣的。

(1)對於推薦業務而言,用得最多的還是 Logistic Regression 和 ItemCF 之類的演算法,也會使用 Random Forest,GBDT 和 XgBoost 之類的樹結構演算法。由於推薦業務的樣本是相對精準的,因此更多的是進行特徵工程的工作。這一類的模型和特徵工程的構造無論是在學術界還是工業界都已經被研究過很多次了。

(2)對於安全業務而言,一條流水是否是惡意的其實是不清楚的,這個需要基於對業務的了解。因此需要使用的是規則引擎+無監督學習+有監督學習的框架結構。在不同的框架下需要使用不同的演算法來解決問題,並且使用合適的特徵和樣本來解決問題。

(3)對於運維業務而言,有的時候是知道某件事情發生了,但是運維工程師想知道發生這件事情的原因是什麼,從而推動其餘工程師來改進現有的app或者服務體系。除此之外,還有時間序列的異常檢測等問題需要解決。因此,需要使用與前面兩種業務不太一樣的機器學習演算法來解決相應的業務問題。

因此,在公司裡面基本上都要根據具體的業務場景來使用合適的機器學習演算法,很難找到一兩個機器學習演算法就能夠解決所有業務場景的情況。當然也有人就使用一兩個機器學習演算法在公司裡面幹了很久,那確實就更多是特徵工程的工作了。


如果你是個程序員,就以常見的BS開發舉例吧:常用的API,主要是JDBC,JDK,APACHE,Google的一些API,這些就相當於機器學習的演算法庫,LR,SVM,隨機森林,GBDT等等。常用的框架就是Struts,Spring等,這些就相當於TensorFlow,Theano,Caffe等。如果你是個公司的程序員,你要做的一般都是業務應用,所以,最重要的是理解業務場景,分析業務需求,考慮業務數據的處理方式,框架和API只是你的工具,對吧。而數據分析和數據挖掘也是一樣的,大多數公司都是做應用的,所以理解需求,分析數據才是最重要的,演算法和框架只是你的工具。

所以,這個問題很好理解,做工具的只是極少數的公司和人員,做應用的才是大多數的公司和人員。

當然,你可以選擇自己做工具,但是通常情況下,一個私有的,一個人維護的工具,基本上都不如公開的,很多人維護和測試,並且有人不斷修改完善的工具好用,對吧?

如果你是在做新工具,OK,那很有價值,但是,那很難, 因為你想到的問題,很多人早就想到了。如果你查了很多論文以後,發現自己的想法確實很好,那確實值得試一下^_^


我覺得這個事情其實並不能一棒打死。技術永遠要服務於業務,當你當前的技術以及無法滿足當前的業務的時候你必須來創新技術解決很多問題,也就是造新的輪子。但是話說回來,國內有哪一家公司說自己的用戶能比google,facebook多?有哪一家公司能說自己收集的數據能有他們完整?並不是說沒有能力去造輪子,而是說有沒有這個必要。

換句話說,如果你的公司的業務是一個新的模式,新的商業模型,可能市面上很多數據框架並不適合你們公司,那麼沒有辦法,你必須得創新,否則你活不下去。就像uber和airbnb,他們起來之前就造了很多輪子。很多中國的公司其實做了很多創新的,之前在美國聽hbase的一個seminar,說其實小米對hbase貢獻了很多。但是不知道他們有沒有開源出來。


時間成本很重要。

舉個例子:某司負責人打算開發內部聊天軟體,請了50位工程師開發+測試+設計等,後期還有維護,一年後上線。人工成本、時間成本、維護成本…

夠買不止一千套聊天軟體…而且軟體買來就能用,不需要等一年。

------------------------------------

畢業到現在一直使用別人造的輪子養活自己…

感謝那些造輪子的前輩…向他們致敬。

目前實力造不出,希望我以後也能造輪子分享給大家。


為什麼碼農都是調用庫函數里的演算法,而不是自己發明演算法造輪子?


這個要分2方面,一個是數據演算法框架(可分散式),一個是演算法,比如各類機器學習。

舉個例子,spark自帶的mllib。你所說的可能就是直接用這個庫中的演算法。但是在實際業務中,要看很多論文去實現論文中的演算法,然後對比不同演算法的效果,那麼就需要自己實現。

當然除了spark,還有更多分散式的演算法框架,比如h2o,caffe等,都用於不同的演算法模型的構建。但是開發這類框架,需要同時精通演算法和工程的人才,也需要時間,也只有大公司這樣做。小公司的目標是活下去,為業務服務。

因此對於演算法框架,一般的工作我覺得沒必要造輪子,應該專註於演算法層面的優化。

演算法上,前期調研可以使用現成的,後期為了保證效果和性能,肯定要自己寫。


「演算法崗位做數據挖掘大多都是抽特徵跑跑現成模型」

這句話,說起來很簡單,看起來也很容易,但真的是這樣嗎?

我列舉幾點,擴展一下上面這句話:

1、label符合業務場景嗎?label準確嗎?能夠校準嗎?放在哪張表裡,怎麼正確關聯特徵?

2、特徵合理嗎?預處理流程正確嗎?有效嗎?特徵會泄露標籤信息嗎?特徵時間維度一致嗎?

3、用什麼模型?模型出來的結果有什麼業務含義?該怎麼定義合適的指標來判斷模型的性能?

4、根據模型結果,怎麼回調特徵,參數?

還有很多。造輪子,在工業界的數據挖據流程當中真的不重要。

假設你很牛逼,造了個GBDT,但是你比xgboost在同一數據集下好上多少?一個點?兩個點?快上幾秒?在牛比的特徵工程面前都沒有太大意義。

當然,我說的是做業務相關的數據挖掘,我專職做research的時候,也用C++寫過最優化演算法,用在LR和linear model是比sklearn強上幾個點,但是在業務應用中,真的就是特徵為王。


自己造輪子之前,確定相關領域academia最近三年的頂級期刊都至少掃過一遍了么~~~那麼多大牛夜以繼日的成果不用,你確定你的idea能夠比他們好?


數據挖掘的關鍵是找到數據需求,最笨的辦法,也是最好的辦法是閱讀數據,理解數據,基於需求和數據特徵建立模型即可。天馬行空,不拘泥已有演算法。


涉及到博弈需要造輪子。

量化金融需要造輪子,因為現成模型會被同樣聰明的對手反制;營銷推薦什麼的不需要,因為消費者不會反制你的模型,所以發明一次輪子就夠了,除非你非常聰明想到了更好的輪子。


我喜歡造輪子啊!但是我也是選擇性的造輪子,當需求超出輪子的功能,優先考慮修改輪子和組合輪子,當修改和組合成本太高的時候,造一個。

你的上司不會關心這個logistic是你寫的還是抄的,規定時間解決問題才是王道。


看到這題目,其實我也說不出為什麼,但是我從業至今一直都是自己造輪,也許是個人喜好,也許是現有一些輪子不適合,但是自己造輪一定要明白一點,補胎是一場持久戰。

另,自己造的輪用到生產中,那種達到預期效果的感覺,至今難以忘懷,也加深了我對輪子的理解。謝謝。


題主請先定義是什麼類別的輪子。tensorflow 和 lightlda 根本就不是同一層次的東西。真要對比也該說 tensorflow vs petuum


推薦閱讀:

python實現梯度下降代碼問題?
為什麼深度神經網路要使用權值來連接神經元?
大數據與深度學習區別?
hadoop與機器學習,這兩個是相輔相成的必須學習完hadoop才能學習機器學習,還是可以單獨去學習?
機器學習中如何用交叉驗證來驗證是否過擬合?

TAG:數據挖掘 | 機器學習 |