【技術本】推薦システム実践入門
https://amzn.to/455SzPu
【技術本】推薦システム実践入門
へポスト
「推薦システム」により、従来の人気度ランキングなどの画一的なおすすめでなく、一人一人の興味関心にパーソナライズしたおすすめが可能になった。
netflix:80%、amazon:35%が推薦システム経由のコンバージョンとのこと。
本書の肝である推薦処理の実装は、「MovieLens」という既存の推薦システム用ベンチマークに用意されている映画のデータセット(映画情報、ユーザのタグ付け、評価などが含まれる)を使って、15種ほどのアルゴリズムによる推薦処理を実装できる。
ソースコードは、gitからダウンロードできる。Python3.7に対応。以下の環境で使用できる。
・Python3.7環境用ソースコード(紙面通りの実装)
・Google Colab用 Jupyter Notebook用コード(Jupyter Notebook用にコード改変あり)
・Jupyter Notebook用コード(Jupyter Notebook用にコード改変あり)
※ファイル名でどのアルゴリズムの実装であるか対応はなんとなくわかるが、紙面にファイル名明記での対応も欲しかった。
各個人にパーソナライズした推薦をする場合は「協調フィルタリング」による実装が有効だが、コールドスタート問題というサービス初期に起こりうる十分なビッグデータが揃っていないと精度のある予測ができない状態が発生する。そこで、最初はユーザの履歴数などには影響しない画一的に近い推薦をする「内容ベース」のアルゴリズムで開始し、ユーザ行動履歴などのビッグデータが溜まったら、協調フィルタリングに切り替える方法(あくまで一例)もあるなど、実際にシステムを構築する過程でのノウハウもいろいろ詰まっている。(注意:実装はアルゴリズム処理のみで、それ以上の設計は言及のみ)
推薦システムを、業務システムに組み込むための足がかりを学びたい人にとって価値が出てくる著作だと感じた。
以下、気になった内容メモ
------
●1章:推薦システム
Amazon おすすめ商品
Youtube おすすめ動画
Twitter おすすめユーザー
定義:
複数の候補から価値あるものを選び出し、意思決定を支援するシステム
推薦システムの3要素
・インプット(データ入力)
ユーザ・アイテムのコンテンツ情報
ユーザとアイテムのインタラクション(行動履歴)情報>協調フィルタリング
・プロセス(推薦の計算)
概要推薦:前ユーザに同じ内容を表示>アイテムに流動性がない場合は効果が持続しない
関連アイテム推薦:内容ベースフィルタリング、協調ベースフィルタリング
パーソナライズ推薦:ユーザプロフィール、行動履歴を元に一人一人に個別おすすめ
過去閲覧履歴>コスト低いが効果的
・アウトプット(推薦の表示)
コールドスタート問題:新規ユーザや新規アイテムのデータが少なく推薦が難しい状態
●2章:推薦システムのプロジェクト
開発に必要な3つのスキル
・ビジネス:ビジネス課題を整理し解決する力
・データエンジニアリング:データサイエンスを意味のある形に使えるように実装、運用できる力
・データサイエンス:情報処理、人工知能、統計学などの知識を理解し使う力
プロジェクトの進め方
・課題定義
・仮説立案:課題に対するROI(費用対効果)の高い施策から取り組む
・データ設計・収集・加工
ユーザとアイテムのコンテンツ情報
ユーザとアイテムのインタラクション情報
・アルゴリズム選定
・学習・パラメータチューニング
・システム実装
バッチ推薦:決まったタイミング時点の情報を元に推薦リストを更新
リアルタイム推薦:ユーザ直近の行動履歴を即時反映した推薦リスト
・評価・改善
●3章:推薦システムのUI/UX
利用者の目的
・適合アイテム発見:目的達成に適したアイテムを1つでも発見する方法
>外食のお店探し
・適合アイテム列挙:目的達成に適したアイテムをできるだけ全て発見する方法
>不動産物件探し
・アイテム系列消費:閲覧、消費していくなかで、推薦されたアイテムの系列全体から価値を享受する方法
>音楽のサブスクを聴いている状況
・サービス内回遊:ただアイテムを閲覧すること自体を目的とした方法
>ウィンドウショッピング、
サービス提供者の目的
・新規・低利用頻度ユーザの定着
概要推薦(知識豊富な編集者の選択に基づいた推薦)が有効
・サービスへの信頼性向上
利用者評価(利用者レビューの参照)が有効
・利用頻度向上。離脱ユーザの復帰
通知サービス(メールやプッシュ通知で推薦を送付)が有効
・同時購入:クロスセル
関連アイテム推薦が有効
・長期的なユーザのロイヤリティ向上
パーソナライズ(個人化された推薦結果を提供)
アイテムの類似度
プリンタを購入したユーザに、プリンタの色違いを推薦すべきでない
インクカートリッジ、用紙などを推薦するよう切り替えるのが望ましい
「目新しさ」は重要な観点の一つ
「関心」と「新規性」と「意外性」を備えた推薦>セレンディビティ
しかし「意外性」を定量的に測定するのは難しいので、多様性という観点で定量的に測定することがある。
アイテムの選別
何度も推薦表示されても購入に至っていない商品をいつまでも表示するのはよくない
推薦理由の表示
「この商品を買った人はこんな商品も買っています」
推薦の効果、推薦の透明性、顧客満足度を上げられる
●4章:推薦アルゴリズムの概要
複数の候補から価値あるものを選び出すアルゴリズム
推薦アルゴリズム
・内容ベースフィルタリング
アイテムの内容を表す情報を利用
アイテムの特徴
・属性取得
・音声解析
・画像解析
ユーザプロファイル
過去の最も購入が多い傾向をユーザのプロファイルにする
ユーザプロファイルとアイテムの特徴で類似項目が多いものを推薦に選出
・協調ベースフィルタリング
サービス内の他ユーザの過去の行動などに得られる傾向を利用
推薦対象者と類似する他の利用ユーザの傾向(購入履歴など)から、その他のユーザの購入しているものを推薦
・メモリベース法
推薦を行うタイミングで蓄積されたデータのうち必要なもの全てを用いて予測
予測タイミングで利用するデータ全てをメモリに格納して計算
予測に時間がかかる
・モデルベース法
あらかじめシステム内で蓄積された規則性を学習したモデルを作成
作成されたモデルと推薦を適用する対象ユーザのデータのみで計算
予測に時間がかからない
嗜好データ
明示的獲得:アンケートなどで嗜好を指定してもらう
内容は正確だがデータ量は少ない
暗黙的獲得:購入履歴、お気に入り、閲覧などから取得
データ量は多いが、正確性などは定かでない
協調フィルタリングは、コールドスタート問題に弱い
サービス初期や人数が少ないサービスは、内容ベースフィルタリングが有効
多様性の向上については、協調フィルタリングの方が有効
協調フィルタリングのほうが複雑なユーザの嗜好を考慮できる。
ユーザのデータ認知
自分のデータをシステムに使われていると感じたり、プライバシーを侵害されているといったネガティブな印象を持ってしまうのに注意
評価値の揺らぎやバイアス
商品がいつまでもユーザから一定の評価を受けるとは限らない。
再評価時には評価値が同じになるとは限らない
ユーザの嗜好性は時間とともに変化
●5章:推薦アルゴリズムの詳細
検証用のベンチマークとして使用されている既存のMovieLensという映画のデータセットを利用
映画情報、ユーザのタグ付け、評価などが含まれるデータセット
アルゴリズム
・ランダム推薦
・人気度推薦
・アソシエーションルール:SQLでも実装可能
購買履歴から、どの商品が一緒に購入されることが多いかの法則を導き出せる
・ユーザ間型メモリベース協調フィルタリング
推薦時にそれまで蓄積したデータから予測計算をする>時間を要す
類似度:ピアソンの相関係数
・回帰モデル:機械学習
コードではランダムフォレストによる回帰問題として予測をする
・SVD特異値分解:シンプルな行列分解手法
・NMF非負値行列分解
・MF(MAtrix FActorization):Netflixのコンペで好成績の行列分解手法
・IMF:暗黙的評価に対応した行列分解手法
・BPR:暗黙的評価に対応したランキングを考慮した行列分解手法
・FM:評価値以外にもアイテムやユーザの情報を加味することが可能な手法
・LDA(コンテンツベース):アイテムのコンテンツ情報にトピックモデルを適用して推薦
・LDA(協調フィルタリング):ユーザの行動履歴にトピックモデルを適用して推薦
・word2vec(コンテンツベース):アイテムのコンテンツ情報にword2vecを適用して推薦
・item2vec(協調フィルタリング):ユーザの行動履歴にword2vecを適用して推薦
gitでソースコードを入手できる
・紙面通りのソースコード
・jupyter-notebook用のコード
・goolge colab用のコード
Google Colab, Jupyter Notebookで実行可能
データ項目、行列分解は欠損値の取り扱い:評価値が明示的か暗黙的か
>アルゴリズムごとに得意、不得意が分かれたりする。データ項目選定、データ加工の前処理は重要
深層学習を活用したシステム
・画像や文章などの非構造データからの特徴量抽出器として活用
・複雑なユーザの行動とアイテム特徴量のモデリング
非線形データのモデリング
時系列データのモデリング
強化学習:バンディットアルゴリズム
●6章:実システムへの組み込み
実装方法
・バッチ推薦
・リアルタイム推薦
負荷軽減処理
・候補選択、スコアリング、リアランキングなど処理を分ける
・近似最近傍探索:正確さを犠牲にして入力されたベクトルに近いアイテムを高速で探し
出す方法
ログの実装
クライアント側:ユーザ行動ログ
推薦処理学習用のデータの他に、パフォーマンス、クリックページ遷移などのUI/UX改善情報も取得して考慮
●7章:推薦システムの評価
評価方法
・オフライン評価:過去ログを用いて評価
評価項目:RMSE,nDCGなど
評価方法:シミュレーション
・オンライン評価:オフラインより正確な評価になりやすい
評価項目:クリック率、売り上げ、継続率など
評価方法:A/Bテスト、インターリービング
・ユーザスタディ:ユーザにインタビューやアンケートで評価してもらう
評価項目:満足度、有効性、目新しさなど
評価方法:インタビュー、アンケート
●8章:発展的なトピック
推薦システムに関する最新の学術的な取り組みは、国際会議を通して追うことが可能
発生しうるバイアス
・セレクションバイアス:自分好みで評価対象を選ぶことに起因
・同調バイアス:他のユーザが付与した評価値に影響され自分の付与する評価値を変えてしまうバイアス
・表示バイアス:表示されるのは推薦候補の一部であることに起因
・ポジションバイアス:ランキング上位のアイテムにより多くの行動を起こすバイアス
・人気バイアス:人気アイテムが他のアイテムより推薦される機会が多くなるバイアス
・不公平性:特定グループが有利、または不利に不当に区分するバイアス
・フィードバックループによるバイアスの増幅
*書面では各バイアスごとに対策も記載
相互推薦システム
サービス内のユーザを互いに推薦するUser-to-User形式の推薦システム
お互いの嗜好が一致(一方から「いいね」が送られたら、もう一方からも「いいね」が送られる)して初めて推薦が成功となるのが特徴
ドメインに応じた特徴と課題
・楽曲推薦
入稿される楽曲のメタデータの誤りや欠損が含まれるためデータ整形が大変
人気曲だけ推薦するとユーザ体験を損なう場合もある。ニッチ楽曲の需要もある
・ファッション推薦
インフルエンサー経由の購入が増えている
・ニュース推薦
ニュース記事は書き手によって統一された形式をもたない、重複排除判定もむずかしい
・動画推薦
グループで視聴している場合は、複数人に対する推薦は難しい>特定の視聴パターンを見つけるのが重要
・食の推薦
文化的な背景、ライフスタイル、宗教上の理由、家族構成、生活に根ざした価値観によって、食の消費に強い制約がある場合がある。
・仕事の推薦
相互推薦システムになることが多い。センシティブなデータを表現してしまい、公平性が損なわれないように配慮が必要。
●付録A Netflix Prize
ネトフリの推薦システム
はじめは、DVDレンタル宅配の形態
人気新作映画の在庫がない問題>新作ではないがユーザが気にいる映画を進めることで、大量に仕入れるコストを抑える
推薦は、コンテンツベースから、協調フィルタリング手法に移行
NEtflix Prizeコンテスト:100万ドルのアルゴリズムコンペ
ネトフリの画像サムネイル:エンゲージ率を考慮したA/Bテストで選定
子供向けは悪役が映ると受けがいい
国ごとにも反応は違ってくる
●付録B ユーザ間型メモリベース法の詳細
以上
へポスト
