玉山金控 CRV 部門實習 week 3

David
爬格子的兔子
Published in
5 min readJul 27, 2018

結束第一個專案後,接著進行的是機器學習的相關專案。

CRV 部門日常業務很大一部分來自於銀行業管單位的需求,信用卡處、個人金融處、法人金融處……每個業管單位都有各種營運面的問題希望可以透過數據分析來解決。其中,推薦系統便是一個可行的方向,因此,第二個專案希望透過機器學習的文獻探討,並比較各種可行的套件的應用,並實作出一個推薦系統的 prototype。

論文的主題是 Factorization Machine,由 Steffen Rendle 在2010年提出,希望透過特徵向量的組合,解決推薦系統常遇到的資料稀缺問題,關於 FM 如何實作,可參考這篇 blog,簡單來說,傳統的推薦演算法不外乎基於內容的 Content-based 與基於使用者的 Collaborative Filtering,這些演算法都會遇到一個共同的問題:資料稀缺性(Sparsity),例如如果我們要預測用戶對一部即將上映的電影的評分,可以從用戶對過往其他電影的評分著手,這些類別資料(categorical) 通常需要進行 「one-hot 編碼」才能套用在機器學習的演算法上,但問題來了,用戶不可能對每一部既有的電影都評分,通常用戶只會對幾部電影有評分,導致編碼後的資料出現很多 0 的值,特徵空間的擴大,讓資料看起來很稀疏,也導致模型的學習效果下降。

從現實的角度,我們可以這樣想:

使用者Alice, Bob ,Cherry 對電影 Titanic, NottingHill, Star Wars, Star Trek 的評分如下,可發現有很多缺失值,這些缺失值都會對我們建構學習模型的準確度產生影響,這時我們不妨思考:是不是使用者在評分電影時有什麼隱藏因素是可以考慮的呢?例如可能 Alice 很喜歡 James Francis Cameron,所以只要是他的電影,都給很高分;Cherry 可能是 Daniel Wroughton Craig 的粉絲,只要他有演的電影都給很高分……上述的因素,都是沒有出現在評分矩陣的「特徵關聯」,而如何表示這些關聯,就是 FM 演算法主打的賣點了,詳細的演算法及參考論文列於參考資料中。

至於應用套件的部分,這次專案共測試了四套開源套件,分別是

libFM: Steffen Rendle 釋出的 library,為 C 所撰寫的可執行檔。

pywFM: 將 libFM 經由 python 包裝後,可直接於 python 環境中使用的 library。

fastFM: 由 C 撰寫後,經由 cython 編譯的 python 套件。

pyFM: 使用 python 撰寫的套件。

使用 MovieLens 的資料進行預測,測試筆數約為 100k 左右,並搭配 kaggle 的電影預測競賽參考其準確率判斷,詳細的比較結果可參考這篇文章的套件比較,先說我們測完粗淺的結論:pyFM 的效率極差,時間約為其它套件的十倍以上,其他套件則依據參數的不同而略有不同,但差異不大;準確率的部分則各有些微差距,但一樣差距不大;泛用性方面,pywFM 有支援 windows 環境,但 fastFM 與 pyFM 目前只支援 Linux/Unix,如果要在 windows 環境下運行則需要找其他人已經編譯好的 wheel 來安裝。

這次算是正式初接觸機器學習的領域,推薦台大兩位大神的開放式課程,可以幫助建立正確的觀念:李宏毅老師林軒田老師

最後,列出一些研讀 FM 與測試套件時遇到的幾個模型參數,並試著解釋其中的意義,特別要提的是,變數並沒有絕對的愈大愈好或愈小愈好,通常都是隨著測試資料與模型做逐步的修正。

init_stdev: 模型初始配置的分配中,標準差的大小,也就是可容忍的 variance 範圍,從適當的的分配中取得的初始權重可以幫助增加準確率。

k: 可以想像成一個聯立方程組的方程式多寡,也就是需要用多少聯立方程式才能還原目標的原始矩陣,如果方程組中的方程式彼此相關性很低,就要有比較多的方程式才能盡量描述原始的矩陣,k 就要大一點,但過大的 k 往往需要足夠的資料去運算,所以如果原始資料的缺失值過多,也不宜使用太大的 k。

iter: 模型的迭代次數,通常愈多準確率可以愈高,但也相對會付出更多運算時間。

最後,科長給我們此次報告的回饋是:內容大致上符合要求,但很像是學校裡面的報告,很想把所有做的東西都展示出來,但業界的做法是只要呈現對專案最有貢獻的 20%,例如建模時 regularization 的概念,或是為什麼一定要採用 FM,推薦系統用 FM 一定好嗎?如果不是用在推薦系統,FM 還可以有什麼應用?科長說,CRV 部門最看重的是解決問題的能力,這種能力跟數據分析的專業能力、程式的編寫能力都不同,我想就是在講這件事吧。

參考資料

http://www.52caml.com/head_first_ml/ml-chapter9-factorization-family/

--

--