見出し画像

書評: 「推薦システム実践入門」は実践に向けて挑戦するチームで読むべき一冊


前職の同僚である @yu__ya4 から O'Reilly Japan - 推薦システム実践入門 を献本していただきました。

5/9 (今日ですね) 発売とのことです。
推薦システム実践入門 ―仕事で使える導入ガイド | 風間 正弘, 飯塚 洸二郎, 松村 優也 |本 | 通販 | Amazon

改めて、著者である 風間 正弘さん、飯塚 洸二郎さん、松村 優也さん、ありがとうございます!せっかくなので感想を書きたいと思います!

全体を通じて

推薦チームをつくる、とか、チームに新しくメンバーが参加する、となったらとりあえず一冊渡してしまえば大体共通認識がもてる、というような一冊 だなと思いました。

「チーム」といったのは、扱っている範囲がそこそこに広く、「いわゆるデータサイエンティストや機械学習エンジニアが読む本」というよりは、「推薦の関わる領域を改善することをミッションにする人」がみんなで読む価値のある本という意図です。
(章によりますが) 小難しいこともあまりなく、さくさく読める一冊なので、そういう意味でもおすすめです。

個人的には 1, 2, 3, 8 章はだれが読んでも価値があると思うので、特におすすめです。その他の章は実践者、特にエンジニアでないと直接の利益は得難いかもしれません。

また、ばりばりに実践している人にとっては少々冗長・簡単におもえる内容もあるかと思いますが (入門だからそれはそう)、それでも改めてこの本を読むことで、 推薦というものについて少し視野を広げてくれたり、解像度を高められる のではないかと思います。


以下では特に気になった章について感想を書きます。(大体全部になってしまいましたが)

読書メモをほぼそのまま掲載するのでご容赦ください。

2章 推薦システムのプロジェクト

プロジェクトの進め方のところで、まず課題を挙げ、その対応策それぞれについて ROI を列挙する、というのが最初にきている。

サービス開発における推薦というと、ぼんやりと「こういう感じの推薦がしたい」というイメージを持つことは割と簡単で、その結果としてなんとなくプロジェクトを始めてしまい、なんとなく打ち手をやってみる、ということをやってしまった経験が自分にもある。

推薦システムはコスパ勝負という面もあるので、こういう ROI 意識は大切だと思う。
また、推薦システム(特に改善期)は、最終的にそのシステムを導入するかどうか、という判断のところでトラブりやすいので、多少冗長に思えても事前に課題と期待値をリストして評価しておくことはとても重要だと思う。

いろいろ打ち手を出してそれらの ROI を評価をするのには、割と知識が必要なのでこうやって俯瞰できるようにまとめられているととても勉強になる。

3章 推薦システムのUI/UX

推薦システムによって解決しうる典型的な問題や解法のパターン、それぞれについての性質をカタログ的に紹介してくれる章。

推薦システムといっても幅がひろいので、こういうカタログがあると解像度があがって、施策のイメージも持ちやすくなりそう。アルゴリズムだけが推薦システムではなく、何を解決するために何を犠牲にしてどう見せるか、というところまで含めて推薦システムであるということを強く認識させてくれる。

推薦システムに責任をもつ人はもちろんのこと、推薦が重要な価値になりうるプロダクトに関わるすべてのロールの人にとって価値があると思う。

4章 推薦アルゴリズムの概要 / 5章 推薦アルゴリズムの詳細

アルゴリズムにフォーカスをあてて、メジャーなアプローチとそれらの特徴をならべている章。
実践者にとっては超勉強になる章だと思う。5 章はそのまんま試せるチートシート的な使いかたができそう。

5 章の充実度は目次を見れば一発でわかる。

5章 推薦アルゴリズムの詳細
    5.1 各アルゴリズムの比較
    5.2 MovieLensのデータセット
        5.2.1 データのダウンロード
        5.2.2 MovieLensのデータ概要
        5.2.3 評価方法
        5.2.4 統一フォーマットによる計算
    5.3 ランダム推薦
    5.4 統計情報や特定のルールに基づく推薦
    5.5 アソシエーションルール
        5.5.1 支持度
        5.5.2 確信度
        5.5.3 リフト値
        5.5.4 アプリオリアルゴリズムによる高速化
    5.6 ユーザー間型メモリベース法協調フィルタリング
    5.7 回帰モデル
    5.8 行列分解
        5.8.1 行列分解の概要
        5.8.2 特異値分解(SVDSingular Value Decomposition)
        5.8.3 非負値行列分解(NMFNon-negative Matrix Factorization)
        5.8.4 明示的な評価値に対する行列分解(MFMatrix Factorization)
        5.8.5 暗黙的な評価値に対する行列分解(IMFImplicit Matrix Factorization)
        5.8.6 BPRBayesian Personalized Ranking)
        5.8.7 FMFactorization Machines)
    5.9 自然言語処理手法の推薦システム応用
        5.9.1 トピックモデル
        5.9.2 LDAを利用したコンテンツベース推薦
        5.9.3 LDAを利用した協調フィルタリング推薦
        5.9.4 word2vec
        5.9.5 word2vecを利用したコンテンツベース推薦
        5.9.6 word2vecを利用した協調フィルタリング推薦(item2vec)
    5.10 深層学習(Deep Learning)
        5.10.1 深層学習を活用した推薦システム
        5.10.2 実装
        5.10.3 実務での深層学習の活用
    5.11 バンディットアルゴリズム
    5.12 まとめ

6章 実システムへの組み込み / 7章 推薦システムの評価

自分にとってはこれらの章が一番(将来に渡って)お世話になるだろうなと思った。
6 章は実際にシステム化するにあたっての実現方法のパターン集と、その考え方をまとめている章。

推薦システムは制約が重要だと思っているので、「どこまでやるとどういう辛みと利得があって、どの制約をとるか」を決めるのは非常に重要だと思う。なにもかもリアルタイムにパーソナライズされて完璧な推薦がだせるならそれが一番良いに決まっている。

現実には計算資源やアーキテクチャ、データ量などの問題で、コスト (ランニング、メンテ) が高すぎたり、推薦の質が管理・担保しきれなくなったりするので、良い制約条件をつけて落とし所をさがすのが重要。実践するときはいつもこの問題に頭を悩ませるので、この章のようなパターン集があると参考にしやすくて助かるなと思う。

7 章は評価方法についての議論で、これまたとても勉強になる。評価方法を決めるというのは、「何を解決するか」のフォーカスを決めるといってもよいので、それぞれの罠や得意なことを知ったうえで、評価指標や評価方法を決めるというのはとても大事だと思う。

個人的にはこの章はもっと手前にあってもよかったんじゃないかという気もしたくらい大事なことだと思う。

この記事が気に入ったらサポートをしてみませんか?