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といった用語の説明が無いのはご容赦ください。



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

2018-10-21

何故予測が当たるだけではマズいのか、因果と機械学習

KDD2018の感想です。AdKDDやネット広告方面は職場のBlogに書くので、こちらは他の話を。今年は因果推論のチュートリアルが超満員だったり、予測モデルの差別、解釈性と説明性「interpretable and explainable machine learning models」が注目されたりと単に予測するのでは無く運用課題の話が増えたのが印象に残っています。

リスク予測とインセンティブデザイン


上の写真はDavid Hand氏による講演「Data Science for Financial Applications」の一場面です。自動車保険の保険料が女性に比べて男性が高い事に抵抗して行政上の性別を変更した男性*3の例が紹介されています (NEW YORK POSTの記事)。
事故を起す確率が高いと予測された顧客に高い保険料を課すのは自然なアイデアです。しかし事故発生確率と因果があるのは運転中のふるまいや走行時間であり、行政上の性別ではありません。運転中のふるまいを計測して保険料に反映していれば*1男性は安全運転をする事で低い保険料が得られました。相関はあるものの*2事故と因果の無い性別を利用して保険料を算出した事で、安全運転よりも性別を書き換える方にインセンティブが生まれてしまった例で興味深かったです。

Anti-Discrimination Learning

機械学習モデルによる差別の話。チュートリアルの一つに「Causal Modeling based Anti-Discrimination Learning」がありました。相関ベースの物は知っていたのですが、Causal Modelingベースの物は知りませんでした。同じ時間帯は因果推論のチュートリアルに参加していたのでこちらは後で資料を見ました。

From: Anti-discrimination Learning: From Association to Causation
Fairnessの文脈でローンの融資可否判定機はよく出てきますが、融資可否の判定で収入のみが "explainable" な効果と表現しています。人種・住所がデフォルト率に相関があるため貸し倒れリスクの計算には使えるが、人種・住所が原因で融資を拒否するモデルでは説明がつかないという例。ちなみに彼らの手法はprotected attributeを変えた時の結果への影響の差を利用して予測モデルに差別があるかどうかを検出するといった物でした。

予測が当たれば良いケース

Applied Data Science Trackの医療系セッションで緑内障診断のために網膜の厚さから視野感度を推定する事例*4が紹介されました。医療系では医師が予測モデルの出力を理解できるよう、説明性・解釈性が重要とよく説明されますが、そもそもメカニズム不明の疾病であれば相関を使って低コストで予測できる事に十分な意義があるんだなと感じました。

まとめ

機械学習予測モデルが様々な場面で利用されるようになったため、我々開発者はより注意深く要件を見極める必要があります。予測モデルの出力が何に使われるのか、その値が誰にどんな影響を与えるのか。予測が当たれば良いのか、因果関係が必要なのか、顧客への説明性が重要なのか。製造業では不具合の根本対策が求められるため、異常を検知できるだけの予測屋では不十分だと聞いた事があります。そういった現場ではモデルのinterpretabilityとセットでcausalがより求められるでしょう。
因果推論と機械学習の組合せは個人的に興味のあるトピックなので引き続き追っていきます。

注釈と参考文献

[1] 現在ではtelematicsと呼ばれる機器を利用して運転中のデータを保険会社に送るのが一般的なようです。これを装備しない場合は保険料が高くなる。

[2] 前提として機械学習では目的変数と相関のあるデータがあれば予測が可能になる。

[3] Man legally changes gender to get cheaper car insurance: report

[4] Estimating Glaucomatous Visual Sensitivity from Retinal Thickness by Using Pattern-Based Regularizat.



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

2018-07-15

Machine Learning Casual Talks #5 でMLシステムの実装・運用について発表しました

ネット広告配信サービスのMLシステムをどのように作って運用しているかの話をしました。メルカリさんの発表が組織の課題を解決していく話になっているのに対して、私のは個人で好き勝手にやっていく話で非常にカジュアルだったと思います。チームの規模が違いますからね。

スライド: ネット広告配信サービスにおけるMLシステムの実装と運用 


発表の他には雑談で「GBDTの推論処理をWebサーバーに組みこむのはどうするのがいいか」なんて話が気軽にできたり、非常に楽しめました。 会場のメルカリ社は初訪問、人材のブラックホールなだけあって元同僚にも遭遇。関係無いけどメルカリ社からは、eBayが出してるような実験経済系の論文が出てくると面白いかなと期待しております。

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

