前言
Factorization Machines(FM) 因子分解机是Steffen Rendle于2010年提出,而Field-aware Factorization Machine (FFM) 场感知分解机最初的概念来自于Yu-Chin Juan与其比赛队员,它们借鉴了辣子Michael Jahrer的论文中field概念,提出了FM的升级版模型。 FM的paper中主要对比对象是SVM支持向量机,与SVM相比,有如下几个优势
- FM可以实现对于输入数据是非常稀疏(比如自动推荐系统),而SVM会效果很差,因为训出的SVM模型会面临较高的bias。
- FMs拥有线性的复杂度, 可以通过 primal 来优化而不依赖于像SVM的支持向量机。
在推荐系统和计算广告领域,点击率CTR(click-through rate)和转化率CVR(conversion rate)是衡量广告流量的两个关键指标。准确的估计CTR、CVR对于提高流量的价值,增加广告收入有重要的指导作用。FM和FFM近年来表现突出,分别在由Criteo和Avazu举办的CTR预测竞赛中夺得冠军。
Factorization Machines 因子分解机
假如在某个电影播放网站有这么一组实时数据:
MoviesClass | Actor | Director | MoviesIsPlay? |
---|---|---|---|
Action | A | AA | 1 |
Romantic | B | BB | 0 |
Action | A | BB | 1 |
其中MoviesIsPlay?是label,MoviesClass 、UserType、Actor、Director是特征。以上这四种特征都是categorical类型的,需要经过独热编码(One-Hot Encoding)转换成数值型特征。
MoviesClass = Action | MoviesClass = Romantic | Actor = A | Actor = B | Director = AA | Director = BB | MoviesIsPlay = 1 | MoviesIsPlay = 0 |
---|---|---|---|---|---|---|---|
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
从该独热编码表可以看出矩阵许多值都为0,数据十分稀疏,而且会导致数据维度增大,数量级从 n n增大到n2n^2。
而我们的目的是从该矩阵中获取到特征的某些关联,比如MovieClass=action 与 actor=A 关联比较大,电影播放量可很客观,从而对用户进行推荐。
为了使用FFM方法,所有的特征必须转换成“field_id:feat_id:value”格式,field_id代表特征所属field的编号,feat_id是特征编号,value是特征的值。数值型的特征比较容易处理,只需分配单独的field编号,如用户评论得分、商品的历史CTR/CVR等。categorical特征需要经过One-Hot编码成数值型,编码产生的所有特征同属于一个field,而特征的值只能是0或1,如用户的性别、年龄段,商品的品类id等。 除此之外,还有第三类特征,如用户浏览/购买品类,有多个品类id且用一个数值衡量用户浏览或购买每个品类商品的数量。这类特征按照categorical特征处理,不同的只是特征的值不是0或1,而是代表用户浏览或购买数量的数值。按前述方法得到field_id之后,再对转换后特征顺序编号,得到feat_id,特征的值也可以按照之前的方法获得。
参考文献
- https://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
- http://www.52caml.com/head_first_ml/ml-chapter9-factorization-family/
- http://www.csie.ntu.edu.tw/~r01922136/slides/ffm.pdf
- https://github.com/guestwalk/libffm FFM C 实现