模型優化不得不思考的幾個問題
我們平時都在積累自己的「彈藥庫」:分類、回歸、無監督模型,kaggle上面特徵變換的黑魔法,樣本失衡的處理方法,缺失值填充… 大概可以歸類成模型和特徵兩個點。我們在每個點都已經做得很好,所以我們都擁有一張綠卡,跨過了在數據相關行業發揮模型技術價值的准入門檻。
在這個時候,比較關鍵的下一步,就是高效的技術變現能力,所謂高效,就是解決業務核心問題的專業能力。這篇文章就在描述這些專業能力,也就是模型優化的四個要素:模型、數據、特徵、業務,還有更重要的,他們在模型項目中的優先順序。
本文首先綜合介紹模型項目的優先順序,模型項目推進的四個要素,並按照優先順序順序依次展開四個要素細節實施過程中需要注意的方方面面。
圖1
模型項目推進的4要素
模型優化,離不開這四個要素:模型、數據、特徵、業務。
項目推進過程中,四個要素相互之間的優先順序大致是:業務 > 特徵 > 數據> 模型。
http://techshow.ctrip.com/wp-content/uploads/2017/04/21.jpg圖2:四要素解決問題細分 + 優先順序業務
一個模型項目有好的技術選型,完備的特徵體系,高質量的數據一定是很加分的,不過有個大前提決定項目的好與壞,就是這個項目的技術目標是否在解決當下核心業務問題。
業務問題包含兩個方面,業務kpi和deadline。比如,如果業務問題是:在兩周之內降低目前手機丟失帶來的支付寶銷贓風險,這時如果你的方案是研發手機丟失的核心特徵,比如改密是否合理,基本上就死的很慘,因為兩周根本完不成,改密合理性也未必是模型優化好的切入點;反之,如果你的方案是和運營同學看bad case,梳理現階段的作案通用手段,並通過分析上線一個簡單模型或者業務規則的補丁,就明智很多。如果上線後,案件量真掉了下來,就算你的方案準確率很糟,方法很low,但你解決了業務問題,這才是最重要的。
雖然業務目標很關鍵,不過一般講,業務運營同學真的不太懂得如何和技術有效的溝通業務目標,比如:
- 我們想做一個線下門店風險評級的項目,希望你們通過反作弊模型角度幫我們把門店打個分(問題:風險是怎麼定義的?為什麼要做風險評級,更大的業務目標是什麼,怎麼排期的?這個風險和我們反作弊模型之間的業務關係,你是怎麼看的?)
- 是否可以做一個區域未來10min的配送時間預估模型?我們想通過你們的模型衡量在惡劣天氣的時候每個區域的運力是否被擊穿 (業務現狀和排期?運力被擊穿可以掃下盲么?運力擊穿和配送時間之間是個什麼業務邏輯,時間預估是刻畫運力緊張度的最有效手段么?項目的關鍵場景是惡劣天氣的話,我們僅僅訓練惡劣天氣場景的時間預估模型是否就好了?)
為了保證整個技術項目沒有做偏,項目一開始,一定和業務聊清楚三件事情:
1、業務核心問題、關鍵場景是什麼
2、如何評估該項目的成功?指標是什麼
3、通過項目輸出什麼關鍵信息給到業務,業務如何運營這個信息從而達到業務目標?
項目過程中,也要時刻回到業務,檢查項目的健康度:
圖3數據、特徵
要說正確的業務理解和切入,在為技術項目保駕護航,數據、特徵便是一個模型項目性能方面的天花板。
garbage in, garbage out就在說這個問題。這兩天有位聽眾微信問我一個很難回答的問題,大概意思是,數據是特徵拼起來構成的集合嘛,所以這不是兩個要素。從邏輯上面講,數據的確是一列一列的特徵,不過數據與特徵在概念層面是不同的:數據是已經採集的信息,特徵是以兼容模型、最優化為目標對數據進行加工。就比如通過word2vec將非結構化數據結構化,就是將數據轉化為特徵的過程。
所以,我更認為特徵工程是基於數據的一個非常精細、刻意的加工過程。從傳統的特徵轉換、交互,到embedding、word2vec、高維分類變數數值化,最終目的都是更好的去利用現有的數據。之前有聊到的將推薦演算法引入有監督學習模型優化中的做法,就是在把兩個本不可用的高維ID類變數變成可用的數值變數。
不過我普遍觀察到自己和童鞋在特徵工程中遇到的問題,比如,特徵設計不全面,沒有耐心把現有特徵做得細緻… 也整理出來一套方法論,僅做參考:
http://techshow.ctrip.com/wp-content/uploads/2017/04/41.jpg圖4 變數體系、研發流程在特徵設計的時候,有兩個點可以幫助我們把特徵想的更全面:
1、現有的基礎數據
2、業務「二維圖」
這兩個方面的整合,就是一個變數的體系。變數(特徵),從技術層面是加工數據,而從業務層面,實際在反應RD的業務理解和數據刻畫業務能力。「二維圖」,實際上未必是二維的,更重要的是我們需要把業務整個流程抽象成幾個核心的維度,舉幾個例子:
- 外賣配送時間業務 (維度甲:配送的環節,騎手到點、商家出餐、騎手配送、交付用戶;維度乙:顆粒度,訂單粒度、商家粒度、區域城市粒度;維度丙:配送類型,眾包、自營…)
- 反作弊變數體系(維度甲:作弊環節,登錄、註冊、實名、轉賬、交易、參與營銷活動、改密… 乙:作弊介質,賬戶、設備、IP、wifi、銀行卡…)
通過這些維度,你就可以展開一個「二維圖」,把現有你可以想到的特徵填上去,你一定會發現很多空白,比如下圖,那麼在哪裡還是特徵設計的盲點就一目了然:
圖5 賬戶維度在轉賬、紅包方面的特徵很少;沒有考慮wifi這個媒介;客滿與事件數據沒考慮。
數據、和特徵決定了模型性能的天花板。deep learning當下在圖像、語音、機器翻譯、自動駕駛等領域非常火,但是deeplearning在生物信息、基因學這個領域就不是熱詞:這背後是因為在前者,我們已經知道數據從哪裡來,怎麼採集,這些數據帶來的信息基本滿足了模型做非常準確的識別;而後者,即便有了上億個人體鹼基構成的基因編碼,技術選型還是不能長驅直入–超高的數據採集成本,人後天的行為數據的獲取壁壘等一系列的問題,註定當下這個階段在生物信息領域,人工智慧能發出的聲音很微弱,更大的舞台留給了生物學、臨床醫學、統計學。
模型
圖6 滿房開房的技術選型、特徵工程roadmap模型這件事兒,許多時候追求的不僅僅是準確率,通常還有業務這一層更大的約束。如果你在做一些需要強業務可解釋的模型,比如定價和反作弊,那實在沒必要上一個黑箱模型來為難業務。這時候,統計學習模型就很有用,這種情況下,比拼性能的話,我覺得下面這個不等式通常成立:glmnet > LASSO >= Ridge > LR/Logistic. 相比最基本的LR/Logistic,ridge通過正則化約束緩解了LR在過擬合方面的問題,lasso更是通過L1約束做類似變數選擇的工作。
不過兩個演算法的痛點是很難決定最優的約束強度,glmnet是Stanford給出的一套非常高效的解決方案。所以目前,我認為線性結構的模型,glmnet 的痛點是最少的,在R、Python、Spark上面都開源了。
如果我們開發複雜模型,通常成立第二個不等式 RF <= GBDT <= xgboost. 拿數據說話,29個kaggle公開的winner solution裡面,17個使用了類似gbdt這樣的boosting框架,其次是DNN,RF的做法在kaggle裡面非常少見。
RF和GBDT的雛形,CART是兩位作者在84年合作推出的。但是在90年代在發展模型集成思想the ensemble的時候,兩位作者代表著兩個至今也很主流的派系:stacking/ bagging & boosting.
一種是把相互獨立的cart (randomized variables, bootstrapsamples)水平鋪開,一種是深耕的boosting,在擬合完整體後更有在局部長尾精細刻畫的能力。同時,gbdt模型相比rf更加簡單,內存佔用小,這都是業界喜歡的性質。xgboost在模型的輕量化和快速訓練上又做了進一步的工作,也是目前我們比較喜歡嘗試的模型。
http://techshow.ctrip.com/wp-content/uploads/2017/04/71.jpg圖7 The Child of RF&GBDT【作者簡介】胡淏,美團演算法工程師,畢業於哥倫比亞大學。先後在攜程、支付寶、美團從事演算法開發工作。了解風控、基因、旅遊、即時物流相關問題的行業領先演算法方案與流程。本文來自胡淏在「攜程技術沙龍——雲海機器學習Meetup」上的分享。
沒看夠?更多來自攜程技術人的一手乾貨,歡迎搜索關注「攜程技術中心」微信公號哦~
推薦閱讀:
※監督學習中各演算法優缺點及應用場景概覽
※哪種隨機數生成演算法最適合遊戲使用?
※Weighted linear matroid parity問題
※從兩道亦可賽艇的演算法題看字典的神奇作用
※BAT機器學習面試1000題系列(281-285)