2023-05-16

zenn.devを使いはじめました

テクニカルな内容はzennに書いていこうと思います。

https://zenn.dev/hagino3000

最初の投稿は臨床診断支援システムの歴史についてです。
https://zenn.dev/ubie_dev/articles/62dcaf309c78b3






このエントリーをはてなブックマークに追加

2021-11-01

「施策デザインのための機械学習入門」が素晴しい内容だった

読んだので感想を書きます。「手元のデータに当てはまりの良い予測モデルを本番適用してもビジネス的に良い結果が得られない」という現場で頻発する課題に対して明快なアプローチと手順を示しており、機械学習がワークするために必要な要素がクリアになりました。

施策デザインのための機械学習入門〜データ分析技術のビジネス活用における正しい考え方
技術評論社 (2021/7/30)
齋藤 優太 (著), 安井 翔太 (著), 株式会社ホクソエム (監修)
Kindle版/紙版両方あり

目次と構成

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

感想

著者はまず1章で機械学習の実践でありがちな2つのパターンを批判しています。
ひとつ目は予測を用いた施策は本来意思決定の問題であるはずなのに、予測の問題として解いてしまうという物。意思決定の性能で評価すべき問題を損失関数最小化の問題として解くことで誤った意思決定を導きます。ふたつ目は過去の施策の影響を受けたデータをナイーブに扱って新たな施策の評価を行なう物で、本来知りたい意思決定の性能の良さが推定できていません。

機械学習を用いた施策の開発過程において、意思決定の性能ではなく予測性能を追い求めてしまうのは現場でよくみられる姿なので1章から胃が痛くなります。ほとんどは意思決定の性能が評価できるデータが無いか集められないパターンだとは思いますが「損失が低いのだからビジネス的に良い結果が得られるはずだ」と予測精度のメトリクスの良さとビジネス的な良さを混同してしまう人もいます。これがやっかいなのは本番環境におけるA/Bテストで良い結果が得られなかったときにパラメータチューニングや特徴量エンジニアリングに目を向けてしまい、それ以前の問題である可能性を考えられなくなってしまう事です。AIベンチャーに相談をするとその予測に意味があるのかどうかをすっとばして予測モデルの実装の話が始まってしまうのも似た話でしょうか (私の経験上はそうです)。

著者はこの2つの落とし穴に対して解決策となるフレームワークを提示しています。
  1. KPIを設定する
  2. データの観測構造をモデル化する
  3. 解くべき問題を特定する
  4. 観測データのもを用いて問題を解く方法を考える
  5. 機械学習モデルを学習する
  6. 施策を導入する
このフレームワークの一連言語化が素晴らしいなと思いました。私は広告分野の人間なので広告分野におけるデータの観測構造由来のバイアスを除去する論文は目にしますが、このフレームワークはあらゆる分野で適用可能な一般化がなされています。
現実世界にはデータのノイズが大きい場合や環境の変化が激しい場合、目的変数に関係する特徴量が取得できない場合など、データや機械学習を活用すること自体が無謀な状況はいくらでもあります。このような現実において我々が心得ておくべきなのは、機械学習が機能する状況を整えることができなければ、機械学習を活用することが有効な場面であるか否かという情報すら得られないということです。
著者がこの部分に着目する理由も明快で次のように説明されています。
なお、巷に溢れている特徴量エンジニアリングやハイパーパラメータチューニングもしくは論文で議論されている最先端の深層学習手法などは、基本的に真の性能を経験性能で精度良く近似できるということを(しばしば暗黙の)前提としています。

(中略)

おおよそ機械学習という言葉から連想される技術は、機械学習の実践において下流に位置するステップに関するものだったのです。本書の焦点は、施策の性能につながる問題を機械学習に解かせる部分であり、解くべき問題が与えられた状態でその問題をいかにうまく解くかという部分ではありません。効果的な施策につなげるためには、精度追求に関してあれこれ試行錯誤するよりも前に、フレームワークとしてまとめた手順を上から順に漏れなくクリアしておく必要があるのです。

 2章は観測データを用いて意思決定の性能を推定する方法について解説しています。私はIPWやDoubly Robust推定量には馴染みがあったのですが「データが観測される確率の逆数をsample weightに仕込めばよい」と単なる暗記に近かった部分がしっかり式で丁寧に説明さていたので助かりました。知りたい真の損失関数と手元のデータを使ったときの損失関数の差を打ち消す手順がわかるので応用が効くようになるでしょう。

3章以降は著者の提案するフレームワークの実践になっています。私は特に5.3章のプラットフォーム全体で観測される目的変数を最大化するが興味深い設定でした。施策を実施したものの他の部分のKPIを悪化させたり、単なる需要の先食いになるのはよく聞く話です。

まとめ

機械学習の実践に取りくんでおり、特にビジネスKPIの改善に責任を持つ機械学習エンジニア*1にとって頼りになる内容である事は間違いないでしょう。どのような損失関数を採用すべきか正解は無く自分で考えるべきだと、ある所から先は切って捨てている所も好感を持ちました*2。

1章で学習および性能評価がやりやすいデータを意識して普段から集めておく事をさらっと促していますが、意思決定方策のオフライン評価にはとても重要なことがわかります。参考文献に載っていたSpotify Researchの論文*3を読みましたが、オフライン評価のために一様ランダムに行動を選択したログを収集していました。

本書の焦点は機械学習がワークするための前提でしたが、特徴量エンジニアングやハイパーパラメータチューニングの記事と同じぐらいこれらの記事がインターネットに出てきてくれると嬉しいなと感じました。


このエントリーをはてなブックマークに追加

2021-08-24

ビジネス価値を生むことに責任を持つために実践している内容を『仕事ではじめる機械学習 第2版』に書きました

第2版がでました。

仕事ではじめる機械学習 第2版
オライリー・ジャパン (2021年04月)
有賀 康顕、中山 心太、西林 孝 著
電子版版/紙版両方あり

私は7章の「効果検証」と13章の「オンライン広告における機械学習」を執筆しました。12章は書き下し新章です。既に発売からは時間が経っているのでこの2つの章の裏話というか思想について解説します。

PoC貧乏という言葉があるように機械学習を用いてビジネス価値を生む施策は失敗しがちなことが知られてきました。前提として本書はその様な失敗しやすい施策をできるだけ成功に近づけるにはどうしたら良いかを広く扱っています。

ビジネス価値を定義する

予測を当ててどんな価値を生みたいのかを定義しないと開発は始まりません。13章では広告配信事業者の顧客である広告主の効用を選びました。オンライン広告ではオークションによる広告枠の売買が行なわれます。広告主は財の買い手となるので経済学の言葉を使うと広告主の効用は買い手の効用 (buyer's utility) に相当します。広告の場合、他には広告枠の売り手の利益 (seller's profit) や交換によって生まれる価値 (welfare) といった価値を選ぶこともできます。これはどんなビジネスをしているかによって変わるため自らの状況に照しあわせて選択するものです*1。

意思決定方策への落しこみ

次に広告主の効用を最大化する行動を取るためにはどうしたら良いかを考えます。広告主の効用は広告枠の買いつけコストと広告を表示する事で得られる価値の差となります。この効用を定式化すると広告を表示した時にポジティブな反応が得られる確率と市場価格の予測が必要なことがわかります。

13章の前半は予測を元に期待効用を最大にする入札金額を数理最適化で求めれば良いという流れにしました。ここは価値を生むための意思決定方策をどう設計していくかの解説になっています。

308ページ 12.2.2節 より

明確に定式化できなくとも予測が当たることでビジネス価値が生まれる機序が説明できることが重要だと考えています。

ビジネス指標を使った予測モデルの評価

7章は効果検証がテーマですが、ここは一貫してlogloss等の予測精度ではなくビジネスインパクトで予測モデルの評価をしようという話です。予測が当たったとき外れたときのビジネスインパクトを金額換算できるか考えてみましょうと。

そしてビジネスインパクトを正しく推定するためにはバイアスを除去した比較が必要であること、サンプルから母集団における効果を推定することでプロダクトへの影響を限定して本番環境で実験できることを統計的仮説検定と因果推論の導入を含めて解説しました。比較が重要なのは機械学習を使わなくとも従来通り人間がやるのと何も変わらなかったりするからです*2。

まとめ

私が担当した章について思想を含めて紹介しました。いずれのトピックにしても深い所までは解説していないので、必要であれば適宜専門書に進んでもらえればと思います。

関連する書籍として技術評論社から『施策デザインのための機械学習入門』が出たので後ほど紹介記事を書く予定です。序盤から「機械学習を使った施策は予測ではなく意思決定の問題として捉えよう」とあり、他にもなるほどそういう表現があったかと膝を打つ場面が何度もありました。

