テクニカルな内容はzennに書いていこうと思います。
最初の投稿は臨床診断支援システムの歴史についてです。
https://zenn.dev/ubie_dev/articles/62dcaf309c78b3
テクニカルな内容はzennに書いていこうと思います。
最初の投稿は臨床診断支援システムの歴史についてです。
https://zenn.dev/ubie_dev/articles/62dcaf309c78b3
現実世界にはデータのノイズが大きい場合や環境の変化が激しい場合、目的変数に関係する特徴量が取得できない場合など、データや機械学習を活用すること自体が無謀な状況はいくらでもあります。このような現実において我々が心得ておくべきなのは、機械学習が機能する状況を整えることができなければ、機械学習を活用することが有効な場面であるか否かという情報すら得られないということです。
なお、巷に溢れている特徴量エンジニアリングやハイパーパラメータチューニングもしくは論文で議論されている最先端の深層学習手法などは、基本的に真の性能を経験性能で精度良く近似できるということを(しばしば暗黙の)前提としています。(中略)
おおよそ機械学習という言葉から連想される技術は、機械学習の実践において下流に位置するステップに関するものだったのです。本書の焦点は、施策の性能につながる問題を機械学習に解かせる部分であり、解くべき問題が与えられた状態でその問題をいかにうまく解くかという部分ではありません。効果的な施策につなげるためには、精度追求に関してあれこれ試行錯誤するよりも前に、フレームワークとしてまとめた手順を上から順に漏れなくクリアしておく必要があるのです。
2章は観測データを用いて意思決定の性能を推定する方法について解説しています。私はIPWやDoubly Robust推定量には馴染みがあったのですが「データが観測される確率の逆数をsample weightに仕込めばよい」と単なる暗記に近かった部分がしっかり式で丁寧に説明さていたので助かりました。知りたい真の損失関数と手元のデータを使ったときの損失関数の差を打ち消す手順がわかるので応用が効くようになるでしょう。
3章以降は著者の提案するフレームワークの実践になっています。私は特に5.3章のプラットフォーム全体で観測される目的変数を最大化するが興味深い設定でした。施策を実施したものの他の部分のKPIを悪化させたり、単なる需要の先食いになるのはよく聞く話です。
機械学習の実践に取りくんでおり、特にビジネスKPIの改善に責任を持つ機械学習エンジニア*1にとって頼りになる内容である事は間違いないでしょう。どのような損失関数を採用すべきか正解は無く自分で考えるべきだと、ある所から先は切って捨てている所も好感を持ちました*2。
1章で学習および性能評価がやりやすいデータを意識して普段から集めておく事をさらっと促していますが、意思決定方策のオフライン評価にはとても重要なことがわかります。参考文献に載っていたSpotify Researchの論文*3を読みましたが、オフライン評価のために一様ランダムに行動を選択したログを収集していました。
本書の焦点は機械学習がワークするための前提でしたが、特徴量エンジニアングやハイパーパラメータチューニングの記事と同じぐらいこれらの記事がインターネットに出てきてくれると嬉しいなと感じました。
第2版がでました。
私は7章の「効果検証」と13章の「オンライン広告における機械学習」を執筆しました。12章は書き下し新章です。既に発売からは時間が経っているのでこの2つの章の裏話というか思想について解説します。
PoC貧乏という言葉があるように機械学習を用いてビジネス価値を生む施策は失敗しがちなことが知られてきました。前提として本書はその様な失敗しやすい施策をできるだけ成功に近づけるにはどうしたら良いかを広く扱っています。
予測を当ててどんな価値を生みたいのかを定義しないと開発は始まりません。13章では広告配信事業者の顧客である広告主の効用を選びました。オンライン広告ではオークションによる広告枠の売買が行なわれます。広告主は財の買い手となるので経済学の言葉を使うと広告主の効用は買い手の効用 (buyer's utility) に相当します。広告の場合、他には広告枠の売り手の利益 (seller's profit) や交換によって生まれる価値 (welfare) といった価値を選ぶこともできます。これはどんなビジネスをしているかによって変わるため自らの状況に照しあわせて選択するものです*1。
次に広告主の効用を最大化する行動を取るためにはどうしたら良いかを考えます。広告主の効用は広告枠の買いつけコストと広告を表示する事で得られる価値の差となります。この効用を定式化すると広告を表示した時にポジティブな反応が得られる確率と市場価格の予測が必要なことがわかります。
13章の前半は予測を元に期待効用を最大にする入札金額を数理最適化で求めれば良いという流れにしました。ここは価値を生むための意思決定方策をどう設計していくかの解説になっています。
![]() |
| 308ページ 12.2.2節 より |
7章は効果検証がテーマですが、ここは一貫してlogloss等の予測精度ではなくビジネスインパクトで予測モデルの評価をしようという話です。予測が当たったとき外れたときのビジネスインパクトを金額換算できるか考えてみましょうと。
そしてビジネスインパクトを正しく推定するためにはバイアスを除去した比較が必要であること、サンプルから母集団における効果を推定することでプロダクトへの影響を限定して本番環境で実験できることを統計的仮説検定と因果推論の導入を含めて解説しました。比較が重要なのは機械学習を使わなくとも従来通り人間がやるのと何も変わらなかったりするからです*2。
私が担当した章について思想を含めて紹介しました。いずれのトピックにしても深い所までは解説していないので、必要であれば適宜専門書に進んでもらえればと思います。
関連する書籍として技術評論社から『施策デザインのための機械学習入門』が出たので後ほど紹介記事を書く予定です。序盤から「機械学習を使った施策は予測ではなく意思決定の問題として捉えよう」とあり、他にもなるほどそういう表現があったかと膝を打つ場面が何度もありました。
本を執筆して、どうも自分はソリューション設計に興味があるらしいことがわかったので次はそんな話が書けたらと思っています。現場あるある話として「コンペだと特徴量減らすモチベーションないけど、効くかどうかわからない特徴量もりもりのモデルは推論APIの実装時に自分の首締めることになるよ」とかそういうのも大量にあるんですが。
[1] 広告に限らず売り手と買い手が存在する両面市場においてはこのパターンがはまります。
[2] 人間と同じ性能が出せれば十分なケースもあります。どこまでの性能を求めるかはプロジェクト次第です。
![]() |
| 1章 セレクションバイアスとRCTより |
もし因果推論でビジネスに対する価値を発揮したいのであれば、「正しい情報がビジネスの価値になる」という構造を持っている環境へ移るか、もしくはそのような環境を作ることを強くお勧めします。と記述があります。エンジニアは正に「正しい情報が価値を生む」側でしょう。私の現場では「機能開発すべきかどうかの事前調査」と「リリース後の効果検証」が因果推論が絡むタスクです。事前調査は「変数xがyに寄与しているならxを利用した機能開発を検討する」といった物で、これを見誤ると意味の無い機能を作ってしまいます。
![]() |
| 参考にしている2冊 |
![]() |
| 様子です。 |
![]() |
| 収益予測と広告選択ロジックが実装する範囲 |
グーグルは、その検索アルゴリズムの厳密な細部は公開しない。ランキングを上げようとする連中に悪用されるのを恐れるからだ。同様に、フェイスブックが見出し詐欺の記事を取り締まったとき、ニュースフィードの製品管理担当副社長アダム・モセリはこう書いた。「フェイスブックは見出し詐欺を定義する複数ページにわたるガイドラインを公開したりはしません。というのもその大部分は実際にスパムであり、もし我々がずばり何をどのようにしているか明らかにすれば、リバースエンジニアリングされて、それを回避する方法を見つけられてしまうからです」ネット広告における不正対策に繋がる部分であるが、どの様なふるまいを不正とみなすかは公開する事はやはりできない。利用規約にどこまで詳細に記すか、問いあわせにどこまで答えるかの議論が度々発生するが堂々と非公開にして良いのだ。
検索エンジンやソーシャルメディアで関心を集める必要性は、ニュースメディアの低劣化、偉大な出版物ですらのお手盛り、インチキな論争など、トラフィックを増やす各種技法への堕落をもたらしている。どん底への競争の一部は、ニュース産業の収入が購読料から広告収入に大きくシフトした結果である。辛辣な表現だが事実として受け止めるべきだろう。Webサイトの価値としてPV数と広告のクリック率が通貨さながらの扱いを受けているのは違和感を禁じえない。しかしインターネット広告がある事でそのようなインセンティブを与えてしまっているのだ。今日たまたま学会で聴いた話で、マイクロソフトの検索エンジンの開発者は「ユーザーが得られた情報の量を操作数で割った物」を指標にしているとの事だった。
![]() |
| https://sites.google.com/view/kdd2019-exp-evaluation/ より |

