『施策デザインのための機械学習入門』という本を技術評論社さんから出版します

f:id:usaito:20210801195053j:plain:w250:h355

Twitterでたびたび告知させていただいていますが、『施策デザインのための機械学習入門』という本を技術評論社さんから出させていただきます。紙版は8月4日発売(本記事公開の翌日)、電子版は7月30日にすでに発売されています。

gihyo.jp

www.amazon.co.jp

本書の概要は次の通りです。

予測に基づいた広告配信や商品推薦など,ビジネス施策の個別化や高性能化のために機械学習を利用することが一般的になってきています。その一方で,多くの機械学習エンジニアやデータサイエンティストが,手元のデータに対して良い精度を発揮する予測モデルを得たにもかかわらず,実際のビジネス現場では望ましい結果を得られないという厄介で不可解な現象に直面しています。実はこの問題は,機械学習の実践において本来必要なはずのステップを無視してしまうことに起因すると考えられます。機械学習を用いてビジネス施策をデザインする際に本来踏むべき手順を無視して予測精度の改善だけを追い求めると,「解くべき問題の誤設定」や「バイアス」といった落とし穴に気づかぬうちにハマってしまうのです。

この問題を解決するためには,機械学習のビジネス応用において必要となる前提条件を着実にクリアしなくてはなりません。しかし多くの現場では,「学習」や「予測精度」などに関する手法やテクニックのみに注目してしまう傾向があり,「機械学習にどのような問題を解かせるべきなのか」「実環境と観測データの間の乖離(バイアス)の問題にどのように対処すべきか」といった効果的なビジネス施策をデザインするために重要な観点が軽視されがちです。機械学習をビジネス施策に活かすための前提が整えられていないにもかかわらず,発展知識を身に付けたり論文の内容をそのまま実装したところで,望ましい結果を継続的に得ることは難しいのです。

本書では,ビジネス施策を自らの手で導くために必要な汎用的な考え方を身につけることを目指します。そのため本書ではまず,機械学習をビジネス現場で活用する際に本来踏まねばならないステップを明文化した汎用フレームワークを導入します。そしてその汎用フレームワークを活用しながら,効果的な施策を自らの手で導出する「施策デザイン」の流れを繰り返し体験します。これまで軽視されてきた「機械学習の威力を担保するために必要な前提のステップ」をフレームワークとして明文化し,データから施策を導くプロセスを自らデザインするという斬新なコンセプトで,ビジネスにおける変幻自在/臨機応変機械学習の応用を可能にすることが,本書の最終目標です。

さてこのブログ記事では、執筆に至る経緯や執筆過程などをラフに書いてみようと思います。

執筆に至る経緯・執筆過程

一応自分がメインで執筆を担当させていただいたというところで、筆頭著者にしていただいています。書籍の執筆は初めての経験だったのですが、サイバーの安井さんやホクソエムの方々など経験豊富な先輩方にレビューなどを通じて手厚くサポートしていただけたので心強かったです。

経緯としては、2020年の始め頃(ちょうど『効果検証入門』が出版された頃)に安井さんからもう少し機械学習に寄せた反実仮想機械学習周りの話を続編として書いてみたら面白そうということで、声をかけていただきました。その流れで、2020年4月頃にやんわりと執筆をスタートしたというところでしょうか。その後は大まかに次の流れで執筆が進んでいきました。他にも研究や大学院出願など色々とイベントがあったので、かなり進捗に波があった感じです。

  • 2020年4月: 執筆開始・目次の見立て
  • 2020年4~6月: はじめにと1章の初稿
  • 2020年7~8月: 研究などを言い訳に執筆停止
  • 2020年9月: 3章の執筆を少しだけ進める
  • 2020年10~12月中旬: 大学院出願を言い訳に執筆停止
  • 2020年年末~2021年年始: 年末年始休みの10日間ほど家に篭って3~5章を粗く仕上げる
  • 2021年1月: 学部卒業のための最後の単位収集のため小休止(3月に無事卒業)
  • 2021年2~3月: 1,3~5章の内容洗練
  • 2021年4月: 2章の執筆, 演習問題を考え始める
  • 2021年5月~7月頭: 全体をひたすら修正, 演習問題の拡充
  • 2021年8月頭: 発売(電子版は7月30日)

f:id:usaito:20210801082359p:plain:w350:h215
執筆活動の進捗の波