本を執筆して、どうも自分はソリューション設計に興味があるらしいことがわかったので次はそんな話が書けたらと思っています。現場あるある話として「コンペだと特徴量減らすモチベーションないけど、効くかどうかわからない特徴量もりもりのモデルは推論APIの実装時に自分の首締めることになるよ」とかそういうのも大量にあるんですが。


[1] 広告に限らず売り手と買い手が存在する両面市場においてはこのパターンがはまります。

[2] 人間と同じ性能が出せれば十分なケースもあります。どこまでの性能を求めるかはプロジェクト次第です。


このエントリーをはてなブックマークに追加

2020-07-03

Data validation for machine learning 読んだ

Breck, Eric, et al. "Data validation for machine learning." Conference on Systems and
Machine Learning (SysML). https://mlsys.org/Conferences/2019/doc/2019/167.pdf . 2019.

読み手のコンテキスト

現職で機械学習予測モデルをプロダクトに投入する様になって3年程経った。そうもなると開発時に想定していた訓練データの分布と現状の分布が乖離して、予測の動作不良を引き起すケースがしばしば見られる様になった。明らかな予測の不具合として目立っていなくとも性能が落ちている部分はもっとあるはずで、これに早く気づいて対応したいモチベーションがある。かつ運用専任メンバーはいないので、できるだけ運用は手を抜きたい。

概要

著者らはData Validationシステムを開発した。これはGoogleで稼動中のMLプラットフォーム(TFX)にデプロイされており数百のプロダクトで毎日利用されている。論文の構成はData Validationシステムを構成する3つのコンポーネントであるSingle-batch validation・Inter-batch validation・Model testingと、それぞれが解決できるデータの異常パターンと実装した提案手法の解説。最後にGoogleにおける利用状況と実際のサービスにおける検出例 (ケーススタディ) の紹介。

新規性および貢献

MLコンテキストに適用できるData Validationの手法について提案した。

Data Validationはおなじみの概念 (例えば Databaseの分野では) であるが、ML Pipelineの文脈で既存の手法をそのまま適用する事ができない。例えばデータの生成元とMLパイプラインが分離されているので、流れてくるデータを元にschemaを決める事になる。Databaseの世界では先にschemaを決めるので順序が逆。またカイ二乗検定 (chi-square test)の様な手法はMLパイプラインが扱うスケールのデータでは敏感すぎる。よって既存のData Validationを見直してMLコンテキストにマッチする手法を開発した。

Data ValidationはTFXの設定に基づいて開発されたが、別のシステムでも利用可能な様に提案手法をOSSライブラリとして実装もした。

Single-Batch Validation

一度の訓練に利用される訓練データのvalidation。人々は訓練データに対してstableであり続ける何らかの特性を期待している。そのためexpert domain knowledgeによって与えられるデータの特性からの乖離を異常とみなす。これを検出するためにスキーマ定義によるvalidationを開発した。

例えばあるフィールドの出現しうるカテゴリ値を定義できたりする。


ただしMLモデルは数千の素性を利用するため、人がスキーマ定義をゼロから作るのは現実的ではない。この問題を緩和するのに、スキーマの初期バージョンをデータから作成する機能を用意した。バリデーションエラーとなるデータが見つかった時にはスキーマの変更差分も自動で生成する。

Inter-Batch Validation

Concept-Driftの様な一回分の訓練データだけで判断できないタイプのエラーを検出する仕組み。エラーの例として次のパターンを挙げている。
  • Feature Skew
    • 例えば訓練時の前処理と推論時の前処理の差から生まれる。訓練時の前処理と推論時の前処理では求められる性能特性が異なるので、別のコードが使われる。そのため、片方だけ修正してしまうといった事が発生する。
  • Distribution Skew
    • 時間経過による分布の変化
  • Scoring/Serving Skew
    • 多く配信された広告データはサンプルが多いが、少なく配信された広告はデータ少ない
    • MLシステム自身によって発生させたバイアス
これらのエラーを検知するには各バッチ毎に訓練データセット同士の分布の距離をみれば良い。これは分布間の距離を定量的に求めるメトリクスに依存する。統計的検定やKL-Divergenceは最初の一歩となる、しかし値の解釈や閾値の設定が難しかったりする。統計的検定はサンプルサイズが大きいとsensitiveになりすぎる。よって実際に使っているのは分布pとqの距離を次の式で定義したものである。

i は "each value i" とあるから各カテゴリだろうか (自分の理解があやしい)。カテゴリ値ごとの出現率の差なので非常に理解しやすく調整が容易。

Model Unit Testing

例えば前処理で対数変換をしている時、その前処理コードは暗黙的に訓練・予測データに正の値を期待している事になる。よってこの暗黙的な期待が満たされない時にコードはクラッシュしてしまう。推論時にクラッシュしたらサービスに影響が出てしまう。

このエラーに気づける仕組みとして前述のスキーマ定義を用いた fuzz testing アプローチを採用した。Single-Batch Validationで作成したスキーマ定義を基にデータを生成して学習コードを実行する。こうする事でスキーマ定義に現われていない暗黙の期待を洗い出す事ができる。(クラッシュしたらわかる)

Empirical Validation

デプロイしたValidationの利用状況。表1がわかりやすかった。

感想

正に自分が直面している課題を解決する内容だったので先人に感謝。
データエラーの例が生々しくて良かった。思いあたるフシがありすぎて「推論時と訓練時の前処理が別のコードで動いていて片方だけ直してしまうだと……うっ頭が」という状態で読んだ。しかし他の会社でも同じ事が起きているんだなと若干ほっとした。
次はOSS実装版のTensorflow Data Validationを触ってみようと思います。



このエントリーをはてなブックマークに追加

2020-05-05

『効果検証入門』がアプリケーション開発エンジニアにとって得る物が多い本だった

読みました。アプリケーション開発エンジニア視点で読んで同僚に勧められる素晴しい内容でした。本稿はエンジニア視点のレビューになります。

効果検証入門〜正しい比較のための因果推論/計量経済学の基礎
技術評論社 (2019/1/18)
安井 翔太 (著), 株式会社ホクソエム (監修)
Kindle版/紙版両方あり

目次と構成

序 嘘っぱちの効果とそれを見抜けないデータ分析
1章 セレクションバイアスとRCT
2章 介入効果を測るための回帰分析
3章 傾向スコアを用いた分析
4章 差分の差分法(DID)とCausalImpact
5章 回帰不連続デザイン(RDD)
付録 RとRStudioの基礎
終 因果推論をビジネスにするために

まず効果検証とは何かという導入と共にビジネスの現場でありがちな誤りのある検証について解説があります。この誤りの原因となるセレクションバイアスと理想的な比較方法であるランダム化比較試験が1章です。以後の章はランダム化比較試験ができない状況において効果検証にどう取り組むか主要なアプローチ毎の手法の解説と実践例があります。

1章 セレクションバイアスとRCTより

想定読者は「効果検証を行なう必要のあるエンジニアやデータサイエンティスト」となっているのでバリバリ手を動かしてコードが書ける人が対象なのでしょう。文中の操作は全てRのコードが付いています。私はRがわからないのでPythonで再実装しつつ読み進めました。

どんな視点で読んだか

まず私はプロダクト開発エンジニアで、説明のためのモデルよりも予測のためのモデルを作る事が多く、Rはほぼ使った事がなく普段はPythonを書く人間です。機能リリース後の効果検証は解釈の容易さから主にランダム化比較試験を採用しますが、稀に適切なランダム割り当てができないケースで観察研究に頼る事があります。

良かった点

予測のためのモデル(機械学習)に慣れ親しんだ人間が持つ疑問に答えている

機械学習エンジニアは因果推論・計量経済学で用いられる線形回帰モデルよりも予測と汎化性能を重視したより複雑なモデルを扱います。なので当然「クロスバリデーションしなくていいのか?」とか「対数変換やスケーリングした方が精度が出るのでは?」と思うわけです。この様な予測をメインにしている人が効果検証における線形回帰モデルを見た時の違和感の解説が2章の終りにあります。

正しい比較が何の役に立つのか言及している

正確な効果検証が価値を生むビジネスケースとそうでないケースが挙げられています。因果推論で価値を生めるかどうかはビジネスの構造に依存するというのは実務者が持っておいて損がない心構えでしょう。最終章に
もし因果推論でビジネスに対する価値を発揮したいのであれば、「正しい情報がビジネスの価値になる」という構造を持っている環境へ移るか、もしくはそのような環境を作ることを強くお勧めします。
と記述があります。エンジニアは正に「正しい情報が価値を生む」側でしょう。私の現場では「機能開発すべきかどうかの事前調査」と「リリース後の効果検証」が因果推論が絡むタスクです。事前調査は「変数xがyに寄与しているならxを利用した機能開発を検討する」といった物で、これを見誤ると意味の無い機能を作ってしまいます。

説明モデルの作り方の参考としても若手に勧められる

