報告各位首長,我參與的第二個項目順利上線啦~ 棒棒绊茧,又一次感覺自己做的東西是有價值的铝宵,這個項目是一個平臺類產(chǎn)品,專注于提高線下零售的實施效率华畏,希望后面的迭代會越來越好捉超。但是這個今天跟主題沒什么毛關(guān)系,今天要跟大家聊聊最近的一點小思考唯绍,關(guān)于Machine Learning 的最小化可行產(chǎn)品的設計,以及平臺化設計枝誊,應該是怎么樣的况芒。
我在公眾號后臺看到好多讀者大大都留言了 “MVP” 來獲取之前做的PPT了,但也很多大大希望我能好好講講這個PPT的內(nèi)容叶撒,以及背后設計的思想是怎樣的绝骚,今天終于有空跟大家細細捯飭捯飭。
什么叫MVP祠够?MVP(minimum viable product压汪,最小化可行產(chǎn)品)概念最早由埃里克·萊斯提出的。MVP的目的——更快的接觸客戶古瓤。按照常規(guī)的開發(fā)方式止剖,從調(diào)研、到設計落君、到開發(fā)再到推向市場穿香,會是一個漫長的過程,而且很難有人會保證成功率绎速。但當換一種方式皮获,以MVP進行小樣調(diào)研,快速進入市場纹冤、接觸客戶并得到反饋洒宝。透過反饋不斷修改原型购公,并進行不斷地的迭代開發(fā),極大減少了試錯成本雁歌。
那么問題來了宏浩,一個機器學習的 MVP 最小可行化產(chǎn)品,應該是怎樣的将宪?可以分兩個方面來看绘闷,一是技術(shù)的選型,二是產(chǎn)品的實施流程较坛。
關(guān)于技術(shù)的選型
機器學習其實是一門有非常多年歷史的學科印蔗,各種算法你可以手寫,現(xiàn)在市面上出現(xiàn)的層出不窮的機器學習框架也很多丑勤,在做 MVP 的時候要怎么去做決策华嘹?是自己寫一套框架以有利于自己對業(yè)務實施細節(jié)的把控?還是使用現(xiàn)有的框架法竞,去踩它們所擁有的坑耙厚?設計產(chǎn)品的實施流程的時候,應該怎么權(quán)衡岔霸,是按照常規(guī)的開發(fā)方式薛躬,從調(diào)研、到設計呆细、到開發(fā)再到推向市場型宝,一切都要 100% ready 再上線,還是有一個不是非常完美但是可控可迭代的產(chǎn)品流程作為快速接觸用戶絮爷,快速進行試錯的基礎趴酣?都需要決策者去細細抉擇。
在我看來坑夯,要做好 Machine Learning 的產(chǎn)品岖寞,當然可以自己去實現(xiàn)一套基礎可用的算法,這也并不是什么特別難的事情柜蜈。但我的建議是仗谆,在初期階段,抱現(xiàn)有技術(shù)的大腿淑履,能抱大腿就抱大腿胸私。為什么呢?因為現(xiàn)在機器學習庫比如 scikit-learn鳖谈、svmlib岁疼、xgboost、Tensorflow、Spark MLlib 這些現(xiàn)成的庫捷绒,能幫助我們快速試驗我們的想法瑰排,并且快速上手,這些庫幫我們實現(xiàn)了數(shù)據(jù)預處理暖侨,異常處理椭住,性能優(yōu)化等很多方面的問題,所以即使你們團隊有能力自己實現(xiàn)一套框架字逗,在初期驗證階段我還是建議直接抱現(xiàn)成技術(shù)的大腿【┲#現(xiàn)在也有很多 Java 實現(xiàn)的機器學習,我的唯一建議就是不要用葫掉,目前的業(yè)態(tài)我沒看到任何關(guān)于 Java 寫機器學習框架的潮流些举,基本都還是基于 Python 的。
我簡單解釋一下這套框架俭厚。數(shù)據(jù)倉庫是基礎户魏,如果你連一點數(shù)據(jù)積累都沒有那其實可以先不考慮機器學習,從數(shù)據(jù)倉庫中可以使用一些規(guī)則引擎產(chǎn)生中 Low Leve 的特征挪挤。也可以使用 SparkStreaming 或者機器學習平臺進行準實時或?qū)崟r地計算一些 High Level 的特征(這里的 High 和 Low 指的是特征的抽象程度叼丑,并不是實用性或者效果)。
有了特征庫扛门,就可以基于這個特征庫鸠信,使用scikit-learn、 xgboost论寨、Tensorflow星立、Spark MLlib 等框架進行模型訓練并把模型保存下來。然后再使用 SparkStreaming政基、django 或者 redis 對外提供服務。這套簡簡單單的架構(gòu)有什么好處闹啦?最大的好處就是這套框架實現(xiàn)了最基礎的數(shù)據(jù)處理沮明、模型訓練以及服務提供的能力,完美滿足機器學習所需要的方方面面窍奋,在我看來是一個基礎可用的框架荐健。拆箱即用,老少咸宜琳袄,誰用誰知道江场。
關(guān)于產(chǎn)品的實施流程
最小可行化產(chǎn)品的要點,對小規(guī)模窖逗、有質(zhì)量址否、已標注的數(shù)據(jù)進行訓練。為什么呢碎紊?從經(jīng)驗上來看佑附,數(shù)據(jù)量并不是越多越好樊诺,特征也不是越多越好,一個數(shù)據(jù)集即使只有幾萬條數(shù)據(jù)音同,但是質(zhì)量很高词爬,標注度也很好,其實更適合于產(chǎn)品初次實施的試驗权均。原因有兩點顿膨,一是訓練時間不長,可以多嘗試尋找最優(yōu)模型叽赊。二是質(zhì)量高恋沃、已標注的的數(shù)據(jù)最終表現(xiàn)效果一般會比質(zhì)量低或者無標注要好很多。
根據(jù)很多資料蛇尚,總結(jié)的一個比較可行的流程如下芽唇。
MVP 最重要的速度就是快速落地,而上面這個流程可以幫助我們進行快速的落地和快速的迭代取劫。
○ 明確需求:明確本次機器學習產(chǎn)品的需求匆笤,是對點擊率進行預測,還是對客戶留存率進行預測谱邪,這個要預先明確下來炮捧,這是最最重要的第一步。但是這個階段要細化到可實際操作的需求惦银,有的需求很粗可能工程師無法細化咆课,也無法拆分,更無法量化扯俱。比如需求就是提高客戶體驗书蚪,完全沒有可量化的東西,要更加細化迅栅,明確什么樣才算提高客戶體驗殊校。
○ 特征量化:需求明確下來了,要對可能影響需求的特征或者屬性進行量化读存,這個步驟也很重要为流。比如說影響客戶留存率的可能有距離上次登錄時間,這是一個無法量化的東西让簿。我們可以量化成敬察,近兩天是否登錄,近一周是否登錄尔当,近一個月是否登錄莲祸,這樣量化的東西。
○ 目標量化:跟特征量化思路一樣。
○ 特征清洗:對已經(jīng)量化的特征進行清洗虫给,比如去除無效字段藤抡,對特征進行離散化等特征工程的東西。也包括使用一些基礎的模型比如線性回歸抹估,xgboost等模型進行特征重要度的篩選缠黍,作為一個 pipline ,最終得到模型可用的數(shù)據(jù)集药蜻。
○ 模型選型:進行模型的選擇瓷式,比如連續(xù)型目標變量可以拍腦袋用線性回歸,離散型目標變量可以拍腦袋用 Logistic 回歸语泽,用 GBDT 或者 xgboost 也是一個很好的選擇贸典,總之就是不斷嘗試,選一個比較合適的模型踱卵。
○ 模型訓練:選好模型之后就針對數(shù)據(jù)進行訓練廊驼,看看效果怎么樣,效果不好就回到特征或者模型選型重新再來一次惋砂。
○ 線下驗證:訓練好模型之后妒挎,在線下對生產(chǎn)環(huán)境產(chǎn)生的新數(shù)據(jù)進行驗證,看看是不是跟訓練效果差不多西饵,看看是差之毫厘酝掩,還是謬之千里。
○ 模型上線:效果還過得去眷柔,就將模型部署上線期虾,是騾子是馬拉出來跑跑看,最好一開始引入比較小的流量驯嘱。
○ 特征清洗:一般來說镶苞,線下做了怎樣的數(shù)據(jù)清洗,線上也要做同樣的數(shù)據(jù)清洗鞠评。
○ 模型預測:使用訓練好的模型對線上數(shù)據(jù)進行預測茂蚓。
○ 結(jié)果應用:將模型預測的結(jié)果進行應用到規(guī)則引擎進行評分或者拒絕等。
○ 運行監(jiān)控:對模型產(chǎn)生的數(shù)據(jù)進行監(jiān)控谢澈,看看是否有異常煌贴。并對應用模型的前后進行比較御板,評估是否停用模型锥忿。并加入到下一次的迭代需求中。
至此怠肋,一個完整的機器學習產(chǎn)品流程已經(jīng)形成了一個閉環(huán)敬鬓,參照這個流程可以比較快速地進行機器學習產(chǎn)品的落地。下面我舉個比較簡單的栗子來闡述上線這個流程,假如我們要上線一個模型钉答,主要做貸款產(chǎn)品的客戶動用率預測础芍,以此來給銷售人員給客戶介紹產(chǎn)品的時候?qū)τ诮佑|頻率和接觸深度的把控提供數(shù)據(jù)上的支持,流程是長下面這樣的数尿。
- 與業(yè)務同事討論本次需求的目標是什么,這里來說就是動用率預測仑性。
- 選出可能有影響的特征,比如年齡右蹦、性別诊杆、近三個月是否動用等。
- 選擇是否動用作為目標何陆,動用為1晨汹,未動用為0。
- 對樣本進行篩選贷盲,缺失值補全淘这,并利用先驗知識去掉明顯不符合常理的數(shù)據(jù)
- 直接丟個邏輯回歸」剩看訓練集和測試集铝穷,討論出一個精準度即可。
- 丟上線去跑跑看球及,看看結(jié)果如何氧骤,暫時不接入關(guān)鍵流程中即可。
一切盡在掌握中吃引,總結(jié)一下今天的內(nèi)容筹陵。
- MVP的目的是更快的接觸客戶。
- 盡量使用現(xiàn)成的 Python 或者 Spark 框架镊尺。
- 用比較輕量的流程進行機器學習產(chǎn)品開發(fā)朦佩。
- 應用到生產(chǎn)上,快速迭代庐氮。