前回の記事:【データ分析】データマーケティングにおけるレコメンド手法の一覧まとめ から引き続いてレコメンドについて調べた結果を自分用にメモしておきます。
Contents
協調フィルタリングの種類
上述したように協調フィルタリングは「購買データからユーザーをパーソナライズして購入しそうな商品をピックアップ」する手法ですが、この手法にはいくつかのアプローチ方法があります。
引用:https://yolo-kiyoshi.com/2020/06/22/post-1947/
この辺りは向こうのレコメンドシステムの実装環境などを吟味して選定した方がよさそうです。
コラム:レコメンドの方向性について
実際にレコメンドをするとなった際の方向性としては「関連する商品を見つける(アイテムベース)」のか「関連するユーザを見つけるのか(ユーザーベース)」の2つに分かれます。
一般的にはユーザベースよりもアイテムベースの方が計算処理量が少なく、高速とされています。 履歴データが膨大になると、アイテムベースとユーザベースではレコメンドの精度は差がなくなり、アイテムベースのほうがスケーラビリティがあるとされています。
要は「アイテムID×ユーザーID」の行列なのか、「ユーザーID×アイテムID」の行列なのかというだけで、Pythonで実装する際はデータフレームを引数の「df.T」で縦横入れ替えれば済む話です。
メモリベース
・KNN(K近傍法)
k近傍法は学習データをベクトル空間上にプロットし、新しいデータを入れてそこから距離が近い順に任意のk個を取得し、その多数決でデータが属するクラスを推定するアルゴリズムです。レコメンドではこのユーザー間の距離を類似度として算出します。
具体的にはベクトルの距離を「ユークリッド距離(小さい方が近い)」で測る、ベクトルの内積を「コサイン類似度(大きいほど似ている)」とするといったやり方があります。この辺りはPythonで実装する際は引数の設定で指定可能です。
それぞれのPythonでの実装については以下参照:
関連記事:【Python】アニメのレコメンドシステムを協調フィルタリングで実装する(ユーザーベース)
関連記事:【Python】協調フィルタリング(k近傍法)でアニメのレコメンドシステムを実装する(アイテムベース)
・特異値分解(SVD)
特異値分解(singular value decomposition: SVD)は、コンピューター上で多次元で表現される画像データや言語データ、各種ログといったもの扱う際に特徴量を可能な限り損ねること無く次元圧縮する際に利用される手法です。他の次元圧縮手法としては、主成分分析(PCA)や非負値行列因子分解(NMF)などがあります。
モデルベース
・ニューラルネットワーク
参照:大規模サービスで効率よくレコメンドを提供するためにTensorflow Recommendersを活用する – DMM inside
・Matrix Factorization
参照:AmazonからYouTubeまで 有名Webサービスを支える推薦アルゴリズムのこれまでとこれから – ログミーTech
・Factorization Machines
参照:AmazonからYouTubeまで 有名Webサービスを支える推薦アルゴリズムのこれまでとこれから – ログミーTech
・リカレントネットワーク
リカレントネットワークは時系列的な流れを保持したディープラーニングです。時系列の順序の意味合いが大きい株価データや会話データでよく用いられるアルゴリズムですが、レコメンドにも応用が効くみたいです。
参照:AmazonからYouTubeまで 有名Webサービスを支える推薦アルゴリズムのこれまでとこれから – ログミーTech
その他
・クラスタリング
ユーザーを属性情報などでクラスタリングしてレコメンドを行うアプローチです。協調フィルタリングの計算量が多い場合はまずユーザーをクラスタリングで分けて各クラスターごとにアソシエーションや協調フィルタリングで分析を行うのも手法としてアリかもしれません。
実装記事:【Python】K-MEANSでのクラスタリング結果を主成分分析で次元削減してグラフで可視化する
参照:https://qiita.com/k-oto/items/7790941656fba0068ed8
参照:https://blog.brainpad.co.jp/entry/2017/02/03/153000
参照:https://yolo-kiyoshi.com/2020/06/22/post-1947/
コメント
[…] 関連記事:【Python】レコメンドでよく使われる機械学習アルゴリズムの一覧とコード実装 […]