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

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

広告配信ロジックにおける処理は広告リクエスト に対して配信可能な広告 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'reillyAmazon
原著: 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'reillyAmazon
原著: 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: リスティング広告とも呼ばれる



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