驗證式開發——簡論演算法開發的正確姿勢

演算法系統在開發的不同階段都要做有效性驗證,如果不做驗證就一口氣開發到底,很有可能演算法會達不到預期效果,即使達到了,也是讓人不踏實的。

在我之前一份工作中,組裡同學開發了曾經一個覆蓋率提升演算法,目的是提升商家銷售[1]的圖書商品的推薦覆蓋率,演算法的基本思想是把自營圖書的推薦結果附加在商家圖書(實質上是同一本書)的推薦結果後面,以此來提升目標商品的推薦覆蓋率。演算法的設計大家反覆論證過,都認為是沒問題的,符合業務特點。但是遺憾的是,做了AB之後發現效果並未達到預期,提升幅度非常小。

上面描述的案例,是演算法開發中的一種典型情況,具體表現就是演算法設計時覺得很好,但是上線後往往不能達到預期。造成這種偏差的原因當然是有很多的,今天在這裡我們討論其中的一個方面,一個通過調整開發流程可以適當控制和緩解的方面,就是演算法開發過程中的有效性驗證

有效性驗證是一個比較模糊的說法,用具體情況來說明一下。具體到我說的這個項目,問題出在我們雖然給很多商家的商品增加了推薦,但是這些商品的PV量非常的小,導致這些增加的推薦並沒有真正被用戶看到,所以提升幅度也就非常小了。事後來看,這其實並不是一個隱藏很深的問題,應該是可以預先算出來的,因為商家圖書推薦數量少的原因之一就是瀏覽量小。但問題就出在,我們在設計演算法時只關注了演算法邏輯是否正確可行,沒有去計算這個演算法是否能夠發揮足夠大的影響,產生足夠好的效果。如果事先做了這個計算,就能夠知道這個策略的問題,就可以在開發之前或者開發初期調整策略,避免這樣的無用功。

這樣的問題不止出現在推薦項目中,在機器學習項目中也比較常見,最典型的就是各種特徵的置信度問題。機器學習系統中,特徵往往是多多益善的,但是如果某些特徵的樣本覆蓋很低,也就是說只有很少一部分樣本上出現了這個特徵,那麼這個特徵訓練出來的值置信度就會比較低,因為我們知道預測結果的置信度和樣本數是非常相關的。這樣的特徵雖然每個特徵可能隻影響不多幾條樣本,但是由於特徵分布的長尾性,會存在一大批這樣的特徵,每個特徵影響幾條樣本,加起來就會有大量的樣本受到影響,在極端情況下,有可能每條樣本中都會有那麼幾個置信度不高的特徵,所以這樣的特徵還是需要處理掉的。

但是這種置信不足的問題如果不在前期做針對性的專門處理的話,是不容易發現的,畢竟有那麼多的特徵,如果不是目的明確地去看,是很難注意到這樣的問題的。這個特徵處理的過程,換個角度看也是在做可行性驗證,在驗證某個特徵是否有足夠多的樣本覆蓋,使得其估計值置信度足夠高,而不是不管三七二十一地就扔進去訓練。

上面用兩個例子說明了可行性驗證具體是在做什麼,但是也只是涵蓋了其中的一部分工作。抽象一點說,可行性驗證,應該是要把演算法系統的幾個大的步驟進行拆解,在進入開發之前,或者在開發過程中,用盡量準確的方法去估計每個步驟的效果是否符合預期,如果某個步驟不符合預期,需要及時進行調整。

以機器學習系統這樣一個典型的演算法系統為例來說,其中的很多部分都可以用先行驗證的方法來加強對過程質量的保證,從而保證最終結果的質量。典型的例如:

  • 特徵置信度驗證:

    • 如上所述,進入訓練的特徵需要驗證其置信程度是否足夠。

  • 樣本「填充度」驗證:

    • 訓練之前,還需要驗證樣本上的特徵數量,雖然稀疏性是大數據下的基本特點,但是如果大量樣本上只有很少的特徵覆蓋,那麼就需要考慮是否需要增加特徵。

  • 特徵處理驗證:

    • 各種特徵處理的流程都需要不同的驗證,例如連續值分段的處理,在分段之後,需要看一下每分段內樣本數量之類的,確認不會出現太稀疏或者太稠密的分段。

從上面的討論中可以看出,這種強調驗證的開發模式,本質上是在把控過程,通過把控過程來把控結果,因為只有過程正確了,結果才是正確的,同時也是可靠的。不把控過程也可能得到好的結果,但是這樣的結果是不夠可靠的,因為你不知道為什麼好,一旦變不好了,你也同樣不知道為什麼變不好了。這樣的系統,無疑是危險的,不能讓人踏實的。就像那句投資界著名的話所說(大意):「舉著火把穿過彈藥庫,即使活下來了,你也還是個傻子」。換言之,就是不能做騎著瞎馬的盲人,把掉不掉進坑裡這件事情交給運氣。

驗證這件事情,如果不做的話,項目也是可以做下去的,但是當效果不好的時候,還是需要返回頭來查找問題,所以,這個問題是繞不過去的,只是先做和後做的區別,而且相比後做,還是先做要更好,可以提前發現問題,及時調整方案,減少無用功。

  1. 商家指的是電商平台上的第三方商家,與之對應的是平台自營。

廣告時間:

轉轉推薦搜索團隊誠招靠譜演算法工程師和搜索架構工程師:轉轉是58集團旗下的專業二手交易平台,現在正在高速發展中,擁有乾淨的海量數據,獨一無二的挑戰性問題,更擁有廣闊的發展空間和一群靠譜的小夥伴,無論你是希望快速成長還是希望建功立業,這裡都是你最好的選擇。有意者請發簡歷到zhangxiangyu01@58ganji.com。

推薦閱讀:

我們離機器人理財還有多遠?
機器學習演算法實踐-標準與局部加權線性回歸
Coursera吳恩達《構建機器學習項目》課程筆記(1)-- 機器學習策略(上)
自然語言處理工具:中文 word2vec 開源項目,教程,數據集

TAG:推荐算法 | 机器学习 |