# データ型を変えるとそれぞれのデータサイズがどのくらい変わるか確認する疎行列だとしても非ゼロ要素が112個以上あるから112バイトにはならないし、numpyのIssueを見るとnumpy.arrayは getsizeof での呼び出しをサポートしていない雰囲気がある。手元で実行すると以下の通り。
>>> print('Our pandas Series, in bytes: ', getsizeof(fos_features))
>>> print('Our hashed numpy array, in bytes: ', getsizeof(X_fos))
Our pandas Series, in bytes: 2530632380
Our hashed numpy array, in bytes: 112
型の変更により、データがずっと小さくなったことがわかります。
抜粋:: Alice Zheng “機械学習のための特徴量エンジニアリング”。 iBooks
“[†8] 訳注: 日本にもTedのような人がいます。タカヤナギ=サンです。彼はデータサイエンスの走る百科事典です。そして業界イベントで頻繁に講演をしていて、日本酒や素敵な人が好きです。 彼に日本酒を買って話してかけてみて下さい。後悔しないと思いますが、彼が泥酔している時には後悔するかもしれません。”そして9章のコードを手元のマシンで動かすとメモリが足りなくてJupyter Notebookのカーネルが落ちてしまうため、メモリ増設の機運が高まりました。現在は32GByteのメモリを積んでるのですが、どれだけあれば足りるのだろう……
抜粋:: Alice Zheng “機械学習のための特徴量エンジニアリング”。 iBooks
![]() |
| (a) はGoogleを季節性補正用に残してMSNで出稿を止めている |
![]() |
| テスト開始後はクリックが減るが売上に変化はみられない |
![]() |
| 差の差法を使うとROI推定値の上界と下界共にマイナスに |
IBIS、「最近こんなことを考えていて…」とプロの皆さまに雑に議論を持ちかけるだけでスーパー有益情報がゼロ秒で返ってくる神イベントなので、機械学習のユーザー側の領域に居る各位もどんどん参加すると良いと思います(ダイマ)— Sho Yokoi (@sho_yokoi) November 6, 2018