市面上的主流app,大多數情況下不同的用戶看到的頁面都是不同的,這裏面就有一個推薦的因素了。
那麼我們如果想要做推薦,首先需要實現的當然是千人千面,也就是不同的人推薦展示的內容是不一樣的,再有就是需要根據場景去推薦。
推薦的方法
基於規則的推薦:可以按照銷量、品類等方式來推薦。
基於傳統機器學習的推薦:是根據海量的用戶的歷史行爲或門店用戶的特徵等。當然,上面說的推薦都是基於機器學習的算法。
基於深度學習的推薦:基於神經網絡的算法,可以更深層次的發掘用戶的訴求,通過不斷地反推遞歸來計算。
推薦模型
規則模型:有明確的規則定義,有簡單的算數公式。
機器學習模型訓練:數據訓練後的算數公式。雖然也有調節的過程,但更多的會依賴歷史行爲上的數據,只要這些數據足夠好,就可以推算出算數公式。
機器學習模型預測:待預測數據經過訓練模型算數公式後的結果。例如有用戶的基本數據和歷史行爲,那麼就可以拿這些數據跟我們門店的特徵共同做訓練。算出算數公式。
模型評價指標
離線指標:查全率、查準率、auc(是否預測對的比預測錯的更靠前)等
在線指標:點擊率、交易轉化率等
A/B測試:A組和B組的公式同時測試,看哪個好。
推薦系統架構
先說一下召回排序和重排,召回相當於根據用戶習慣,從一堆數據中心選取其中前100個,然後將前100個商品用另一種算法精排,然後進行第三次排序,這裏的重排可以將例如做廣告的上架的排序提前。一般三種排序的算法都是不一樣的。
再說下數據層,在線數據採集是指用戶的行爲,例如點擊、交易等,離線數據採集是指業務數據庫的數據等,這些數據都可以歸到大數據平臺,供機器學習來使用。離線召回模型是指從大數據平臺抽取想要的數據訓練的模型。協同過濾大概就是指:AB兩個用戶的行爲都很類似,有一天B新添加了一個商品,那麼就把這個商品推薦給A。然後通過模型計算後將數據存到存儲設備中,這樣,當用戶訪問的時候,粗排可以從中拿取數據。
個性化召回算法ALS
ALS是最小二乘法,他利用矩陣分解的結果無限逼近現有數據,得到隱含特徵。再利用隱含的特徵預測其餘結果。
先看下錶格,4個用戶,user2瀏覽過商品2和商品3,不管瀏覽了幾次,都記做1分,user1購買過商品1,所以在1分的基礎上再加2分,也就形成了我們這個矩陣表格。
商品1 | 商品2 | 商品3 | |
user1 | 3.0 | ||
user2 | 1.0 | 1.0 | |
user3 | 3.0 | ||
user4 | 1.0 |
而推薦系統需要做的是挖掘用戶的潛在需求,就是預測沒有數值的矩陣。這就是ALS要做的事情。
那ALS是怎麼做的呢?
有兩個表:
特徵1 | 特徵2 | 特徵3 | 特徵4 | 特徵5 | |
user1 | 0.21 | 0.31 | 0.01 | 0.20 | 0.89 |
user2 | 0.29 | 0.22 | 0.31 | 0.23 | 0.12 |
user3 | 0.12 | 0.68 | 0.56 | 0.63 | 0.11 |
user4 | 0.12 | 0.98 | 0.54 | 0.34 | 0.34 |
特徵1 | 特徵2 | 特徵3 | 特徵4 | 特徵5 | |
商品1 | 0.43 | 0.95 | 0.23 | 0.63 | 0.22 |
商品2 | 0.23 | 0.05 | 0.65 | 0.23 | 0.42 |
商品3 | 0.11 | 0.46 | 0.34 | 0.27 | 0.27 |
每個user和每個商品都會有五個特徵,當然兩個表中的特徵可以不一樣,但是數量必須一樣,而且有相對應的打分。然後通過
user矩陣和商品p轉置矩陣相乘,user1的特徵1乘商品1的特徵1,最後相加,就會生成一個我們第一個的表格。那麼ALS就是通過不斷地遞歸擬合,去逼近現有表格中的分數,從而預測得到其他空格里面的數字。
個性化排序算法LR
LR,也叫邏輯迴歸。看一個公式:
Y=ax1+bx2+cx3+dx4...
排序的問題在某些意義上也可以看成是點擊率預估,公式中x1x2x3這些可以看成是用戶的特徵,例如x1是年齡,x2是性別等等,在公式中,每個特徵都有一個權重abcde等,結果會得到一個Y,越趨近1代表點擊概率越大。這是個預測的過程。
LR算法也就是要算出abcde,在大數據平臺會採集Y的樣本,可能是1也可能是0,上面途中,藍色爲正樣本,紫色爲負樣本,也lr需要推算出紅線,等學習出紅線以後,就可以做預測了,新進來一個x點,可以根據紅線來推算這個點是正樣本的概率大還是負樣本的概率大。這就是比較簡單的邏輯迴歸的排序算法原理。
決策樹算法
決策樹算法,事實上是一個多重分類選擇器組合承德結果,也就是輸入一個參數,根據這個參數返回1/0,舉個例子的話,可以想象成以前雜誌上的那種心理測試題。通過多個選擇,獲得一個結果。
那麼如何定義決策樹的每個節點的特徵呢?原則上越能分出絕大部分特徵的越往上。如何衡量?數學上有一個名詞叫做信息熵,來衡量信息量的大小,也就是對隨機變量不確定的一個衡量,熵越大,不確定性越大。
舉個例子,天氣有晴天、多雲、雨天,溫度有冷、熱、適中,溼度有高、中等,風有有風、無風,最後有個結果,是否出去玩。
那麼我們如何構建這個抉擇樹?我們選取熵大的節點放在上面,依次往下。離散特徵直接按照分類選擇器,連續特徵可以用二分、三分等分類方式進,例如小20歲,20-40等等。
對於決策樹的缺點:樣本特徵過多時,樹的高度太高。樣本特徵本身有問題時,如果過擬合,會對預測產生偏差。
爲了避免決策樹的缺點,我們對決策樹衍生出了兩種算法:隨機森林法和GBDT
隨機森林:通過隨機的選擇樣本(放回抽樣),也就是隨機選擇幾個樣本,幾個特徵,生成一個決策樹,放回去再隨機選擇樣本生成決策樹,這樣就可以生成隨機森林。最後在測試階段,把所有決策樹的結果彙總到一起取平均數。
當然,隨機的缺點也就是不確定性,既是優勢、又是劣勢。基於這個,衍生出了另一種算法:GBDT
關於GBDT,順序爲:
從初始訓練集中得到一個基準學習器。
用基準學習器預測訓練樣本並調整做錯樣本屬性的權重。
反覆迭代生成T個學習器
T個學習期串行預測加權結合
對於GBDT,它是以第一棵樹作爲基準,逐步調整,所以這樣出來的樹也就更準確了。