新卒エンジニアが部署に配属される時期ですが、エンジニアはコンピューターサイエンス・機械学習よりのスキルを持つ事が多く。極端な例では「ディープラーニングは判るけど一般化線形モデルは知らない」といった事もあります。ただ実務では効果検証のために線形モデルを利用する事はあるので線形モデルの応用や説明モデルの作り方といった計量経済学寄りの知識も持って欲しい訳です。現場のエンジニアに計量経済学の入口として渡すのもアリかなと思いました。

分析コードの難しさがわかる

私は書籍中のR実装をPythonで書き直しながら読み進めましたが、OLSで線形モデルをフィットして係数を求める所までは簡単に再現ができましたが。そこから先のマッチングやIPWとなると途端に同じ結果を出すのが難しくなりました。本の結果という正解がある状況なので自分の仕込んだバグに気づけましたが、正解が無い状況ではコードがバグっているのか仮説が間違っていて期待通りの結果にならなかったのか見極めが非常に難しい事に気づかされます。バグが無くとも利用するライブラリを変えるとまた結果が変わります。

ただ「傾向スコアマッチングをした時には共変量のバランスを確認する」等の因果推論の手法が機能しているかどうかの確認ポイントと前提とする仮定がしっかり解説されており、各手法は知っていても実際に手を動かした事がない人のガイドになる内容になっています。

疑問が残った点

対数を用いた回帰分析 (2.4.3節) で、目的変数の対数を取った時の係数βが 0.1であれば10%引き上げると解釈できるとあったので手元で実験してみたが上手くいかなかった。xが1増える毎にyが倍(100%増)になるようなデータで係数βを求めても1にならないので、βが小さい時のみこの解釈ができる等の制約がありそう。この現象について教えて頂いたので最後に追記ました。

標準化平均差(Average Standardized Absolute Mean distance: ASAM)の定義がわからなかった。本文では「平均の差をその標準誤差で割った値」とあるが、標準誤差はサンプルサイズが増えた時にゼロに近づくのでASAMが発散してしまう気がした。ASAMを利用している論文はいくつも見つかるが定義そのものの数式がなかなか見つからない。平均の差を全標本の標準偏差で割った値が正解?

本だけでわからなかった点ですが、formula定義に出てくる I(re74^2) の I() が何かわからなかったのでRのドキュメントを調べました。混乱を避けるためのただの括弧みたいですね。

まとめ

以前からお世話になっている安井さんが実務者向けの因果推論の本を上梓されたとの事で非常に興味があったのですが、期待を裏切らない内容でした。安井さんは5年程前に予測性能に重きを置く機械学習と説明に重きを置くための因果推論・計量経済学の違いを教えてくれた方であり、それで自分の視野が一気に広がった経緯があります。なので若干バイアスのかかったレビューになっている事はご容赦ください。

因果推論は以前から興味があったもののRCT以外はほぼ使った事がなかったので、実務で利用する際の手順や注意点は非常に参考になりました。あとRが凄いので分析業務は素直にRを使おうという気持ちになりました。

追記

係数を解釈する時に利用している近似はマクローリン展開だから、ゼロから離れると二次以降の項が無視できなくなってズレが大きくなると教えてもらいました。プロットするとこうなります。


このエントリーをはてなブックマークに追加

2020-03-01

ウィルス感染検査とFalse-Positive Paradox

最近のニュースでウィルス感染症の検査と聞いてまっさきに思い浮かんだのが、母集団の感染率より検査の偽陽性確率が高い時に人間の直感から離れた結果になるパラドックスの話。統計学の教科書にも練習問題として出てくる印象があります。

問題

ウィルス感染検査で陽性となった時に被験者が感染している確率を求めよ。

母集団の感染率は0.1%。検査の性能は感度99%・特異度99%、つまり感染している人は99%の確率で陽性となり、感染していない人は99%の確率で陰性となるものとする。

計算

  • 感染しているか否かを y ∈ {0, 1}
  • 検査結果を x ∈ {0, 1} で陽性が1とする
ベイズの定理
 より、検査結果が陽性だった時に感染している確率は
ここで
  • P[y = 1] = 0.001
    • 感染率
  • P[x = 1|y = 1] = 0.99
    • 感度
  • P[x = 1} = 0.001 * 0.99 + (1 - 0.99)(1 - 0.001)
    • 真陽性率 + 偽陽性率
であるから、検査で陽性が出た時に感染している確率 P[y = 1 | x = 1] = 9% となる。

メモ

元々の発生確率が低い場合、人間の直感に反して検査精度よりも小さな値となるため検査結果の解釈は慎重を要する。これは1%の偽陽性によって陽性判定数が増えるからである。健康診断で「要精密検査」という結果が出たが、精密検査の結果何も異常が見つからないケースが同じ。だれもが偽陽性を考慮して結果の解釈ができるわけではないので、例の様な状況において手当たり次第検査を受けさせると混乱が広がる事も想像できる。

文献[1]はFalse-Positive Paradoxにより自動判定を共なうテロリスト検出システムは無実の人々を分析するのに費やされるコストが増える事を指摘している。文献[2]には近い例がいくつか載っている。

おかしな所があったら教えてください。

参考文献

[1] Parra-Arnau, Javier, and Claude Castelluccia. "Dataveillance and the False-Positive Paradox." (2018). https://pdfs.semanticscholar.org/00af/50c635aeebd651d52c5c5e9633201988ee8f.pdf

[2] Wikipedia contributors. (2020, February 17). Base rate fallacy. In Wikipedia, The Free Encyclopedia. Retrieved 02:33, March 1, 2020, from https://en.wikipedia.org/w/index.php?title=Base_rate_fallacy&oldid=941255359

このエントリーをはてなブックマークに追加

2019-12-18

JAZZとコントラバスが少しだけわかってきた

こんにちはhagino3000です。この記事はpyspa Advent Calendar 2019の17日目です。

今年は新しい挑戦としてコントラバスとJAZZを始めました。コントラバスはオーケストラの右端で弾かれる大きな楽器です、和製英語でウッドベースと呼ばれたりもします。JAZZは全く聴いてこなかったので完全に未知の領域です。この分野は素人なのです、本当に。

普段は職場でゲーム音楽のバンドアンサンブルを演っているのですが、Super Mario Odyssayの都市の国のテーマのウォーキングベースを弾きたくなったのがきっかけでした。新しい楽器を始めるのは20年ぶりなのもあり、練習や普段の取り組み方について改めて考え直しました。ソフトウェアエンジニアとしての訓練方法と似た部分もあり、多くの気付きがありました。

楽器スクールに通う

ビギナー段階において人から習う事の効率の良さは業務で身に染みています。自宅の近所にコントラバスでJAZZが習えるスクールがあったので決めました。レッスンでは課題曲のベースフレーズ作成が宿題として出されて、対面レッスンでそれを弾いてフレーズ及び演奏について指導を受けています。枯葉やBlue Bossaといった曲からスタートしました。