ということで執筆開始から出版まではおよそ1年4ヶ月ほどかかっています。ただし途中で何かにつけて手が止まっている期間が結構あったので、実際に執筆に取り組んでいた期間は半年程度でした。2020年の間は忙しかったり気持ちが乗らなかったりでなかなか進まなかったのですが、他の仕事や研究が正月休みに入った隙にとりあえず全体を粗く下書きしてしまい、その後ひたすら加筆・修正していくという流れでなんとか完成まで持っていきました。白紙状態から新たな章を書き始めるのはなかなか気が重いんですが、とりあえず粗い状態でもたたき台があれば、それをもとに修正する作業は比較的気楽に進めることができます。

さて最初は反実仮想機械学習の教科書的な位置付けを目指して執筆をスタートしたわけですが、書き進める中で「この内容なら別に自分じゃなくてもなんだか書けそうだな」と感じ始めてしまい、途中でもうちょっと挑戦的な内容に方向転換しました。概要からも分かる通り、完成形としては一般的な機械学習の応用に焦点を当てた本に仕上がっていて、

  • 現場で機械学習を活用しているデータサイエンティストや機械学習エンジニア
  • 将来それらの職に就こうと思っている大学生・大学院生
  • 推薦システムや情報検索などの応用に近い分野の研究者

といった広範な層に受け入れてもられる内容になっているのではないかと思います。安井さん曰く「これからデータサイエンティストの新人研修における決定版の一冊になりそう」とのことです。

もう少し内容についてお気持ち的な話をすると、これまで自分が論文を読んだりして勉強する中で、「機械学習を活用する際は本来このような流れをたどるべきだ」という「機械学習応用のあるべき姿」が自然と形成されていたわけですが、勉強会などで色々な方とお話しさせていただく中で実は自分の機械学習に対する見方と多くの人のそれは結構違いそうだという感覚を持つようになりました。そこで本書の執筆に当たっては、そこのギャップを埋めるというか、自分の中にあった「機械学習の応用においてたどるべき思考回路」を、特にデータサイエンティストや機械学習エンジニアの方に面白く読んでもらえるような話に落とし込むという挑戦をしていました(これがなかなか難しい)。なので手に取ってもらえたらわかると思うんですが、本書では手法やアルゴリズムを羅列したり、それらの性質を解説したりするよくあるスタイルは取っていません。まず1章で「機械学習の応用においてたどるべき思考回路」をまとめた上で、さまざまな問題設定において、その回路をなぞっていくという他書にあまりないスタイルが体現されていると思います。この点に関しては、本書の冒頭でも次のように補足しています。

さて本書は他の多くの機械学習に関する書籍とは異なり、手法やそれに関する理論および実装などを数多く紹介するためのものではありません。本書を通じて身に付けるべきなのは知識ではなく、汎用的な思考回路や取り組み方です。もちろん本書の内容を理解し飲み込むことはある程度必要ですが、それだけでは本書で扱っている限られた問題設定にしか対応できないでしょう。これまで何度か述べているように機械学習の実践においては人それぞれ取り組んでいる問題設定が異なるわけですから、エッセンスを理解した後はそれを自由に修正しつつ、個々の問題設定に自力で対応できなければ意味がありません。そのためある単一の正解や固定化された知識を学べば良いという受動的な意識や姿勢を持っていては、本書から得られる学びは非常に限られたものになってしまいます。読み進めるにあたってはまず、本書の内容は正解ではなくあくまで機械学習の実践において重要な手順を理解し、意識化し、身に付けるための一例に過ぎないことを理解しておいてください。また特に2〜5章では、「自分が扱っている問題設定ではこのような手順をとると良さそうだ」「この本では〇〇という流れで学習につなげているが、この部分をこう変えたらあとの手順はどう変化するだろうか」など常に頭を動かしながら能動的な姿勢で読み進めていただきたいです。

それと個人的にはちょうど集中的に執筆していた時期が、学部の卒業とかぶっていたため、卒論のようなイメージを持って取り組んでいました。内容としてもちょうど機械学習や統計の勉強を始めてから大学を卒業するまでの期間に自分なりに構築した「機械学習に対する見方」をまとめた内容と言うことができるのではないかと思っていて、その意味で結構思い入れがあります。

本書冒頭「はじめに」の内容をちょい出し

さてここまでやんわりとお気持ちの部分を書いてみましたが、もう少し具体的な内容に興味があるという方のために本書冒頭の「はじめに」の内容を一部公開させていただきます。これを見て興味が深まったという方がいたら、ぜひ書店やオンラインストアなどでお手にとっていただけたら嬉しいです。

以下「本書のアプローチ」・「本書の構成」は本書冒頭からの抜粋です。 (なお以下の文章に登場する「図0.2」や「図0.3」まではここで公開していません)

