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次元指数分布まで進んでいるっぽい。

まとめ

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


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