1. 程式人生 > >實際問題中如何使用機器學習模型

實際問題中如何使用機器學習模型

看待問題的兩種策略:整體求解 vs 分而治之

為了解決一個實際問題,我們通常有兩種策略:

  • 第一種是整體求解,即把這個問題看成一個不可分割的整體,直接進行求解。
  • 第二種是分而治之,即分解這個問題,使之變成多個小問題,然後通過求解各個小問題來最後達到求解整個問題的目的。

這兩種策略分別把原始問題轉化為單個模型和多個模型進行求解1。 那麼,什麼問題使用什麼策略呢?下面的表格給出了一些總結(在文章1的總結基礎上有增刪)。

策略 優點 缺點 何時使用
整體求解 1. 理論上可以獲得最優預估(實際上很難)
2. 一次解決問題
1. 預估難度大 
2. 風險比較高
1. 整個問題比較簡單 
2. 有足夠多的資料用於支撐整個模型進行整體訓練
分而治之 1. 單個子模型更容易實現比較準地預估 
2. 可以調整子模型的融合方式,以達到最佳效果
1. 可能產生積累誤差 
2. 訓練和應用成本高
1. 整個問題比較難 
2. 沒有足夠多的資料用於支撐整個模型進行整體訓練 
3. 分解後多個模型之間的關係比較明確

文章1給出的案例是美團對團購單(DEAL)的交易額預估問題(預估一個給定DEAL一段時間內能賣多少錢)。當然,解決這個問題可以使用上面介紹的兩種策略:直接整體求解,預測交易額;或者把問題分解為下圖所示的兩個子問題:使用者數預測和訪購率預測(訪問這個DEAL的使用者最終會購買的比例)。

美團DEAL交易額預測問題

這裡再舉個佳緣使用者推薦的案例。在佳緣做使用者推薦時,我們的目標主要是異性使用者收到信後的看信和回信量,而不只是使用者的發信量。下面這個流程圖(為男性推薦女性)說明了從展示到點選和發信,再到看信,以及回信的流程。具體說明可見我之前的總結3

轉化鏈很長,反饋延遲

我們嘗試了上面兩種策略來最大化使用者的回信量這個問題。首先我們嘗試直接整體求解,但效果一直不佳。我們認為這其中主要有兩個原因。第一個原因是這個問題本身很複雜:轉化鏈很長,反饋延遲很嚴重。收到信的異性使用者看沒看信不只取決於她對發信人是否感興趣,還取決於她有沒有發現這封信(有些使用者每天都能收到很多信),信是否要付費檢視等。第二個原因是整體求解時,大部分使用者的正樣本(收到回信)太少,少到壓根支撐不了使用個性化推薦模型。

所以,之後我們改為使用分而治之的策略。把到回信的問題切割為三個子問題:展示到發信、發信到看信、看信到回信,逐個使用模型進行優化。在展示到發信這步,我們有足夠多的資料可以支撐較強的個性化模型。在後面兩步,可用的使用者行為資料較少,所以我們可以使用個性化不是那麼強的模型進行優化。

融合多個子模型的結果

那麼,在使用分而治之的策略時,獲得的多個模型如何最終融合成我們整體問題的解呢?文章1中給出了兩種常用方法:

  • 依據業務上整體問題與子問題的關係進行加權求和(相乘可以理解為取對數後相加)或其他融合方式。
  • 把各個子模型的預測結果作為特徵,與其他特徵一起輸入到融合模型裡進行模型訓練獲得融合方式。

下圖給出了針對美團DEAL交易額預測問題的兩種融合方法示意圖1

美團DEAL交易額預測問題融合方法

不同層級的特徵

Deep Learning (DL)利用多層隱藏層來構建深度神經網路模型。訓練完成後的DL模型的底層隱藏層可以用於抽取低層特徵,而其高層隱藏層可以用於抽取高層特徵。比如DL模型應用於人臉識別問題,抽取出的從低到高的各層特徵分別代表了線條,獨立的五官和整個人臉。

把特徵按照層級進行劃分的分類方法不僅限於DL,它其實早就存在於機器學習領域。

  • 低層特徵通常指的是那些比較原始的特徵,每個底層特徵的表達能力比較有限。
  • 高層特徵一般指通過對多個底層特徵加工後而獲得的表達能力更強的特徵。

低層和高層特徵是個相對概念,並沒有什麼嚴格的界限用來區分它們。低頻樣本的預測值主要受高層特徵影響,高頻樣本的預測值主要受低層特徵影響1。下面的表格給出了低層和高層特徵在各個方面的一些比較(在文章1的總結基礎上有增刪)。

特點 低層特徵 高層特徵
覆蓋面
數量
獲取難度
可解釋性
表達能力
泛化能力
適用模型 線性模型 非線性模型

下面的圖中給出了美團DEAL訪購率預測(訪問這個DEAL的使用者最終會購買的比例)問題中不同層級對應的特徵1,供大家參考。

團DEAL訪購率預測問題中不同層級的特徵

模型的選取方式

好了,在已經確定使用何種策略(整體求解還是分而治之?)對問題進行求解後,接下來就是選用什麼樣的機器學習模型來具體求解對應的問題了。

模型的優化目標

首先,我們要從實際問題的具體業務背景出發,明確我們的業務目標。我們是要提升點選率,還是要提升購買率,或者延長使用者的使用時長?然後,我們需要轉化問題的業務目標為模型評價目標,進而再把模型評價目標轉化為模型優化目標。下面是文章1中總結的“業務目標->模型評價目標->模型優化目標”的關係圖:

業務目標->模型評價目標->模型優化目標

業務目標 –> 模型評價目標 –> 模型優化目標

線性模型 vs 非線性模型

好了,在選定模型的優化目標後,接下來就是決定具體選用優化此目標的什麼機器學習模型了。模型按照是否線性可以分為線性模型非線性模型。下面的表格給出了線性和非線性模型的一些特點(在文章1的基礎上有增刪)。

特點 線性模型 非線性模型
訓練難易
訓練速度
訓練支撐的資料規模 大/超大 小/中
可解釋性
對特徵的處理要求
偏好何種特徵 低層特徵 高層特徵

實際問題通常不會在原始特徵的空間裡就線性可分。為了讓線性模型能夠表達非線性性,我們需要對原始特徵進行加工,具體方法可參見我之前的文章4

值得一提的是,

對於不同的模型,我們要考慮不同的特徵。

在使用線性模型時,我們通常會把大部分連續特徵進行離散化,以便線性模型能夠表達非線性性。但這種離散化的處理方式並不一定適合非線性模型。所以,線上性模型裡很有用的特徵,未必在非線性模型裡仍舊很有用。

以下是文章1中總結的經驗,供大家參考:

  • 如果訓練資料少,高層特徵多,則使用“複雜”的非線性模型(流行的GBDT、Random Forest等);
  • 如果訓練資料多,低層特徵多,則使用“簡單”的線性模型(流行的LR、Linear-SVM等)。

最後,總結下在實際問題中使用機器學習模型進行求解的步驟:

    1. 從具體問題出發,確定解決問題的大策略:是作為整體進行求解呢,還是分而治之;
    2. 依據“業務目標->模型評價目標->模型優化目標”的順序,從業務目標出發推匯出模型優化目標;
    3. 依據上面確定的模型優化目標,以及具有的資料和特徵特點,選定合適的模型求解問題。