tag:blogger.com,1999:blog-38092679309702586222024-03-14T17:15:45.699+09:00hagino3000's blogData science in online advertising.hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comBlogger108125tag:blogger.com,1999:blog-3809267930970258622.post-53222573242350057262023-05-16T02:23:00.000+09:002023-05-16T02:23:04.807+09:00zenn.devを使いはじめました<p>テクニカルな内容はzennに書いていこうと思います。</p><p><a href="https://zenn.dev/hagino3000">https://zenn.dev/hagino3000</a></p><p>最初の投稿は臨床診断支援システムの歴史についてです。<br /><a href="https://zenn.dev/ubie_dev/articles/62dcaf309c78b3" target="_blank">https://zenn.dev/ubie_dev/articles/62dcaf309c78b3</a></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p>hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-66375465197026019392021-11-01T08:46:00.005+09:002021-11-01T20:59:39.997+09:00「施策デザインのための機械学習入門」が素晴しい内容だった読んだので感想を書きます。「手元のデータに当てはまりの良い予測モデルを本番適用してもビジネス的に良い結果が得られない」という現場で頻発する課題に対して明快なアプローチと手順を示しており、機械学習がワークするために必要な要素がクリアになりました。<div><br /><div style="margin: 5px;">
<a href="https://www.amazon.co.jp/dp/B09B9H3KLL?_encoding=UTF8&btkr=1&linkCode=li3&tag=assocarea-22&linkId=5d9d81b5abdd383bf0b92148533872b3&language=ja_JP&ref_=as_li_ss_il" target="_blank">
<img align="left" border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B09B9H3KLL&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=assocarea-22&language=ja_JP" style="margin: 0px 10px 0px 0px; padding: 0px;" width="130" />
</a>
<b><a href="https://amzn.to/3Gq3xRF" target="_blank">施策デザインのための機械学習入門〜データ分析技術のビジネス活用における正しい考え方</a></b>
<img alt="" border="0" height="1" src="https://ir-jp.amazon-adsystem.com/e/ir?t=assocarea-22&language=ja_JP&l=li3&o=9&a=B09B9H3KLL" style="border: none; margin: 0px;" width="1" />
<br />
技術評論社 (2021/7/30)<br />
齋藤 優太 (著), 安井 翔太 (著), 株式会社ホクソエム (監修) <br />
Kindle版/紙版両方あり</div>
<br clear="both" />
<h2 style="text-align: left;">目次と構成</h2>
<div><ul style="text-align: left;"><li>はじめに</li><li>1章 機械学習実践のためのフレームワーク</li><li>2章 機械学習実践のための基礎技術</li><li>3章 Explicit Feedbackを用いた推薦システム構築の実践</li><li>4章 Implicit Feedbackを用いた推薦システムの構築</li><li>5章 因果効果を考慮したランキングシステムの構築</li><li>付録A 演習問題</li></ul></div></div><h2 style="text-align: left;">感想</h2><div>著者はまず1章で機械学習の実践でありがちな2つのパターンを批判しています。</div><div>ひとつ目は予測を用いた施策は本来意思決定の問題であるはずなのに、予測の問題として解いてしまうという物。意思決定の性能で評価すべき問題を損失関数最小化の問題として解くことで誤った意思決定を導きます。ふたつ目は過去の施策の影響を受けたデータをナイーブに扱って新たな施策の評価を行なう物で、本来知りたい意思決定の性能の良さが推定できていません。</div><div><br /></div><div>機械学習を用いた施策の開発過程において、意思決定の性能ではなく予測性能を追い求めてしまうのは現場でよくみられる姿なので1章から胃が痛くなります。ほとんどは意思決定の性能が評価できるデータが無いか集められないパターンだとは思いますが「損失が低いのだからビジネス的に良い結果が得られるはずだ」と予測精度のメトリクスの良さとビジネス的な良さを混同してしまう人もいます。これがやっかいなのは本番環境におけるA/Bテストで良い結果が得られなかったときにパラメータチューニングや特徴量エンジニアリングに目を向けてしまい、それ以前の問題である可能性を考えられなくなってしまう事です。AIベンチャーに相談をするとその予測に意味があるのかどうかをすっとばして予測モデルの実装の話が始まってしまうのも似た話でしょうか (私の経験上はそうです)。</div><div><br /></div><div>著者はこの2つの落とし穴に対して解決策となるフレームワークを提示しています。</div><div><ol style="text-align: left;"><li>KPIを設定する</li><li>データの観測構造をモデル化する</li><li>解くべき問題を特定する</li><li>観測データのもを用いて問題を解く方法を考える</li><li>機械学習モデルを学習する</li><li>施策を導入する</li></ol><div>このフレームワークの一連言語化が素晴らしいなと思いました。私は広告分野の人間なので広告分野におけるデータの観測構造由来のバイアスを除去する論文は目にしますが、このフレームワークはあらゆる分野で適用可能な一般化がなされています。</div><div><blockquote><div data-en-clipboard="true" data-pm-slice="1 1 []">現実世界にはデータのノイズが大きい場合や環境の変化が激しい場合、目的変数に関係する特徴量が取得できない場合など、データや機械学習を活用すること自体が無謀な状況はいくらでもあります。このような現実において我々が心得ておくべきなのは、機械学習が機能する状況を整えることができなければ、機械学習を活用することが有効な場面であるか否かという情報すら得られないということです。</div></blockquote></div><div>著者がこの部分に着目する理由も明快で次のように説明されています。</div></div>
<blockquote>なお、巷に溢れている特徴量エンジニアリングやハイパーパラメータチューニングもしくは論文で議論されている最先端の深層学習手法などは、基本的に真の性能を経験性能で精度良く近似できるということを(しばしば暗黙の)前提としています。 <p>(中略) </p><p>おおよそ機械学習という言葉から連想される技術は、機械学習の実践において下流に位置するステップに関するものだったのです。本書の焦点は、施策の性能につながる問題を機械学習に解かせる部分であり、解くべき問題が与えられた状態でその問題をいかにうまく解くかという部分ではありません。効果的な施策につなげるためには、精度追求に関してあれこれ試行錯誤するよりも前に、フレームワークとしてまとめた手順を上から順に漏れなくクリアしておく必要があるのです。</p></blockquote><p> 2章は観測データを用いて意思決定の性能を推定する方法について解説しています。私はIPWやDoubly Robust推定量には馴染みがあったのですが「データが観測される確率の逆数をsample weightに仕込めばよい」と単なる暗記に近かった部分がしっかり式で丁寧に説明さていたので助かりました。知りたい真の損失関数と手元のデータを使ったときの損失関数の差を打ち消す手順がわかるので応用が効くようになるでしょう。</p><p>3章以降は著者の提案するフレームワークの実践になっています。私は特に5.3章の<b>プラットフォーム全体で観測される目的変数を最大化する</b>が興味深い設定でした。施策を実施したものの他の部分のKPIを悪化させたり、単なる需要の先食いになるのはよく聞く話です。</p>
<h2 style="text-align: left;">まとめ</h2><p>機械学習の実践に取りくんでおり、特にビジネスKPIの改善に責任を持つ機械学習エンジニア<sup>*1</sup>にとって頼りになる内容である事は間違いないでしょう。どのような損失関数を採用すべきか正解は無く自分で考えるべきだと、ある所から先は切って捨てている所も好感を持ちました<sup>*2</sup>。</p><p>1章で学習および性能評価がやりやすいデータを意識して普段から集めておく事をさらっと促していますが、意思決定方策のオフライン評価にはとても重要なことがわかります。参考文献に載っていたSpotify Researchの論文<sup>*3</sup>を読みましたが、オフライン評価のために一様ランダムに行動を選択したログを収集していました。</p><p>本書の焦点は機械学習がワークするための前提でしたが、特徴量エンジニアングやハイパーパラメータチューニングの記事と同じぐらいこれらの記事がインターネットに出てきてくれると嬉しいなと感じました。</p><span><a name='more'></a></span><hr /><p>*1: 与えられたデータセットで精度のスコアを上げるだけで良いという職責はあまり聞いたことがありません。</p><p>*2: 損失関数にビジネス設定を反映する話は「仕事ではじめる機械学習 第2版」に少し書きました。</p><p>*3: Mehrotra, Rishabh, et al. "Towards a fair marketplace: Counterfactual evaluation of the trade-off between relevance, fairness & satisfaction in recommendation systems." Proceedings of the 27th acm international conference on information and knowledge management. 2018.</p>hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-8602237472586378092021-08-24T13:41:00.012+09:002021-10-19T16:26:35.727+09:00ビジネス価値を生むことに責任を持つために実践している内容を『仕事ではじめる機械学習 第2版』に書きました<p>第2版がでました。</p>
<div style="margin: 5px;">
<a href="https://www.oreilly.co.jp/books/9784873119472/" target="_blank"><img align="left" border="0" src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-947-2.jpeg" style="margin: 0px 10px 0px 0px; padding: 0px;" width="130" /></a><b><a href="https://www.oreilly.co.jp/books/9784873119472/" target="_blank">仕事ではじめる機械学習 第2版</a></b><br />
オライリー・ジャパン (2021年04月)<br />
有賀 康顕、中山 心太、西林 孝 著 <br />
電子版版/紙版両方あり</div>
<br clear="both" />
<p></p>
<p>私は7章の「効果検証」と13章の「オンライン広告における機械学習」を執筆しました。12章は書き下し新章です。既に発売からは時間が経っているのでこの2つの章の裏話というか思想について解説します。</p><p>PoC貧乏という言葉があるように機械学習を用いてビジネス価値を生む施策は失敗しがちなことが知られてきました。前提として本書はその様な失敗しやすい施策をできるだけ成功に近づけるにはどうしたら良いかを広く扱っています。</p><h3 style="text-align: left;">ビジネス価値を定義する</h3><p>予測を当ててどんな価値を生みたいのかを定義しないと開発は始まりません。13章では広告配信事業者の顧客である<b>広告主の効用</b>を選びました。オンライン広告ではオークションによる広告枠の売買が行なわれます。広告主は財の買い手となるので経済学の言葉を使うと広告主の効用は買い手の効用 (buyer's utility) に相当します。広告の場合、他には広告枠の売り手の利益 (seller's profit) や交換によって生まれる価値 (welfare) といった価値を選ぶこともできます。これはどんなビジネスをしているかによって変わるため自らの状況に照しあわせて選択するものです<sup>*1</sup>。</p><h3 style="text-align: left;">意思決定方策への落しこみ</h3><p>次に広告主の効用を最大化する行動を取るためにはどうしたら良いかを考えます。広告主の効用は広告枠の買いつけコストと広告を表示する事で得られる価値の差となります。この効用を定式化すると広告を表示した時にポジティブな反応が得られる確率と市場価格の予測が必要なことがわかります。</p><p>13章の前半は予測を元に期待効用を最大にする入札金額を数理最適化で求めれば良いという流れにしました。ここは<b>価値を生むための意思決定方策をどう設計していくか</b>の解説になっています。</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-UaXf8Yph9fc/YSRVTqFSKWI/AAAAAAAALEk/IiSZswl5Kw4lANGb7IMH8kE0gfkWk7u5ACLcBGAsYHQ/s1248/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2021-08-24%2B11.11.09.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1008" data-original-width="1248" height="517" src="https://1.bp.blogspot.com/-UaXf8Yph9fc/YSRVTqFSKWI/AAAAAAAALEk/IiSZswl5Kw4lANGb7IMH8kE0gfkWk7u5ACLcBGAsYHQ/w640-h517/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2021-08-24%2B11.11.09.png" title="308ページ" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">308ページ 12.2.2節 より</td></tr></tbody></table><br />明確に定式化できなくとも予測が当たることでビジネス価値が生まれる機序が説明できることが重要だと考えています。<br />
<h3 style="text-align: left;">ビジネス指標を使った予測モデルの評価</h3>
<p>7章は効果検証がテーマですが、ここは一貫して<b>logloss等の予測精度ではなくビジネスインパクトで予測モデルの評価をしよう</b>という話です。予測が当たったとき外れたときのビジネスインパクトを金額換算できるか考えてみましょうと。</p><p>そしてビジネスインパクトを正しく推定するためにはバイアスを除去した比較が必要であること、サンプルから母集団における効果を推定することでプロダクトへの影響を限定して本番環境で実験できることを統計的仮説検定と因果推論の導入を含めて解説しました。比較が重要なのは機械学習を使わなくとも従来通り人間がやるのと何も変わらなかったりするからです<sup>*2</sup>。</p><h3 style="text-align: left;">まとめ</h3><p>私が担当した章について思想を含めて紹介しました。いずれのトピックにしても深い所までは解説していないので、必要であれば適宜専門書に進んでもらえればと思います。</p>
<p>関連する書籍として技術評論社から『<a href="https://gihyo.jp/book/2021/978-4-297-12224-9" target="_blank">施策デザインのための機械学習入門</a>』が出たので後ほど紹介記事を書く予定です。序盤から「機械学習を使った施策は予測ではなく意思決定の問題として捉えよう」とあり、他にもなるほどそういう表現があったかと膝を打つ場面が何度もありました。</p><p>本を執筆して、どうも自分はソリューション設計に興味があるらしいことがわかったので次はそんな話が書けたらと思っています。現場あるある話として「コンペだと特徴量減らすモチベーションないけど、効くかどうかわからない特徴量もりもりのモデルは推論APIの実装時に自分の首締めることになるよ」とかそういうのも大量にあるんですが。</p>
<hr />
<p>[1] 広告に限らず売り手と買い手が存在する両面市場においてはこのパターンがはまります。</p>
<p>[2] 人間と同じ性能が出せれば十分なケースもあります。どこまでの性能を求めるかはプロジェクト次第です。</p>hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-81489774087024609082020-07-03T08:14:00.004+09:002020-07-04T01:22:22.344+09:00Data validation for machine learning 読んだ<span style="background-color: white; color: #4d4d4d; font-size: 16px;">Breck, Eric, et al. "Data validation for machine learning." Conference on Systems and</span><br style="background-color: white; box-sizing: inherit; color: #4d4d4d; font-size: 16px;" /><span style="background-color: white; color: #4d4d4d; font-size: 16px;">Machine Learning (SysML). </span><span style="background-color: white; color: #4d4d4d; font-size: 16px;"><a href="https://mlsys.org/Conferences/2019/doc/2019/167.pdf" target="_blank">https://mlsys.org/Conferences/2019/doc/2019/167.pdf</a> . 2019.</span><br style="background-color: white; box-sizing: inherit; color: #4d4d4d; font-size: 16px;" /><br /><h3 style="text-align: left;">読み手のコンテキスト</h3><div>現職で機械学習予測モデルをプロダクトに投入する様になって3年程経った。そうもなると開発時に想定していた訓練データの分布と現状の分布が乖離して、予測の動作不良を引き起すケースがしばしば見られる様になった。明らかな予測の不具合として目立っていなくとも性能が落ちている部分はもっとあるはずで、これに早く気づいて対応したいモチベーションがある。かつ運用専任メンバーはいないので、できるだけ運用は手を抜きたい。</div><h2 style="text-align: left;">概要</h2><div>著者らはData Validationシステムを開発した。これはGoogleで稼動中のMLプラットフォーム(TFX)にデプロイされており数百のプロダクトで毎日利用されている。論文の構成はData Validationシステムを構成する3つのコンポーネントであるSingle-batch validation・Inter-batch validation・Model testingと、それぞれが解決できるデータの異常パターンと実装した提案手法の解説。最後にGoogleにおける利用状況と実際のサービスにおける検出例 (ケーススタディ) の紹介。</div><h2 style="text-align: left;">新規性および貢献</h2><div><div>MLコンテキストに適用できるData Validationの手法について提案した。</div></div><div><br /></div><div><div>Data Validationはおなじみの概念 (例えば Databaseの分野では) であるが、ML Pipelineの文脈で既存の手法をそのまま適用する事ができない。例えばデータの生成元とMLパイプラインが分離されているので、流れてくるデータを元にschemaを決める事になる。Databaseの世界では先にschemaを決めるので順序が逆。またカイ二乗検定 (chi-square test)の様な手法はMLパイプラインが扱うスケールのデータでは敏感すぎる。よって既存のData Validationを見直してMLコンテキストにマッチする手法を開発した。</div><div><br /></div><div>Data ValidationはTFXの設定に基づいて開発されたが、別のシステムでも利用可能な様に提案手法をOSSライブラリとして実装もした。</div></div><h2 style="text-align: left;">Single-Batch Validation</h2><div>一度の訓練に利用される訓練データのvalidation。人々は訓練データに対してstableであり続ける何らかの特性を期待している。そのためexpert domain knowledgeによって与えられるデータの特性からの乖離を異常とみなす。これを検出するためにスキーマ定義によるvalidationを開発した。</div><div><br /></div><div>例えばあるフィールドの出現しうるカテゴリ値を定義できたりする。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-qz6PHMvThHs/Xv4BtzFywcI/AAAAAAAAA9s/ZO_MrnvJuMIL29mzPkzrhD-aFFyAlzTWwCK4BGAsYHg/s860/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-07-02%2B14.27.40.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="612" data-original-width="860" src="https://1.bp.blogspot.com/-qz6PHMvThHs/Xv4BtzFywcI/AAAAAAAAA9s/ZO_MrnvJuMIL29mzPkzrhD-aFFyAlzTWwCK4BGAsYHg/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-07-02%2B14.27.40.png" width="320" /></a></div><div><br /></div><div>ただしMLモデルは数千の素性を利用するため、人がスキーマ定義をゼロから作るのは現実的ではない。この問題を緩和するのに、スキーマの初期バージョンをデータから作成する機能を用意した。バリデーションエラーとなるデータが見つかった時にはスキーマの変更差分も自動で生成する。</div><div><br /></div><h2 style="text-align: left;">Inter-Batch Validation</h2><div>Concept-Driftの様な一回分の訓練データだけで判断できないタイプのエラーを検出する仕組み。エラーの例として次のパターンを挙げている。</div><div><ul style="text-align: left;"><li>Feature Skew</li><ul><li>例えば訓練時の前処理と推論時の前処理の差から生まれる。訓練時の前処理と推論時の前処理では求められる性能特性が異なるので、別のコードが使われる。そのため、片方だけ修正してしまうといった事が発生する。</li></ul><li>Distribution Skew</li><ul><li>時間経過による分布の変化</li></ul><li>Scoring/Serving Skew</li><ul><li>多く配信された広告データはサンプルが多いが、少なく配信された広告はデータ少ない</li><li>MLシステム自身によって発生させたバイアス</li></ul></ul></div><div>これらのエラーを検知するには各バッチ毎に訓練データセット同士の分布の距離をみれば良い。これは分布間の距離を定量的に求めるメトリクスに依存する。統計的検定やKL-Divergenceは最初の一歩となる、しかし値の解釈や閾値の設定が難しかったりする。統計的検定はサンプルサイズが大きいとsensitiveになりすぎる。よって実際に使っているのは分布pとqの距離を次の式で定義したものである。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-dt7YvFcXFmY/Xv4AYIrI8dI/AAAAAAAAA9I/9ughYvxLndArlCedGA7IQvcAcip_Dyw1wCK4BGAsYHg/s516/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-07-03%2B0.40.22.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="92" data-original-width="516" height="57" src="https://1.bp.blogspot.com/-dt7YvFcXFmY/Xv4AYIrI8dI/AAAAAAAAA9I/9ughYvxLndArlCedGA7IQvcAcip_Dyw1wCK4BGAsYHg/w320-h57/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-07-03%2B0.40.22.png" width="320" /></a></div><div>i は "each value i" とあるから各カテゴリだろうか (自分の理解があやしい)。カテゴリ値ごとの出現率の差なので非常に理解しやすく調整が容易。</div><h2 style="text-align: left;">Model Unit Testing</h2><div><div>例えば前処理で対数変換をしている時、その前処理コードは暗黙的に訓練・予測データに正の値を期待している事になる。よってこの暗黙的な期待が満たされない時にコードはクラッシュしてしまう。推論時にクラッシュしたらサービスに影響が出てしまう。</div><div><br /></div><div>このエラーに気づける仕組みとして前述のスキーマ定義を用いた fuzz testing アプローチを採用した。Single-Batch Validationで作成したスキーマ定義を基にデータを生成して学習コードを実行する。こうする事でスキーマ定義に現われていない暗黙の期待を洗い出す事ができる。(クラッシュしたらわかる)</div></div><h2 style="text-align: left;">Empirical Validation</h2><div>デプロイしたValidationの利用状況。表1がわかりやすかった。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-OTHXTwFhNK4/Xv4CT9GsDLI/AAAAAAAAA-M/BrHN08GQLGMgoovG7l-0RffZqJAd3Su_gCK4BGAsYHg/s1970/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-07-02%2B21.00.04.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1970" data-original-width="1256" height="625" src="https://1.bp.blogspot.com/-OTHXTwFhNK4/Xv4CT9GsDLI/AAAAAAAAA-M/BrHN08GQLGMgoovG7l-0RffZqJAd3Su_gCK4BGAsYHg/w399-h625/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-07-02%2B21.00.04.png" width="399" /></a></div><h2 style="text-align: left;">感想</h2><div>正に自分が直面している課題を解決する内容だったので先人に感謝。</div><div>データエラーの例が生々しくて良かった。思いあたるフシがありすぎて「推論時と訓練時の前処理が別のコードで動いていて片方だけ直してしまうだと……うっ頭が」という状態で読んだ。しかし他の会社でも同じ事が起きているんだなと若干ほっとした。</div><div>次はOSS実装版の<a href="https://www.tensorflow.org/tfx/tutorials/data_validation/tfdv_basic" target="_blank">Tensorflow Data Validation</a>を触ってみようと思います。</div><div><br /></div><div><br /></div>hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-52334763838131110852020-05-05T14:39:00.004+09:002020-07-03T01:17:39.712+09:00『効果検証入門』がアプリケーション開発エンジニアにとって得る物が多い本だった<div dir="ltr" style="text-align: left;" trbidi="on">
読みました。アプリケーション開発エンジニア視点で読んで同僚に勧められる素晴しい内容でした。本稿はエンジニア視点のレビューになります。<br />
<br />
<div style="margin: 5px;">
<a href="https://www.amazon.co.jp/dp/B0834JN23Y/ref=as_li_ss_il?_encoding=UTF8&btkr=1&linkCode=li3&tag=assocarea-22&linkId=c7316440cf6f0aa6d59d7849a3401009&language=ja_JP" target="_blank"><img align="left" border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0834JN23Y&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=assocarea-22&language=ja_JP" style="margin: 0px 10px 0px 0px; padding: 0px;" width="130" /></a><img alt="" border="0" height="1" src="https://ir-jp.amazon-adsystem.com/e/ir?t=assocarea-22&language=ja_JP&l=li3&o=9&a=B0834JN23Y" style="border: none; margin: 0px;" width="1" /><b><a href="https://amzn.to/3c39HaI" target="_blank">効果検証入門〜正しい比較のための因果推論/計量経済学の基礎</a></b><br />
技術評論社 (2019/1/18)<br />
安井 翔太 (著), 株式会社ホクソエム (監修) <br />
Kindle版/紙版両方あり</div>
<br clear="both" />
<h2 style="text-align: left;">
目次と構成</h2>
<div>
序 嘘っぱちの効果とそれを見抜けないデータ分析</div>
<div>
1章 セレクションバイアスとRCT</div>
<div>
2章 介入効果を測るための回帰分析</div>
<div>
3章 傾向スコアを用いた分析</div>
<div>
4章 差分の差分法(DID)とCausalImpact</div>
<div>
5章 回帰不連続デザイン(RDD)</div>
<div>
付録 RとRStudioの基礎<br />
終 因果推論をビジネスにするために</div>
<div>
<br /></div>
<div>
まず効果検証とは何かという導入と共にビジネスの現場でありがちな誤りのある検証について解説があります。この誤りの原因となるセレクションバイアスと理想的な比較方法であるランダム化比較試験が1章です。以後の章はランダム化比較試験ができない状況において効果検証にどう取り組むか主要なアプローチ毎の手法の解説と実践例があります。<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-6N2h2_Vh9sI/XrD7YNPDYWI/AAAAAAAAA58/WI__MQNpMJMAZFLZj36wroWAFP2sb-zFQCLcBGAsYHQ/s1600/IMG_1093.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="883" data-original-width="1600" height="220" src="https://1.bp.blogspot.com/-6N2h2_Vh9sI/XrD7YNPDYWI/AAAAAAAAA58/WI__MQNpMJMAZFLZj36wroWAFP2sb-zFQCLcBGAsYHQ/s400/IMG_1093.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">1章 セレクションバイアスとRCTより</td></tr>
</tbody></table>
<br />
想定読者は「効果検証を行なう必要のあるエンジニアやデータサイエンティスト」となっているのでバリバリ手を動かしてコードが書ける人が対象なのでしょう。文中の操作は全てRのコードが付いています。私はRがわからないのでPythonで再実装しつつ読み進めました。</div>
<h2 style="text-align: left;">
どんな視点で読んだか</h2>
<div>
まず私はプロダクト開発エンジニアで、説明のためのモデルよりも予測のためのモデルを作る事が多く、Rはほぼ使った事がなく普段はPythonを書く人間です。機能リリース後の効果検証は解釈の容易さから主にランダム化比較試験を採用しますが、稀に適切なランダム割り当てができないケースで観察研究に頼る事があります。<br />
<h2 style="text-align: left;">
良かった点</h2>
<h3 style="text-align: left;">
予測のためのモデル(機械学習)に慣れ親しんだ人間が持つ疑問に答えている</h3>
<div>
機械学習エンジニアは因果推論・計量経済学で用いられる線形回帰モデルよりも予測と汎化性能を重視したより複雑なモデルを扱います。なので当然「クロスバリデーションしなくていいのか?」とか「対数変換やスケーリングした方が精度が出るのでは?」と思うわけです。この様な予測をメインにしている人が効果検証における線形回帰モデルを見た時の違和感の解説が2章の終りにあります。</div>
<h3 style="text-align: left;">
正しい比較が何の役に立つのか言及している</h3>
正確な効果検証が価値を生むビジネスケースとそうでないケースが挙げられています。因果推論で価値を生めるかどうかはビジネスの構造に依存するというのは実務者が持っておいて損がない心構えでしょう。最終章に<br />
<blockquote class="tr_bq">
もし因果推論でビジネスに対する価値を発揮したいのであれば、「正しい情報がビジネスの価値になる」という構造を持っている環境へ移るか、もしくはそのような環境を作ることを強くお勧めします。</blockquote>
と記述があります。エンジニアは正に「正しい情報が価値を生む」側でしょう。私の現場では「機能開発すべきかどうかの事前調査」と「リリース後の効果検証」が因果推論が絡むタスクです。事前調査は「変数<span style="font-family: georgia, "times new roman", serif;"><i>x</i></span>が<span style="font-family: georgia, "times new roman", serif;"><i>y</i></span>に寄与しているなら<span style="font-family: georgia, "times new roman", serif;"><i>x</i></span>を利用した機能開発を検討する」といった物で、これを見誤ると意味の無い機能を作ってしまいます。<br />
<h3 style="text-align: left;">
説明モデルの作り方の参考としても若手に勧められる</h3>
新卒エンジニアが部署に配属される時期ですが、エンジニアはコンピューターサイエンス・機械学習よりのスキルを持つ事が多く。極端な例では「ディープラーニングは判るけど一般化線形モデルは知らない」といった事もあります。ただ実務では効果検証のために線形モデルを利用する事はあるので線形モデルの応用や説明モデルの作り方といった計量経済学寄りの知識も持って欲しい訳です。現場のエンジニアに計量経済学の入口として渡すのもアリかなと思いました。<br />
<h3 style="text-align: left;">
分析コードの難しさがわかる</h3>
<div>
私は書籍中のR実装をPythonで書き直しながら読み進めましたが、OLSで線形モデルをフィットして係数を求める所までは簡単に再現ができましたが。そこから先のマッチングやIPWとなると途端に同じ結果を出すのが難しくなりました。本の結果という正解がある状況なので自分の仕込んだバグに気づけましたが、正解が無い状況ではコードがバグっているのか仮説が間違っていて期待通りの結果にならなかったのか見極めが非常に難しい事に気づかされます。バグが無くとも利用するライブラリを変えるとまた結果が変わります。</div>
<div>
<br /></div>
<div>
ただ「傾向スコアマッチングをした時には共変量のバランスを確認する」等の因果推論の手法が機能しているかどうかの確認ポイントと前提とする仮定がしっかり解説されており、各手法は知っていても実際に手を動かした事がない人のガイドになる内容になっています。</div>
<h2 style="text-align: left;">
疑問が残った点</h2>
対数を用いた回帰分析 (2.4.3節) で、目的変数の対数を取った時の係数βが 0.1であれば10%引き上げると解釈できるとあったので手元で実験してみたが上手くいかなかった。xが1増える毎にyが倍(100%増)になるようなデータで係数βを求めても1にならないので、βが小さい時のみこの解釈ができる等の制約がありそう。<b>この現象について教えて頂いたので最後に追記ました。</b><br />
<br />
標準化平均差(Average Standardized Absolute Mean distance: ASAM)の定義がわからなかった。本文では「平均の差をその標準誤差で割った値」とあるが、標準誤差はサンプルサイズが増えた時にゼロに近づくのでASAMが発散してしまう気がした。ASAMを利用している論文はいくつも見つかるが定義そのものの数式がなかなか見つからない。平均の差を全標本の標準偏差で割った値が正解?<br />
<br />
本だけでわからなかった点ですが、formula定義に出てくる <span style="font-family: "courier new", courier, monospace;">I(re74^2)</span> の<span style="font-family: "courier new", courier, monospace;"> I() </span>が何かわからなかったのでRのドキュメントを調べました。混乱を避けるためのただの括弧みたいですね。<br />
<h2 style="text-align: left;">
まとめ</h2>
以前からお世話になっている安井さんが実務者向けの因果推論の本を上梓されたとの事で非常に興味があったのですが、期待を裏切らない内容でした。安井さんは5年程前に予測性能に重きを置く機械学習と説明に重きを置くための因果推論・計量経済学の違いを教えてくれた方であり、それで自分の視野が一気に広がった経緯があります。なので若干バイアスのかかったレビューになっている事はご容赦ください。<br />
<br />
因果推論は以前から興味があったもののRCT以外はほぼ使った事がなかったので、実務で利用する際の手順や注意点は非常に参考になりました。あとRが凄いので分析業務は素直にRを使おうという気持ちになりました。</div><div><br /></div><h2 style="text-align: left;">追記</h2><div>係数を解釈する時に利用している近似はマクローリン展開だから、ゼロから離れると二次以降の項が無視できなくなってズレが大きくなると教えてもらいました。プロットするとこうなります。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-quyQsv7NBd0/XrUxYuNvXvI/AAAAAAAAA6k/gm40QbWqqigtQh_vX0KK5CKHxmak5KkoACK4BGAsYHg/EXPeiZSUwAA7O0_.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1232" data-original-width="1198" height="640" src="https://1.bp.blogspot.com/-quyQsv7NBd0/XrUxYuNvXvI/AAAAAAAAA6k/gm40QbWqqigtQh_vX0KK5CKHxmak5KkoACK4BGAsYHg/w622-h640/EXPeiZSUwAA7O0_.jpeg" width="622" /></a></div><div><br /></div>
</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-17712412795975227592020-03-01T03:35:00.003+09:002020-07-03T01:19:13.672+09:00ウィルス感染検査とFalse-Positive Paradox<div dir="ltr" style="text-align: left;" trbidi="on">
最近のニュースでウィルス感染症の検査と聞いてまっさきに思い浮かんだのが、母集団の感染率より検査の偽陽性確率が高い時に人間の直感から離れた結果になるパラドックスの話。統計学の教科書にも練習問題として出てくる印象があります。<br />
<div class="separator" style="display: none;">
<!--ogg image-->
<img border="0" data-original-height="324" data-original-width="700" height="148" src="https://1.bp.blogspot.com/-o37tDjnoEH8/XlshF6fRVcI/AAAAAAAAA38/s5tPfA-6ztYDu0PTxqNMiH3KBy5XnmH3ACLcBGAsYHQ/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-03-01%2B11.41.56.png" width="320" />
</div>
<h2 style="text-align: left;">
問題</h2>
ウィルス感染検査で陽性となった時に被験者が感染している確率を求めよ。<br />
<br />
母集団の感染率は0.1%。検査の性能は感度99%・特異度99%、つまり感染している人は99%の確率で陽性となり、感染していない人は99%の確率で陰性となるものとする。<br />
<h2 style="text-align: left;">
計算</h2>
<ul style="text-align: left;">
<li>感染しているか否かを y ∈ {0, 1}</li>
<li>検査結果を x ∈ {0, 1} で陽性が1とする</li>
</ul>
ベイズの定理<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-cFxyTJB-8Ck/Xlsd0WoxsdI/AAAAAAAAA3Y/JdUoxxC8XNc4gTdxKW-G3DD13q-fm9LOACLcBGAsYHQ/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-03-01%2B2.39.33.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="124" data-original-width="360" height="67" src="https://1.bp.blogspot.com/-cFxyTJB-8Ck/Xlsd0WoxsdI/AAAAAAAAA3Y/JdUoxxC8XNc4gTdxKW-G3DD13q-fm9LOACLcBGAsYHQ/s200/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-03-01%2B2.39.33.png" width="200" /></a></div>
より、検査結果が陽性だった時に感染している確率は<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-M2GHPEvkin4/Xlsd4PysCDI/AAAAAAAAA3c/ekCPeP59dQ0S9yCqa3fC_51tX7Xhq6mWgCLcBGAsYHQ/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-03-01%2B2.39.40.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="122" data-original-width="670" height="72" src="https://1.bp.blogspot.com/-M2GHPEvkin4/Xlsd4PysCDI/AAAAAAAAA3c/ekCPeP59dQ0S9yCqa3fC_51tX7Xhq6mWgCLcBGAsYHQ/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2020-03-01%2B2.39.40.png" width="400" /></a></div>
ここで<br />
<ul style="text-align: left;">
<li>P[y = 1] = 0.001</li>
<ul>
<li>感染率</li>
</ul>
<li>P[x = 1|y = 1] = 0.99</li>
<ul>
<li>感度</li>
</ul>
<li>P[x = 1} = 0.001 * 0.99 + (1 - 0.99)(1 - 0.001)</li>
<ul>
<li>真陽性率 + 偽陽性率</li>
</ul>
</ul>
<div>
であるから、検査で陽性が出た時に感染している確率 P[y = 1 | x = 1] = 9% となる。<br />
<h2 style="text-align: left;">
メモ</h2>
元々の発生確率が低い場合、人間の直感に反して検査精度よりも小さな値となるため検査結果の解釈は慎重を要する。これは1%の偽陽性によって陽性判定数が増えるからである。健康診断で「要精密検査」という結果が出たが、精密検査の結果何も異常が見つからないケースが同じ。だれもが偽陽性を考慮して結果の解釈ができるわけではないので、例の様な状況において手当たり次第検査を受けさせると混乱が広がる事も想像できる。<br />
<br />
文献[1]はFalse-Positive Paradoxにより自動判定を共なうテロリスト検出システムは無実の人々を分析するのに費やされるコストが増える事を指摘している。文献[2]には近い例がいくつか載っている。<br />
<br />
おかしな所があったら教えてください。<br />
<h2 style="text-align: left;">
参考文献</h2>
[1] Parra-Arnau, Javier, and Claude Castelluccia. "Dataveillance and the False-Positive Paradox." (2018). <a href="https://pdfs.semanticscholar.org/00af/50c635aeebd651d52c5c5e9633201988ee8f.pdf">https://pdfs.semanticscholar.org/00af/50c635aeebd651d52c5c5e9633201988ee8f.pdf</a><br />
<br />
[2] Wikipedia contributors. (2020, February 17). Base rate fallacy. In Wikipedia, The Free Encyclopedia. Retrieved 02:33, March 1, 2020, from <a href="https://en.wikipedia.org/w/index.php?title=Base_rate_fallacy&oldid=941255359">https://en.wikipedia.org/w/index.php?title=Base_rate_fallacy&oldid=941255359</a></div>
</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-7761823771911640202019-12-18T19:30:00.002+09:002020-07-03T01:19:57.324+09:00JAZZとコントラバスが少しだけわかってきた<div dir="ltr" style="text-align: left;" trbidi="on">
こんにちはhagino3000です。この記事は<a href="https://adventar.org/calendars/3896" target="_blank">pyspa Advent Calendar 2019</a>の17日目です。<br />
<br />
今年は新しい挑戦としてコントラバスとJAZZを始めました。コントラバスはオーケストラの右端で弾かれる大きな楽器です、和製英語でウッドベースと呼ばれたりもします。JAZZは全く聴いてこなかったので完全に未知の領域です。この分野は素人なのです、本当に。<br />
<br />
普段は職場でゲーム音楽のバンドアンサンブルを演っているのですが、<a href="https://www.youtube.com/watch?v=9QK7vpYgRKQ" target="_blank">Super Mario Odyssayの都市の国のテーマ</a>のウォーキングベースを弾きたくなったのがきっかけでした。新しい楽器を始めるのは20年ぶりなのもあり、練習や普段の取り組み方について改めて考え直しました。ソフトウェアエンジニアとしての訓練方法と似た部分もあり、多くの気付きがありました。<br />
<h2 style="text-align: left;">
楽器スクールに通う</h2>
ビギナー段階において人から習う事の効率の良さは業務で身に染みています。自宅の近所にコントラバスでJAZZが習えるスクールがあったので決めました。レッスンでは課題曲のベースフレーズ作成が宿題として出されて、対面レッスンでそれを弾いてフレーズ及び演奏について指導を受けています。枯葉やBlue Bossaといった曲からスタートしました。<br />
<br />
ソロフレーズ作成は自由度が高いので、左手のポジション範囲とピッチの制約が課されると捗ります。オルタードテンション(♭9, #9, #11, ♭13)も最初は無しでコードトーンのみで作りました。やはり自由度の高いタスクは難しいです。<br />
<br />
スクールは常にコンフォートゾーンの外側になるような負荷が与えられる所が気にいっています。<br />
<h2 style="text-align: left;">
JAZZが少しだけわかった</h2>
今までは「楽譜を暗譜してその通りに弾く」もしくは「楽譜を見ながらそのまま弾く」だったのが、他のパートと合わせた時にどちらも上手くいきません。正解は「コード進行を覚えてアドリブで弾く」なのでしょう。フレーズ作成とは別にコード進行だけ見て弾く練習もやるようにしました。<a href="https://apps.apple.com/jp/app/ireal-pro/id298206806" target="_blank">iReal Pro</a>が非常に便利です。<br />
<br />
レッスンでは一音一音「何故ここでこの音を選んだのか、どの音に向かっているのか」と質問されるので、自分が何の音を弾いているのか意識するようになりました。ただ、進行上は使える筈の#11thが自分の耳には外して聴こえたりするので理論と感覚の乖離がまだあるなと。<br />
<br />
レッスン課題曲について様々な人の演奏を聴くように指導されるのでYouTubeとSpotifyをヘビーに使っています。スタンダードナンバーは多くの人にカバーされているから聴き比べが面白い。JAZZのプレイヤーに関する知識ゼロでしたがMichel Camiloのパーカッションとの絡み方やEddie Higginsのキャッチーさに惹かれています。難しいのはMiles Davisです、原曲成分が全く聴きとれなかったりする。やっぱりJAZZはわからない。<br />
<br />
多くのプレイヤーの演奏を聴く事に関しては<a href="https://ymotongpoo.hatenablog.com/" target="_blank">ymotongpoo</a>氏がSlack channelに延々と貼り続けてくれた事もあり非常に助かりました。<br />
<h2 style="text-align: left;">
ブルースそしてBack to the Future</h2>
JAZZはブルースの影響を受けているのでブルースも練習しました。3コードのブルース進行。好きな映画で言うとバック・トゥ・ザ・フューチャー1でマーティが「This is a blues riff in 'B', watch me for the changes, and try and keep up, okay?」と指示するだけでバンドがチャックベリーのJohnny B. Goodeを演れてしまうシーンがあるのですが、謎が解けました。確かにコードは3つ、I・IV・Vしか使わないから弾けるんですね。<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/S1i5coU-0_Q" style="display: block; margin: auto;" width="480"></iframe>
<br />
<h2 style="text-align: left;">
練習のスタイルを変えた</h2>
学生時代とは違ってがむしゃらに長時間練習する事が不可能になりました。自分が練習するだけでなく自分の子供の指導をする立場にもなったので効率の良い練習方法を知る必要が出てきました。ソフトウェアエンジニアに「達人プログラマー」や「エンジニアの知的生産術」といった本がある様に、演奏家向けにも同様の文献が存在します。「成功する音楽家の新習慣」という本が日々の練習方法にはじまり、本番への望み方、肉体の故障を防ぐ方法まで幅広いトピックを扱っています。<br />
<div class="link">
【ヤマハ】 成功する音楽家の新習慣 練習・本番・身体の戦略的ガイド - 書籍 読み物 | ヤマハミュージックメディア<br />
<a href="https://www.ymm.co.jp/p/detail.php?code=GTB01094337" target="_blank">https://www.ymm.co.jp/p/detail.php?code=GTB01094337</a></div>
ここから実践しているのが「細かく規則正しく練習する」事です。ランチの予定が無い日は昼休みに職場の楽器エリアで練習しています。<br />
<br />
教本は「シマンドル」長く参照されているクラシックな物を選びました。アルコ(弓弾き)前提の本ですが、ピチカート(指弾き)でも譜面は再現できます。好みの問題でしょうが、技術書の選び方に通じる物があります。<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-zBB6EJGF3nE/Xfn4OxMTSSI/AAAAAAAAA1M/UwPWJXS8vfYNC9M4wgEcgJOSC9UUye8uQCLcBGAsYHQ/s1600/Image%2Bfrom%2BiOS.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://1.bp.blogspot.com/-zBB6EJGF3nE/Xfn4OxMTSSI/AAAAAAAAA1M/UwPWJXS8vfYNC9M4wgEcgJOSC9UUye8uQCLcBGAsYHQ/s400/Image%2Bfrom%2BiOS.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">参考にしている2冊</td></tr>
</tbody></table>
<br />
<h2 style="text-align: left;">
テクノロジーの進歩を享受する</h2>
フレーズ作成の際にコード進行はiReal Proで即座に参照できるし、ソロフレーズであれば例えば「2-5-1リック」でGoogle検索すると参考になる定番フレーズが山の様にヒットします。<a href="https://yousician.com/bass" target="_blank">YousicianのBassコース</a>は音ゲーの様に五線譜が流れてくるので譜読みの練習ができます。知の高速道路が整備されている事を改めて実感しました。<br />
<br />
楽譜と音源作成には<a href="https://musescore.org/ja" target="_blank">musescore</a>を使っています。musescoreはスタンダードナンバーであれば公開されたスコアが大抵見つかるので、それを元に編集するとベースフレーズ打ちこみ用スコアがさくっと作れます。<br />
<div>
<br />
自宅練習時の床の振動防止はロードバイクのローラー台用の防振材を流用しています。コントラバスは床に突き刺して部屋を鳴らす楽器なのでサイレント楽器といえども床が振動して他の部屋に音が伝わるからです。練習後の筋肉のケアにはマッサージガン。腕が故障すると年単位で動かせなくなるのが人生経験としてあるので入念に。使える物はとにかく使っていくスタイル。<br />
<h2 style="text-align: left;">
まとめ</h2>
未知のジャンルに触れる事で音楽の幅を広げる良い機会となりました。あとは練習あるのみ。社外の演奏会にも出ていけると良いですね。</div>
<br /></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-17028716296641056912019-12-15T01:07:00.001+09:002020-07-03T01:20:29.460+09:00AtCoderはじめました<div dir="ltr" style="text-align: left;" trbidi="on">
AtCoderというか蟻本の輪読会が社内で始まったのでこっそり若者に混じっている。<br />
<h2 style="text-align: left;">
モチベーション</h2>
グラフアルゴリズムの概観とその実装の感覚を叩きこんでおきたいのがある。最近はGraph Embedding等のグラフを用いた手法によく出会うが自分の中に基礎が無いのでなかなか理解できた気にならない。自分のブログを漁ると10年前に最短経路問題をJavaScriptで解いているので、その手の活動を再開したとも言える。<br />
<h2 style="text-align: left;">
進捗</h2>
以下のページを参考に、本の内容に対応するAtCoderの問題を解きつつ
<br />
<div class="link">
AtCoder 版!蟻本 (初級編)<br />
<a href="https://qiita.com/drken/items/e77685614f3c6bf86f44">https://qiita.com/drken/items/e77685614f3c6bf86f44</a>
</div>
<br />
まずはAtCoder過去問の4つをSubmit<br />
<br />
<ul style="text-align: left;">
<li>ARC029A - 高橋君とお肉</li>
<ul>
<li><a href="https://arc029.contest.atcoder.jp/submissions/8853102">https://arc029.contest.atcoder.jp/submissions/8853102</a></li>
</ul>
<li>ABC022D - 派閥</li>
<ul>
<li><a href="https://abc002.contest.atcoder.jp/submissions/8914873">https://abc002.contest.atcoder.jp/submissions/8914873</a></li>
</ul>
<li>ATC001A - 深さ優先探索</li>
<ul>
<li><a href="https://atcoder.jp/contests/atc001/submissions/8954320">https://atcoder.jp/contests/atc001/submissions/8954320</a></li>
</ul>
<li>ARC031B - 埋め立て</li>
<ul>
<li><a href="https://atcoder.jp/contests/arc031/submissions/8957196">https://atcoder.jp/contests/arc031/submissions/8957196</a></li>
</ul>
</ul>
<br />
テストコードが書けないコードは許しがたいのでclassにしてあるが、書いている内に depth_first_search は dfs と書きたくなるし <span style="font-family: "courier new", courier, monospace;"><b style="background-color: #eeeeee;">if __name__ == "__main__":</b></span> のお決まりの一文すら書くのが面倒くさくなってきた。人間は変わってしまうのか。<br />
<br />
現状苦痛なのはコードを提出した後にRuntime Errorという結果だけが得られて、その時の入力が何だったかわからない点。仕事なら「ログを仕込んで次回に備えよう」となるがそうはいかない。比較的新しいコンテストは入力が<a href="https://atcoder.jp/posts/20" target="_blank">Dropboxに置いてあって</a>安心した。<br />
<br />
書いたコードを残すGitHubリポジトリ<br />
<a href="https://github.com/hagino3000/study-programming-contest-challenge-book">https://github.com/hagino3000/study-programming-contest-challenge-book</a><br />
進捗メモ<br />
<a href="https://scrapbox.io/tnishibayashi/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%B3%E3%83%B3%E3%83%86%E3%82%B9%E3%83%88%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%83%96%E3%83%83%E3%82%AF%E7%AC%AC2%E7%89%88">https://scrapbox.io/tnishibayashi/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%B3%E3%83%B3%E3%83%86%E3%82%B9%E3%83%88%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%83%96%E3%83%83%E3%82%AF%E7%AC%AC2%E7%89%88</a></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-28079457586692991742019-12-01T00:09:00.001+09:002020-07-03T01:20:51.610+09:00IBIS2019でポスター発表しました<div dir="ltr" style="text-align: left;" trbidi="on">
IBISは機械学習の研究会です。今年は11月20〜23日の名古屋開催でした。<br />
<div class="link">
第22回情報論的学習理論ワークショップ (IBIS 2019)<br />
<a href="http://ibisml.org/ibis2019/" target="_blank">http://ibisml.org/ibis2019/</a>
</div>
今回はポスター発表にアドネットワークのクリック単価決定方策を持っていきました。プロダクト開発が本業なので外部発表や論文を書く事はメインタスクでは無いのですが、実験の過程で得られた結果など発表できる物は外に出していきたいです。バンディットアルゴリズムのポスター発表も数件あり、オンライン意思決定の方策に詳しい先生方の意見が得られる貴重な機会でもあります。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-NwdsMODBu6M/Xe5iLqM2S2I/AAAAAAAAA0s/hHjO_vX-VFk7ocdNnAgOazFNmU7ieKS5gCLcBGAsYHQ/s1600/ibis_poster.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1226" data-original-width="1600" height="306" src="https://1.bp.blogspot.com/-NwdsMODBu6M/Xe5iLqM2S2I/AAAAAAAAA0s/hHjO_vX-VFk7ocdNnAgOazFNmU7ieKS5gCLcBGAsYHQ/s400/ibis_poster.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">様子です。</td></tr>
</tbody></table>
<h2 style="text-align: left;">
その他講演メモ</h2>
<ul style="text-align: left;">
<li>グラフ文法を用いたグラフ生成</li>
<ul>
<li>分子グラフ、例えばH20だと(H⇔O⇔H) を学習したい</li>
<li>安定性などの制約を満たすグラフを生成したい</li>
<ul>
<li>ハード制約とソフト制約の組みあわせ</li>
</ul>
<li>大学でやったタンパク質の構造解析を思い出しつつ聞いた</li>
<li>形式言語で記述してグラフにして学習という流れが面白い</li>
</ul>
<li>回帰による再帰型ニューラルネットワークからの重み付きオートマトンの抽出</li>
<ul>
<li>RNNの動作を再現するWeighted Finite Automataを抽出する研究があるとのこと</li>
<li>重み付き有限オートマトンに置換すると推論の計算コストが低くてふるまいが明快になるメリットがある</li>
<li>ネット広告分野だと「RNNでコンバージョン予測モデル作った」という報告は多々あるものの、何をどう学習したかわからないし説明性厳しいでしょと思っていたので興味をそそる内容だった</li>
<li>しかし重み付き有限オートマトンを知らなかったので後で調べた</li>
<ul>
<li><a href="https://www.jstage.jst.go.jp/article/jssst/34/3/34_3_3/_pdf" target="_blank">オートマトン理論再考 - J-Stage</a></li>
</ul>
</ul>
<li>隣接代数と双対平坦構造を用いた学習</li>
<ul>
<li>難しかったがIBISではよくあること</li>
</ul>
<li>Data-Efficient Reinforcement Learning of Mechanical Control Systems</li>
<ul>
<li>強化学習</li>
<li>不確実性の予測を使って学習すると上手くいく</li>
<li>ガウシンアンプロセスだから計算コストすごい高いはずだけど、少ない試行回数の間に学習できてしまえば勝ちっぽい</li>
<li>ニューラルネットはregressionに向いてないと考えてるとの事</li>
</ul>
<li>Problems with CNNs by Hinton先生</li>
<ul>
<li>「CNN is bad」</li>
<li>CNNは人間の様に学習していないからadversarial examplesの問題がある</li>
<li>何が写っているか考慮しない、背景を学習してしまっていたりする</li>
<li>心理学的なアプローチ</li>
<ul>
<li>図形を表現する時はスケーリングされるし、共通のメンタルモデルがある</li>
<li>三角形や四角形という基本図形の組合せで認識する</li>
</ul>
<li>Cupsules (2019)</li>
<ul>
<li>Capsules for triangles, and squares 星座っぽい所が検出できる</li>
<li>星座生成モデルとか</li>
</ul>
<li>人間が物をどうやって見ているか、という観点を使って学習するといいよという話で面白かった</li>
</ul>
<li>サンプリングによるデータ駆動科学</li>
<ul>
<li>根源的な構造はわからなくてもいい、機能を獲得したい</li>
<ul>
<li>工学的なアプローチだなー</li>
</ul>
</ul>
<li>データ駆動科学の立場からみた物質科学と情報科学の接点</li>
<ul>
<li>材料科学 → XXに使える材料が無いか追求する</li>
<li>物質科学 → なぜXは透明なのか理屈を追求する</li>
<li>初日の有機化学とはがらりと変わって無機科学。グラフでは無く原子の繰り返し構造に</li>
<li>繰り返しパターン中の原子の位置を文字列で表現してパターンマッチ</li>
</ul>
<li>機械学習に対するソフトウェア工学の技術動向</li>
<ul>
<li>中の人としてプロダクト開発をしている身からすると契約してPoCやって検収・納品というのを見るとすごい大変に見える</li>
</ul>
<li>機械学習と知財・契約</li>
<ul>
<li>外部ベンダーにプロダクトの一部を開発してもらうとしたらどう落し所をつけるか、みたいな事はしばしば考えるのでとても参考になった</li>
<li>完成した成果物を、契約当事者双方がどうのように使えるかを「開発+利用規約」において定めるこのが非常に重要</li>
<li>物体ではない(コピー可能)ので権利帰属よりもどう使うか</li>
<li>知財権を共有にして、利用条件を決めずに進めるのは危険</li>
<li><a href="http://ibisml.org/ibis2019/files/2019/12/slide_kakinuma.pdf">http://ibisml.org/ibis2019/files/2019/12/slide_kakinuma.pdf</a></li>
</ul>
<li>継続的改善をし続けるための機械学習基盤の課題</li>
<ul>
<li>MLflow trackingよさそうだった</li>
</ul>
<li>日本におけるデータサイエンスの現状と今後</li>
<ul>
<li>滋賀大学データサイエンス学部</li>
<ul>
<li>日本に統計学部が無いから作った</li>
<li>名前はあれだけど統計学に重点を追いたカリキュラムで自分が入学したい</li>
</ul>
<li>データからの価値創造の流れ</li>
<ul>
<li>課題が先にあって必要なデータを収集するのが基本</li>
<li>データが手元にあってそこから新たな知見をさがすのも有用になりつつある</li>
</ul>
<ul>
</ul>
<li>竹村先生が本当にすごい人だった、尊敬する</li>
</ul>
</ul>
<br />
あとはインターネットの方々が詳細な聴講メモを残してくださったのでありがたく拝見しています。<br />
<div class="link">
IBIS2019参加記録 | カイヤン雑記帳<br />
<a href="http://chijan.hatenablog.jp/entry/ibis2019" target="_blank">http://chijan.hatenablog.jp/entry/ibis2019</a>
</div>
<div class="link">
IBIS2019行った | 糞糞糞ネット弁慶<br />
<a href="https://repose.hatenadiary.jp/entry/2019/11/27/083823" target="_blank">https://repose.hatenadiary.jp/entry/2019/11/27/083823</a>
</div>
<br />
<br /></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-85774114760967570512019-10-07T03:34:00.001+09:002020-07-03T01:22:40.974+09:00データ分析系3daysインターンシッププログラムで伝えたかったこと<div dir="ltr" style="text-align: left;" trbidi="on">
<!--?xml version="1.0" encoding="UTF-8"?-->
担当した3daysインターンシッププログラムが無事に終ったので、自分が何を考えていたかをまとめます。いわゆる「機械学習エンジニア」向けのインターンです。<br />
<br />
<a href="https://voyagegroup.com/internship/adventure/" target="_blank">https://voyagegroup.com/internship/adventure/</a><br />
<h2 style="text-align: left;">
背景</h2>
期間3日でやりたいと打診を受けた時に真っ先に思いついたのはコンペ形式のプログラムでした。しかしKaggleを筆頭に実際のビジネスで発生したデータを使ったEDAおよび機械学習予測モデルの開発ができる機会は今やいくらでもあるため、Kaggleそのままの形式では目新しさに欠ける。さらに実際の開発業務では求めた予測値を使って意思決定を自動化する所までが求められるため、予測器を作って精度を見て終りというのは片手落ちとなってしまう。よって、求めた予測値を利用して意思決定を行なうアプリケーションを実装してビジネス指標が出力として得られる部分までを範囲としました。<br />
<h2 style="text-align: left;">
内容</h2>
ハンズオンチュートリアル形式でアドネットワークの広告配信ロジックの開発およびデータ分析を行ないました。配信ロジックは「広告リクエストに対してどの広告を返すか」と「広告のクリック単価をいくらにするか」を広告リクエストを受けた時に決める処理です。<br />
<br />
開発は運営が用意したPython環境で起動しているJupyter Notebook上で行ない、これは参加者それぞれ専用のサーバーで動作しています。用意したPython環境にはアドネットワークシミュレーターがインストールされており、参加者は実装した配信ロジックを即座に実行して結果を確認する事ができます。結果には広告キャンペーン毎の獲得コンバージョン数やメディア毎の収益額が含まれており、任意の加工を行ない可視化する事で動作確認が可能です。<br />
<br />
個々のトピックとして次の物を取り上げました<br />
<ul style="text-align: left;">
<li>両面市場(Two Sided Market)における値付け</li>
<li>多腕バンディット方策による累積報酬最大化</li>
<li>広告配信ログの分析</li>
<li>機械学習によるCVR予測</li>
<li>推論処理のアプリケーション組み込み</li>
<li>フィードバック制御によるリカバリ</li>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-ITlCoHktBc4/XZ7GucWKsHI/AAAAAAAAAzM/JHg_7dmQ1ScH_qK82CEF-DoOSCFPx1-3wCLcBGAsYHQ/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-10-10%2B14.47.32.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="794" data-original-width="1550" height="327" src="https://1.bp.blogspot.com/-ITlCoHktBc4/XZ7GucWKsHI/AAAAAAAAAzM/JHg_7dmQ1ScH_qK82CEF-DoOSCFPx1-3wCLcBGAsYHQ/s640/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-10-10%2B14.47.32.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">収益予測と広告選択ロジックが実装する範囲</td></tr>
</tbody></table>
<br />
<h2 style="text-align: left;">
出題の意図</h2>
<div>
<div>
講義ノートの所々に仕込んだ練習問題や、全体の流れの意図のネタばらしです。</div>
<h3 style="text-align: left;">
顧客の問題を解決しよう</h3>
<div>
アドネットワークというビジネスには広告主とパブリッシャーという2つの顧客グループが存在し、それぞれが何を求めているかという点から配信ロジックに求められる要件を解説しました。この考え方が出来ると「予測できて何が嬉しいのか、ビジネスにどんな貢献をするのか」という視点に常に立ち戻れます。機械学習が好きな人は「予測ができる事」に目が行きがちですが、時間をかけていらない物を作ってしまうリスクを減らす為にも重要な考え方だと感じています。</div>
<h3 style="text-align: left;">
検証方法を考えよう</h3>
<div>
実装したロジックが意図通りに動いているか、どの様に確認すべきでしょうか? 実務では自分で考える他ないので同様に体験してもらいました。特に確率的なふるまいをするロジックのリリース後の動作確認は難しく、どのデータを取りどの様な可視化を行なうと自信を持ってバグが無いと言いきれるのか、頭を悩ます点でもあります。</div>
<h3 style="text-align: left;">
予測誤差を意識しよう</h3>
<div>
広告キャンペーン毎のコンバージョン率を誤差範囲と共にプロットする課題を用意しました。それぞれサンプルサイズが異なる事から誤差範囲もバラバラ、よって平均値の比較だけでは何も言えません。意思決定には予測誤差を考慮する必要がある点は多腕バンディット方策の活用と探索の話に繋がります。また確率pがゼロに近いため二項分布の正規近似で上手くいかない点もミソです。</div>
<h3 style="text-align: left;">
予測が外れる事を前提として自動リカバリ手段を用意しよう</h3>
<div>
予測精度100%というのはまずありえないので、予測を誤った時にどうするかが重要となります。自動リカバリの手法としてフィードバック制御を紹介して、みなさんに実装してもらいました。</div>
<h3 style="text-align: left;">
コールドスタート問題をなんとかしよう</h3>
<div>
コンバージョン率予測モデルで新規の広告キャンペーンに対しては未学習となっている状態を見せました。コールドスタート方策の一つとしてパラメータのThompson Sampling (ロジスティック回帰ならベイジアンロジスティック回帰) があり、これはパラメータ推定値の誤差の大きさを行動に反映できます。<br />
<h3 style="text-align: left;">
単一の指標で評価しない</h3>
Kaggleの様に何らかの評価指標に絞ってロジックの性能を評価するのはやめました。プラットフォームを運営するのであれば買い手を優遇したい時期、売り手を優遇したい時期、またプラットフォーマーの粗利額を優先したい時期どれもあります。プラットフォーマーの短期的な利益を削ってプラットフォームの成長を促したり、売り手間の公平性を考慮したりと様々な実装が出て来た方が面白いと考えました。</div>
<h3 style="text-align: left;">
高速に動作するプログラムを書こう</h3>
</div>
<div>
広告配信ロジックにおける処理は広告リクエスト <span style="font-family: georgia, "times new roman", serif;"><i>X </i></span>に対して配信可能な広告 <span style="font-family: georgia, "times new roman", serif;"><i>a </i>∈<i> A</i> </span>それぞれについてのクリック率 <span style="font-family: georgia, "times new roman", serif;">P(click = 1 | <i>X, a</i>)</span>・コンバージョン率 <span style="font-family: georgia, "times new roman", serif;">P(cv = 1 | <i>X, a, </i>click=1)</span>を求める必要があります。ここからアドサーバーにおける推論速度の要件を解説しました。10ミリ秒以内に100回の前処理と推論をしたいという事も普通にあるので、遅いコードはそもそもリリースできません。</div>
<div>
しかしこれは説明するまでもなく、遅いコードを書くとシミュレーターの動作がどんどん遅くなっていくため気づけたかと思います。事前に配信候補の数を絞る方策も有効ですが3日間という期間を考慮して省きました。</div>
<h2 style="text-align: left;">
まとめ</h2>
<div>
インターンシッププログラムの内容を考えて講義資料を作り、専用システムを開発するのは初めてだったのですが学ぶ所が多くありました。また実務のエッセンスをどう伝えるかはまだまだ改良の余地があるので、次回があれば良くしていきます。</div>
<div>
<br /></div>
</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-71670053200840092002019-08-06T18:57:00.001+09:002020-07-03T01:23:20.320+09:00KDD2019本会議の聴講リスト<div dir="ltr" style="text-align: left;" trbidi="on">
明日からKDD2019の本会議なので聴講リストを整備した。マーケットデザイン・オンライン広告・バンディットアルゴリズムが中心。<br />
<h2 style="text-align: left;">
招待講演</h2>
<ul style="text-align: left;">
<li><a href="https://www.kdd.org/kdd2019/applied-data-science-invited-speakers/view/welfare-maximization-in-online-two-sided-marketplaces" target="_blank">Welfare Maximization in Online Two-sided Marketplaces</a></li>
<li><a href="https://www.kdd.org/kdd2019/applied-data-science-invited-speakers/view/4-perspectives-in-human-centered-machine-learning" target="_blank">4 Perspectives in Human-Centered Machine Learning</a></li>
<li><a href="https://www.kdd.org/kdd2019/applied-data-science-invited-speakers/view/addressing-challenges-in-data-science-scale-skill-sets-and-complexity" target="_blank">Addressing Challenges in Data Science: Scale, Skill Sets and Complexity</a></li>
<li><a href="https://www.kdd.org/kdd2019/applied-data-science-invited-speakers/view/seven-years-of-data-science-at-airbnb" target="_blank">Seven Years of Data Science at Airbnb</a></li>
</ul>
<h2 style="text-align: left;">
口頭発表</h2>
<ul style="text-align: left;">
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/anomaly-detection-for-an-e-commerce-pricing-system" target="_blank">Anomaly Detection for an E-commerce Pricing System</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/two-sided-fairness-for-repeated-matchings-in-two-sided-markets-a-case-study" target="_blank">Two-Sided Fairness for Repeated Matchings in Two-Sided Markets: A Case Study of a Ride-Hailing Platform</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/deep-landscape-forecasting-for-real-time-bidding-advertising" target="_blank">Deep Landscape Forecasting for Real-time Bidding Advertising</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/optimizing-impression-counts-for-outdoor-advertising" target="_blank">Optimizing Impression Counts for Outdoor Advertising</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/personalized-purchase-prediction-of-market-baskets-with-wasserstein-based-s" target="_blank">Personalized Purchase Prediction of Market Baskets with Wasserstein-Based Sequence Matching</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/scaling-multi-armed-bandit-algorithms" target="_blank">Scaling Multi-Armed Bandit Algorithms</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/scaling-multinomial-logistic-regression-via-hybrid-parallelism" target="_blank">Scaling Multinomial Logistic Regression via Hybrid Parallelism</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/reserve-price-failure-rate-prediction-with-header-bidding-in-display-advert" target="_blank">Reserve Price Failure Rate Prediction with Header Bidding in Display Advertising</a></li>
</ul>
<h2 style="text-align: left;">
ポスター</h2>
<ul style="text-align: left;">
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/150-successful-machine-learning-models-6-lessons-learned-at-booking.com" target="_blank">150 successful Machine Learning models: 6 lessons learned at Booking.com</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/adversarial-matching-of-dark-net-market-vendor-accounts" target="_blank">Adversarial Matching of Dark Net Market Vendor Accounts</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/aiads-automated-and-intelligent-advertising-system-for-sponsored-search" target="_blank">AiAds: Automated and Intelligent Advertising System for Sponsored Search</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/applying-deep-learning-to-airbnb-search" target="_blank">Applying Deep Learning To Airbnb Search</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/bid-optimization-by-multivariable-control-in-display-advertising" target="_blank">Bid Optimization by Multivariable Control in Display Advertising</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/dynamic-pricing-for-airline-ancillaries-with-customer-context" target="_blank">Dynamic Pricing for Airline Ancillaries with Customer Context</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/finding-users-who-act-alike-transfer-learning-for-expanding-advertiser-audi" target="_blank">Finding Users Who Act Alike: Transfer Learning for Expanding Advertiser Audiences</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/online-purchase-prediction-via-multi-scale-modeling-of-behavior-dynamics" target="_blank">Online Purchase Prediction via Multi-Scale Modeling of Behavior Dynamics</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/recurrent-neural-networks-for-stochastic-control-in-real-time-bidding" target="_blank">Recurrent Neural Networks for Stochastic Control in Real-Time Bidding</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/reinforcement-learning-to-optimize-long-term-user-engagement-in-recommender" target="_blank">Reinforcement Learning to Optimize Long-term User Engagement in Recommender Systems</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/predicting-different-types-of-conversions-with-multi-task-learning-in-onlin" target="_blank">Predicting Different Types of Conversions with Multi-Task Learning in Online Advertising</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/conversion-prediction-using-multi-task-conditional-attention-networks-to-su" target="_blank">Conversion Prediction Using Multi-task Conditional Attention Networks to Support the Creation of Effective Ad Creatives</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/tv-advertisement-scheduling-by-learning-expert-intentions" target="_blank">TV Advertisement Scheduling by Learning Expert Intentions</a></li>
<li><a href="https://www.kdd.org/kdd2019/accepted-papers/view/a-unified-framework-for-marketing-budget-allocation" target="_blank">A Unified Framework for Marketing Budget Allocation</a></li>
</ul>
<br /></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-10245250581059648752019-08-05T17:41:00.003+09:002020-07-03T01:23:49.393+09:00「WTF経済 ―絶望または驚異の未来と我々の選択」感想<div dir="ltr" style="text-align: left;" trbidi="on">
ティム・オライリーの視点でここ数年のテック業界でどのような変化が起きているか纏めてあり、トピックは多岐に渡る。その中でも下記の2点は広告業界のソフトウェアエンジニアとして思いをめぐらす所があった。
<br />
<br />
<div style="margin-top: 15px;">
<a href="https://www.amazon.co.jp/WTF%E7%B5%8C%E6%B8%88-%E2%80%95%E7%B5%B6%E6%9C%9B%E3%81%BE%E3%81%9F%E3%81%AF%E9%A9%9A%E7%95%B0%E3%81%AE%E6%9C%AA%E6%9D%A5%E3%81%A8%E6%88%91%E3%80%85%E3%81%AE%E9%81%B8%E6%8A%9E-Tim-OReilly/dp/487311859X/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=WTF%E7%B5%8C%E6%B8%88&qid=1564993006&s=gateway&sr=8-1&linkCode=li3&tag=assocarea-22&linkId=719b2adeb306703950f7c12dbb7fb0dd&language=ja_JP" target="_blank"><img align="left" border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=487311859X&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=assocarea-22&language=ja_JP" style="margin: 5px 15px 0px 0px; width: 177px;" /></a><img alt="" border="0" height="1" src="https://ir-jp.amazon-adsystem.com/e/ir?t=assocarea-22&language=ja_JP&l=li3&o=9&a=487311859X" style="border: none; margin: 0px;" width="1" />
<b>WTF経済 ―絶望または驚異の未来と我々の選択</b><br />
オライリー・ジャパン<br />
Tim O'Reilly (著), 山形 浩生 (翻訳)<br />
<a href="https://www.oreilly.co.jp/books/9784873118598/" target="_blank">O'reilly</a>, <a href="https://amzn.to/2YIBDcy" target="_blank">Amazon</a><br />
<a href="https://www.harpercollins.com/9780062565716/wtf/" target="_blank">原著: WTF: What's The Future and Why It's Up To Us</a>
</div>
<br clear="both" />
<h2 style="text-align: left;">
アルゴリズムの管理者としてどうあるべきか</h2>
本書の前半はUber, Lift, Google検索を例に価値創造の場におけるアルゴリズムの重要性を説いている。そしてプログラマーは管理職でありプログラムが労働者であると。Googleの検索品質改善の例では、利用者の求めていない低品質なサイトが検索結果の一番上に表示される状況をどう改善したかの紹介がある。すぐに思いつく手段の一つはルールを追加して低品質なサイトを検索結果から除外しまう事だが、彼らはユーザーが検索結果をクリックした後の遷移先の滞在時間をスコアとして利用し、スコアの低い検索結果を除外した。<br />
ルールベースのアルゴリズムは理解が容易で、何かまずい事が起きた時の暫定対応としてプロダクションに投入しがちである。しかしユーザーのフィードバックを利用した方が汎化性能が高くロバストなソリューションになる事はランキングやリコメンド開発者として頭に留めておきたい。<br />
<br />
またFacebookにおける見出し詐欺、実際の記事の内容とは異なる刺激的なタイトルを使って利用者を釣っている記事への対応のくだり。<br />
<blockquote class="tr_bq">
グーグルは、その検索アルゴリズムの厳密な細部は公開しない。ランキングを上げようとする連中に悪用されるのを恐れるからだ。同様に、フェイスブックが見出し詐欺の記事を取り締まったとき、ニュースフィードの製品管理担当副社長アダム・モセリはこう書いた。「フェイスブックは見出し詐欺を定義する複数ページにわたるガイドラインを公開したりはしません。というのもその大部分は実際にスパムであり、もし我々がずばり何をどのようにしているか明らかにすれば、リバースエンジニアリングされて、それを回避する方法を見つけられてしまうからです」</blockquote>
ネット広告における不正対策に繋がる部分であるが、どの様なふるまいを不正とみなすかは公開する事はやはりできない。利用規約にどこまで詳細に記すか、問いあわせにどこまで答えるかの議論が度々発生するが堂々と非公開にして良いのだ。<br />
<h2 style="text-align: left;">
インターネット広告がネットメディアに与える影響</h2>
ネットメディアが主に収益源とする広告収益のもたらす影響について。<br />
<blockquote class="tr_bq">
検索エンジンやソーシャルメディアで関心を集める必要性は、ニュースメディアの低劣化、偉大な出版物ですらのお手盛り、インチキな論争など、トラフィックを増やす各種技法への堕落をもたらしている。どん底への競争の一部は、ニュース産業の収入が購読料から広告収入に大きくシフトした結果である。</blockquote>
辛辣な表現だが事実として受け止めるべきだろう。Webサイトの価値としてPV数と広告のクリック率が通貨さながらの扱いを受けているのは違和感を禁じえない。しかしインターネット広告がある事でそのようなインセンティブを与えてしまっているのだ。今日たまたま学会で聴いた話で、マイクロソフトの検索エンジンの開発者は「ユーザーが得られた情報の量を操作数で割った物」を指標にしているとの事だった。<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-aTLSrwFzFoo/XUfkyTa-Y7I/AAAAAAAAAx8/f-oU1-Vm030X9P1JDiR9bhsnV-aRNpLnACLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-08-05%2B16.59.16.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="270" data-original-width="1508" height="114" src="https://1.bp.blogspot.com/-aTLSrwFzFoo/XUfkyTa-Y7I/AAAAAAAAAx8/f-oU1-Vm030X9P1JDiR9bhsnV-aRNpLnACLcBGAs/s640/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-08-05%2B16.59.16.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="https://sites.google.com/view/kdd2019-exp-evaluation/" target="_blank">https://sites.google.com/view/kdd2019-exp-evaluation/</a> より</td></tr>
</tbody></table>
<br />
Information Gainの計測はクリックの様な明示的なフィードバックの集計だけで済まないためコストはかかる*1が、情報検索を役目とするサービスの指標として秀逸さに感銘を受けた。広告業界もネットメディアがこのような指標に集中できるような仕組みを目指すタイミングであると思う。そのためにはメカニズムデザインや因果推論が重要な役割を果たすのではと考えている。<br />
<br />
*1: 検索結果のリストを見て満足してサイトを去るケースがあるため
</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-12979303973726917812019-05-14T03:22:00.003+09:002020-07-03T01:24:12.626+09:00「戦略的データサイエンス入門」がOJTの参考書として良さそうだった<div dir="ltr" style="text-align: left;" trbidi="on">
配属された新人氏に勧められるか確認すべくあらためて読み直した。データサイエンスのビジネス適用という主題で様々なトピックに触れているが自分は次の3点に注目した。<br />
<br />
<ul style="text-align: left;">
<li>ビジネス課題をどのようにデータサイエンスの手法で解決するか、どのように対応方法がわかっているサブタスクへ分解するかのアプローチ</li>
<li>モデル評価の方法</li>
<li>データサイエンス組織の運用・育成</li>
</ul>
<div>
感想はサービス開発現場のソフトウェアエンジニアとしてのものです。まずは書籍の基本情報と目次。</div>
<br />
<div>
<a href="https://www.amazon.co.jp/%E6%88%A6%E7%95%A5%E7%9A%84%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%E5%85%A5%E9%96%80-%E2%80%95%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%81%AB%E6%B4%BB%E3%81%8B%E3%81%99%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88%E3%81%A8%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Foster-Provost/dp/4873116856/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E6%88%A6%E7%95%A5%E7%9A%84%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%E5%85%A5%E9%96%80&qid=1557681128&s=gateway&sr=8-1-fkmrnull&linkCode=li3&tag=assocarea-22&linkId=de3398a2ab4281a8307a61b806ffbed1&language=ja_JP" target="_blank"><img align="left" border="0" src="https://3.bp.blogspot.com/-zH12lKWaPEc/XNnA2k6nVBI/AAAAAAAAAwE/gl9ERCGWkecwO8GdSS0t4ijZ7vinoBW5gCLcBGAs/s1600/picture_large978-4-87311-685-3%2B%25281%2529.jpeg" style="margin: 5px 15px 0px 0px; width: 177px;" /></a><img alt="" border="0" height="1" src="https://ir-jp.amazon-adsystem.com/e/ir?t=assocarea-22&language=ja_JP&l=li3&o=9&a=4873116856" style="border: none; margin: 0px;" width="1" /><b>戦略的データサイエンス入門</b><br />
<b>―― ビジネスに活かすコンセプトとテクニック</b><br />
オライリー・ジャパン<br />
Foster Provost、Tom Fawcett 著、竹田 正和 監訳、古畠 敦、瀬戸山 雅人、大木 嘉人、藤野 賢祐、宗定 洋平、西谷 雅史、砂子 一徳、市川 正和、佐藤 正士 訳<br />
<a href="https://www.oreilly.co.jp/books/9784873116853/" target="_blank">O'reilly</a>, <a href="https://amzn.to/2JyC8lC" target="_blank">Amazon</a><br />
<a href="http://data-science-for-biz.com/" target="_blank">原著: Data Science for Business</a></div>
<br style="clear: both;" />
<h2 style="text-align: left;">
目次</h2>
1章 はじめに:データ分析思考<br />
2章 ビジネス問題とデータサイエンスが提供するソリューション<br />
3章 予測モデリング:相関から教師ありセグメンテーションへ<br />
4章 モデルをデータにフィットさせる<br />
5章 オーバーフィッティングとその回避方法<br />
6章 類似度、近傍、クラスタ<br />
7章 意思決定のための分析思考:良いモデルとは何か<br />
8章 モデル性能の可視化<br />
9章 エビデンスと確率<br />
10章 テキスト表現とテキストマイニング<br />
11章 意思決定のための分析思考Ⅱ:分析思考から分析工学へ<br />
12章 その他のデータサイエンスの問題と技法<br />
13章 データサイエンスとビジネス戦略<br />
14章 おわりに<br />
<h2 style="text-align: left;">
感想</h2>
<div>
まず前書きでデータ活用の3要素が提示されており、ぐっと惹きつけられた。</div>
<div>
<ul style="text-align: left;">
<li>データを効率的に収集・処理する事</li>
<li>データを適切に取り扱い、妥当かつ汎用的な成果を残すこと</li>
<li>データをビジネスの枠組みの中にうまく組み込むこと</li>
</ul>
</div>
<div>
まさに自分が成すべき事そのものである。そして1章はデータサイエンスによってどの様な成果があげられるのかという具体例を上げ、またデータが投資対象である旨を説明している。得られた成果よりも日々のストレージコストの方が高かった、といった事があると困るので投資と回収の感覚は身につけたい。</div>
<div>
<br /></div>
<div>
2章はデータサイエンスプロジェクトの序盤で必要なソリューション設計について。ビジネス課題を解決方法がわかっているタスクに分解し、解決できる状態にする能力が重要であると述べている。このトピックに焦点を置いた文献はあまり知らないので非常に貴重だと感じた。他にも良い文献があったら知りたい。</div>
<div>
<br /></div>
<div>
7章のモデル評価の章ではモデルを実際に利用した時に得られる収益の期待値を使って評価を行なう方法を紹介している。Accuracy, f1-scoreが単純すぎて使えないというのは自分も実務で試して経験したので先にこの本を読んでおけばと思った次第。また学習曲線・over-fitting検知用のフィッティンググラフといった常識的に確認しておくべきポイントは押えてあるのが良い。11章ではさら進んでLiftを使ったモデル評価にも言及している。</div>
<div>
<br /></div>
<div>
ナイーブベイズ・SVM・ロジスティック回帰といった個別アルゴリズムの詳細には触れていないが例えば「ナイーブベイズが素性間の独立性を仮定しているのに上手く動作するのは何故か?」といったエッセンスについては数式込みで紹介しているし、前処理の章は無いがリーク(leakage)については事例を交えて解説がある塩梅。</div>
<div>
<br /></div>
<div>
2章と13章ではデータサイエンスチームの運用・チームメンバーの能力評価に触れているのと、付録にあるデータマイニングプロジェクトに対するレビュー項目リストは便利そう。関係者とのコミュニケーションにおける要所が都度補足されているのは親切だなと。</div>
<div>
<br /></div>
<div>
総じて「大学で機械学習をやっていたがサービス開発現場でやるのは初めて」というの人にはオススメできる内容で、<a href="http://data-science-for-biz.com/adopters.html" target="_blank">150を越える大学で教科書として採用されている</a>だけはあるなと思いました。</div>
</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-57210629069736134722019-04-08T00:00:00.000+09:002019-05-13T00:36:24.228+09:00Repro Tech #7でオンライン意思決定の話をしました<div dir="ltr" style="text-align: left;" trbidi="on">
Practical AIがテーマの会で「機械学習の予測モデルをどう使うか」という話をしました。自分が最近気にしているのがアプリケーションへの組み込み時の予測値の扱いなので、その辺りにフォーカスしています。アクティブラーニング、貪欲法、予測時にパラメータを事後分布からサンプルするThompson Sampling、オンライン凸最適化等です。<br />
<br />
スライド: <a href="https://speakerdeck.com/hagino3000/bu-que-shi-xing-toshang-shou-kufu-kihe-uyi-si-jue-ding-falseshou-fa">予測の不確実性と上手く付き合う意思決定の手法</a> <a href="http://b.hatena.ne.jp/entry/s/speakerdeck.com/hagino3000/bu-que-shi-xing-toshang-shou-kufu-kihe-uyi-si-jue-ding-falseshou-fa" target="_blank"><img src="https://b.hatena.ne.jp/entry/image/https://speakerdeck.com/hagino3000/bu-que-shi-xing-toshang-shou-kufu-kihe-uyi-si-jue-ding-falseshou-fa" /></a>
<br /><br />
<script async class="speakerdeck-embed" data-id="a707aca750ae41bd8805792fd80f5b9c" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
<br />
<div class="link">
Repro Tech #7 Practical AI Supported by NAVITIME<br />
<a href="https://repro-tech.connpass.com/event/124326/" target="_blank">https://repro-tech.connpass.com/event/124326/</a>
</div>
<br /></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-3236831772744500902019-03-27T03:52:00.003+09:002020-07-03T01:24:42.132+09:00「機械学習のための特徴量エンジニアリング」を読んだ<div dir="ltr" style="text-align: left;" trbidi="on">
読んだので感想を書きます。ホクソエムの皆様による翻訳です。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-G5Q6psfoXf8/XJpmAsvEThI/AAAAAAAAAtI/-D-pzb4yLbAGDZ8DKusyMQFMDyXlv5YzQCLcBGAs/s1600/picture978-4-87311-868-0.gif" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="186" data-original-width="145" src="https://3.bp.blogspot.com/-G5Q6psfoXf8/XJpmAsvEThI/AAAAAAAAAtI/-D-pzb4yLbAGDZ8DKusyMQFMDyXlv5YzQCLcBGAs/s1600/picture978-4-87311-868-0.gif" /></a></div>
<a href="https://amzn.to/2TAgj6j" target="_blank">機械学習のための特徴量エンジニアリング<br />――その原理とPythonによる実践</a><br />
Alice Zheng (著), Amanda Casari (著), 株式会社ホクソエム (翻訳)<br />
<br />
電子版は <a href="https://www.oreilly.co.jp/books/9784873118680/" target="_blank">O'reilly Japanのサイト</a>で購入できます。<br />
<br style="clear: both;" />
<h2 style="text-align: left;">
感想</h2>
あたりまえの事をあたりまえにやれるレベルまでスッと引き上げてくれる感じ。画像データの章は飛ばして読んだのですが、ScailngやOne-Hot-Encodingといった頻出テクニックは一通り書いてあるので、これから機械学習やるという人には良さそう。手法の紹介だけでなく、One-Hot-Encodingは冗長表現なので係数が一意に定まらなくなる話やリーク(leakage)の話があるのは親切。<br />
<br />
文章による解説とPythonコードが併記されているのは嬉しい。そして原著のコードで非効率な所は容赦なく書き換えているのはホクソエム陣の意気込みを感じた。GitHubにnotebookが公開されているので、コードはこちらが読み易い。PandasでNew Line Delimited JSONフォーマットが読める事や、列の一致していないDataFrame同士をconcatして縦に積めるのは知らなかった。<br />
<div class="link">
HOXOMInc/feature-engineering-book<br />
<a href="https://github.com/HOXOMInc/feature-engineering-book" target="_blank">https://github.com/HOXOMInc/feature-engineering-book</a></div>
<br />
9章のレコメンドアルゴリズムを題材に特徴量エンジニアリングを実践する構成は面白い、しかしコードが本の終盤になるにつれ雑になり、意図を読み取るのに苦労する条件式が頻発するのはなんだかなーと。あと numpy.array のデータサイズを求めるのに getsizeof を使うのは間違っているような。<br />
<br />
<blockquote class="tr_bq">
# データ型を変えるとそれぞれのデータサイズがどのくらい変わるか確認する<br />
>>> print('Our pandas Series, in bytes: ', getsizeof(fos_features))<br />
>>> print('Our hashed numpy array, in bytes: ', getsizeof(X_fos))<br />
Our pandas Series, in bytes: 2530632380<br />
Our hashed numpy array, in bytes: 112<br />
<br />
型の変更により、データがずっと小さくなったことがわかります。<br />
<br />
<cite>抜粋:: Alice Zheng “機械学習のための特徴量エンジニアリング”。 iBooks</cite>
</blockquote>
疎行列だとしても非ゼロ要素が112個以上あるから112バイトにはならないし、numpyのIssueを見るとnumpy.arrayは getsizeof での呼び出しをサポートしていない雰囲気がある。手元で実行すると以下の通り。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-fKEJrip1ZcE/XJpsnJDjk2I/AAAAAAAAAtg/TwmwNhCVB6cZMluEeMgN9nquMp2a26Y5wCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-03-27%2B3.15.57.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="562" data-original-width="1172" height="305" src="https://1.bp.blogspot.com/-fKEJrip1ZcE/XJpsnJDjk2I/AAAAAAAAAtg/TwmwNhCVB6cZMluEeMgN9nquMp2a26Y5wCLcBGAs/s640/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-03-27%2B3.15.57.png" width="640" /></a></div>
<br />
正誤表は見つからず。<br />
<h2 style="text-align: left;">
最後に</h2>
途中で不覚にも笑ってしまいました。<br />
<blockquote class="tr_bq">
“[†8] 訳注: 日本にもTedのような人がいます。タカヤナギ=サンです。彼はデータサイエンスの走る百科事典です。そして業界イベントで頻繁に講演をしていて、日本酒や素敵な人が好きです。 彼に日本酒を買って話してかけてみて下さい。後悔しないと思いますが、彼が泥酔している時には後悔するかもしれません。”<br />
<br />
<cite>抜粋:: Alice Zheng “機械学習のための特徴量エンジニアリング”。 iBooks</cite>
</blockquote>
そして9章のコードを手元のマシンで動かすとメモリが足りなくてJupyter Notebookのカーネルが落ちてしまうため、メモリ増設の機運が高まりました。現在は32GByteのメモリを積んでるのですが、どれだけあれば足りるのだろう……</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-81808928251008685682019-03-16T14:36:00.001+09:002020-07-03T01:25:06.160+09:00オペレーションズ・リサーチ学会の研究発表会に行ってきた<div dir="ltr" style="text-align: left;" trbidi="on">
近くで開催していたので聴講に。<br />
<div class="link">
日本オペレーションズ・リサーチ学会2019年春季研究発表会<br />
<a href="http://www.orsj.or.jp/~nc2019s/index.php/program/" target="_blank">http://www.orsj.or.jp/~nc2019s/index.php/program/</a></div>
何故このタイミングでORの学会かと言えば、広告配信サービスの現場でエンジニアやってると因果推論も機械学習も組合せ最適化もやらなきゃいけない状態で。最近だと特に最適化に時間を多く使っているのでリサーチの動向を見たくて参加してきた。ちなみにORの事は良く知らないので滅茶苦茶な事を書いているかもしれない。<br />
<h2 style="text-align: left;">
全体の感想</h2>
招待公演はどれも興味深く、製造・インフラ・輸送業と共に進歩してきたORの歴史の厚みを感じた。カーマーカー法が発表されてから主双対内点法へ至る話や演算子オーバーロード方式の自動微分が最適化ソフトウェアに与えたインパクトといった自分でも知ってる様な伝説級のエピソードについて当事者から聴けたのはわくわくしたし貴重な体験だった。<br />
<br />
一方で会場の人の少なさは引っかかったし、学会の会員数は減り続けているとの事。JSAIの全国大会や同日開催だったNLP(言語処理学会)と比較すると勢いの無さは否めないだろう。ORは現実のモノ・ヒトを効率良く動かし配置する事を目指す学問であるため、国の衰退・製造業の衰退の影響をもろに受けているのかなと想像した。同時に「インフラの間引き計画」や「需要が減り続ける設定においてパフォーマンスが良い配置計画」は衰退と上手く付きあう研究なので価値があるなと。<br />
<br />
自分の周りだと「機械学習案件の皮を被ったOR案件」という言葉があり、必要なのは機械学習じゃなくて待ち行列理論による最適化だったという話も聞く。企業のデータ活用が進む段階、データ分析基盤とBIツールが入ってさて次に何ができるか、というタイミングで流行りの機械学習に飛びついたのだと予想できるが、最適化は今後も実務で必要。機械学習で何かを予測してそれで終りという事は少なく、後続にシステムの自動最適化が待っているのが殆どだろう。なので研究者は減るが実務者はそこそこ増えるんじゃないかと思っている。<br />
<h2 style="text-align: left;">
面白かった発表いくつか</h2>
<a href="http://www.orsj.or.jp/~nc2019s/wp-content/uploads/2019/02/2019s-2-A-1.pdf" target="_blank">閲覧数列の順序関係を考慮した商品選択確率の推定</a><br />
ネットサービスにおけるユーザーの閲覧履歴 (リーセンシーとフリクエンシー) のみによる予測。広告でも機械学習で予測しようにも素性が殆どないケースはあるので閲覧履歴を表現力のある状態で使うのは上手いと思った。他の学習モデルとStackingすると強そう。ECサイトTmallのデータが公開されていて実験に使えるのは知らなかった、便利。<br />
<br />
<a href="http://www.orsj.or.jp/~nc2019s/wp-content/uploads/2019/02/2019s-1-B-8.pdf" target="_blank">非羨望性を考慮した被覆制約付き複数財市場の価格決定</a><br />
複数財オークション。広告の広告表示権利の取引にも使えるプロトコルの提案で売り手の利得を最大化する。広告表示権利のオークションだと、オークショナーは売り手(パブリッシャ)の味方なのでアリだと思う。<br />
非羨望性にピンとこなかったので質問したら昔からある制約との事。複数財オークションの事は全然調べた事がなかったので勉強になった。<br />
<br /></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-5033363406619306262019-01-22T20:02:00.002+09:002020-07-03T01:26:01.038+09:00検索連動広告の因果効果とROIの推定<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
ネット広告の因果効果推定について調べた時に読んだeBay<sup>*1</sup>の検索連動広告<sup>*2</sup>の因果効果推定についての論文が面白かったのでメモ。検索連動広告経由の流入のうち広告を出稿しなくとも得られた流入、つまり他の経路で流入したであろう分を差し引いた量(causal effectiveness of paid search ads)を推定しています。<br />
<br />
<div class="link">
Blake, Thomas, Chris Nosko, and Steven Tadelis. "Consumer heterogeneity and paid search effectiveness: A large‐scale field experiment." Econometrica 83.1 (2015): 155-174.<br />
<a href="https://www.nber.org/papers/w20171" target="_blank">https://www.nber.org/papers/w20171</a>
</div>
<h2 style="text-align: left;">
要約</h2>
eBayはブランドキーワードとノンブランドキーワード(100万を越える商品名)について広告出稿していた。そこで検索連動広告のサイト流入・売上への因果効果とROIを推定した。ブランドキーワード・ノンブランドキーワード両者について検索連動広告を止めてサイトへの流入トラフィック・売上がどれだけ変化するかを計測した。<br />
ブランドキーワードの出稿を止めても流入トラフィックは0.5%減に留まった。検索連動広告からの流入の99.5%は自然な検索結果からの流入に代替された。ノンブランドキーワードについては売上の増加量に対する広告費の係数を推定した。推定値は非常に小さく、大した効果が無い事が確認できた。<br />
ユーザーセグメントに対する実験では、非アクティブなユーザーおよび未知のユーザーに対して広告は作用する事がわかった。<br />
<h2 style="text-align: left;">
ブランドキーワードに対する実験</h2>
<ul style="text-align: left;">
<li>方法</li>
<ul>
<li>MSNとGoogleで "eBay" というキーワードに対して出稿しておく</li>
<li>片方の出稿を止めて差の差法で因果効果を推定する</li>
</ul>
<li>結果</li>
<ul>
<li>出稿を止めても99.5%は自然検索結果のクリックで代替された</li>
</ul>
<ul>
<li>出稿を止めても検索結果にeBayが出てくるため、これがほぼ完全な代替になる</li>
</ul>
</ul>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-33b4WQJhOOE/XEX_gBdCuxI/AAAAAAAAArI/9Z0mMXBn6YkvzdVU9qK0FHbSZT8yLejxgCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-01-22%2B2.20.10.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="775" data-original-width="1600" src="https://2.bp.blogspot.com/-33b4WQJhOOE/XEX_gBdCuxI/AAAAAAAAArI/9Z0mMXBn6YkvzdVU9qK0FHbSZT8yLejxgCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-01-22%2B2.20.10.png" width="650" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">(a) はGoogleを季節性補正用に残してMSNで出稿を止めている</td></tr>
</tbody></table>
<br />
<h2 style="text-align: left;">
ノンブランドキーワードに対する実験</h2>
<ul style="text-align: left;">
<li>方法</li>
<ul>
<li>DMA(ニールセンが定義しているUSのマーケティングの単位となる地域区分)をランダムサンプリングして実験用地域を確保</li>
<li>実験用DMAから68DMAをテスト用、77をコントロール用としてテスト用DMAで出稿を止める</li>
<li>差の差法で因果効果を推定する</li>
</ul>
<li>結果</li>
<ul>
<li>売上の変化に対する広告支出額の係数を求めると、統計的にゼロと違わないためeBayの支出額を考慮してもインパクトが無いといえる</li>
</ul>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-rCNKG7B3w04/XEaZ5wpRk4I/AAAAAAAAArg/FgMFU5pHtf4_hfh6j8Sa1Bsx1zf2dlRDACLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-01-22%2B2.33.09.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="776" data-original-width="1600" src="https://3.bp.blogspot.com/-rCNKG7B3w04/XEaZ5wpRk4I/AAAAAAAAArg/FgMFU5pHtf4_hfh6j8Sa1Bsx1zf2dlRDACLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-01-22%2B2.33.09.png" width="650" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">テスト開始後はクリックが減るが売上に変化はみられない</td></tr>
</tbody></table>
<h2 style="text-align: left;">
ユーザーセグメントに対する実験</h2>
<ul style="text-align: left;">
<li>方法</li>
<ul>
<li>過去12ヶ月における購入回数セグメントと最終購入日時からの経過日数セグメントを定義する</li>
<li>上記のコントロール群のDMAとトリートメント群のDMAでセグメント毎の効果を推定した</li>
</ul>
<li>結果</li>
<ul>
<li>最も効果が強いのは一度もeBayで購入をしていないセグメント</li>
<li>最終購入から90日以降のセグメントにおいては、1ヶ月経つ毎に0.02%の売上増効果が推定される</li>
<li>つまり非アクティブなユーザーに広告は作用する</li>
</ul>
<ul>
<li>非アクティブなユーザーに広告は作用するにもかかわらず、検索連動広告のコストは主にアクティブなユーザーに費やされていた</li>
</ul>
</ul>
<h2 style="text-align: left;">
ROIの推定</h2>
<ul style="text-align: left;">
<li>方法</li>
<ul>
<li>ROIは次の通り定義する</li>
<ul>
<li>$\Delta R = 収益_1 - 収益_0$</li>
<li>$\Delta S = 広告費_1 - 広告費_0$</li>
<li>${\rm ROI} = \frac{\Delta R}{\Delta S} - 1$</li>
</ul>
<li>実際の収益とコストのデータは公開できないため、公開情報を使った。</li>
<li>OLSと操作変数法、差の差法それぞれによる推定値を出した</li>
</ul>
<li>結果</li>
<ul>
<li>OLSだとROIが4000パーセントと非現実的な数値に</li>
<li>対照実験を用いるとROIの推定値はマイナスなった</li>
</ul>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-XYvWjAweOqw/XEfP6Ax6twI/AAAAAAAAAsQ/VgaqWJiTbwkNGT4pUKPySQiE918cGg4AwCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-01-23%2B11.21.41.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="397" data-original-width="865" src="https://1.bp.blogspot.com/-XYvWjAweOqw/XEfP6Ax6twI/AAAAAAAAAsQ/VgaqWJiTbwkNGT4pUKPySQiE918cGg4AwCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2019-01-23%2B11.21.41.png" width="" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">差の差法を使うとROI推定値の上界と下界共にマイナスに</td></tr>
</tbody></table>
<div>
<br /></div>
<h2 style="text-align: left;">
考察</h2>
<ul style="text-align: left;">
<li>良く知られたブランドに関しては検索連動広告の効果は限られている。ユーザーがブランド名を検索しているという事は、既にブランド名を認知している事になるから広告は余計である。</li>
<li>何故このような効果の薄いマーケティングチャネルにお金を費やす人がいるのか。「競合企業がブランド名を買い付けてしまうからだ」との主張もあるがeBayではその様な事は起きなかった。</li>
<li>eBayにおいては検索広告クリックの増加は売上の増加をもたらさなかった、この結果から検索連動広告の効果が無いと言えた。</li>
<li>広告を見せた群と見せなかった群を利用した対照実験を行なうと広告のROIの推定値は劇的に下がる。</li>
</ul>
<h2 style="text-align: left;">
感想</h2>
広告効果は対照実験を行なわないと過大に評価してしまう、というのは因果推論でよく出てくるトピックではあるが、出てくる金額の大きさと手法による推定結果の差がインパクトがあった。ランダム化比較試験ができない立場においてどのようにコントロール群とトリートメント群を作って実験するかは参考になった。<br />
ユーザーが対照実験を実施しないと因果効果が見れないというのは不親切な状況にあるので、今後は配信システムに機能が実装される流れになるのではないか。ディスプレイ広告で同様の調査を行なった論文があるか引き続き調べていきます。<br />
<h2 style="text-align: left;">
参考文献</h2>
Blake, Thomas, Chris Nosko, and Steven Tadelis. "Consumer heterogeneity and paid search effectiveness: A large‐scale field experiment." Econometrica 83.1 (2015): 155-174.<br />
<br />
*1: https://www.ebay.com/<br />
*2: リスティング広告とも呼ばれる<br />
<br />
<br /></div>
<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js" type="text/javascript">
//<![CDATA[
MathJax.Hub.Config({
HTML: ["input/TeX","output/HTML-CSS"],
TeX: { extensions: ["AMSmath.js","AMSsymbols.js"],
equationNumbers: { autoNumber: "AMS" } },
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
tex2jax: { inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true },
"HTML-CSS": { availableFonts: ["TeX"],
linebreaks: { automatic: true } }
});
//]]>
</script>
</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-81364288904854248262018-12-25T23:59:00.000+09:002018-12-27T21:34:43.322+09:00エンジニアキャリア15年のふりかえり<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://adventar.org/calendars/3018" target="_blank">pyspa Advent Calendar 2018</a>の25日目の記事です。<br />
<br />
2018年は体を壊して停滞の年でした。タイピングで腕に痛みが生じる状態が続き、生産性はガタ落ちした上に通院に時間を取られて何もできませんでした。潔く今年の話題は諦めて、今までのソフトウェアエンジニアのキャリアを振りかえります。<br />
<br />
1行で書くと大学で生物やってSIerに入って何回か転職して機械学習エンジニアです。<br />
<h3 style="text-align: left;">
就職</h3>
2002年、私は研究の道に進む気は無く就職活動をしていました。就職氷河期<a href="#1"><sup>*1</sup></a>と呼ばれた時期でさらに「理系なのに就職先が無い」と言われる生物学部生だったので学部不問の求人をあたっていました。さて、学部不問の新卒求人と言えばSIerです。あらゆる人材を受けいれているだけあってすんなり内定が出ました。インターネット界隈では常にDisられる存在ですが情報システム開発の現場に潜り込む機会を与えてくれた点には感謝しています。<br />
<h3 style="text-align: left;">
SIer時代</h3>
ここでは受託の業務システム開発を経験しました。主にDBMSにOracleを使い、WebアプリケーションはJavaで書きました。バッチ処理はJavaかPL/SQLで書いてJP1から起動する構成が印象に残っています。プログラムを書く事もありましたが、パワーポイントの資料とエクセル方眼紙に仕様書を書く時間が長かったです。グローバル製造業のプロジェクトではバグが出ると世界中に存在する物流拠点の業務が止まってしまうため良い緊張感がありました。しかし自分でコードが書けないのはストレスだったので自社プロダクト開発をしている会社に転職しました。受託システムエンジニアからプロダクト開発エンジニアへの転職は難しいらしいですが、運が良かったのでしょう。転職活動は3ヶ月程度で済みました。<br />
<br />
この頃休日に勉強していたのは簿記会計・データベース・Java・JavaScriptです。JavaScriptでDOMを弄る手法はDynamic HTMLと呼ばれていました。スキマ時間にNetscape4.7とIE6の両方で動くリッチな業務画面を試作しましたが、デバッグが難しすぎました。Adobe Flex<a href="#2"><sup>*2</sup></a>やBiz/Browserといったリッチクライアント製品を採用するプロジェクトはあっても、JavaScriptでフロントエンドを構築するプロジェクトはありませんでした。とはいえWeb標準(HTML, CSS, JavaScript)でUIを洗練させる方向には大きな可能性があると感じたため、その後も情報を追いかけました。<br />
<h3 style="text-align: left;">
ソフトウェアベンダー時代</h3>
2008年春にSIerを辞めた後、企業向けグループウェア製品やダッシュボード製品の開発をしました。<br />
SaaS提供の業務システム開発に関った時は衝撃を受けました。唯一のバージョンが稼動し全ての顧客が同じ環境を利用するマルチテナント構成。これなら少人数開発でサービスが提供できて高い利益率が出せると。複数のバージョンの保守が必要で、顧客の動作環境にバグ修正パッチを当てるのに人件費がかかるインストール型ソフトウェアの開発経験をした直後だったので尚更です。しばらくしてWebフロント開発専業になり、ExtJSをUIコンポーネントに採用したダッシュボード製品をメンテナンスしていました。今で言うフロントエンドエンジニアです。<br />
<br />
この頃は現代アートの展示活動をしている人達に混ざり展示用のインラクションも作っていました。制作にはC++でコードを書く<a href="https://openframeworks.cc/" target="_blank">openFrameworks</a>も使いましたが、Webブラウザを描画に利用するのが一番自分に向いていました。Web Worker, WebSocket, CSS3, WebGL が使えるようになり、Webブラウザの表現力は著しく向上していました。夢中になって新しくブラウザに実装された物を使うあまり、展示物はWebkitのナイトリービルドでしか動かない始末でしたが、展示用のマシンで動けば良かったので環境はどうとでもなりました。<br />
<br />
インタラクション制作に使ったKinectコントローラーが面白くて本を書いたり勉強会の主催をしました。当時のインターネットはSSL/TLSが普及しておらずプレーンテキストが通信経路を流れていたため、公開のWifiを設置して通信内容を展示物に利用する事ができました。HTTPSがデフォルトの現代ではとても考えられない事です。<br />
<h3 style="text-align: left;">
スマホアプリエンジニア時代</h3>
2011年からは現職VOYAGE GROUPです。最初はスマートフォンアプリの開発しました。クライアントサイドはHTML5とネイティブ両方の開発を経験しましたが、UX・開発効率共にネイティブに軍配が上がりました。JavaScriptが得意ならスマホアプリ開発もいけるだろうという幻想は砕かれたのです。結果的にこれは次の学びを促進する良い材料になりました。<br />
<br />
2012と2013年は学びの年でした。Kinectのポーズ認識の論文<a href="#3"><sup>*3</sup></a>で知った機械学習に興味を持ち、PRML<a href="#4"><sup>*4</sup></a>読書会に参加したりCourseraの有名なMachine Learningコースを受講しました。同時に基礎力不足を痛感し、統計学・情報理論を学びます。ここではIPython Notebook(今のJupyter)を駆使しました、確率分布にしろ何にしろなるべく可視化して理解の助けとしていました。同時に社内のSICP<a href="#5"><sup>*5</sup></a>輪読会でLISPとプログラミングの基礎をやりなおしました。<br />
<br />
知り合いにPython使いが増えたため、APIサーバーをDjangoを使って構築したり、UI自動操作による業務自動化(今で言うRPA)をPythonとOpenCVで実装<a href="https://www.blogger.com/blogger.g?blogID=3809267930970258622#6"><sup>*6</sup></a>したりと自分が立ち上げメンバーのプロジェクトにPythonを採用していきました。<br />
<h3 style="text-align: left;">
機械学習エンジニア時代</h3>
2015年にインターネット広告の事業部に異動になりデータ活用が命じられます。僥倖でした。具体的に何をやるかは任されていたのでデータ分析基盤構築とBIツールの導入から着手しました。BigQueryを使い始めたのはこの時です。驚いた事に使い慣れたPythonがこの領域のデファクトとなっていました。<br />
<br />
この年は偶然<a href="http://www.iip.ist.i.kyoto-u.ac.jp/mlss15/doku.php" target="_blank">Machine Learning Summer School Kyoto</a>の開催年でこれに参加できたのは素晴しい経験になりました。凸最適化、確率集中不等式、劣モジュラ、システムのデプロイ、強化学習, etc.と様々なトピックに一気に晒される事で関連分野の認知範囲が広がりました。機械学習界隈の知り合いができたのも大きく、今でも付き合いがあります。<br />
<br />
分析基盤が安定し、アプリケーションからデータが利用できる状態になった後は個別施策の開発です。一つは<a href="https://speakerdeck.com/hagino3000/netutoguang-gao-pei-xin-sabisuniokerumlsisutemufalseshi-zhuang-toyun-yong" target="_blank">機械学習による予測処理を組み込んだ広告配信ロジック</a>です。インターネット広告の分野は参考になる論文が多く、これに助けられました。クリック予測・コンバージョン予測・配信最適化・広告効果の推定, etc. 国際会議の<a href="https://www.kdd.org/" target="_blank">KDD</a>に参加して、インターネット広告業界のトッププレイヤーを目の当たりにし、彼らにいかに近づけるかも考えました。<br />
<br />
また経済学出身の人が使いこなす因果推論に感銘を受けた結果、オライリーの『仕事ではじめる機械学習』の効果検証の章ができあがりました。<br />
<h3 style="text-align: left;">
これから</h3>
これからやっていきたいのは決まっていて、オンライン凸最適化・ミクロ経済学・メカニズムデザインです。実務では予測をしたとして、予測値をどう使いたいかといえば何らかの指標の最大化です。しかしそれが売上なのか粗利なのか、他の指標なのかそもそも非自明だったりします。エンジニアの想定する最適化とビジネス設計にズレがあり、ビジネスサイドとの議論がかみあわない事もありました。この一貫性を保つにはミクロ経済学の切り口が有用な感触があります。同様に価格決定もインセンティブデザインと強く結びつく所なので理解を深めたい所です。<br />
<br />
最適化は制約を厳密に満たせなくても動くオンライン設定が広告配信(Online Ad Allocation)にマッチする気がしています。<br />
<br />
ここまで書くと運が良かっただけで生き残った感じがしますが、機械学習の分野は優秀な若者が次々と参入して来ます。特段の強みもなく子育ての片手間に働いているのでは早々に駆逐されるでしょう。まだまだ学び続ける必要があります。事業へのコミットはもちろんとして、成果を論文にして国際会議に通すのも数年以内に達成したいです。<br />
<div>
<br /></div>
<br />
------<br />
<a name="1">*1</a>: 1993-2005年の事を言うらしい via <a href="https://ja.wikipedia.org/wiki/%E5%B0%B1%E8%81%B7%E6%B0%B7%E6%B2%B3%E6%9C%9F" target="_blank">Wikipedia</a><br />
<a name="2">*2</a>: FlashベースのUIコンポーネント <a href="https://www.adobe.com/jp/products/flex.html">https://www.adobe.com/jp/products/flex.html</a><br />
<a name="3">*3</a>: Shotton, Jamie, et al. "Real-time human pose recognition in parts from single depth images." Computer Vision and Pattern Recognition (CVPR), 2011 IEEE Conference on. Ieee, 2011.<br />
<a name="4">*4</a>: <a href="https://amzn.to/2Cxz8BT" target="_blank">パターン認識と機械学習</a><br />
<a name="5">*5</a>: <a href="https://amzn.to/2Af7b0n" target="_blank">計算機プログラムの構造と解釈 第二版</a><br />
<a name="6">*6</a>: 相手にAPIが無くGUIを操作する必要があり、止むを得ず</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-35921429249953638072018-11-15T03:31:00.001+09:002018-11-17T03:02:38.619+09:00IBIS2018に参加してきました<div dir="ltr" style="text-align: left;" trbidi="on">
IBISは機械学習の理論寄りのワークショップです。今年で4回目の参加でした。<br />
<div class="link">
IBIS2018 | 第21回情報論的学習理論ワークショップ, 2018.11.4〜7, 札幌<br />
<a href="http://ibisml.org/ibis2018/" target="_blank">http://ibisml.org/ibis2018/</a>
</div>
そして感想を書こうと思った矢先に次のyokoiさんのツイートが流れてきて完全に同意。<br />
<div style="align: center; display: flex; justify-content: center;">
<blockquote class="twitter-tweet" data-conversation="none" data-lang="en">
<div dir="ltr" lang="ja">
IBIS、「最近こんなことを考えていて…」とプロの皆さまに雑に議論を持ちかけるだけでスーパー有益情報がゼロ秒で返ってくる神イベントなので、機械学習のユーザー側の領域に居る各位もどんどん参加すると良いと思います(ダイマ)</div>
— Sho Yokoi (@sho_yokoi) <a href="https://twitter.com/sho_yokoi/status/1059813936139264005?ref_src=twsrc%5Etfw">November 6, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
</div>
私はアプリケーション側の人間です。そして解きたい問題のサーベイをしても同じ設定の文献が見つからない事がよくある。サーベイの仕方が悪いのか、そもそも研究対象になっていないのか判断がしにくい。そこでIBISにいらっしゃる方々に話を振ってみるとスッと見た事のない文献を教えてもらえたり、それは研究テーマになりそうだね、と次に繋がったりするのが最高。<br />
<br />
あとは目の前で寿司を食っている人が3年前からTwitterでフォローしていた人だとわかったりするのが面白い。<br />
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
チュートリアル</h4>
山田先生の半教師付き学習におけるラベル無しデータの役割りの話はまさに疑問に思っていた所の解説。さらにMulti-Task Learningは業務で試したかったので丁度良いタイミング。後で既存実装はMatlab版があると教えていただけた、Python版の実装をするならMatlabの実装を使って答え合せができる。<br />
<br />
<a href="https://github.com/jiayuzhou/MALSAR">https://github.com/jiayuzhou/MALSAR</a><br />
<br />
Selective Inferenceは身に沁る話題だった。L1正則化で素性選択した機械学習モデルを日々運用していると、稀に誤った素性が選択されおかしな動作をして問いあわせが発生するので。LASSOに対する特徴選択バイアスの補正は計算可能との話なので、手元で試せたらやってみたいネタ。<br />
<br />
「クエリ可能な確率的組合せ最適化問題」は不完全な情報下で最適化問題を解くにあたってどこの情報を探れば良いかを求める物。組合せのパフォーマンスが不明でコストをかけて情報を得ていく設定は実務でよくあるのでこの手の話は好き。しかし終盤は難しくて敗北しました。ただ自分のやりたい事に近くて、どの方向に行けばいいかの示唆が得られたのが大きかった。<br />
<h4 style="text-align: left;">
企画セッション:離散構造処理</h4>
組合せパターンをグラフで表現して高速に演算する話。ZDD, BDDは全く知らない分野だったので聞けてよかった。そして問題構造にマッチしたら圧倒的に強い事がわかった。事例紹介に出てきた組合せパターンの数の60桁越え……。Pythonのライブラリもメンテナンスされており、今すぐに適用できる問題が近くに無いか探したくなる奴だ。<br />
<h4 style="text-align: left;">
招待公演 Multi-armed bandits and Boundary Crossing Probabilities</h4>
<a href="http://ibisml.org/ibis2018/files/2018/11/maillard.pdf" target="_blank">容赦無くテクニカルな内容</a>。バンディットアルゴリズムの理論については確率一致法やチェルノフ・ヘフディングの不等式で裾確率の上界を抑えるんでしょ程度の理解しか無かったのでついていけなかった……。ただ今の研究の雰囲気が知れたのは良かった。30年前に導かれた境界通過確率(Boundary crossing probabilities)を駆使しているのと、報酬の分布を一般化してK次元指数分布まで進んでいるっぽい。<br />
<h4 style="text-align: left;">
まとめ</h4>
北海道の食を堪能できました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-KruFhOAbreI/W-zLGNsQzII/AAAAAAAAAqE/qLrrhL7H3VQ-RaYwmeiHc6MsTQNITOXewCLcBGAs/s1600/IMG_9260.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://2.bp.blogspot.com/-KruFhOAbreI/W-zLGNsQzII/AAAAAAAAAqE/qLrrhL7H3VQ-RaYwmeiHc6MsTQNITOXewCLcBGAs/s320/IMG_9260.JPG" width="320" /></a></div>
<br /></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-88485883141254027392018-10-30T22:18:00.002+09:002018-10-30T22:21:48.051+09:00KDD2018 アドテク関連レポートを書きました<div dir="ltr" style="text-align: left;" trbidi="on">
職場のブログにKDD2018参加レポートを投稿しました。主にアドテク業界の人向けに書いてあります故、SSPやDSPといった用語の説明が無いのはご容赦ください。<br />
<br />
<div class="link">
KDD2018, AdKDD参加レポート<br>
<a href="https://techlog.voyagegroup.com/entry/kdd2018">https://techlog.voyagegroup.com/entry/kdd2018</a>
</div>
<br /></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-52130308681121780942018-10-21T17:26:00.000+09:002018-10-22T19:31:27.724+09:00何故予測が当たるだけではマズいのか、因果と機械学習<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://www.kdd.org/kdd2018" target="_blank">KDD2018</a>の感想です。AdKDDやネット広告方面は職場のBlogに書くので、こちらは他の話を。今年は因果推論のチュートリアルが超満員だったり、予測モデルの差別、解釈性と説明性「interpretable and explainable machine learning models」が注目されたりと単に予測するのでは無く運用課題の話が増えたのが印象に残っています。<br />
<h3 style="text-align: left;">
リスク予測とインセンティブデザイン</h3>
<a href="http://2.bp.blogspot.com/-QmGq-P-_u-w/W8s_ePXglAI/AAAAAAAAApU/xCNheCsDW6EBe6iLv24M1UPb3jEZqmu7ACK4BGAYYCw/s1600/aaa%25E3%2581%25AE%25E3%2582%25B3%25E3%2583%2592%25E3%2582%259A%25E3%2583%25BC.jpg" imageanchor="1"><img border="0" height="498" src="https://2.bp.blogspot.com/-QmGq-P-_u-w/W8s_ePXglAI/AAAAAAAAApU/xCNheCsDW6EBe6iLv24M1UPb3jEZqmu7ACK4BGAYYCw/s640/aaa%25E3%2581%25AE%25E3%2582%25B3%25E3%2583%2592%25E3%2582%259A%25E3%2583%25BC.jpg" width="640" /></a><br />
上の写真はDavid Hand氏による講演「Data Science for Financial Applications」の一場面です。自動車保険の保険料が女性に比べて男性が高い事に抵抗して行政上の性別を変更した男性*3の例が紹介されています (<a href="https://nypost.com/2018/07/30/man-legally-changes-gender-to-get-cheaper-car-insurance-report/" target="_blank">NEW YORK POSTの記事</a>)。<br />
事故を起す確率が高いと予測された顧客に高い保険料を課すのは自然なアイデアです。しかし事故発生確率と因果があるのは運転中のふるまいや走行時間であり、行政上の性別ではありません。運転中のふるまいを計測して保険料に反映していれば*1男性は安全運転をする事で低い保険料が得られました。相関はあるものの*2事故と因果の無い性別を利用して保険料を算出した事で、安全運転よりも性別を書き換える方にインセンティブが生まれてしまった例で興味深かったです。<br />
<h4 style="text-align: left;">
Anti-Discrimination Learning</h4>
機械学習モデルによる差別の話。チュートリアルの一つに「Causal Modeling based Anti-Discrimination Learning」がありました。相関ベースの物は知っていたのですが、Causal Modelingベースの物は知りませんでした。同じ時間帯は因果推論のチュートリアルに参加していたのでこちらは後で資料を見ました。<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-KQkpxRYfOOU/W8tbnv-Xv-I/AAAAAAAAApg/O8mVvQ2sV04zSgRtRwehTbIP_GszaLKqgCK4BGAYYCw/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-10-21%2B1.44.48.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://3.bp.blogspot.com/-KQkpxRYfOOU/W8tbnv-Xv-I/AAAAAAAAApg/O8mVvQ2sV04zSgRtRwehTbIP_GszaLKqgCK4BGAYYCw/s640/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-10-21%2B1.44.48.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">From: <a href="https://www.blogger.com/Anti-discrimination%20Learning:%20From%20Association%20to%20Causation" target="_blank">Anti-discrimination Learning: From Association to Causation</a></td></tr>
</tbody></table>
Fairnessの文脈でローンの融資可否判定機はよく出てきますが、融資可否の判定で収入のみが "explainable" な効果と表現しています。人種・住所がデフォルト率に相関があるため貸し倒れリスクの計算には使えるが、人種・住所が原因で融資を拒否するモデルでは説明がつかないという例。ちなみに彼らの手法はprotected attributeを変えた時の結果への影響の差を利用して予測モデルに差別があるかどうかを検出するといった物でした。<br />
<h3 style="text-align: left;">
予測が当たれば良いケース</h3>
Applied Data Science Trackの医療系セッションで緑内障診断のために網膜の厚さから視野感度を推定する事例*4が紹介されました。医療系では医師が予測モデルの出力を理解できるよう、説明性・解釈性が重要とよく説明されますが、そもそもメカニズム不明の疾病であれば相関を使って低コストで予測できる事に十分な意義があるんだなと感じました。<br />
<h3 style="text-align: left;">
まとめ</h3>
機械学習予測モデルが様々な場面で利用されるようになったため、我々開発者はより注意深く要件を見極める必要があります。予測モデルの出力が何に使われるのか、その値が誰にどんな影響を与えるのか。予測が当たれば良いのか、因果関係が必要なのか、顧客への説明性が重要なのか。製造業では不具合の根本対策が求められるため、異常を検知できるだけの予測屋では不十分だと聞いた事があります。そういった現場ではモデルのinterpretabilityとセットでcausalがより求められるでしょう。<br />
因果推論と機械学習の組合せは個人的に興味のあるトピックなので引き続き追っていきます。<br />
<br />
<h3 style="text-align: left;">
注釈と参考文献</h3>
[1] 現在ではtelematicsと呼ばれる機器を利用して運転中のデータを保険会社に送るのが一般的なようです。これを装備しない場合は保険料が高くなる。<br />
<br />
[2] 前提として機械学習では目的変数と相関のあるデータがあれば予測が可能になる。<br />
<br />
[3] <a href="https://nypost.com/2018/07/30/man-legally-changes-gender-to-get-cheaper-car-insurance-report/" target="_blank">Man legally changes gender to get cheaper car insurance: report</a><br />
<br />
[4] <a href="http://www.kdd.org/kdd2018/accepted-papers/view/estimating-glaucomatous-visual-sensitivity-from-retinal-thickness-by-using-" target="_blank">Estimating Glaucomatous Visual Sensitivity from Retinal Thickness by Using Pattern-Based Regularizat.</a><br />
<br />
<br /></div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-79774182459616120242018-07-15T01:23:00.001+09:002019-05-13T00:40:00.547+09:00Machine Learning Casual Talks #5 でMLシステムの実装・運用について発表しました<div dir="ltr" style="text-align: left;" trbidi="on">
ネット広告配信サービスのMLシステムをどのように作って運用しているかの話をしました。メルカリさんの発表が組織の課題を解決していく話になっているのに対して、私のは個人で好き勝手にやっていく話で非常にカジュアルだったと思います。チームの規模が違いますからね。<br />
<br />
スライド: <a href="https://speakerdeck.com/hagino3000/netutoguang-gao-pei-xin-sabisuniokerumlsisutemufalseshi-zhuang-toyun-yong" target="_blank">ネット広告配信サービスにおけるMLシステムの実装と運用</a> <a href="https://b.hatena.ne.jp/entry/s/speakerdeck.com/hagino3000/netutoguang-gao-pei-xin-sabisuniokerumlsisutemufalseshi-zhuang-toyun-yong" target="_blank"><img
src="https://b.hatena.ne.jp/entry/image/https://speakerdeck.com/hagino3000/netutoguang-gao-pei-xin-sabisuniokerumlsisutemufalseshi-zhuang-toyun-yong" /></a>
<br /><br />
<script async="" class="speakerdeck-embed" data-id="fb4f2694ea534b799260bd7cab41f013" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
<div class="link">
Machine Learning Casual Talks #5<br>
<a href="https://mlct.connpass.com/event/88797/" target="_blank">https://mlct.connpass.com/event/88797/</a>
</div>
<br />
発表の他には雑談で「GBDTの推論処理をWebサーバーに組みこむのはどうするのがいいか」なんて話が気軽にできたり、非常に楽しめました。
会場のメルカリ社は初訪問、人材のブラックホールなだけあって元同僚にも遭遇。関係無いけどメルカリ社からは、eBayが出してるような実験経済系の論文が出てくると面白いかなと期待しております。</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-18679240849373115472018-01-09T09:52:00.001+09:002018-01-30T23:43:55.967+09:00AdKDD & TargetAd 2017 まとめと感想<div dir="ltr" style="text-align: left;" trbidi="on">
改めて発表内容に目を通し直したのでまとめます。
KDD2017 2日目のWorkshop Dayはネット広告分野のワークショップであるAdKDD & TargetAd 2017に参加していました。AdExchange, DSP, Advertiser, Publisherと様々な立場での課題と解決策が聞けて面白かった。ペーパーと発表スライド、動画は以下のサイトから辿れます。<br />
<div class="link">
AdKDD & TargetAd 2017<br />
<a href="https://adkdd17.wixsite.com/adkddtargetad2017/accepted-papers" target="_blank">https://adkdd17.wixsite.com/adkddtargetad2017/accepted-papers</a>
</div>
<h4 style="text-align: left;">
Paper: Optimal Reserve Price for Online Ads Trading Based on Inventory Identification</h4>
<ul>
<li>AdExchangeの立場でRTBのReserve Priceの最適化</li>
<li>DSPが高額入札してくる枠で1st Priceと2nd Priceが乖離している時にReserve Priceを引き上げる事ができれば媒体収益を高められる</li>
<li>これを実現するためにDSPが高額入札してくる枠 (High-value inventory)の識別器とDSPの入札価格の二つの予測器を作った</li>
<li>High-valueかどうかの判定は判定機をネストする事でFalse Positiveを下げる</li>
<li>実験ではYahoo ads exchange (YAXR) のデータでシミュレーションをして8%の収益リフトを確認した</li>
</ul>
<div style="text-align: left;">
やりたくなる気持ちはわかるが、オークショナーがPublisherの味方をすると1st priceオークションに近づいていくので入札側としては嬉しくない奴。<br />
CPAの単位は明示されていないが10以上をHigh CPAと定義していたのでUSDだと思われる。どうでもいいけどReserve Priceよりも自分の回りだとFloor Priceの方が良く使われるのは何でだろう。</div>
<h4 style="text-align: left;">
Paper: MM2RTB: Bring Multimedia Metrics to Real-Time Bidding</h4>
<div style="text-align: left;">
</div>
<ul>
<li>RTBの新しい枠組みを提案</li>
<li>広告掲載ページのコンテキストにマッチした広告が表示されるようにする事で、長期的な広告掲載媒体の価値を高められるとしている</li>
<li>Viewabilityは2013年から増えていないらしい</li>
</ul>
<h4 style="text-align: left;">
Paper: Data-Driven Reserve Prices for Social Advertising Auctions at LinkedIn</h4>
<div style="text-align: left;">
</div>
<ul>
<li>LinkedInの広告枠におけるRTBのReserve Priceの最適化をした</li>
<li>既にリリース済</li>
<li>CPCの中央値の上昇率、入札金額の中央値の上昇率を指標として効果を測った</li>
</ul>
<h4 style="text-align: left;">
Paper: Cost-sensitive Learning for Utility Optimization in Online Advertising Auctions</h4>
<div style="text-align: left;">
</div>
<ul>
<li>RTB入札に使うコンバージョン予測モデルの損失関数と効用(DSPの収益)を関連づける</li>
<li>モチベーション: 損失関数にビジネスインパクトの影響を盛りこみたい</li>
<li>高CPA案件のコンバージョン予測精度向上は収益へのインパクトが大きいので、損失をCPAで重み付けする。(CPA配信が前提になっている?)</li>
<li>オフライン実験はCriteoのPublic Datasetを使用</li>
<li>オンライン実験は10億以上のIMPでA/Bテストした結果2%のROIの上昇となった</li>
</ul>
<h4 style="text-align: left;">
Invited Talk: Randall Lewis (Netflix)<br />Title: Incrementality Bidding & Attribution</h4>
<div style="text-align: left;">
</div>
<ul style="text-align: left;">
<li>Netflixの広告効果の因果効果推定と、実務で継続的にこれを行なうための工夫の話</li>
<ul>
<li>広告主は広告効果の計測に苦労しているとの事</li>
</ul>
<li>広告掲載を止めたら広告流入の減少と同じボリュームの検索流入が増えた事があった</li>
<ul>
<li>広告の効果があるように見えたのはセレクションバイアス</li>
</ul>
<li>IV法でTreatment Effectを推定。広告による増分と効果の減衰をモデル化する事で複数の広告の効果をモニタリングできる</li>
</ul>
<div style="text-align: left;">
機械学習と因果効果推論の組み合わせは面白い。ネット広告の効果測定と言ったら配信業者の立場だとRCTやれば良いってなるけど、広告主の立場だとRCTができないからIV法を使うんですね。</div>
<h4 style="text-align: left;">
Invited Talk: Susan Athey (Stanford)<br />Title: Machine Learning & Causal Inference for Advertising Effectiveness</h4>
<div style="text-align: left;">
</div>
<ul>
<li>機械学習と因果推論の違いと、両者の手法を織りまぜた手法の紹介</li>
<li>Doubly Robust Methods</li>
<li>多次元におけるAverate Treatment Effectの推定</li>
<li>機械学習の手法を因果効果推定に取りいれる</li>
<li>機械学習はパーソナルの予測のパフォーマンスが良いが、バイアスが入っているとの事</li>
</ul>
<div style="text-align: left;">
あまり聞きとれなかった……</div>
<h4 style="text-align: left;">
Paper: Blacklisting the Blacklist in Online Advertising</h4>
<ul>
<li>ここで言うブラックリスト = パブリッシャーがAdvertiserをBANしているリスト</li>
<li>BANされている所に対して入札する際の予測タスクの計算コストがもったいない</li>
<li>オークションのWin Rateが異常に低い所には入札を止める。</li>
<li>結果、入札を14%減らしたがIMPが6%増えた。さらにPacing Engine(予算消化速度調整)が良い感じになった。</li>
</ul>
<h4 style="text-align: left;">
Paper: Anti-Ad Blocking Strategy: Measuring its True Impact</h4>
<ul style="text-align: left;">
<li>Anti-Ad Block (AdBlockを解除しないとページを見せないよ、って奴) の効果ってどう計測したらいいのか? という話。</li>
</ul>
<div>
Ground Truthが無いの大変そう。Adobeの人がなんでこんな事やってるんだろうと気になった。</div>
<h4 style="text-align: left;">
Paper: An Ensemble-based Approach to Click-Through Rate Prediction for Promoted Listings at Easy</h4>
<div style="text-align: left;">
</div>
<ul>
<li>Contextualな素性を使ったモデルとHistoricalな素性を使ったモデルのアンサンブルによるCTR予測</li>
<li>訓練データをCold(IMPが少ない時点のデータ) とWarmに分割して、前者はContextualなモデルの訓練に使う</li>
<li>Contextualなモデルはコールドスタート時にうまく動く</li>
<li>アンサンブルモデルは2つの予測器のoutputとlog(imp数)を入力とする。</li>
</ul>
<h4 style="text-align: left;">
A Practical Framework of Conversion Rate Prediction for Online Display Advertising</h4>
<div style="text-align: left;">
</div>
<ul>
<li>RTB入札におけるCVR予測について、自分がオークションに勝ったIMPしか結果を観測できないため真のCVRと観測したCVRに差が出る</li>
<li>これはCVRのOver Predictionの原因となり、Over Predictionはビジネスの損失となる。(CPA配信において)</li>
<li>訓練データのCVRにはバイアスが含まれる、これを除去したCVR予測値を求める方法を開発した</li>
<li>キャンペーン開始時にはGDBTで予測すると同時に、予測値が信頼できる素性のサブセット(Data-Driven Tree)を育てていく、次のフェーズではData-Driven Treeで予測を行なう</li>
</ul>
自分達が配信する前からコンバージョン通知は無差別に飛んでくるので、それを使えばコールドスタートできる。みたいな事が書いてあって裏技かよって思った。<br />
「観測したCVR > 真のCVR」の証明があるけど、「リクエストに対する入札金額が対数正規分布する」という仮定はどこから出てきたのだろう。バイアスが除去できる理由がよくわからなかったので後でちゃんと読む。<br />
<h4 style="text-align: left;">
Paper: Deep & Cross Network for Ad Click Predictions</h4>
<div style="text-align: left;">
</div>
<ul>
<li>DNNによるCTR予測</li>
<li>Feature Engineering不要</li>
<li>既存のDNNによる手法 (Deep Crossing) よりもメモリ使用量が少ない</li>
</ul>
予測性能が良いという点よりも、素性エンジニアリング不要という点のメリットが大きいなと感じた。<br />
<h4 style="text-align: left;">
Paper: Profit Maximization for Online Advertising Demand-Side Platform</h4>
<ul style="text-align: left;">
<li>DSPの収益を最大化するRTB入札戦略</li>
<li>目的関数の約定金額の部分が非凸になるので、ラグランジュ緩和する</li>
</ul>
広告主予算と消化速度(期間?)の両方を制約としているので運用の使い勝手はかなり良さそう。ただ、予めInpression Typeの出現パターンを列挙しないといけないのがつらいのでは。理想の入札ポリシーってこんなんだろうなと思ってた奴が出てきて、かつ非凸になる問題をうまく緩和していて感動した。<br />
<h4 style="text-align: left;">
Invited Talk: Alex Smola (Amazon)<br />Title: Users & Time</h4>
<div style="text-align: left;">
</div>
<ul style="text-align: left;">
<li>LSTMやRNNの話にはじまり、サービスの利用ユーザーが死んでいるか生きているかの判定手法の話へ</li>
<li>Survival Analysis 101, Cox Model</li>
<li>すぐに帰ってくるか、翌日帰ってくるかアプリ?によって傾向は異なる</li>
<li>Recommender systems, not recommender archaeology (考古学じゃない、未来を予測せよ)</li>
<li>Netflix public dataset is wrong</li>
<ul>
<li>映画が賞を取るとpredicted ratingが上がる全然consistentじゃない</li>
<li>賞を取ってから数ヶ月で下がる</li>
</ul>
<li>Sequence modelはUser return times、Recommender system、User activityの予測に使える</li>
</ul>
<h4 style="text-align: left;">
Invited Talk: Thorsten Joachims (Cornell)<br />Title: Learning from Logged Interventions</h4>
<div style="text-align: left;">
</div>
<ul>
<li>バンディットアルゴリズムで生成されたデータからのバッチ学習</li>
<li>Selectionバイアスがかかっている事に注意 (選択は自分がしている)</li>
<li>これを学習する</li>
</ul>
<h4 style="text-align: left;">
Paper: Attribution Modeling Increases Efficiency of Bidding in Display Advertising</h4>
<ul style="text-align: left;">
<li>RTB入札のEVB(Evaluated Value Bidder)は、非繰り返し2ndプライスオークションの際には最適</li>
<li>だが同じオーディエンスに繰り返し表示する前提ではさらに改善できる</li>
<li>アトリビューションモデルを使ったRTB入札ポリシーを提案</li>
<li>以前のクリックの影響を考慮してIMPの価値を割引く</li>
</ul>
<div>
CriteoなだけあってHashing Trick推し</div>
<h4 style="text-align: left;">
Paper: Ranking and Calibrating Click-Attributed Purchases in Performance Display Advertising</h4>
<ul style="text-align: left;">
<li>Ordinal regression is a good strategy for ranking</li>
<li>Sigmoid function is not good for small probability</li>
</ul>
最後の発表、このあたりになると疲れてあまり聞きとれませんでした</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-49873825412869483572017-11-07T09:45:00.000+09:002018-01-09T01:55:32.538+09:00オライリーから「仕事ではじめる機械学習」という本を出しました<div dir="ltr" style="text-align: left;" trbidi="on">
オライリーから「仕事ではじめる機械学習」という本を出しました。技術書典2で頒布した同人誌がベースで引き続き <a href="https://medium.com/@chezou" target="_blank">@chezou</a>, <a href="https://medium.com/@tokoroten" target="_blank">@tokoroten</a> 両氏と共著です。実務者向けの内容で対象読者は情報システム開発現場のエンジニアです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-gdqCNanKVUs/WgD1f9k3EoI/AAAAAAAAAl8/P7sCP0UONpcPj6Ixy5Rr8y_DOQYtLAf6ACLcBGAs/s1600/picture_large978-4-87311-821-5.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="513" height="320" src="https://4.bp.blogspot.com/-gdqCNanKVUs/WgD1f9k3EoI/AAAAAAAAAl8/P7sCP0UONpcPj6Ixy5Rr8y_DOQYtLAf6ACLcBGAs/s320/picture_large978-4-87311-821-5.jpeg" width="248" /></a></div>
<div class="link">
O'Reilly Japan - 仕事ではじめる機械学習<br />
<a href="https://www.oreilly.co.jp/books/9784873118215/" target="_blank">https://www.oreilly.co.jp/books/9784873118215/</a>
</div>
<br style="clear: both;" />
私は同人誌版で「ゲームの試合結果データのマイニング」の章を書きましたが、今回はより実務的な内容として効果検証について書いています。主に仮説検定と因果効果推定です。内容は<a href="https://medium.com/@chezou/%E3%82%AA%E3%83%A9%E3%82%A4%E3%83%AA%E3%83%BC%E3%81%8B%E3%82%89-%E4%BB%95%E4%BA%8B%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E3%81%8C%E5%87%BA%E7%89%88%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99-cf835ff4c128" target="_blank">Chezouさんの告知</a>を参照していただくとして、補足とバックグラウンドを紹介します。<br />
<h3 style="text-align: left;">
お前だれよ</h3>
インターネット広告配信システムの配信ロジックの開発をしています。2015年まではデータを集める所から分析基盤の構築を経てBIツールの導入、バッチ処理環境へのワークフローエンジン投入といった足回りの仕事がメインでした。今は足回りが整ってきたのもあり、その上で動かす機械学習モデルの訓練バッチやアプリケーション側の予測処理を実装しています。<br />
<h3 style="text-align: left;">
特徴</h3>
エンジニアがプロジェクトをどう進めるかといった内容ですが、著者が3人ともプロダクションに投入してなんぼの実務者である事から、稼動環境としてHadoop Familyのプロダクト名がさらっと出てきたり、現場であった怖い話が随所に出てきます。アルゴリズムやモデルの詳細については主題から外れているため解説はありません。<br />
<h3 style="text-align: left;">
書けなかった事</h3>
ワークフローエンジンやバッチ処理の設計については時間が許せば書きたかった所です。<br />
機械学習が絡むバッチ処理は例えば複数の予測器を訓練した後にそれぞれの予測結果を入力として凸最適化を行ない結果を保存といった、依存関係をもった複数のタスクが連携する物となります。また、本番で利用しているモデルの他にハイパーパラメータを変えた物や新しく検証したいモデルの訓練・評価も日々のバッチ処理に載せたくなるでしょう。訓練の前に必要な中間テーブルの作成やデータの前処理、後に続くの評価レポートの作成やモデルのシリアライズも含めると複雑なパイプラインになりがちです。タスク毎に必要な計算資源も異なるため、一つのサーバーで全てを終らせるよりも複数の実行環境<sup>*1</sup>を組合せて利用した方が効率的です。<br />
ワークフローエンジンを利用する事でタスク間の依存解決や実行順序・並列実行の制御をまかせる事ができます。障害発生時の影響範囲の把握・リトライ・リカバリが容易になる点も運用面で大きなメリットもあります。<br />
<h3 style="text-align: left;">
一体何を供養していたのか</h3>
<a href="https://kuyodera.github.io/" target="_blank">技術書供養寺</a>の時に内容告知を書いていなかったのでこの機に解説します。同人誌版はボツになったデータ分析ネタを集めようという事で、私はElo ratingやStarCraftの勝敗予測手法を紹介し、スプラトゥーンのブキの強さ分析を行ないました。分析はstat.inkのデータを使いBradley–Terryモデルにあてはめて最尤推定でステージ毎のブキの強さを求めるといった内容です。ダイナモローラーが強かったですね。これは <a href="http://www.kdd.org/kdd2017/papers/view/statistical-emerging-pattern-mining-with-multiple-testing-correction" target="_blank">Statistical Emerging Pattern Mining with Multiple Testing Correction</a> のデータ集めを手伝った際に行なった分析です。<br />
<h3 style="text-align: left;">
大変ありがたい書評</h3>
<div class="link">
「仕事ではじめる機械学習」を読んだメモ - k11i.biz<br />
<a href="http://k11i.biz/blog/2017/10/26/ml-at-work-book/" target="_blank">http://k11i.biz/blog/2017/10/26/ml-at-work-book/</a></div>
<blockquote class="tr_bq">
一方で「整形されていないログとかはあるんだけど、ここから特徴エンジニアリングをどうやればいいの?」とか「リアルタイム予測に耐えうるような予測モデルと特徴ベクトルってどうやって作ってどこに保持すればいいの?」とか「コールドスタート問題は結局どうやって乗り換えればいいの?」といった具体的かつ詳細な実現方法をこの書籍で身につけるには、ちょっと難しいかと思います。</blockquote>
確かにこれらの点は自分も自信が無く、これがベストと言いきれないので知りたい。コールドスタートは事前分布を仮定して事後分布を更新していく方法だとか、バンディット使ったり、データが無い所は決めうちロジックが走るとか、割り切り面も含めて。応答速度の兼ね合いで訓練処理と予測処理の言語が異なるケース<sup>*2</sup>はどうしてるんでしょうね皆さん。<br />
<br />
<div class="link">
「仕事ではじめる機械学習」を読んだので作者に媚を売る - Stimulator<br />
<a href="http://vaaaaaanquish.hatenablog.com/entry/2017/10/29/222239" target="_blank">http://vaaaaaanquish.hatenablog.com/entry/2017/10/29/222239</a></div>
<br />
媚を売られてしまった。<br />
<blockquote class="tr_bq">
個人的にワークフローフレームワークは嫌いで機械学習プロジェクトでは使いたくないとまで思っているんですが、まあ便利なので書籍内で取り上げてもらって筆者のプロの方々がどう考えているのか知れれば良かったなあ〜みたいな感じなので</blockquote>
ワークフローエンジンについては上に書いた通りです。今はAWS Batchのようなクラウドサービスで機能が提供されているので導入しやすいかもしれませんね。導入したらしたで単一障害点になる奴なので、可用性の担保をまかせられると安心。<br />
<blockquote class="tr_bq">
AWSの新しいサービスを触る時間でKaggleをやったほうが良いのでは?</blockquote>
すごい良くわかる。ここは自分もどうすべきか悩んでいる所。ただチームメンバーのサポートがあるなら、リリースするのに何が必要か抽象レベル<sup>*3</sup>での理解があれば良いかも。仕事を振る側からするとKaggleっぽい仕事に集中したいならKaggleっぽい仕事を切り出すし、ビジネス寄りがやりたいなら要件定義をまかせるので、チーム内でのスタンスを明確にするとやりたい仕事が降ってくるとは思う。<br />
<br />
------<br />
*1: GCPを使っているならGCE・BigQuery・Cloud Dataflow・Cloud Dataprocあたりの組み合わせ<br />
*2: 自分は予測処理を自前実装できるロジスティック回帰等を使いがち<br />
*3: 監視やスケジューラー、計算資源の確保といった単位
</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.comtag:blogger.com,1999:blog-3809267930970258622.post-2423777038915613832017-08-28T08:33:00.000+09:002018-07-27T12:59:32.985+09:00KDD2017感想 Tutorial Day: Asking the Right Business Questions?<div dir="ltr" style="text-align: left;" trbidi="on">
データマイニングの国際会議である<a href="http://www.kdd.org/kdd2017/" target="_blank">KDD</a>に参加してきました。まずは1日目のチュートリアルの感想です。<br />
<div style="width: 100%;">
<a href="https://4.bp.blogspot.com/-mz95yyC46s0/WaEoC1NsTDI/AAAAAAAAAi4/DxBFlYwIf1Yl1BDC5-yqzyDwGFGr5dHkgCLcBGAs/s1600/halifax.png" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="849" data-original-width="1500" height="362" src="https://4.bp.blogspot.com/-mz95yyC46s0/WaEoC1NsTDI/AAAAAAAAAi4/DxBFlYwIf1Yl1BDC5-yqzyDwGFGr5dHkgCLcBGAs/s640/halifax.png" width="640" /></a><a href="https://4.bp.blogspot.com/-mz95yyC46s0/WaEoC1NsTDI/AAAAAAAAAi4/DxBFlYwIf1Yl1BDC5-yqzyDwGFGr5dHkgCLcBGAs/s1600/halifax.png" imageanchor="1"></a></div>
<h3 style="text-align: left;">
From Theory to Data Product: Applying Data Science Methods to Effect Business Change. </h3>
<a href="http://www.t4g.com/kdd2017/" target="_blank">http://www.t4g.com/kdd2017/</a><br />
<br />
ビジネス現場におけるデータ分析プロジェクトをいかに回すかといったテーマ。T4Gというカナダのコンサルティング企業が実際に使っているフレームワークに沿った内容で、次の3部構成。<br />
<ol style="text-align: left;">
<li>プロジェクトの初動に何をすべきか。業界とトップダウン or ボトムアップで何が変わるかのケーススタディ</li>
<li>具体的なアクション導き出すための「Right Question」</li>
<li>アジャイルプロセスを応用した意思決定</li>
</ol>
講義に加えてそれぞれの課題が渡されてグループディスカッションを行なった。どちらかといえば、現場リーダー向けの話。<br />
<br />
参加者は20名程度で他のチュートリアルと比較すると少なかったが、内容に対する反応からほとんどは実務者である事が見てとれた
<a href='#footnote1'><sup>*1</sup></a>。そして常日頃から「実装に集中したいから、腕の良いプロジェクトマネージャーが降ってこないかな」と思っている自分にとっては得るところが大きかった。特にプロジェクトの具体的なアクションを決める際の「Right Questionの導出」のくだりが印象的だった。そこからActionableで実行すると計測可能な結果が得られる物とせよ、という話に続く。<br />
<br />
プロジェクトで具体的に何をするか(作るか)を決めるのは難しい。所謂データ分析チームで仕事をはじめて2年経つが、半年以上かけて開発に取り組んだ予測器が実は不要だったケース、課題解決のアプローチを間違えたまま進めて成果に繋がらなかったケースを見てきた。<br />
例えば「事業の粗利率が低い」みたいな課題があったとして、タスクをKaggleの出題レベルの粒度まで分解して落とし込むには課題解決のための道筋と具体的なアクションを決める必要がある。しかしこの能力はKaggleのランキングの様に可視化されない物であるし、能力のある人間の採用も難しい気がする。そもそも職場でコンサルっぽい職種の採用をしていないので、迷いなくコードを書くためには自分ができるようになる必要があるなと思った。<br />
<br />
参考: <a href="http://www.t4g.com/insights/asking-right-business-questions/" target="_blank">T4G: Are You Asking the Right Business Questions?</a><br />
<div>
<h3 style="text-align: left;">
A/B Testing at Scale</h3>
<a href="http://exp-platform.com/2017abtestingtutorial/" target="_blank">http://exp-platform.com/2017abtestingtutorial/</a><br />
<br />
午後はMicrosoftのプロダクト改善にまつわるA/Bテストの話。月に1,000個のA/Bテストを回せるシステムがどうなっているかというと、いろいろ凄かった。<br />
実験対象のユーザー群の抽出がシステム化されており、過去のデータを使ってA/Aテストをして即座に実験が開始できるようになっていたり。ユーザーを保護するために結果の悪い実験のアラート通知と自動停止。相互作用のある実験を同時に流すとテストにならないため、実験同士の相互作用を検出したり。<br />
システムの話だけでなく、プロダクト改善のためには何を指標として計測すべきかという根本の話もあって良かった。<br />
<br />
本会議のセッションでも統計的検定やp値ハック、因果推論とからめた施策の効果測定ネタがあったので、データマイニング界隈でホットなトピックの一つなのだと感じた。<br />
<br />
2日目の感想、AdKDDのまとめに続きます。</div>
<br>
----
<br>
<a name='footnote1'>*1</a>: グループ課題の問題文の1行ごとに「Flequently……」と呟く人がいて面白かった
</div>
hagino3000http://www.blogger.com/profile/11427226166654794709noreply@blogger.com