本書のアプローチ

本書は機械学習に関する書籍であることを謳いながら、学習やそれにまつわるテクニックについての詳細な解説を行わないという斬新なアプローチをとります。それは、機械学習それ自体に注目が集まりすぎており、機械学習を機能させるために必要不可欠なステップが意識されていないという筆者の問題意識に基づきます。ここで機械学習を機能させるとは、「機械学習の性能(目的関数や評価指標の値)の改善が、実環境で望ましい結果を得ることにつながるための前提が満たされている状況を導くこと」を指します。例えばバイアスの問題に対応するためには、手元のデータがどのような経路をたどって観測されるに至ったかを意識することが重要です。そうすることで、バイアスの存在やその影響に自覚的になることができます。さらに、バイアスによる影響を除去するための方法を自らデザインできるようになります。このように本書では、これまで素通りされてきた機械学習を機能させるための前段階に焦点を当て、機械学習の実践においてたどるべき思考回路を理解・体得することに注力します。「この方法さえ使っておけばとりあえずは大丈夫」といった甘い言葉で読者を安易に単一の方法論に食い付かせることはせず、考え方や取り組み方を説くことに集中します。また実践に活きる実のある能力の養成を目指すため、読者にもある程度の努力と能動的な姿勢を求めます。

もちろん機械学習においていわゆる学習と呼ばれるステップも重要であることに異論はありません。機械学習それ自体の性能がまったく担保されなければ、それに基づくビジネス施策がうまくいくことはないからです。しかし、本書ではおおよそ機械学習という言葉から連想される予測精度を高めるための技術やテクニックにはあえてふれません。理由は大きく2つあります。1つ目の理由は、いわゆる学習と呼ばれる工程は機械学習の実践において下流に位置するステップだからです。より上流に位置する機械学習を機能させるために必要なステップがクリアされていない状態で、機械学習それ自体に関する議論をするのは時期尚早でしょう。まずはどんな問題が訪れようとも、機械学習が機能する状況を自力で整えられるようになることが重要です。2つ目の理由は、機械学習を使って予測精度を追求するためのテクニックに関する話は世の中にありふれていて、わざわざ本書で語る必要がないからです。初手としてどの機械学習アルゴリズムを用いるのが適切か、どんな特徴量エンジニアリングが有効なのか、はたまたハイパーパラメータチューニングにおけるコツなどは、本書の範囲外です。これらの内容に関しては、他の良書を参照するのが良いでしょう。

機械学習の着実な実践のためには、難解な理論や最新の話題を知っていることよりも、どこに落とし穴が潜んでいるのかを理解した上で、機械学習の実践で本来クリアすべきステップに意識を向けることが重要です。それらのステップを臨機応変にクリアできるようになることで、本書では扱いきれない未知の状況にも柔軟に対応できるようになります。華麗なテクニックや最先端の論文を読むと誰でも勉強した気になってしまいがちですが、実践者としては、それらを実務に活かすための術を身に付けていなければ宝の持ち腐れです。このことから本書では、「機械学習を機能させるために必要な手順を理解し、それを臨機応変に使えるようになること」を目指します。特に、臨機応変に使えるようになることが重要です。機械学習の実応用は、サービスや会社ごとに扱っている問題設定や取得できるデータ、収益構造、その他特殊な事情などが入り組んで実に多種多様です。そのような機械学習の実践における背景を前提とすると、「この方法に愚直に従っておけばすべてうまくいく」といった単一の具体的な正解を説くことやそれを求めることには無理があります。場面ごとに適切と思われる機械学習の実践手順は異なり、それはその時々に応じて自分で導出しなければならないのです。よって本書ではまず、機械学習の実践において本来たどるべき手順をまとめたフレームワークを提示します。そしてそのフレームワークが意図するところを理解した上で、それを厳選された問題設定に当てはめながら機械学習の実践においてたどるべき思考の流れを繰り返し体験します。そうすることで、何か1つの正解やテッパンのテクニックを覚えることに終始せず、問題設定に合わせた機械学習の実践手順を自分の意思で臨機応変に導ける状態を目指します。これはとても挑戦的な目標で、著者の知る限りこのような目標を掲げていたり、本書と同様のアプローチをとっている文献は存在しません。しかしこの目標が達成できたとしたら、機械学習の実践において望ましい結果を得やすくなるだけではなく、結果が得られなかった場合の原因分析の見通しも良くなります。また原因分析がしやすくなることで、機械学習に頼ること自体に無理がある状況における引き際の判断も自信を持って下せるようになります。

