rankFM使ってみた


rankFMとは

FM(factorization machine)のライブラリの1つ。
メソッドがレコメンドで使用する前提の物が多い(気がする)
GitHub: https://github.com/etlundquist/rankfm

インストール方法

pip install rankfm

大体の使い方

用意するもの

ユーザーの行動履歴(必須)

各ユーザーがどのアイテムを閲覧したor購入したといったログデータ。
よくあるFMのライブラリだとratingのような評価値のカラムが必要だが、
rankFMに置いてはそもそも閲覧・購買といった行動した(つまり絶対1になる)というDFが入力されることを前提としているため、そのようなカラムは不要である。

user_id item_id
1 10
1 11
1 12
2 20
2 21

ユーザーの特徴(任意)

user_id age_10 age_20 gender
1 1 0 1
2 0 1 0

アイテムの特徴

item_id category_1 category_2 category_3 price
10 1 0 0 1
11 0 1 0 2
12 0 0 1 3
20 0 1 0 4
21 1 0 0 5

動かし方

インポート

from rankfm.rankfm import RankFM

初期化

model = RankFM()

学習

model.fit()

modelをclearしてから学習する

model.fit_partial()

modelをclearしないで学習する(追加学習)

data: PandasDataFrame
user_features_df: PandasDataFrame
item_features_df: PandasDataFrame

data.columns
> ['user_id', 'item_id']
user_features_df.columns
> ['user_id', 'age_10', 'age_20', 'gender']
item_features_df.columns
> ['item_id', 'category_1', 'category_2', 'category_3', 'price']


model.fit(data, user_features=user_features_df, item_features=item_features_df, epoch=100, verbose=False)

レコメンド

model.recommend()という関数があって、これが便利
ユーザーIDを以下のどれかで投げてあげれば、レコメンドする商品を返してくれる。

  • pandas.Series
  • np.ndarry
  • list

また、filter_previousというパラメータは、既にユーザーのログに存在する商品をレコメンド先に出さないようにしてくれる。
つまり、既閲覧・購買商品を勝手に取り除いてくれる(楽)

model.recommend(users, n_items=10, filter_previous=True)

注意点

  • モデルの保存がなさそう