2018-01-09

AdKDD & TargetAd 2017 まとめと感想

改めて発表内容に目を通し直したのでまとめます。 KDD2017 2日目のWorkshop Dayはネット広告分野のワークショップであるAdKDD & TargetAd 2017に参加していました。AdExchange, DSP, Advertiser, Publisherと様々な立場での課題と解決策が聞けて面白かった。ペーパーと発表スライド、動画は以下のサイトから辿れます。

Paper: Optimal Reserve Price for Online Ads Trading Based on Inventory Identification

  • AdExchangeの立場でRTBのReserve Priceの最適化
  • DSPが高額入札してくる枠で1st Priceと2nd Priceが乖離している時にReserve Priceを引き上げる事ができれば媒体収益を高められる
  • これを実現するためにDSPが高額入札してくる枠 (High-value inventory)の識別器とDSPの入札価格の二つの予測器を作った
  • High-valueかどうかの判定は判定機をネストする事でFalse Positiveを下げる
  • 実験ではYahoo ads exchange (YAXR) のデータでシミュレーションをして8%の収益リフトを確認した
やりたくなる気持ちはわかるが、オークショナーがPublisherの味方をすると1st priceオークションに近づいていくので入札側としては嬉しくない奴。
CPAの単位は明示されていないが10以上をHigh CPAと定義していたのでUSDだと思われる。どうでもいいけどReserve Priceよりも自分の回りだとFloor Priceの方が良く使われるのは何でだろう。

Paper: MM2RTB: Bring Multimedia Metrics to Real-Time Bidding

  • RTBの新しい枠組みを提案
  • 広告掲載ページのコンテキストにマッチした広告が表示されるようにする事で、長期的な広告掲載媒体の価値を高められるとしている
  • Viewabilityは2013年から増えていないらしい

Paper: Data-Driven Reserve Prices for Social Advertising Auctions at LinkedIn

  • LinkedInの広告枠におけるRTBのReserve Priceの最適化をした
  • 既にリリース済
  • CPCの中央値の上昇率、入札金額の中央値の上昇率を指標として効果を測った

Paper: Cost-sensitive Learning for Utility Optimization in Online Advertising Auctions

  • RTB入札に使うコンバージョン予測モデルの損失関数と効用(DSPの収益)を関連づける
  • モチベーション: 損失関数にビジネスインパクトの影響を盛りこみたい
  • 高CPA案件のコンバージョン予測精度向上は収益へのインパクトが大きいので、損失をCPAで重み付けする。(CPA配信が前提になっている?)
  • オフライン実験はCriteoのPublic Datasetを使用
  • オンライン実験は10億以上のIMPでA/Bテストした結果2%のROIの上昇となった

Invited Talk: Randall Lewis (Netflix)
Title: Incrementality Bidding & Attribution

  • Netflixの広告効果の因果効果推定と、実務で継続的にこれを行なうための工夫の話
    • 広告主は広告効果の計測に苦労しているとの事
  • 広告掲載を止めたら広告流入の減少と同じボリュームの検索流入が増えた事があった
    • 広告の効果があるように見えたのはセレクションバイアス
  • IV法でTreatment Effectを推定。広告による増分と効果の減衰をモデル化する事で複数の広告の効果をモニタリングできる
機械学習と因果効果推論の組み合わせは面白い。ネット広告の効果測定と言ったら配信業者の立場だとRCTやれば良いってなるけど、広告主の立場だとRCTができないからIV法を使うんですね。

Invited Talk: Susan Athey (Stanford)
Title: Machine Learning & Causal Inference for Advertising Effectiveness

  • 機械学習と因果推論の違いと、両者の手法を織りまぜた手法の紹介
  • Doubly Robust Methods
  • 多次元におけるAverate Treatment Effectの推定
  • 機械学習の手法を因果効果推定に取りいれる
  • 機械学習はパーソナルの予測のパフォーマンスが良いが、バイアスが入っているとの事
あまり聞きとれなかった……

Paper: Blacklisting the Blacklist in Online Advertising

  • ここで言うブラックリスト = パブリッシャーがAdvertiserをBANしているリスト
  • BANされている所に対して入札する際の予測タスクの計算コストがもったいない
  • オークションのWin Rateが異常に低い所には入札を止める。
  • 結果、入札を14%減らしたがIMPが6%増えた。さらにPacing Engine(予算消化速度調整)が良い感じになった。

