渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

『ウェブ最適化ではじめる機械学習』はモダンなUI/UX改善の枠組みを学ぶ上で至適の一冊

こちらの書籍を著者の飯塚修平さんからご恵贈いただきました*1。テーマとしてはウェブ最適化即ちいわゆるUI/UX改善で、そのアプローチについて包括的にまとめた内容です。ちなみに本書は著者ご自身の修士・博士論文の内容に沿ったもので、いわば大学院での研究の集大成とも言えるものなのだそうです。


と書くと、いかにも「ガッチガチの研究」本に見えるかもしれませんが、引用されている事例などには一般のユーザー・消費者でもある我々にも馴染み深いものが多く、意外と取っ付きやすい内容だなと個人的には感じました。また、A/Bテスト・バンディット・ベイズ最適化とそれぞれ個別に専門書が書かれることが多く、別々に学ぶ羽目になることになりがちなテーマが、ウェブ最適化という実務的な一貫したテーマのもとでまとめられているのも優れた点だと思います。そして、何よりもNumPy / PyMC3によるコード例がふんだんに盛り込まれている点が、優れて実践的だと言えるでしょう。


ということで、一通り読んでみた範囲で簡単に書評を書いてみようと思います。なおいつもながらの話ですが、明らかに誤読や誤解釈が疑われたり、僕自身の勉強不足に由来すると思われる不適切な評がありましたら、コメント欄などでご指摘くださると有難いです。

本書の概要


各章のタイトルを見れば経験者であればある程度どんな内容か分かるかと思いますが、そうでもない方も少なくないと思うので以下に各章の簡潔なまとめを記しておきます。

1章 A/Bテストからはじめよう: ベイズ統計による仮説検定入門


ここでは基本中の基本であるA/BテストによるUI/UX改善が論じられていますが、流石はタイトルにウェブ最適化とうたうだけあり、最初に引用されている事例が2008年米大統領選におけるバラク・オバマ氏の陣営が支援者募集サイトのデザインを最適化した際のエピソードとなっています。以後の章でもこの事例のようなUI/UX改善をイメージした仮想の事例が出てきますので、ウェブ最適化そのものに馴染みがないという方はまずこの章をきちんと読まれた方が良いでしょう。


ただし、この章の主題はA/BテストそのものでもUI/UX改善そのものでもなく実はベイズ統計の初歩なので、もしかしたらそこでつまずく人がいるかもしれません……とは言えここを乗り越えるとその先のメインテーマに進めるので、取っ付きにくいという方でも頑張って読まれたり、Pythonコードを写経して雰囲気を体得することをお薦めします。

2章 確率的プログラミング: コンピュータの助けを借りる


平たく書くと、ベイズ統計による仮説検定に確率的プログラミングフレームワークであるPyMC3を導入するやり方がこの章では解説されています。なので、PyMC3(もしくはStan)など確率的プログラミングに通じていて、尚且つベイズ統計の概念を理解している方は読み飛ばしても大丈夫です。そうでない方は是非ここで、確率的プログラミングそのものに慣れ親しむよう、写経してみてください。

3章 組合せのあるテスト: 要素に分解して考える


「商品画像+デザインされたボタン」の組み合わせに対する「クリック率」のように、いくつかのUI/UX要素の組み合わせに対してKPIがあるような、いわゆる多変量解析による分析が求められる場面を想定した内容がこの章です。ここでは統計モデリングを用いて、それぞれのUI/UX要素を表す説明変数の偏回帰係数の大小などから「どれが重要か」を求めるというオーソドックスなやり方について解説しています。ただ、全てベイズ統計ベースなのでこれもPyMC3で実践されています。僕ならRでlmとかglmとかしておしまいですが(笑)。

4章 メタヒューリスティクス: 統計モデルを使わない最適化手法


この章では、モデルを仮定しない最適化手法であるメタヒューリスティクスを取り上げています。山登り法、焼きなまし法遺伝的アルゴリズムを中心としたアルゴリズムの紹介と、帯域最適vs.局所最適といった概念の解説とがなされています。

5章 バンディットアルゴリズム: テスト中の損失にも向き合う


ここからいよいよモダンなUI/UX改善のテーマに入っていきます。他書ではこれ一つで一冊書き切れてしまうテーマでもある、バンディットアルゴリズムです。これは「カジノで一定の予算内に限られた台数しかスロットマシン(バンディット)を試せない状況で利益を最大化する」問題と同義で、多腕バンディットとも呼ばれます。ウェブ最適化の世界では、時々刻々と多数のユニークユーザーが押し寄せるサービスにおいて購入・予約などのKPIを最大化するために、サービスを稼働させたままサイトデザインや決済フローなどを巧みに切り替えていくような状況が想定されます。