さらに本書の内容は、これまで界隈で重視されてきた「いかに予測精度を担保するか」という点に加えて、「いかに機械学習が機能する状況を導くか」というデータ分析者としての新たな腕の見せ所を浮かび上がらせます。個々の機械学習エンジニアやデータサイエンティストにとっては、多くの人がすでに着目している予測精度を担保する部分で能力の差別化を図るのは難しい現状にあります。一方で、機械学習が機能する状況を導出するための思考回路を身に付けている人はほとんどいません。よって本書の内容を臨機応変に応用できるレベルでいち早く会得できれば、それは個人の能力の差別化にもつながることでしょう。

本書の構成

本書は、次の5章および演習問題で構成されます。

  • 1章 機械学習実践のためのフレームワーク
  • 2章 機械学習実践のための基礎技術
  • 3章 Explicit Feedbackに基づく推薦システムの構築
  • 4章 Implicit Feedbackに基づくランキングシステムの構築
  • 5章 因果効果を考慮したランキングシステムの構築
  • 付録 演習問題

最も重要なのは1章です。1章では、実応用において機械学習を機能させるためにたどるべき手順をフレームワークとしてまとめています。1章で導入するフレームワークでは、多くの人が無意識にこなしてしまっている上流の手順を明文化しています。まずはこのフレームワークが意図するところを理解し、そこに登場するステップの存在とその重要性を認識することが、その後の実践的な内容に取り組む際の基礎となります。1章の内容を道標に、未知の状況にも自力で柔軟に立ち向かえるようになることが本書の最終目標であり、筆者が伝えたい内容は1章に凝縮していると言えます。1章で本書が基礎として繰り返し用いる中心概念を導入した後、2~5章では厳選した問題設定にフレームワークを適用する流れを体験します。これにより、フレームワークを自在に応用し実践で活かせるようになるための実力を養います。

2章では手始めとして、広告配信の場面を想定したシンプルな問題設定に1章で導入したフレームワークを適用、ビジネス施策につなげる一連の流れを体験します。本書は良い意味でまだ誰も語っていないユニークかつ重要な問題意識に切り込んでいる一方、多くの人の脳裏に焼き付いている典型的な機械学習の実践手順からの少々の飛躍を含みます。よって、多くの人が思い浮かべる機械学習の実践手順に比較的近い設定から始めることで、できるだけスムーズに本書のコンセプトに慣れることがねらいです。2章を皮切りにそれ以降の章では、徐々に独自性の高い内容を扱う構成にまとめています。

3章では、Explicit Feedbackと呼ばれるユーザのアイテムに対する嗜好度合いのデータを用いて、効果的なアイテム推薦を行うための推薦システム構築の場面を扱います。Explicit Feedbackの代表例は、映画や楽曲などに付与されるレーティングデータです。これは、ユーザがアイテムに対して持っている嗜好度合いを自己表明したデータであるため、推薦システムを学習するために非常に有用で正確な情報源です。事実、レーティングデータなどのExplicit Feedbackを活用して、推薦システムを学習するための方法論に関する解説は数多く存在します。しかし既存の文献では、推薦システムの学習の部分のみに焦点が当てられてしまっています。実際は、ユーザやアイテムごとにレーティングデータの観測されやすさにバラツキがあることが知られており、この問題を無視してしまっては、いくら学習の部分を頑張っても望ましい結果を継続的に得ることは難しいのです。3章では本書のフレームワークに基づいて丁寧に手順を進めることで、ユーザの行動パターンに依存して発生する実環境と観測データの乖離を扱う方法を自然に導く流れを体験します。また導出した手順の実装と簡単な性能検証を通じて、必要なステップを無視することで発生する厄介な問題の存在を実証的に確認します。