Paper: Anti-Ad Blocking Strategy: Measuring its True Impact

  • Anti-Ad Block (AdBlockを解除しないとページを見せないよ、って奴) の効果ってどう計測したらいいのか? という話。
Ground Truthが無いの大変そう。Adobeの人がなんでこんな事やってるんだろうと気になった。

Paper: An Ensemble-based Approach to Click-Through Rate Prediction for Promoted Listings at Easy

  • Contextualな素性を使ったモデルとHistoricalな素性を使ったモデルのアンサンブルによるCTR予測
  • 訓練データをCold(IMPが少ない時点のデータ) とWarmに分割して、前者はContextualなモデルの訓練に使う
  • Contextualなモデルはコールドスタート時にうまく動く
  • アンサンブルモデルは2つの予測器のoutputとlog(imp数)を入力とする。

A Practical Framework of Conversion Rate Prediction for Online Display Advertising

  • RTB入札におけるCVR予測について、自分がオークションに勝ったIMPしか結果を観測できないため真のCVRと観測したCVRに差が出る
  • これはCVRのOver Predictionの原因となり、Over Predictionはビジネスの損失となる。(CPA配信において)
  • 訓練データのCVRにはバイアスが含まれる、これを除去したCVR予測値を求める方法を開発した
  • キャンペーン開始時にはGDBTで予測すると同時に、予測値が信頼できる素性のサブセット(Data-Driven Tree)を育てていく、次のフェーズではData-Driven Treeで予測を行なう
自分達が配信する前からコンバージョン通知は無差別に飛んでくるので、それを使えばコールドスタートできる。みたいな事が書いてあって裏技かよって思った。
「観測したCVR > 真のCVR」の証明があるけど、「リクエストに対する入札金額が対数正規分布する」という仮定はどこから出てきたのだろう。バイアスが除去できる理由がよくわからなかったので後でちゃんと読む。

Paper: Deep & Cross Network for Ad Click Predictions

  • DNNによるCTR予測
  • Feature Engineering不要
  • 既存のDNNによる手法 (Deep Crossing) よりもメモリ使用量が少ない
予測性能が良いという点よりも、素性エンジニアリング不要という点のメリットが大きいなと感じた。

Paper: Profit Maximization for Online Advertising Demand-Side Platform

  • DSPの収益を最大化するRTB入札戦略
  • 目的関数の約定金額の部分が非凸になるので、ラグランジュ緩和する
広告主予算と消化速度(期間?)の両方を制約としているので運用の使い勝手はかなり良さそう。ただ、予めInpression Typeの出現パターンを列挙しないといけないのがつらいのでは。理想の入札ポリシーってこんなんだろうなと思ってた奴が出てきて、かつ非凸になる問題をうまく緩和していて感動した。

Invited Talk: Alex Smola (Amazon)
Title: Users & Time

  • LSTMやRNNの話にはじまり、サービスの利用ユーザーが死んでいるか生きているかの判定手法の話へ
  • Survival Analysis 101, Cox Model
  • すぐに帰ってくるか、翌日帰ってくるかアプリ?によって傾向は異なる
  • Recommender systems, not recommender archaeology (考古学じゃない、未来を予測せよ)
  • Netflix public dataset is wrong
    • 映画が賞を取るとpredicted ratingが上がる全然consistentじゃない
    • 賞を取ってから数ヶ月で下がる
  • Sequence modelはUser return times、Recommender system、User activityの予測に使える

Invited Talk: Thorsten Joachims (Cornell)
Title: Learning from Logged Interventions

  • バンディットアルゴリズムで生成されたデータからのバッチ学習
  • Selectionバイアスがかかっている事に注意 (選択は自分がしている)
  • これを学習する

Paper: Attribution Modeling Increases Efficiency of Bidding in Display Advertising

  • RTB入札のEVB(Evaluated Value Bidder)は、非繰り返し2ndプライスオークションの際には最適
  • だが同じオーディエンスに繰り返し表示する前提ではさらに改善できる
  • アトリビューションモデルを使ったRTB入札ポリシーを提案
  • 以前のクリックの影響を考慮してIMPの価値を割引く
CriteoなだけあってHashing Trick推し

Paper: Ranking and Calibrating Click-Attributed Purchases in Performance Display Advertising

  • Ordinal regression is a good strategy for ranking
  • Sigmoid function is not good for small probability
最後の発表、このあたりになると疲れてあまり聞きとれませんでした

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