ソロフレーズ作成は自由度が高いので、左手のポジション範囲とピッチの制約が課されると捗ります。オルタードテンション(♭9, #9, #11, ♭13)も最初は無しでコードトーンのみで作りました。やはり自由度の高いタスクは難しいです。

スクールは常にコンフォートゾーンの外側になるような負荷が与えられる所が気にいっています。

JAZZが少しだけわかった

今までは「楽譜を暗譜してその通りに弾く」もしくは「楽譜を見ながらそのまま弾く」だったのが、他のパートと合わせた時にどちらも上手くいきません。正解は「コード進行を覚えてアドリブで弾く」なのでしょう。フレーズ作成とは別にコード進行だけ見て弾く練習もやるようにしました。iReal Proが非常に便利です。

レッスンでは一音一音「何故ここでこの音を選んだのか、どの音に向かっているのか」と質問されるので、自分が何の音を弾いているのか意識するようになりました。ただ、進行上は使える筈の#11thが自分の耳には外して聴こえたりするので理論と感覚の乖離がまだあるなと。

レッスン課題曲について様々な人の演奏を聴くように指導されるのでYouTubeとSpotifyをヘビーに使っています。スタンダードナンバーは多くの人にカバーされているから聴き比べが面白い。JAZZのプレイヤーに関する知識ゼロでしたがMichel Camiloのパーカッションとの絡み方やEddie Higginsのキャッチーさに惹かれています。難しいのはMiles Davisです、原曲成分が全く聴きとれなかったりする。やっぱりJAZZはわからない。

多くのプレイヤーの演奏を聴く事に関してはymotongpoo氏がSlack channelに延々と貼り続けてくれた事もあり非常に助かりました。

ブルースそしてBack to the Future

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しか使わないから弾けるんですね。


練習のスタイルを変えた

学生時代とは違ってがむしゃらに長時間練習する事が不可能になりました。自分が練習するだけでなく自分の子供の指導をする立場にもなったので効率の良い練習方法を知る必要が出てきました。ソフトウェアエンジニアに「達人プログラマー」や「エンジニアの知的生産術」といった本がある様に、演奏家向けにも同様の文献が存在します。「成功する音楽家の新習慣」という本が日々の練習方法にはじまり、本番への望み方、肉体の故障を防ぐ方法まで幅広いトピックを扱っています。
ここから実践しているのが「細かく規則正しく練習する」事です。ランチの予定が無い日は昼休みに職場の楽器エリアで練習しています。

教本は「シマンドル」長く参照されているクラシックな物を選びました。アルコ(弓弾き)前提の本ですが、ピチカート(指弾き)でも譜面は再現できます。好みの問題でしょうが、技術書の選び方に通じる物があります。

参考にしている2冊

テクノロジーの進歩を享受する

フレーズ作成の際にコード進行はiReal Proで即座に参照できるし、ソロフレーズであれば例えば「2-5-1リック」でGoogle検索すると参考になる定番フレーズが山の様にヒットします。YousicianのBassコースは音ゲーの様に五線譜が流れてくるので譜読みの練習ができます。知の高速道路が整備されている事を改めて実感しました。

楽譜と音源作成にはmusescoreを使っています。musescoreはスタンダードナンバーであれば公開されたスコアが大抵見つかるので、それを元に編集するとベースフレーズ打ちこみ用スコアがさくっと作れます。

自宅練習時の床の振動防止はロードバイクのローラー台用の防振材を流用しています。コントラバスは床に突き刺して部屋を鳴らす楽器なのでサイレント楽器といえども床が振動して他の部屋に音が伝わるからです。練習後の筋肉のケアにはマッサージガン。腕が故障すると年単位で動かせなくなるのが人生経験としてあるので入念に。使える物はとにかく使っていくスタイル。

まとめ

未知のジャンルに触れる事で音楽の幅を広げる良い機会となりました。あとは練習あるのみ。社外の演奏会にも出ていけると良いですね。


このエントリーをはてなブックマークに追加

2019-12-15

AtCoderはじめました

AtCoderというか蟻本の輪読会が社内で始まったのでこっそり若者に混じっている。

モチベーション

グラフアルゴリズムの概観とその実装の感覚を叩きこんでおきたいのがある。最近はGraph Embedding等のグラフを用いた手法によく出会うが自分の中に基礎が無いのでなかなか理解できた気にならない。自分のブログを漁ると10年前に最短経路問題をJavaScriptで解いているので、その手の活動を再開したとも言える。

進捗

以下のページを参考に、本の内容に対応するAtCoderの問題を解きつつ

まずはAtCoder過去問の4つをSubmit


テストコードが書けないコードは許しがたいのでclassにしてあるが、書いている内に depth_first_search は dfs と書きたくなるし if __name__ == "__main__": のお決まりの一文すら書くのが面倒くさくなってきた。人間は変わってしまうのか。

現状苦痛なのはコードを提出した後にRuntime Errorという結果だけが得られて、その時の入力が何だったかわからない点。仕事なら「ログを仕込んで次回に備えよう」となるがそうはいかない。比較的新しいコンテストは入力がDropboxに置いてあって安心した。

書いたコードを残すGitHubリポジトリ
https://github.com/hagino3000/study-programming-contest-challenge-book
進捗メモ
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

このエントリーをはてなブックマークに追加

2019-12-01

IBIS2019でポスター発表しました

IBISは機械学習の研究会です。今年は11月20〜23日の名古屋開催でした。
今回はポスター発表にアドネットワークのクリック単価決定方策を持っていきました。プロダクト開発が本業なので外部発表や論文を書く事はメインタスクでは無いのですが、実験の過程で得られた結果など発表できる物は外に出していきたいです。バンディットアルゴリズムのポスター発表も数件あり、オンライン意思決定の方策に詳しい先生方の意見が得られる貴重な機会でもあります。
様子です。

その他講演メモ

  • グラフ文法を用いたグラフ生成
    • 分子グラフ、例えばH20だと(H⇔O⇔H) を学習したい
    • 安定性などの制約を満たすグラフを生成したい
      • ハード制約とソフト制約の組みあわせ
    • 大学でやったタンパク質の構造解析を思い出しつつ聞いた
    • 形式言語で記述してグラフにして学習という流れが面白い
  • 回帰による再帰型ニューラルネットワークからの重み付きオートマトンの抽出
    • RNNの動作を再現するWeighted Finite Automataを抽出する研究があるとのこと
    • 重み付き有限オートマトンに置換すると推論の計算コストが低くてふるまいが明快になるメリットがある
    • ネット広告分野だと「RNNでコンバージョン予測モデル作った」という報告は多々あるものの、何をどう学習したかわからないし説明性厳しいでしょと思っていたので興味をそそる内容だった
    • しかし重み付き有限オートマトンを知らなかったので後で調べた
  • 隣接代数と双対平坦構造を用いた学習
    • 難しかったがIBISではよくあること
  • Data-Efficient Reinforcement Learning of Mechanical Control Systems
    • 強化学習
    • 不確実性の予測を使って学習すると上手くいく
    • ガウシンアンプロセスだから計算コストすごい高いはずだけど、少ない試行回数の間に学習できてしまえば勝ちっぽい
    • ニューラルネットはregressionに向いてないと考えてるとの事
  • Problems with CNNs by Hinton先生
    • 「CNN is bad」
    • CNNは人間の様に学習していないからadversarial examplesの問題がある
    • 何が写っているか考慮しない、背景を学習してしまっていたりする
    • 心理学的なアプローチ
      • 図形を表現する時はスケーリングされるし、共通のメンタルモデルがある
      • 三角形や四角形という基本図形の組合せで認識する
    • Cupsules (2019)
      • Capsules for triangles, and squares 星座っぽい所が検出できる
      • 星座生成モデルとか
    • 人間が物をどうやって見ているか、という観点を使って学習するといいよという話で面白かった
  • サンプリングによるデータ駆動科学
    • 根源的な構造はわからなくてもいい、機能を獲得したい
      • 工学的なアプローチだなー
  • データ駆動科学の立場からみた物質科学と情報科学の接点
    • 材料科学 → XXに使える材料が無いか追求する
    • 物質科学 → なぜXは透明なのか理屈を追求する
    • 初日の有機化学とはがらりと変わって無機科学。グラフでは無く原子の繰り返し構造に
    • 繰り返しパターン中の原子の位置を文字列で表現してパターンマッチ
  • 機械学習に対するソフトウェア工学の技術動向
    • 中の人としてプロダクト開発をしている身からすると契約してPoCやって検収・納品というのを見るとすごい大変に見える
  • 機械学習と知財・契約
    • 外部ベンダーにプロダクトの一部を開発してもらうとしたらどう落し所をつけるか、みたいな事はしばしば考えるのでとても参考になった
    • 完成した成果物を、契約当事者双方がどうのように使えるかを「開発+利用規約」において定めるこのが非常に重要
    • 物体ではない(コピー可能)ので権利帰属よりもどう使うか
    • 知財権を共有にして、利用条件を決めずに進めるのは危険
    • http://ibisml.org/ibis2019/files/2019/12/slide_kakinuma.pdf
  • 継続的改善をし続けるための機械学習基盤の課題
    • MLflow trackingよさそうだった
  • 日本におけるデータサイエンスの現状と今後
    • 滋賀大学データサイエンス学部
      • 日本に統計学部が無いから作った
      • 名前はあれだけど統計学に重点を追いたカリキュラムで自分が入学したい
    • データからの価値創造の流れ
      • 課題が先にあって必要なデータを収集するのが基本
      • データが手元にあってそこから新たな知見をさがすのも有用になりつつある
    • 竹村先生が本当にすごい人だった、尊敬する

あとはインターネットの方々が詳細な聴講メモを残してくださったのでありがたく拝見しています。



このエントリーをはてなブックマークに追加

2019-10-07

データ分析系3daysインターンシッププログラムで伝えたかったこと

担当した3daysインターンシッププログラムが無事に終ったので、自分が何を考えていたかをまとめます。いわゆる「機械学習エンジニア」向けのインターンです。

https://voyagegroup.com/internship/adventure/

背景

期間3日でやりたいと打診を受けた時に真っ先に思いついたのはコンペ形式のプログラムでした。しかしKaggleを筆頭に実際のビジネスで発生したデータを使ったEDAおよび機械学習予測モデルの開発ができる機会は今やいくらでもあるため、Kaggleそのままの形式では目新しさに欠ける。さらに実際の開発業務では求めた予測値を使って意思決定を自動化する所までが求められるため、予測器を作って精度を見て終りというのは片手落ちとなってしまう。よって、求めた予測値を利用して意思決定を行なうアプリケーションを実装してビジネス指標が出力として得られる部分までを範囲としました。

内容

ハンズオンチュートリアル形式でアドネットワークの広告配信ロジックの開発およびデータ分析を行ないました。配信ロジックは「広告リクエストに対してどの広告を返すか」と「広告のクリック単価をいくらにするか」を広告リクエストを受けた時に決める処理です。

開発は運営が用意したPython環境で起動しているJupyter Notebook上で行ない、これは参加者それぞれ専用のサーバーで動作しています。用意したPython環境にはアドネットワークシミュレーターがインストールされており、参加者は実装した配信ロジックを即座に実行して結果を確認する事ができます。結果には広告キャンペーン毎の獲得コンバージョン数やメディア毎の収益額が含まれており、任意の加工を行ない可視化する事で動作確認が可能です。

個々のトピックとして次の物を取り上げました
  • 両面市場(Two Sided Market)における値付け
  • 多腕バンディット方策による累積報酬最大化
  • 広告配信ログの分析
  • 機械学習によるCVR予測
  • 推論処理のアプリケーション組み込み
  • フィードバック制御によるリカバリ
収益予測と広告選択ロジックが実装する範囲

出題の意図

講義ノートの所々に仕込んだ練習問題や、全体の流れの意図のネタばらしです。

顧客の問題を解決しよう

アドネットワークというビジネスには広告主とパブリッシャーという2つの顧客グループが存在し、それぞれが何を求めているかという点から配信ロジックに求められる要件を解説しました。この考え方が出来ると「予測できて何が嬉しいのか、ビジネスにどんな貢献をするのか」という視点に常に立ち戻れます。機械学習が好きな人は「予測ができる事」に目が行きがちですが、時間をかけていらない物を作ってしまうリスクを減らす為にも重要な考え方だと感じています。

検証方法を考えよう

実装したロジックが意図通りに動いているか、どの様に確認すべきでしょうか? 実務では自分で考える他ないので同様に体験してもらいました。特に確率的なふるまいをするロジックのリリース後の動作確認は難しく、どのデータを取りどの様な可視化を行なうと自信を持ってバグが無いと言いきれるのか、頭を悩ます点でもあります。

予測誤差を意識しよう

広告キャンペーン毎のコンバージョン率を誤差範囲と共にプロットする課題を用意しました。それぞれサンプルサイズが異なる事から誤差範囲もバラバラ、よって平均値の比較だけでは何も言えません。意思決定には予測誤差を考慮する必要がある点は多腕バンディット方策の活用と探索の話に繋がります。また確率pがゼロに近いため二項分布の正規近似で上手くいかない点もミソです。

予測が外れる事を前提として自動リカバリ手段を用意しよう

予測精度100%というのはまずありえないので、予測を誤った時にどうするかが重要となります。自動リカバリの手法としてフィードバック制御を紹介して、みなさんに実装してもらいました。

コールドスタート問題をなんとかしよう

コンバージョン率予測モデルで新規の広告キャンペーンに対しては未学習となっている状態を見せました。コールドスタート方策の一つとしてパラメータのThompson Sampling (ロジスティック回帰ならベイジアンロジスティック回帰) があり、これはパラメータ推定値の誤差の大きさを行動に反映できます。

単一の指標で評価しない

Kaggleの様に何らかの評価指標に絞ってロジックの性能を評価するのはやめました。プラットフォームを運営するのであれば買い手を優遇したい時期、売り手を優遇したい時期、またプラットフォーマーの粗利額を優先したい時期どれもあります。プラットフォーマーの短期的な利益を削ってプラットフォームの成長を促したり、売り手間の公平性を考慮したりと様々な実装が出て来た方が面白いと考えました。

高速に動作するプログラムを書こう

広告配信ロジックにおける処理は広告リクエスト X に対して配信可能な広告 a ∈ A それぞれについてのクリック率 P(click = 1 | X, a)・コンバージョン率 P(cv = 1 | X, a, click=1)を求める必要があります。ここからアドサーバーにおける推論速度の要件を解説しました。10ミリ秒以内に100回の前処理と推論をしたいという事も普通にあるので、遅いコードはそもそもリリースできません。
しかしこれは説明するまでもなく、遅いコードを書くとシミュレーターの動作がどんどん遅くなっていくため気づけたかと思います。事前に配信候補の数を絞る方策も有効ですが3日間という期間を考慮して省きました。

まとめ

インターンシッププログラムの内容を考えて講義資料を作り、専用システムを開発するのは初めてだったのですが学ぶ所が多くありました。また実務のエッセンスをどう伝えるかはまだまだ改良の余地があるので、次回があれば良くしていきます。


このエントリーをはてなブックマークに追加

2019-08-06

KDD2019本会議の聴講リスト

明日からKDD2019の本会議なので聴講リストを整備した。マーケットデザイン・オンライン広告・バンディットアルゴリズムが中心。

招待講演

口頭発表

ポスター



このエントリーをはてなブックマークに追加

2019-08-05

「WTF経済 ―絶望または驚異の未来と我々の選択」感想

ティム・オライリーの視点でここ数年のテック業界でどのような変化が起きているか纏めてあり、トピックは多岐に渡る。その中でも下記の2点は広告業界のソフトウェアエンジニアとして思いをめぐらす所があった。

WTF経済 ―絶望または驚異の未来と我々の選択
オライリー・ジャパン
Tim O'Reilly (著), 山形 浩生 (翻訳)
O'reilly,  Amazon
原著: WTF: What's The Future and Why It's Up To Us

アルゴリズムの管理者としてどうあるべきか

本書の前半はUber, Lift, Google検索を例に価値創造の場におけるアルゴリズムの重要性を説いている。そしてプログラマーは管理職でありプログラムが労働者であると。Googleの検索品質改善の例では、利用者の求めていない低品質なサイトが検索結果の一番上に表示される状況をどう改善したかの紹介がある。すぐに思いつく手段の一つはルールを追加して低品質なサイトを検索結果から除外しまう事だが、彼らはユーザーが検索結果をクリックした後の遷移先の滞在時間をスコアとして利用し、スコアの低い検索結果を除外した。
ルールベースのアルゴリズムは理解が容易で、何かまずい事が起きた時の暫定対応としてプロダクションに投入しがちである。しかしユーザーのフィードバックを利用した方が汎化性能が高くロバストなソリューションになる事はランキングやリコメンド開発者として頭に留めておきたい。

またFacebookにおける見出し詐欺、実際の記事の内容とは異なる刺激的なタイトルを使って利用者を釣っている記事への対応のくだり。
グーグルは、その検索アルゴリズムの厳密な細部は公開しない。ランキングを上げようとする連中に悪用されるのを恐れるからだ。同様に、フェイスブックが見出し詐欺の記事を取り締まったとき、ニュースフィードの製品管理担当副社長アダム・モセリはこう書いた。「フェイスブックは見出し詐欺を定義する複数ページにわたるガイドラインを公開したりはしません。というのもその大部分は実際にスパムであり、もし我々がずばり何をどのようにしているか明らかにすれば、リバースエンジニアリングされて、それを回避する方法を見つけられてしまうからです」
ネット広告における不正対策に繋がる部分であるが、どの様なふるまいを不正とみなすかは公開する事はやはりできない。利用規約にどこまで詳細に記すか、問いあわせにどこまで答えるかの議論が度々発生するが堂々と非公開にして良いのだ。

インターネット広告がネットメディアに与える影響

ネットメディアが主に収益源とする広告収益のもたらす影響について。
検索エンジンやソーシャルメディアで関心を集める必要性は、ニュースメディアの低劣化、偉大な出版物ですらのお手盛り、インチキな論争など、トラフィックを増やす各種技法への堕落をもたらしている。どん底への競争の一部は、ニュース産業の収入が購読料から広告収入に大きくシフトした結果である。
辛辣な表現だが事実として受け止めるべきだろう。Webサイトの価値としてPV数と広告のクリック率が通貨さながらの扱いを受けているのは違和感を禁じえない。しかしインターネット広告がある事でそのようなインセンティブを与えてしまっているのだ。今日たまたま学会で聴いた話で、マイクロソフトの検索エンジンの開発者は「ユーザーが得られた情報の量を操作数で割った物」を指標にしているとの事だった。

https://sites.google.com/view/kdd2019-exp-evaluation/ より

Information Gainの計測はクリックの様な明示的なフィードバックの集計だけで済まないためコストはかかる*1が、情報検索を役目とするサービスの指標として秀逸さに感銘を受けた。広告業界もネットメディアがこのような指標に集中できるような仕組みを目指すタイミングであると思う。そのためにはメカニズムデザインや因果推論が重要な役割を果たすのではと考えている。

*1: 検索結果のリストを見て満足してサイトを去るケースがあるため

このエントリーをはてなブックマークに追加

2019-05-14

「戦略的データサイエンス入門」がOJTの参考書として良さそうだった

配属された新人氏に勧められるか確認すべくあらためて読み直した。データサイエンスのビジネス適用という主題で様々なトピックに触れているが自分は次の3点に注目した。

  • ビジネス課題をどのようにデータサイエンスの手法で解決するか、どのように対応方法がわかっているサブタスクへ分解するかのアプローチ
  • モデル評価の方法
  • データサイエンス組織の運用・育成
感想はサービス開発現場のソフトウェアエンジニアとしてのものです。まずは書籍の基本情報と目次。

戦略的データサイエンス入門
―― ビジネスに活かすコンセプトとテクニック
オライリー・ジャパン
Foster Provost、Tom Fawcett 著、竹田 正和 監訳、古畠 敦、瀬戸山 雅人、大木 嘉人、藤野 賢祐、宗定 洋平、西谷 雅史、砂子 一徳、市川 正和、佐藤 正士 訳
O'reilly,  Amazon
原著: Data Science for Business

目次

1章 はじめに:データ分析思考
2章 ビジネス問題とデータサイエンスが提供するソリューション
3章 予測モデリング:相関から教師ありセグメンテーションへ
4章 モデルをデータにフィットさせる
5章 オーバーフィッティングとその回避方法
6章 類似度、近傍、クラスタ
7章 意思決定のための分析思考:良いモデルとは何か
8章 モデル性能の可視化
9章 エビデンスと確率
10章 テキスト表現とテキストマイニング
11章 意思決定のための分析思考Ⅱ:分析思考から分析工学へ
12章 その他のデータサイエンスの問題と技法
13章 データサイエンスとビジネス戦略
14章 おわりに

感想

まず前書きでデータ活用の3要素が提示されており、ぐっと惹きつけられた。
  • データを効率的に収集・処理する事
  • データを適切に取り扱い、妥当かつ汎用的な成果を残すこと
  • データをビジネスの枠組みの中にうまく組み込むこと
まさに自分が成すべき事そのものである。そして1章はデータサイエンスによってどの様な成果があげられるのかという具体例を上げ、またデータが投資対象である旨を説明している。得られた成果よりも日々のストレージコストの方が高かった、といった事があると困るので投資と回収の感覚は身につけたい。

2章はデータサイエンスプロジェクトの序盤で必要なソリューション設計について。ビジネス課題を解決方法がわかっているタスクに分解し、解決できる状態にする能力が重要であると述べている。このトピックに焦点を置いた文献はあまり知らないので非常に貴重だと感じた。他にも良い文献があったら知りたい。

7章のモデル評価の章ではモデルを実際に利用した時に得られる収益の期待値を使って評価を行なう方法を紹介している。Accuracy, f1-scoreが単純すぎて使えないというのは自分も実務で試して経験したので先にこの本を読んでおけばと思った次第。また学習曲線・over-fitting検知用のフィッティンググラフといった常識的に確認しておくべきポイントは押えてあるのが良い。11章ではさら進んでLiftを使ったモデル評価にも言及している。

ナイーブベイズ・SVM・ロジスティック回帰といった個別アルゴリズムの詳細には触れていないが例えば「ナイーブベイズが素性間の独立性を仮定しているのに上手く動作するのは何故か?」といったエッセンスについては数式込みで紹介しているし、前処理の章は無いがリーク(leakage)については事例を交えて解説がある塩梅。

2章と13章ではデータサイエンスチームの運用・チームメンバーの能力評価に触れているのと、付録にあるデータマイニングプロジェクトに対するレビュー項目リストは便利そう。関係者とのコミュニケーションにおける要所が都度補足されているのは親切だなと。

総じて「大学で機械学習をやっていたがサービス開発現場でやるのは初めて」というの人にはオススメできる内容で、150を越える大学で教科書として採用されているだけはあるなと思いました。

このエントリーをはてなブックマークに追加

2019-04-08

Repro Tech #7でオンライン意思決定の話をしました

Practical AIがテーマの会で「機械学習の予測モデルをどう使うか」という話をしました。自分が最近気にしているのがアプリケーションへの組み込み時の予測値の扱いなので、その辺りにフォーカスしています。アクティブラーニング、貪欲法、予測時にパラメータを事後分布からサンプルするThompson Sampling、オンライン凸最適化等です。

スライド: 予測の不確実性と上手く付き合う意思決定の手法 




このエントリーをはてなブックマークに追加

2019-03-27

「機械学習のための特徴量エンジニアリング」を読んだ

読んだので感想を書きます。ホクソエムの皆様による翻訳です。

機械学習のための特徴量エンジニアリング
――その原理とPythonによる実践

Alice Zheng (著), Amanda Casari (著), 株式会社ホクソエム (翻訳)

電子版は O'reilly Japanのサイトで購入できます。

感想

あたりまえの事をあたりまえにやれるレベルまでスッと引き上げてくれる感じ。画像データの章は飛ばして読んだのですが、ScailngやOne-Hot-Encodingといった頻出テクニックは一通り書いてあるので、これから機械学習やるという人には良さそう。手法の紹介だけでなく、One-Hot-Encodingは冗長表現なので係数が一意に定まらなくなる話やリーク(leakage)の話があるのは親切。

文章による解説とPythonコードが併記されているのは嬉しい。そして原著のコードで非効率な所は容赦なく書き換えているのはホクソエム陣の意気込みを感じた。GitHubにnotebookが公開されているので、コードはこちらが読み易い。PandasでNew Line Delimited JSONフォーマットが読める事や、列の一致していないDataFrame同士をconcatして縦に積めるのは知らなかった。

9章のレコメンドアルゴリズムを題材に特徴量エンジニアリングを実践する構成は面白い、しかしコードが本の終盤になるにつれ雑になり、意図を読み取るのに苦労する条件式が頻発するのはなんだかなーと。あと numpy.array のデータサイズを求めるのに getsizeof を使うのは間違っているような。

# データ型を変えるとそれぞれのデータサイズがどのくらい変わるか確認する
>>> print('Our pandas Series, in bytes: ', getsizeof(fos_features))
>>> print('Our hashed numpy array, in bytes: ', getsizeof(X_fos))
Our pandas Series, in bytes:  2530632380
Our hashed numpy array, in bytes:  112

型の変更により、データがずっと小さくなったことがわかります。

抜粋:: Alice Zheng  “機械学習のための特徴量エンジニアリング”。 iBooks
疎行列だとしても非ゼロ要素が112個以上あるから112バイトにはならないし、numpyのIssueを見るとnumpy.arrayは getsizeof での呼び出しをサポートしていない雰囲気がある。手元で実行すると以下の通り。


正誤表は見つからず。

最後に

途中で不覚にも笑ってしまいました。
“[†8] 訳注: 日本にもTedのような人がいます。タカヤナギ=サンです。彼はデータサイエンスの走る百科事典です。そして業界イベントで頻繁に講演をしていて、日本酒や素敵な人が好きです。 彼に日本酒を買って話してかけてみて下さい。後悔しないと思いますが、彼が泥酔している時には後悔するかもしれません。”

抜粋:: Alice Zheng  “機械学習のための特徴量エンジニアリング”。 iBooks
そして9章のコードを手元のマシンで動かすとメモリが足りなくてJupyter Notebookのカーネルが落ちてしまうため、メモリ増設の機運が高まりました。現在は32GByteのメモリを積んでるのですが、どれだけあれば足りるのだろう……

このエントリーをはてなブックマークに追加

2019-03-16

オペレーションズ・リサーチ学会の研究発表会に行ってきた

近くで開催していたので聴講に。
何故このタイミングでORの学会かと言えば、広告配信サービスの現場でエンジニアやってると因果推論も機械学習も組合せ最適化もやらなきゃいけない状態で。最近だと特に最適化に時間を多く使っているのでリサーチの動向を見たくて参加してきた。ちなみにORの事は良く知らないので滅茶苦茶な事を書いているかもしれない。

全体の感想

招待公演はどれも興味深く、製造・インフラ・輸送業と共に進歩してきたORの歴史の厚みを感じた。カーマーカー法が発表されてから主双対内点法へ至る話や演算子オーバーロード方式の自動微分が最適化ソフトウェアに与えたインパクトといった自分でも知ってる様な伝説級のエピソードについて当事者から聴けたのはわくわくしたし貴重な体験だった。

一方で会場の人の少なさは引っかかったし、学会の会員数は減り続けているとの事。JSAIの全国大会や同日開催だったNLP(言語処理学会)と比較すると勢いの無さは否めないだろう。ORは現実のモノ・ヒトを効率良く動かし配置する事を目指す学問であるため、国の衰退・製造業の衰退の影響をもろに受けているのかなと想像した。同時に「インフラの間引き計画」や「需要が減り続ける設定においてパフォーマンスが良い配置計画」は衰退と上手く付きあう研究なので価値があるなと。

自分の周りだと「機械学習案件の皮を被ったOR案件」という言葉があり、必要なのは機械学習じゃなくて待ち行列理論による最適化だったという話も聞く。企業のデータ活用が進む段階、データ分析基盤とBIツールが入ってさて次に何ができるか、というタイミングで流行りの機械学習に飛びついたのだと予想できるが、最適化は今後も実務で必要。機械学習で何かを予測してそれで終りという事は少なく、後続にシステムの自動最適化が待っているのが殆どだろう。なので研究者は減るが実務者はそこそこ増えるんじゃないかと思っている。

面白かった発表いくつか

閲覧数列の順序関係を考慮した商品選択確率の推定
ネットサービスにおけるユーザーの閲覧履歴 (リーセンシーとフリクエンシー) のみによる予測。広告でも機械学習で予測しようにも素性が殆どないケースはあるので閲覧履歴を表現力のある状態で使うのは上手いと思った。他の学習モデルとStackingすると強そう。ECサイトTmallのデータが公開されていて実験に使えるのは知らなかった、便利。

非羨望性を考慮した被覆制約付き複数財市場の価格決定
複数財オークション。広告の広告表示権利の取引にも使えるプロトコルの提案で売り手の利得を最大化する。広告表示権利のオークションだと、オークショナーは売り手(パブリッシャ)の味方なのでアリだと思う。
非羨望性にピンとこなかったので質問したら昔からある制約との事。複数財オークションの事は全然調べた事がなかったので勉強になった。


このエントリーをはてなブックマークに追加

2019-01-22

検索連動広告の因果効果とROIの推定

ネット広告の因果効果推定について調べた時に読んだeBay*1の検索連動広告*2の因果効果推定についての論文が面白かったのでメモ。検索連動広告経由の流入のうち広告を出稿しなくとも得られた流入、つまり他の経路で流入したであろう分を差し引いた量(causal effectiveness of paid search ads)を推定しています。

要約

eBayはブランドキーワードとノンブランドキーワード(100万を越える商品名)について広告出稿していた。そこで検索連動広告のサイト流入・売上への因果効果とROIを推定した。ブランドキーワード・ノンブランドキーワード両者について検索連動広告を止めてサイトへの流入トラフィック・売上がどれだけ変化するかを計測した。
ブランドキーワードの出稿を止めても流入トラフィックは0.5%減に留まった。検索連動広告からの流入の99.5%は自然な検索結果からの流入に代替された。ノンブランドキーワードについては売上の増加量に対する広告費の係数を推定した。推定値は非常に小さく、大した効果が無い事が確認できた。
ユーザーセグメントに対する実験では、非アクティブなユーザーおよび未知のユーザーに対して広告は作用する事がわかった。

ブランドキーワードに対する実験

  • 方法
    • MSNとGoogleで "eBay" というキーワードに対して出稿しておく
    • 片方の出稿を止めて差の差法で因果効果を推定する
  • 結果
    • 出稿を止めても99.5%は自然検索結果のクリックで代替された
    • 出稿を止めても検索結果にeBayが出てくるため、これがほぼ完全な代替になる

(a) はGoogleを季節性補正用に残してMSNで出稿を止めている

ノンブランドキーワードに対する実験

  • 方法
    • DMA(ニールセンが定義しているUSのマーケティングの単位となる地域区分)をランダムサンプリングして実験用地域を確保
    • 実験用DMAから68DMAをテスト用、77をコントロール用としてテスト用DMAで出稿を止める
    • 差の差法で因果効果を推定する
  • 結果
    • 売上の変化に対する広告支出額の係数を求めると、統計的にゼロと違わないためeBayの支出額を考慮してもインパクトが無いといえる
テスト開始後はクリックが減るが売上に変化はみられない

ユーザーセグメントに対する実験

  • 方法
    • 過去12ヶ月における購入回数セグメントと最終購入日時からの経過日数セグメントを定義する
    • 上記のコントロール群のDMAとトリートメント群のDMAでセグメント毎の効果を推定した
  • 結果
    • 最も効果が強いのは一度もeBayで購入をしていないセグメント
    • 最終購入から90日以降のセグメントにおいては、1ヶ月経つ毎に0.02%の売上増効果が推定される
    • つまり非アクティブなユーザーに広告は作用する
    • 非アクティブなユーザーに広告は作用するにもかかわらず、検索連動広告のコストは主にアクティブなユーザーに費やされていた

ROIの推定

  • 方法
    • ROIは次の通り定義する
      • $\Delta R = 収益_1 - 収益_0$
      • $\Delta S = 広告費_1 - 広告費_0$
      • ${\rm ROI} = \frac{\Delta R}{\Delta S} - 1$
    • 実際の収益とコストのデータは公開できないため、公開情報を使った。
    • OLSと操作変数法、差の差法それぞれによる推定値を出した
  • 結果
    • OLSだとROIが4000パーセントと非現実的な数値に
    • 対照実験を用いるとROIの推定値はマイナスなった
差の差法を使うとROI推定値の上界と下界共にマイナスに

考察

  • 良く知られたブランドに関しては検索連動広告の効果は限られている。ユーザーがブランド名を検索しているという事は、既にブランド名を認知している事になるから広告は余計である。
  • 何故このような効果の薄いマーケティングチャネルにお金を費やす人がいるのか。「競合企業がブランド名を買い付けてしまうからだ」との主張もあるがeBayではその様な事は起きなかった。
  • eBayにおいては検索広告クリックの増加は売上の増加をもたらさなかった、この結果から検索連動広告の効果が無いと言えた。
  • 広告を見せた群と見せなかった群を利用した対照実験を行なうと広告のROIの推定値は劇的に下がる。

感想

広告効果は対照実験を行なわないと過大に評価してしまう、というのは因果推論でよく出てくるトピックではあるが、出てくる金額の大きさと手法による推定結果の差がインパクトがあった。ランダム化比較試験ができない立場においてどのようにコントロール群とトリートメント群を作って実験するかは参考になった。
ユーザーが対照実験を実施しないと因果効果が見れないというのは不親切な状況にあるので、今後は配信システムに機能が実装される流れになるのではないか。ディスプレイ広告で同様の調査を行なった論文があるか引き続き調べていきます。

参考文献

Blake, Thomas, Chris Nosko, and Steven Tadelis. "Consumer heterogeneity and paid search effectiveness: A large‐scale field experiment." Econometrica 83.1 (2015): 155-174.

*1: https://www.ebay.com/
*2: リスティング広告とも呼ばれる



このエントリーをはてなブックマークに追加

2018-12-25

エンジニアキャリア15年のふりかえり

pyspa Advent Calendar 2018の25日目の記事です。

2018年は体を壊して停滞の年でした。タイピングで腕に痛みが生じる状態が続き、生産性はガタ落ちした上に通院に時間を取られて何もできませんでした。潔く今年の話題は諦めて、今までのソフトウェアエンジニアのキャリアを振りかえります。

1行で書くと大学で生物やってSIerに入って何回か転職して機械学習エンジニアです。

就職

2002年、私は研究の道に進む気は無く就職活動をしていました。就職氷河期*1と呼ばれた時期でさらに「理系なのに就職先が無い」と言われる生物学部生だったので学部不問の求人をあたっていました。さて、学部不問の新卒求人と言えばSIerです。あらゆる人材を受けいれているだけあってすんなり内定が出ました。インターネット界隈では常にDisられる存在ですが情報システム開発の現場に潜り込む機会を与えてくれた点には感謝しています。

SIer時代

ここでは受託の業務システム開発を経験しました。主にDBMSにOracleを使い、WebアプリケーションはJavaで書きました。バッチ処理はJavaかPL/SQLで書いてJP1から起動する構成が印象に残っています。プログラムを書く事もありましたが、パワーポイントの資料とエクセル方眼紙に仕様書を書く時間が長かったです。グローバル製造業のプロジェクトではバグが出ると世界中に存在する物流拠点の業務が止まってしまうため良い緊張感がありました。しかし自分でコードが書けないのはストレスだったので自社プロダクト開発をしている会社に転職しました。受託システムエンジニアからプロダクト開発エンジニアへの転職は難しいらしいですが、運が良かったのでしょう。転職活動は3ヶ月程度で済みました。

この頃休日に勉強していたのは簿記会計・データベース・Java・JavaScriptです。JavaScriptでDOMを弄る手法はDynamic HTMLと呼ばれていました。スキマ時間にNetscape4.7とIE6の両方で動くリッチな業務画面を試作しましたが、デバッグが難しすぎました。Adobe Flex*2やBiz/Browserといったリッチクライアント製品を採用するプロジェクトはあっても、JavaScriptでフロントエンドを構築するプロジェクトはありませんでした。とはいえWeb標準(HTML, CSS, JavaScript)でUIを洗練させる方向には大きな可能性があると感じたため、その後も情報を追いかけました。

ソフトウェアベンダー時代

2008年春にSIerを辞めた後、企業向けグループウェア製品やダッシュボード製品の開発をしました。
SaaS提供の業務システム開発に関った時は衝撃を受けました。唯一のバージョンが稼動し全ての顧客が同じ環境を利用するマルチテナント構成。これなら少人数開発でサービスが提供できて高い利益率が出せると。複数のバージョンの保守が必要で、顧客の動作環境にバグ修正パッチを当てるのに人件費がかかるインストール型ソフトウェアの開発経験をした直後だったので尚更です。しばらくしてWebフロント開発専業になり、ExtJSをUIコンポーネントに採用したダッシュボード製品をメンテナンスしていました。今で言うフロントエンドエンジニアです。

この頃は現代アートの展示活動をしている人達に混ざり展示用のインラクションも作っていました。制作にはC++でコードを書くopenFrameworksも使いましたが、Webブラウザを描画に利用するのが一番自分に向いていました。Web Worker, WebSocket, CSS3, WebGL が使えるようになり、Webブラウザの表現力は著しく向上していました。夢中になって新しくブラウザに実装された物を使うあまり、展示物はWebkitのナイトリービルドでしか動かない始末でしたが、展示用のマシンで動けば良かったので環境はどうとでもなりました。

インタラクション制作に使ったKinectコントローラーが面白くて本を書いたり勉強会の主催をしました。当時のインターネットはSSL/TLSが普及しておらずプレーンテキストが通信経路を流れていたため、公開のWifiを設置して通信内容を展示物に利用する事ができました。HTTPSがデフォルトの現代ではとても考えられない事です。

スマホアプリエンジニア時代

2011年からは現職VOYAGE GROUPです。最初はスマートフォンアプリの開発しました。クライアントサイドはHTML5とネイティブ両方の開発を経験しましたが、UX・開発効率共にネイティブに軍配が上がりました。JavaScriptが得意ならスマホアプリ開発もいけるだろうという幻想は砕かれたのです。結果的にこれは次の学びを促進する良い材料になりました。

2012と2013年は学びの年でした。Kinectのポーズ認識の論文*3で知った機械学習に興味を持ち、PRML*4読書会に参加したりCourseraの有名なMachine Learningコースを受講しました。同時に基礎力不足を痛感し、統計学・情報理論を学びます。ここではIPython Notebook(今のJupyter)を駆使しました、確率分布にしろ何にしろなるべく可視化して理解の助けとしていました。同時に社内のSICP*5輪読会でLISPとプログラミングの基礎をやりなおしました。

知り合いにPython使いが増えたため、APIサーバーをDjangoを使って構築したり、UI自動操作による業務自動化(今で言うRPA)をPythonとOpenCVで実装*6したりと自分が立ち上げメンバーのプロジェクトにPythonを採用していきました。

機械学習エンジニア時代

2015年にインターネット広告の事業部に異動になりデータ活用が命じられます。僥倖でした。具体的に何をやるかは任されていたのでデータ分析基盤構築とBIツールの導入から着手しました。BigQueryを使い始めたのはこの時です。驚いた事に使い慣れたPythonがこの領域のデファクトとなっていました。

この年は偶然Machine Learning Summer School Kyotoの開催年でこれに参加できたのは素晴しい経験になりました。凸最適化、確率集中不等式、劣モジュラ、システムのデプロイ、強化学習, etc.と様々なトピックに一気に晒される事で関連分野の認知範囲が広がりました。機械学習界隈の知り合いができたのも大きく、今でも付き合いがあります。

分析基盤が安定し、アプリケーションからデータが利用できる状態になった後は個別施策の開発です。一つは機械学習による予測処理を組み込んだ広告配信ロジックです。インターネット広告の分野は参考になる論文が多く、これに助けられました。クリック予測・コンバージョン予測・配信最適化・広告効果の推定, etc. 国際会議のKDDに参加して、インターネット広告業界のトッププレイヤーを目の当たりにし、彼らにいかに近づけるかも考えました。

また経済学出身の人が使いこなす因果推論に感銘を受けた結果、オライリーの『仕事ではじめる機械学習』の効果検証の章ができあがりました。

これから

これからやっていきたいのは決まっていて、オンライン凸最適化・ミクロ経済学・メカニズムデザインです。実務では予測をしたとして、予測値をどう使いたいかといえば何らかの指標の最大化です。しかしそれが売上なのか粗利なのか、他の指標なのかそもそも非自明だったりします。エンジニアの想定する最適化とビジネス設計にズレがあり、ビジネスサイドとの議論がかみあわない事もありました。この一貫性を保つにはミクロ経済学の切り口が有用な感触があります。同様に価格決定もインセンティブデザインと強く結びつく所なので理解を深めたい所です。

最適化は制約を厳密に満たせなくても動くオンライン設定が広告配信(Online Ad Allocation)にマッチする気がしています。

ここまで書くと運が良かっただけで生き残った感じがしますが、機械学習の分野は優秀な若者が次々と参入して来ます。特段の強みもなく子育ての片手間に働いているのでは早々に駆逐されるでしょう。まだまだ学び続ける必要があります。事業へのコミットはもちろんとして、成果を論文にして国際会議に通すのも数年以内に達成したいです。


------
*1: 1993-2005年の事を言うらしい via Wikipedia
*2: FlashベースのUIコンポーネント https://www.adobe.com/jp/products/flex.html
*3: 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.
*4: パターン認識と機械学習
*5: 計算機プログラムの構造と解釈 第二版
*6: 相手にAPIが無くGUIを操作する必要があり、止むを得ず

このエントリーをはてなブックマークに追加

2018-11-15

IBIS2018に参加してきました

IBISは機械学習の理論寄りのワークショップです。今年で4回目の参加でした。
そして感想を書こうと思った矢先に次のyokoiさんのツイートが流れてきて完全に同意。
私はアプリケーション側の人間です。そして解きたい問題のサーベイをしても同じ設定の文献が見つからない事がよくある。サーベイの仕方が悪いのか、そもそも研究対象になっていないのか判断がしにくい。そこでIBISにいらっしゃる方々に話を振ってみるとスッと見た事のない文献を教えてもらえたり、それは研究テーマになりそうだね、と次に繋がったりするのが最高。

あとは目の前で寿司を食っている人が3年前からTwitterでフォローしていた人だとわかったりするのが面白い。

チュートリアル

山田先生の半教師付き学習におけるラベル無しデータの役割りの話はまさに疑問に思っていた所の解説。さらにMulti-Task Learningは業務で試したかったので丁度良いタイミング。後で既存実装はMatlab版があると教えていただけた、Python版の実装をするならMatlabの実装を使って答え合せができる。

https://github.com/jiayuzhou/MALSAR

Selective Inferenceは身に沁る話題だった。L1正則化で素性選択した機械学習モデルを日々運用していると、稀に誤った素性が選択されおかしな動作をして問いあわせが発生するので。LASSOに対する特徴選択バイアスの補正は計算可能との話なので、手元で試せたらやってみたいネタ。

「クエリ可能な確率的組合せ最適化問題」は不完全な情報下で最適化問題を解くにあたってどこの情報を探れば良いかを求める物。組合せのパフォーマンスが不明でコストをかけて情報を得ていく設定は実務でよくあるのでこの手の話は好き。しかし終盤は難しくて敗北しました。ただ自分のやりたい事に近くて、どの方向に行けばいいかの示唆が得られたのが大きかった。

企画セッション:離散構造処理

組合せパターンをグラフで表現して高速に演算する話。ZDD, BDDは全く知らない分野だったので聞けてよかった。そして問題構造にマッチしたら圧倒的に強い事がわかった。事例紹介に出てきた組合せパターンの数の60桁越え……。Pythonのライブラリもメンテナンスされており、今すぐに適用できる問題が近くに無いか探したくなる奴だ。

招待公演 Multi-armed bandits and Boundary Crossing Probabilities

容赦無くテクニカルな内容。バンディットアルゴリズムの理論については確率一致法やチェルノフ・ヘフディングの不等式で裾確率の上界を抑えるんでしょ程度の理解しか無かったのでついていけなかった……。ただ今の研究の雰囲気が知れたのは良かった。30年前に導かれた境界通過確率(Boundary crossing probabilities)を駆使しているのと、報酬の分布を一般化してK次元指数分布まで進んでいるっぽい。

まとめ

北海道の食を堪能できました。


このエントリーをはてなブックマークに追加

2018-10-30

KDD2018 アドテク関連レポートを書きました

職場のブログにKDD2018参加レポートを投稿しました。主にアドテク業界の人向けに書いてあります故、SSPやDSPといった用語の説明が無いのはご容赦ください。



このエントリーをはてなブックマークに追加