4章では、Implicit Feedbackと呼ばれるデータの活用を想定した、より現実的な問題設定を扱います。3章で扱うExplicit Feedbackはたしかに推薦システム構築における主要なトピックの1つであるものの、ユーザに嗜好を表明してもらう必要があるため実務では大量に収集できないという難点があります。そこでExplicit Feedbackの代わりに用いられるのが、クリックデータを代表とするImplicit Feedbackです。Implicit Feedbackとは、ユーザが自己表明しているわけではないが、ユーザの嗜好に関する情報を含むと思われる(と分析者が想定している)データの総称です。例えば、クリックデータはユーザが自らの嗜好度合いを表明することで生まれたデータではなく、嗜好に関する情報を含んでいるデータだと分析者が見込んで使っているという意味でImplicit Feedbackに分類されます。Implicit FeedbackはExplicit Feedbackと比較すると大量に入手できるため、頻繁に活用されています。しかし注意しなければならないのは、Implicit FeedbackとExplicit Feedbackは大きく性質の異なる情報であるということです。Implicit Feedbackはユーザが嗜好度合いを自己表明したデータではないため、ユーザの真の嗜好とImplicit Feedbackの間にはどうしても乖離が生じてしまいます。にもかかわらず、現実の推薦システム構築の場面においては、どのような乖離が発生しているかについては目もくれず、Implicit Feedbackをそのまま目的変数として学習に用いてしまう例が散見されます。たしかにImplicit FeedbackとExplicit Feedbackの間に存在する乖離を埋めつつ機械学習の実践を進めるのは、とても難しい問題です。しかしそれは、本書のフレームワークを自在に操れるようになるための格好の練習題材であるとして肯定的に捉えることもできます。4章では、Implicit Feedbackを用いて推薦システムを構築するという自由度が高い問題設定に立ち向かうことで、本書のアプローチにさらに慣れていきます。4章の内容を理解し、それをどう変形すれば自分が取り組んでいる問題設定に応用できるのかを考えられるようになったら、上級者を自負して良いでしょう。

5章では、因果効果を考慮した推薦システム構築という学術研究でもまだあまり扱われていない発展的かつ先端的な話題を扱います。推薦システムの実践でよく発生する悩みに「とある推薦枠の推薦アルゴリズムを刷新した結果、その推薦枠経由のビジネス指標は改善したのだが、プラットフォーム全体についてのビジネス指標にはまったく影響が無かった」というものがあります。ここで「推薦枠経由のビジネス指標」とは、図0.2のように施策で扱っている推薦枠で発生するクリックを経由して観測される売上などのことを指します。一方で、「プラットフォーム全体におけるビジネス指標」とは、図0.3のように推薦枠以外の検索枠やメール配信など、さまざまな経路で観測される売上の合計を指します。本来はプラットフォーム全体についてのビジネス指標を改善することが目標となるはずですが、それが推薦枠経由のビジネス指標と連動してくれないという現象がデータサイエンティストを苦しめるのです。推薦枠経由のビジネス指標は改善できているとするならば、機械学習の性能は悪くないように思えます。にもかかわらず、プラットフォーム全体の指標にはまったく影響がないというのですから何とも厄介です。この類の問題も、機械学習の実践においてクリアすべき上流のステップの存在をすっ飛ばしてしまっていることが原因の1つだと考えられます。しかし、そもそも機械学習の前段階にどのようなステップをこなす必要があるのかを認識していなければ、何が問題なのかすら特定できません。論文などの参考にできる当てがない新規で独特な問題を扱う経験を積んでおくことで、さらなる応用力と自由自在な感覚を養います。

さて5章を読み終える頃には、自分にどれくらいの応用力が身についているのか気になってくることでしょう。そこで、いくつかの演習問題を付録として掲載しています。本書で養った知識や考え方、感覚を駆使して演習問題に取り組むことで、未知で特定の解のない問題に立ち向かう経験を積んでいきましょう。

[ここでちょい出し終わり]

さいごに

最後に少しだけ、執筆全体を通じて感じたことを。

最初安井さんから声をかけていただき、あまり深く考えることなく企画に参加したわけですが、いざ取り組んでみると執筆は思った以上に大変で、正直気分が乗らず「どこかで投げ出したいな」と思っていた期間もありました。また他の何かにかけられたはずの時間を注ぎ込んで(他の活動を一部犠牲にして)執筆していたため、「今の時期にこのようなアウトプットに時間を使っていて良いのだろうか」という不安を持ちながら作業していたこともあります。とまあ何かに追われているとそういうなんとなくの不安を抱きがちなんですが、少し落ち着いてから執筆活動を振り返ってみると、とりあえず無知のまま飛び込んでみて良かったなと思える経験にはなっています。特に、これまで経験したことがなかった新たな活動(書籍の執筆)にちゃんとリソースを割いて取り組んだおかげで、自分の好き嫌いや得意不得意について新たな情報を得ることができた点は今後の活動・意思決定に影響してくるんじゃないかと思います。あとは読者の方々の感想を見聞きして、その答え合わせをするのが今の楽しみです。

補足情報

本書中で用いている実装は以下のリポジトリにまとまっています。

github.com

また以下のサポートページにて正誤表を公開しています。もし何か怪しい点を見つけたらご連絡いただけたら幸いです。

gihyo.jp

今後も更新情報を本ブログやTwitterなどで流すかもしれないので、チェックしておいてもらえたらと思います。