f:id:TJO:20201215161750p:plain

この章ではε-greedy, 焼きなましε-greedy, softmax, Thompson sampling, UCBといった代表的なアルゴリズムPythonコードによる実践とともに解説されています。僕もバンディットは興味がありながら全然やってこなかったテーマの一つで、今回初めて写経とはいえ動くコードを使って実践できて有難かったです。

6章 組合せのバンディット: バンディットアルゴリズムと統計モデルの出会い


前の章ではバンディット単体をまるっと選ぶアルゴリズムの話題でしたが、この章では3章の組み合わせデザイン同様に「バンディットだが組み合わせが(ダミー変数として)発生する」ケースでのバンディットアルゴリズムについて解説されています。


f:id:TJO:20201215172238p:plain

これは言い換えると「何かしらの回帰モデル上にバンディットアルゴリズムを当てはめて逐次的に最適解を求める」のと同じで、これは黄色い本ことPRMLにも載っている「ベイズ推論で逐次的に回帰モデルのパラメータを求めに行く」やり方に似ているなと思いました(実際に本書の中でも前提として回帰モデルのベイズ推論の解説がされています)。その一つとしてUCBを線形モデルに適用したLinUCBアルゴリズムが紹介されています。

7章 ベイズ最適化: 連続値の解空間に挑む


そしてこの手の最適化で、実務環境で使われているもので最先端と思われるのがベイズ最適化。この章では「テキストリンクのフォントの色をユーザーの選好に基づいて逐次最適化する」というテーマを想定して、RGBの3軸の連続値に対するベイズ最適化のやり方をPythonコードと共に細かに解説しています。


ベイズ最適化については4年前のブログ記事でも取り上げたことがありますが、本書では既存パッケージに頼らずNumPyベースのほぼスクラッチに近い実装コードをもとに「どのように動くか」を更新ステップごとに分かりやすく図示しているため、より直感的に理解しやすいという感想を持ちました。なお本書ではガウス過程に基づくGP-UCB, GP-TSの2つのアルゴリズムが紹介されています*2

8章 これからのウェブ最適化


最後に、エピローグとして今後の課題などについて触れられています。例えばウェブ最適化に頻出の「短期的vs.長期的評価」といった話題や、リピートユーザーの扱い方、派生する手法としてのVAE (variational autoencoder)による特徴空間の圧縮といったトピックについて論じられています。


個人的な感想など


個人的にはこういう「手を動かしながら学ぶ」系の技術書は大好きで*3、特に多腕バンディットのようなほとんど未体験の分野でこのように実際に動くコードを写経しながら、どのような仕組みで動くかを事細かに学べるのはまことに有難い限りでした。


以前書いた多腕バンディット「もどき」と見比べると、ああこれはThompson samplingのなり損ないだったのかなとか色々と反省や思い返すこともあり、僕自身の興味としても面白く読めました。


一方ちょっと舌足らずかなと思ったのが、A/Bテストなどexperiment系のUI/UX改善では必須の知識である実験計画法の話題が、章の間のコラムで取り上げられるに留まっていたことでしょうか。本当はfactorial designとかlatin squareといったポイントの詳細な解説は実験計画を考える上では欠かせないのですが、そこまで説明していたら紙面が足りないということかなと思いましたので、これは他書で適宜補ってくださいということで*4


また個人的な懸念としては、1章の確率分布とベイズ推論のところで早くも撃沈してしまう初学者が多いかもしれないなぁとちょっと思いました(汗)。紙面の制約もあって難しかったのかもしれませんが、古典的なt検定・カイ二乗検定・分散分析・回帰分析といった頻度主義的な実験データ分析の話題を先に置いてから、ベイズ推論へと向かった方がもうちょっと取っ付きやすかったかなという感想を持ちました。


……と色々論ってしまいましたが、先述したように各々で一冊潰せるほどゴツいテーマの数々を「ウェブ最適化」という単一のキーワードのもと、理論・アルゴリズムの解説を写経しやすい実践的なPythonコードと共にコンパクトにまとめた本書はどのテーマにとっても良い入門書です。是非お薦めしたいと思います。


補足


僕は大体のPythonコードは本文から写経してしまいましたが、出版元のオライリー社から各章の内容をまとめたColab notebookが公開されているので、そちらから直接実行した方が多分早いです*5

*1:なお飯塚さんは現在の勤務先の同僚であることを予め申し添えておきます

*2:GPは勿論Gaussian processのこと

*3:なので6年前に出した拙著も「手を動かしながら学ぶ」系の本にした

*4:その他書が意外と乏しいという問題も……

*5:その代わり身につかないかもしれませんが