港区で苦しむデータサイエンティストのメモ帳

統計・機械学習とマーケティング

振り返り(令和元年)

年が明けた。忘れないうちに令和元年の振り返りをしておく。

Q1

新卒2年目。部署異動は特になく、引き続きデータサイエンティスト職を続ける。オンライン教材や社外セミナーを活用して学び、同時に、会社に自分が学んだ技術やノウハウを還元することを試みた。社内やチームで勉強会を開いてみると徐々に巻き込まれてくれる人も増えて、「自ら機会をつくり、その機会によって自分を育てる」「先陣を切って人を巻き込む」の必要性を実感し、働き方の引き出しが増えた感覚を得た。

余暇に出場していたデータ分析のコンペKaggle: Your Home for Data Scienceで初めてのメダルを獲得した。勾配ブースティングを筆頭にした汎用的で高度なモデルをチューニングしながら上手く取り合わせ、ドメイン知識を織り込みながらモデルの改善に尽力した。このころの業務ではRの使用率が高かったので、Pythonで長大なコードを書く機会が得られたのはいい経験になった。世界のデータサイエンティストが議論しているのをキャッチアップできるプラットフォームが存在するのは貴重である。

また、令和元年となり、新しいことを始める良いタイミングだろうと思い、Mac付属のGaragebandを使って楽曲の制作(DTM, DeskTop Music)を始めた。実際に作り始めてると、和声の理解不足や、リズムパターンの引き出しの少なさなどを突き付けられて、しっかり落ち込んだ。どうやら、音楽を聴くこと、演奏すること、そして制作することは、互いにオーバーラップしている部分はあるものの、それぞれ違う性質を持つのだなと分かり始める。しかし、好きなことなのでしっかり向き合おうと腹をくくって、差し当たり100曲つくることを目標にした。この数字に意味があるのかは分からないが、量が質を生むことと継続が力になることを信じる。週末は夜を徹してDTMに勤しむことも多くなった。

Q2

社外でのプレゼンなどの機会も増え、プランナーや営業などフロントに立つ人との協業が増えてきた。複数人で作業を進めるときの、ファシリテーションの技術であったり、組織における心理的安全性など、チームワーキングの方法論について考える機会が増える。GoogleのRe:Workは精神論だけでなく行動例が提案されており良い教材になった。「人を巻き込む」「意思決定をする」というのが苦手な性質だったが、協業での必要性に駆られて、徐々に身についてきた。弊社はどうも特定のイデオロギーが無く自由だが、そのトレードオフとしてトップダウンな意思決定が起こり辛い側面もあり、若手が腕まくりしてチームをドライブするのが前に進むコツかもしれない。

暇なときに出場していたAtCoder:競技プログラミングコンテストを開催する国内最大のサイトで水色にランクアップした。chokudai氏のブログに「(水色は)半数以上のIT企業において、アルゴリズム能力についてはカンストと言える」と書かれていたので、とりあえずの基礎は学べたような気がする。勿論まだまだ入門レベルであることは否めない。

ギターでポップスやジャズの曲を演奏する機会を頂けた。カフェやバーなど、音楽演奏を主目的にしていないハコでBGM的に演奏をするライブが昔から好きで、ギターで出演することはひとつの夢だったので叶って嬉しかった。思えば、イギリスでピアノトリオのドラムを叩いていたときに湖水地方のレストランでライブすることがあったが、地元の人たちの気取らないノンシャランな雰囲気に包まれてライブするのは心地よかった。かしこまった雰囲気より好きなのかもしれない。

Q3

細菌感染による喉頭蓋炎で2週間ほど入院した。もうしばらくで呼吸が出来なくなるという状況で病院に運ばれ、気管切開をしてカニューレを通し、喉元からヒューヒューと呼吸をしながら点滴で治療する、という生活になった。放っておくと痰が絡んで呼吸が出来なくなるため、しばらくは夜も眠れぬ日々が続いたが、友人や同僚、親族の気遣いと深夜まで常駐している医療従事者の方々のおかげで快復できた。身の回りの人たちのありがたさに気付かされながら、頭の上がらない思いであった。自分のためだけでなく周りの人や家族のためにも、しっかり自己管理して肩のちからを抜いて生活することの大切さを再確認した。心身の健康は自己責任であり、自己啓発本にもあるような「自分の人生をマネジメントするのも自分、自分のゴキゲンを取るのも自分」といった言葉が改めて身に染みてくる。以来、少なくとも1日3回の手洗いとうがいは欠かさないようにしていて、何とか体調は崩さずに済んでいる。

退院し仕事に復帰した後はさらに仕事の幅が広がり、通常のデータ分析業務に加えてインフラの設計やビジュアライゼーションなどの機会も増えた。BIツールは不慣れだったが、チュートリアルを見たりテンプレートを模倣しながらプロトタイピングをして、メンバーのフィードバックを貰いながら完成させた。新しいことを学び、時には踏ん張って乗り越えていく過程は楽しい。(ところで、独学自習は得意な方だが、新しいことを学ぶのは苦しいときもあり、しかし同時に踏ん張りどころでもあることは経験的に分かっている。)

また、サブプロジェクトとして社内の情報共有プラットフォームの立ち上げやウェブ制作の担当を行ったり、インタビューを受けたり母校である京都大学でセミナーもした。7割のリソースを軸足となる業務に割いて、残りの3割でランダムな仕事をしていくスタイルは、常に可能性を模索していたい自分には合っていると感じた。

Q1に始めたDTMは、週末につくってはこわし、つくってはこわしを繰り返して、10曲ほど制作し、1曲を仕上げてSoundcloudにアップするに至った。何とか第一目標は達成といったところで、これからも継続して進めていけそうである。Spotifyにアップロードするのが第二目標であるが、作曲・アレンジメントだけでなくミキシングからマスタリングまでまだまだ学ぶことが山ほどある。聴き手の人生の数分を奪うようなものなのだから、少しでも何か印象に残って、心の中に何か残せるようなものにした方が面白いと思う。

soundcloud.com

令和元年を通して改めて言語化されたのは、私は「自由であること」をテーマに生きている、ということである。すなわち、資本の自由、思想の自由(特定のイデオロギーに支配されないこと)、所属の自由(会社や土地に縛られず、旅をするように生きられること)の3つである。これらの達成条件とファーストステップを明確にしなければならない。

令和2年は引き続き自由を追求しつつ、自身の健康と身の回りの人への感謝を胸に留めて生きていくことをしたい。

『融けるデザイン』を読んでまとめた

『融けるデザイン』の骨子

  • 情報技術の発展に伴い、ヒトとインターフェイスが融け合う時代になった
  • 今までとは異なる新しい設計のための発想とロジックが必要
  • 「自己帰属感」という考え方を軸に新しいデザイン=融けるデザインの考え方を整理

融けるデザイン ―ハード×ソフト×ネット時代の新たな設計論

融けるデザイン ―ハード×ソフト×ネット時代の新たな設計論

  • 作者:渡邊恵太
  • 出版社/メーカー: ビー・エヌ・エヌ新社
  • 発売日: 2015/01/21
  • メディア: 単行本(ソフトカバー)

まとめ

体験ベースのものづくりへ

  • コンピュータは本来メタメディア=手足の拡張・技術の分化
    • e.g. 文書作成、作曲、グラフィック描画などの装置
  • が、既存の分化の考え方では説明しにくいものが表れた
  • 体験ベースのものづくり

インターフェイスから体験へ

  • インターフェイス=人とモノ・技術の接点
  • インタラクション=知覚行為・フィードバック
    • e.g. ペン
      • ペン先までが身体
      • 紙がペン先にフィードバック
    • e.g. 車
      • 車全体が身体
      • 外界(=車体の外)が車にフィードバック
  • ユーザーエクスペリエンス=体験
    • インタラクションが起こるところで体験が生まれる

自己帰属感とは

  • 「道具の透明性」
    • ハンマーで釘を打つとき、人はハンマーを意識しないという感覚
  • 「自己帰属感」という観点で考える
    • 道具が身体の一部だと感じている状態
      • 身体性に統合される(人間中心)
      • パソコン処理が重くてカーソルがついてこない→「ひっかかる」と感じる
    • e.g. マルチダミーカーソル実験
      • スクリーン上に大量に配置された偽のカーソルの中から自分が動かしているカーソルを見つける実験
      • → 利用者はすぐに見つけ出せるが、観察者はわからない
  • 自己帰属率が低い状態
    • 連動が乱れている=自己帰属率がシステム側に持っていかれている
      • ウェブページの読み込みが遅い→「重い」
    • e.g. くすぐり実験
      • ある機械を通じて自分で自分をくすぐる→くすぐったくない
      • 機械側で300msの遅延をランダムに生じさせる→くすぐったい(!)
  • 自己感は原因ではなく結果
    • 私たちは命令することで手足を動かしている?
      • 実は「見る」ことでようやくきちんと動かせている
    • 手や足も連動している結果、「私」という輪郭を作っている

情報を道具に変える

  • ググるは易く、行うは難し」
    • 「インターネットで情報を得る→人間が理解する→人間が問題・課題に適用する」
    • 今までの情報はインターネットを介在する
      • Encode=実体・現象を記号化してインターネット上にアップロード
      • Decode=記号を再現・具現化して具現体に変換
  • → 道具自体に情報を紐づける
    • 情報がインターネットを介さない
    • e.g. smoon
      • デジタル化されたレシピ情報に基づき
      • スプーンが勝手に計量すべきサイズに変形する
      • 計量意識(理解)と計量行為(適用)が不要になる
  • 暗黙的な行為を形式知に変える
    • e.g. 東京で走る車のワイパーのON/OFFや強さ→雨がどこでどれくらいの強さで降っているかわかる
    • e.g. 人々がウェブページ間に自然に貼るリンク→Googleページランク
    • あらゆるものにセンサを取り付けて情報を取得できる
      • e.g. 冷蔵庫の開閉・コップの水の注ぎ具合→喉の乾き具合

情報を環境に溶け込ませる

  • 情報技術を環境へ融け込ませ、自然に情報を利用
    • e.g. CastOven
      • 電子レンジの温め時間を利用してYoutubeにあるコンテンツを閲覧可能
      • 調理時間の長さに応じた動画が電子レンジ全面にあるディスプレイで再生
    • e.g. 電車の車内広告
      • iPhoneやストリーミングで映画・映像はポータブルになったが、東京駅まで20分、などというときに2時間の映画は見ない
      • 車内広告はよい暇つぶし
  • 時間の使いにくさ
    • 時間の長さによる抵抗
      • e.g. ドラクエやFFのリリース時、「クリアまで60時間もかかる」ことに批判や抵抗があった
    • 利用者の時間をどう奪っているのか、という観点も重要
  • 非拘束性の設計
    • シングルインタラクションからパラレルインタラクションへ
      • もはや「TVだけ見る」「映画だけ見る」ではない
    • 生活に入り込んで非拘束的なコンテンツやメディアを設計する必要がある
      • スマホゲーやDSなどモバイル環境のゲームはいつでもやめられる中断の設計がある
      • 「通知をして、OKを押すと先に進む」→「通知センターにタイムライン的に溜まっていく」
  • プレユーザー
    • ユーザーの「使う」はグラデーション
      • デジカメを買って家に置いてある
      • 鞄に入れて持ち歩く
      • デジカメを構えて写真を撮る
    • プレユーザーインターフェイス
      • フォトスタンドにもなるデジカメ
      • 出かける前に持って行ってほしいことをアピールするインタラクション
      • 位置情報に基づき「このあたりは多くの人が写真を撮っている」と通知する
  • 制約が生み出す非拘束性
    • e.g. Twitterは140文字という制限があった

デザインを現象的に捉える

  • 道具-身体システム / 環境-行為システム
    • 「心」があって「行動」がある → 「環境」があって「行為」がある
      • デザインの議論は「心」を重要視しすぎかも
      • 物理法則が存在し、数式で記述され、工学的に応用されるように、人と環境のインタラクションにメカニズムがあるかも
  • 「モノ」ではなく「肌理と縁」
    • 視覚世界を、物の区別ではなく肌理(キメ)として捉えるギブソン
    • スナップショットで見ると肌理の中に埋もれるが、動きだすとそこに縁が発生する
    • 徐々に縁が消えていくとき「隠れていく」と認知される
      • 徐々に雲に隠れていく月(たとえ夜で雲が見えなくてもそう認知される(!))
      • パソコンの「最小化」機能のエフェクト
  • 「私たちが周辺を視るということ」を実験してみよう
    • 1.少し周辺を視て、体と頭を左右に動かしてみる
    • 2.面の重なり合いで起きる縁の発生部分を注意してみる
    • 3.縁で起きている肌理の見え隠れは「何の動き」か
    • 4.実は「あなたの今の体の動かし方」
      • =自己帰属感
    • 5.他人ではなくまぎれもなく「私が世界を見ている」という感覚を得る
    • 視ることで、世界と自己を同時に知覚している
  • 主観的リアリティと客観的リアリティ
    • いくら高画質で解像度の高い映画を見ても、必ずしも映画の中に入り込んだ体験にならない
      • 「私は映画館で立体的な映像を見ている」という感想
    • なぜなら、人の視覚は実際には2Dで、時間軸によって3D性を捉えている
  • 世界はひとつのOSである
    • デザイン、作法があり、ガイドラインに従って設計することが人-環境のパフォーマンスを発揮できる
    • これからのデザインは人間と世界のメカニズムを理解しメタメディアを用いて人々の世界体験を拡張させるもの
      • 特定のメディアではない、より高次元な存在

メディア設計からインターフェイス

  • 情報と物質を分けない
    • 体験から考えれば情報と物質の分別はあまり意味がない
      • 情報だからといって虚構でない
      • 物質だからといって物質的価値があるとは限らない
  • デザイナーにとっては体験の設計が主となる
    • 特定のメディアでのデザイナー(雑誌紙面のデザイナーとか)は徐々にすたれていく
    • ライゾマティクス(真鍋大度)はグラフィックでもファッションでもプロダクトでもありうる
      • 他にもTakramやチームラボ
      • デザイナー・エンジニアリングの垣根から徐々に消えていっている
  • 映画・音楽・言葉あらゆるものがメタメディア化していく可能性
  • 新しい時代では、「何をやっても新しい」
    • e.g. Twitter
      • 乱暴な言い方をすれば単なる掲示板だった
      • スマホ時代になって意味が変わった
    • デザイン思考・プロトタイピングなど「とにかくつくる」はメタメディア時代の方法論
      • プログラミングは強い武器
  • すべての問題・物事をインターネットとコンピュータを利用して試し直す価値がある

【KDD2018】論文『Customized Regression Model for Airbnb Dynamic Pricing』を読んでまとめた

はじめに

2018年8月19日から23日にかけてロンドンで行われたKDD2018データマイニングの世界的なカンファレンス)に採択されていた『Customized Regression Model for Airbnb Dynamic Pricing』なる論文を読みました。

Airbnbで実装されている価格推薦モデルについての論文で、

  • ビジネス・ユーザー視点を取り入れており、
    • 「価格を下げれば予約されていた」と、「もっと価格を上げていてもよかった」というニーズ
  • それをうまくモデル化していて、
    • 上記を損失関数として定量
  • さらにシンプルな構造で理解しやすい
    • ①予約確率の予測→②最適価格の提案→③パーソナライズと、マクロ→ミクロに落ちていく構造

という点において優れたデータサイエンスの応用例であると感じたため、主要な論点を要約しつつ解説に取り組んでみようかと思います。

論文の要旨

最適価格の提案をしたい

まず、Airbnbではホスト側が宿泊料金を自由に設定することができます。

自由は自由でいいのですが、Airbnbに代表されるCtoCのプラットフォームにおいて、需要と供給のよりよいマッチングのために『価格設定』は重要な要素になっていることを考えると、サービス側から最適な価格を提案を出来ると望ましいです。

具体的には、Airbnbの『Smart Pricing』という機能でモデルが算出した最適価格をユーザーが見れるようになっています。ユーザーはモデルが提案している価格を採用してもいいし、参考にして微調整してもいいし、全く利用しないことも出来るようになっていることはポイントになります。

f:id:ekanoh:20180826103232p:plain

3段階のモデル

f:id:ekanoh:20180826104625p:plain

①予約確率の予測(分類)

まず、競合の状況や部屋の特長などを鑑みて、とある日付で予約が発生するか否かの確率を計算しています。予約ありを1、予約なしを0にした二値分類タスクになります。 気になるのが使用しているモデルと特徴量ですが、モデルには勾配ブースティング(GBM、特徴量は以下のような変数を利用しているようです。

  • Listing Features
    • listing price per night
    • room type
    • person
    • capacity
    • the number of bedrooms/bathrooms
    • amenities,
    • locations
    • reviews
    • historical occupancy rate
    • instant booking enabled
  • Temporal Features
    • seasonality (the day of the year, day of the week, etc)
    • the calendar availability (e.g. the gap between check in and check out)
    • distance between today and ds_night
  • Supply and demand dynamics
    • number of available listings in the neighborhood
    • listing views
    • searches/contacts rates,

個人的に盲点だなと思ったのが、Temporal Featuresのdistance between ds and ds_nightで、これは計算日から、確率を推定したい日付(当日)までの残り日数のこと。残り日数に余裕があるほど予約確率は高まりますよね。

あと、Supply and demand dynamicsのnumber of available listings in the neighborhood(近隣の宿泊可能な施設数)という変数もなるほどという感じです。個々のアイテムの特徴だけに注目しがちですが、競合の状況も説明変数に入れるとよさげですね。

更なる工夫として、

  1. マーケットごとにモデルを作り分ける
    • ex. Tokyo, California, ...
  2. 適応的サンプリング(adaptive sampling)
    • 宿泊施設激戦区のサンプル数を相対的に増やす

の2つの手法を使うことでパフォーマンスを上げている模様です。(指標はAUC)

たしかにマーケットごとに上記の特徴量の影響が変わったり、 激戦区とそうでない部分では振る舞いに違いが出そうなので、このような差異を上記の手法でうまく処理できていそうですねー。

②最適価格の提案

①のモデルで算出された予約の発生確率を織り込みながら最適な価格を計算していくのですが、 ここで「最適とは何か?」というものを考えておく必要があります。

なぜなら、教科書的な機械学習モデリングと異なり、今回のタスクでは必ずしも正解ラベルというのが存在しません。 つまり「この価格が最適だった」を示せるような教師データが存在しないということです。 (価格Pで売れたデータがあったとしても、それが最適だったとは言えないですよね?🤔)

そこで彼らは少なくとも最適とはいえない価格とは何か?ということを考えて、 非最適な価格に対して損失関数をあてがうことにします。具体的には以下の2つのパターンです:

実際に設定された価格Pとモデルが提案した価格 P_{sug}について、

  1.  P_{sug} < Pだったが、予約が発生した
    • モデルの算出した結果が実際に予約された価格Pよりも低いため、低く見積もりすぎ
  2.  P_{sug} > Pで、予約が発生しなかった
    • 価格Pでも予約されなかったのに、それより高い価格を提案していることになるため、高く見積もりすぎ

というわけで、上記の条件を使って、損失関数を以下のように定義します。

f:id:ekanoh:20180825013855p:plain

予約がある場合( Y=1)と予約がない場合( Y=0)のそれぞれで、「悪くない」価格提案の領域を設定し、そこから離れれば離れるほど「誤差」=「最適ではない」として損失関数で勘定していきます。ヒンジ関数ないしはε-insensitiveのような損失関数の形に似ていますね🤔

次に、以下のように最適価格を推定するモデルを定義します。

f:id:ekanoh:20180826000925p:plain

肩にいろいろ乗っかってるのでパッと見てやや複雑ですが、ホストが設定した代表価格  P *1に対して、以下の2つのスコアを使って補正をかけるイメージです。

  • 予約確率 q
    • モデル①で算出
  • 需要スコア D
    • マーケット以下のクラスタごとに計算される需要スコア
    • Gaussian Scaleに標準化されている

「なるほど」と思うのが、どうやら需給の上下に対してどのようにマーケットが応対するかは非対称であるようで、 需要スコアが基準値より低い場合とそうでない場合でグラフを「曲げる」パラメータを分けていることです。*2 イメージとしては以下のようになります。

f:id:ekanoh:20180826002717p:plain

また、最適化をする際にざっくり以下の5つの工夫をしているようです。

  • 学習データは
    • リスティングごと
      • Airbnbでは同じエリア、同じタイプの部屋の中でも価格の分散が大きいため、ひとつひとつを学習データにする
    • 直近数週間のデータが中心
      • 短期的なトレンドを反映するため
  • パラメータに制限をかけている
    • 大小変化の激しい提案や、差異の小さすぎる提案価格が出ないようにする
  • 確率的勾配降下法(Stochastic Gradient Descent)で最適化
  • 予約済みの既知データを使ってハイパーパラメータを調整
    • 将来時点の宿泊で予約済みのデータを、モデルにマスクした状態で渡す
    • → 望ましい試算になるかどうかを検証する

③パーソナライズ

論文では詳しく説明されていなかった(見逃しているかも)ですが、 Airbnbの機能でホスティングの目標(ex. 宿泊頻度を上げたい)や、宿泊価格の最大・最少値を設定できる*3ようになっているので、ユーザーの設定に合わせてモデルの結果をadjustしている模様です。 「これが最適な価格やぞ」とは提案しつつも押し付けはしないわけですね。

f:id:ekanoh:20180826104117p:plain

モデルの妥当性のチェック

オフライン

定量的には、需要関数が単に価格の関数になるというナイーブな*4モデルをベンチマークに、結果を比較して新しいモデルの効果を示しています。

また、定性的にも、

  • 週末に価格が高騰する
  • 3月末~4月初旬の桜シーズンに東京の価格が高騰

などといい感じにマーケット毎のシーズナリティを捉えられているようです。 (学習の結果がしっかり定性的な感覚と一致しているのってわりと気持ちよくて、カタルシスがありますよね…)

オンライン

このモデルは既に1年以上Airbnbで実装されていて、モデルのサジェストを適用したホストについて予約数・予約価格共に大きな伸びを見せたそうです(!) 実運用されていて、実績のあるモデルということで精度はお墨付きな感じがあります。

所感

英語力不足と機械学習力不足によって読み下すのに丸1日かかってしまったのですが、データサイエンスのテクニックがかなり凝縮されているように感じました。 当記事では省略した部分や計算式(評価指標など)もいくつかありますので、データサイエンティスト各位はぜひ元論文を読んでみてください|д゚)

KDD 2018 | Customized Regression Model for Airbnb Dynamic Pricing

*1:基準値となる価格なので、たとえばこれまでブッキングされた価格の中央値とかでもいい模様

*2:浅学のため類似している例を知らないのですが、何から着想を得ているのでしょう?

*3:「目標売上」 → 「ホスティングの目標」に修正(2018.08.26)

*4:「単純な」ないし「簡易的な」。需要を価格だけの関数と見なすのは経済学の教科書とかで最初の方に出てくるやつですよね。

『計量経済学』のざっくりとした定義とワークフローのまとめ

データサイエンティストと計量経済学

データサイエンティストと一口で言っても、機械学習(machine learning)に軸足を置いた「機械学習エンジニア」に近い人材もいれば、計量経済学(econometrics)に軸足を置いた「データアナリスト」に近い人材もいます。

(もちろん名刺・役職的にどう呼ばれるかは会社によるところも大きいとは思いますが、後者の方が「〇〇サイエンティスト」「〇〇アナリスト」などと呼ばれることが多い印象ですネ)

しかしながら、学部や大学院で計量経済学を専門に学んでからデータサイエンティストになっている人は必ずしも多くはないように思います。

「カイ2乗検定」「回帰分析」「有意性」といった用語を、実務を通して都度都度学んで、少しずつ計量経済学の体系を身につけていることが多いのではないでしょうか。

そこで今回は、計量経済学とはそもそも何だったかを振り返りつつ、計量経済学者が行う一般的な分析のワークフローを紹介していきたいと思います。

そもそも計量経済学とは

Wikipediaによると、「経済学の理論に基づいて経済モデルを作成し、統計学の方法によってその経済モデルの妥当性に関する実証分析を行う学問」とあります。

抽象的な説明でわかりにくいですよね。ひとつひとつ見ていきましょう。

まず、「経済学」とありますが、経済分野には計量経済学以外にも「経済理論」「数理経済学などといくつかの分野があります。これらはどのようなもので、計量経済学とはどう違うのでしょうか?

経済理論との違い

まず、経済理論は、経済現象の定性的な理論・仮説を提案する学問と言ってよいかと思います。たとえば、「その他の指標が一定で、商品の価格が上がれば、需要は下がる」と言った主張をします。

それに対して計量経済学では、価格と需要はどのような数値的な関係があるのか定量的(経験的)に分析することになります。

数理経済学との違い

また、数理経済学は経済現象の数学的な表現を考える学問です。一般的に、「それが経験的に正しいかどうか」は一旦脇に置いて考えているようなイメージです。

それに対して計量経済学では、その数学的な表現の妥当性を検定することを行っていきます。

計量経済学のワークフロー

では、「経済学の」というところから計量経済学の位置づけを振り返ったところで、「(経済学の)理論に基づいて経済モデルを作成し、統計学の方法によってその経済モデルの妥当性に関する実証分析」という部分を考えていきましょう。

これは、計量経済学の具体的なワークフローを見ていけばわかりやすいかと思います。

f:id:ekanoh:20180816142528p:plain

1. 定理・仮説を立てる

経済学では言わずと知れたケインズは以下のような仮説を立てたそうです。

「収入が増加するほど消費も増加するが、消費の増加量は収入の増加量よりは少ない」

2. 定理を表現する数学的なモデルの設定

1.の仮説では、収入と消費の数値的な関係性が具体的には設定されていませんよね。

これを数字を使ってざっくりと表現し直すと、「新たに増加した1単位の所得のうち消費にまわる部分の割合(=限界消費性向、MPC)は0より大きく1より小さい。」という意味だと解釈できます。

従って、数理経済学的には以下のような定式化を考えるのが妥当でしょう。(回帰分析)

Y = \beta_1 + \beta_2 X

0\lt\beta_2\lt1

f:id:ekanoh:20180816115242p:plain

なお、この関数は一般に消費関数と呼ばれて、Yが従属変数(または目的変数)、Xが独立変数(または説明変数)と呼ばれます。

3. (計量)経済学モデルの設定

しかしながら、実際に500世帯の収入と支出の実データを取得できたとして、横軸に収入、縦軸の支出を取ってプロットしたとしても、上記のような綺麗な直線上に並ぶことはありません。(ありますか?)

実際には、収入だけでなく、ほかの変数が支出に寄与することがあるからです。

たとえば、収入が同じだとしても、家族の規模や構成員の年齢、宗教・価値観などによって支出の傾向が変わることは容易に想像できますよね。

なので、計量経済学としてのモデリングでは上記の関数を以下のように修正します。

Y = \beta_1 + \beta_2 X + \mu

0\lt\beta_2\lt1

ここで、\muは誤差項(error term)と呼ばれる確率変数で、収入以外の他の変数による誤差を吸収するために追加されたものです。

f:id:ekanoh:20180816194824p:plain

4. データを使ってパラメータを推定

さて、上記のようにモデルが定義できたら、実際のデータを使って最適なパラメータ(たとえば\beta_1\beta_2)を推定していきます

f:id:ekanoh:20180816195536p:plain

実務上は上のようなデータと、ExcelやRなどの統計ツールを使ってパラメータの最適化を行います。(データは架空のもの)

ちなみに、具体的な回帰分析の方法については以下の記事などをチェックしてみてください。

honawork.hatenablog.com

5. 検定

それでは、上記のデータを使って回帰分析を行って、たとえば、以下のような結果が得られたとします。(数字は適当に設定しています。笑)

 Y = -184 + 0.71X

式の上では、0\lt\beta_2\lt1となっているため、「収入が増加するほど消費も増加するが、消費の増加量は収入の増加量よりは少ない」という最初に設定した仮説を満たしているように見えますよね。

しかし、「上のデータでたまたまそうなっただけじゃないのか」という可能性があるため、実際には統計的に確からしいかの検定が必要です(!)

たとえデータに当てはまりがよかったとしても、それが一定確率で起こりうるような誤った結果(=有意ではない)ならば、仮説が検証できたと言えないというわけですね。

ここで最初にも言及した「有意性」「カイ2乗検定」など、「検定」と呼ばれる統計用語が登場してきます。

6. 予測する

仮説検定が終わり、上記のモデルの妥当性が証明できるところまでくれば、将来予測に使っても差し支えありません。

たとえば、上は2018年までのデータですが、収入の見込みなどわかっていれば翌年以降である2019年や2020年の消費予測などをすることができます

したがって、ビジネスや政治政策における意思決定に使っていくことができます。

たとえば、政策を変えれば収入が増えるとき、消費がどれくらい変化するか?を推定して、経済へのインパクトを織り込みながら政策の決定をすることができるわけですね。

まとめ

統計や計量経済学で登場する用語がどういう文脈で使用されるものなのかのイメージが付きましたでしょうか?

場当たり的に学習をしがちな「回帰分析」「検定」「有意性」などの言葉も、いつどういう場面で登場するかわかった上で学習を進めていけると、見通しがよくなってよいかと思われます。

HackerRankのアルゴリズム厳選20問でコーディング面接を対策する【Pythonコード付き】

HackerRankのCracking the Coding Interview

https://www.hackerrank.com/domains/tutorials/cracking-the-coding-interviewwww.hackerrank.com

HackerRankという、世界中のハッカー(=ソフトウェアエンジニア・機械学習エンジニアなど)が、プログラミング課題を解決するサイトがあります。

そこに「Cracking the Coding Interview」といういかにもコーディング面接対策といった風情のチュートリアルがあるのですが、初心者がプログラミングのためのアルゴリズムを学ぶのに素晴らしい教材だと感じたので紹介します💁‍♂️

Cracking the Coding Interviewの良さみ

課題の質が高い

まず、かの「Cracking the Coding Interview」(日本では「世界で闘うプログラミング力を鍛える本」)の著者であるGayle Laakmann McDowellが監修しており、課題の質が非常に高いです。難易度設定が適切で、初心者でも考えやすい適度な難易度になっています。

類書などのように「1章からいきなりむずすぎワロタ・・・」となりません🐜たとえば、以下の問題を見てみてください。

入力が1, 1, 3なら出力は3

入力が0, 0, 1, 2, 1なら出力2

など、入力の中で「1つしかない数字」を見つけて出力せよ

ただし「1つしかない数字」以外はすべて2回ずつ表れる

(Bit Manipulation: Lonely Integer)

(※問題文修正 2018/08/02)

この問題は、問題タイトルにもある通り本来はビット演算を使って解くことが想定されているのですが、ハッシュなどを駆使すれば何とか解答することができそうですよね🤔

このように、想定解となるアルゴリズムを知らなくても取り掛かりやすい程度のレベルに調整されています。

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~

Cracking the Coding Interview: 189 Programming Questions and Solutions

Cracking the Coding Interview: 189 Programming Questions and Solutions

  • 作者:Gayle Laakmann Mcdowell
  • 出版社/メーカー: Lightning Source Inc
  • 発売日: 2015/07/01
  • メディア: ペーパーバック

解説の質が高い

さらに、解答は動画付きで丁寧に解説されていて、コードとにらめっこしていてもわからないようなアルゴリズムのかんどころを視覚的に説明してくれています。

アルゴリズムは、言葉で聞くと難しく感じてもビジュアルで理解するとすんなりわかることも多いため、動画が付いてくるのは非常にありがたいです。

以下は上記の問題の解説動画です。ご覧頂ければどれだけ詳しく解説してくれるかわかるかもしれません。

ちなみに、ハッシュを使った解答もビット演算を使った解答も解説してくれていて、「なるほど、そう解けば良かったのか💡」と理解が丁寧に促されます。

www.youtube.com

問題が厳選されている

問題が20問に厳選されていて、短期集中的に取り組みやすいです。私は週末で一気に終わらせました。

書店で分厚いアルゴリズム本を買ってきて「アルゴリズムおおすぎワロタ・・・」となった経験がある方には特におすすめです😇

具体的には、以下の全20題に厳選されています。

  • データ構造

    • 配列:左回転をする
    • 文字列:アナグラムをつくる
    • ハッシュ:身代金要求
    • 連結リスト:循環を見つける
    • スタック:括弧のバランスをとる
    • キュー:ふたつのスタックの物語
    • 木構造:二分探索木
    • ヒープ:逐次的に中央値を求める
    • トライ木:連絡先
  • アルゴリズム

  • テクニックおよび概念

単純に解いていて楽しい問題も多いためモチベーション維持にもGoodでした。

議論が闊達に行われている

問題ごとに設定されているディスカッションタブというのを開くと、各言語での実装例や、他の人の解法・考え方を学ぶことができます。

他サイトと比べてもわりと議論がアクティブなため、どうしてもわからないことがある場合があっても質問すれば回答が返ってくることが多いです。私は質問を投稿して半日以内に返信が来ました🙏

おわりに+Python3での実装例

アルゴリズムはプログラミングに登場するさまざまな概念の基礎になっていることが多いので、このような教材で集中的に学んでおくのがよいと感じます。

私はデータアナリストでふだんPythonを使って分析を行うことが多いため、Python3で挑戦してみました。GitHubにあげておいたので、Pythonでトライしてみようという方は参考にしてみてください|д゚)

github.com

機械学習の基礎知識を5分で復習するノート

学習の種類

学習方法によって4種類ある

  • 教師あり学習
    • パターンと正解ラベルの組からなるデータセットから、入出力の対応関係(=関数)をつくる
  • 教師なし学習
    • ラベルデータのないデータセットから、内在する構造を捉えてモデル化をすること
  • 教師あり学習
    • 正解ラベルあり/なしが混在したデータセットから、入出力の対応関係を構成すること
  • 強化学習
    • ある環境下で、報酬がもっとも高くなる環境と行動との関係(=policy)を学習する
    • 学習時に明示的な入出力のペアが与えられない点で教師あり学習と異なる

分類と回帰

教師あり学習で)出力によって分類タスクと回帰タスクがある

x: 独立変数, y: 目的変数として、

  • 回帰 regression

    • yが連続である(実数値をとる)
    • xが1次元なら単回帰、2次元以上なら重回帰
    • 例) 国民の所得から経済全体の消費を推定
  • 分類 classification

    • yが有限個の離散カテゴリ
    • eg) 画像を入力して、画像に映っている動物の種類を推定

特徴抽出と特徴ベクトル

特徴ベクトルを使って情報を数値で表現する

  • 特徴抽出 feature extraction
    • 多くの情報を持ったパターンから、認識に本質的な情報を抽出すること
    • パターンを圧縮した効率のよい空間の点
  • 特徴ベクトル feature vector
    • それぞれの特徴を数値で表現し、それらを組としたベクトルのこと
    • eg) 文字認識の場合、特徴量として線の傾き、長さ、曲率など
  • 特徴空間 feature space
    • 特徴ベクトルによってよって貼られる空間のこと
    • つまり、1つのパターンはd次元の特徴空間の1点として表現される

決定境界と決定領域

(分類タスクで)特徴空間上に決定境界を引いて分類する

  • 決定境界 decision boundary
    • クラス間を分離する境界
  • 決定領域 decision region
    • クラスラベルの付与された分割された領域

汎化 generalization

(学習において)学習データに含まれないパターンのクラスを予測すること

  • 汎化性能
    • 学習データに含まれないパターンのクラスを予測する能力のこと
  • 過学習
    • 未学習の問いに対して正しく答えを出力できなくなる現象

識別器の例

最近傍法 nearest neighbor method

  • 入力パターンと学習パターンとの距離を計算し,最も近いパターンが属するカテゴリを入力パターンのカテゴリと判断

k近傍法 k-nearest neighbor method

アルゴリズム

  1. 入力パターンと全ての学習パターンとの距離を計算する
  2. 距離の昇順に学習パターンをソートする
  3. ソートした学習パターンの上位k個を取り上げ、最も出現回数の多いカテゴリを出力する

メリットとデメリット

  • メリット
    • 単純であり実装が容易
    • 学習パターンが少なくても安定して動作する
  • デメリット
    • 距離関数により結果が異なる
    • 学習データが増えると計算コストが増大する

教師あり学習の評価方法

Predicted/True Positive Negative
Positive TP FP
Negative FN TN
  • 正解率 accuracy

    • \frac{TP+TN}{TP+FP+FN+TN}
    • 予測結果が正答だった割合
      • ふつうに解答を丸付けしているのと同等
  • 再現率 recall

    • \frac{TP}{TP+FN}
    • Positiveな例を正答できた割合
      • ちょっとでもPositiveだと思ったらそう判定すると再現率があがる
      • 極論、すべての予測をPositiveにすれば再現率100%
  • 精度 precision

    • \frac{TP}{TP+FP}
    • Positiveと判定して本当にPositiveだった割合
      • 本当に確かな事例に対してだけPositiveと判定すると精度が上がる
      • 極論、1個Positive予測してその1個が当たっていれば精度100%
  • F値 f-measure

    • \frac{2×precision×recall}{precision+recall}
    • 精度と再現率はトレードオフになるため、両方を統合した指標
      • 再現率と精度の調和平均

ROCとAUC

TPRとFPR

  • TPR = \frac{TP}{TP+FN}
    • Positiveな例に対する再現率
  • FPR = \frac{FP}{FP+TN}
    • Negativeな例に対する再現率

ROC CurveとAUC Curve

  • ROC (Receiver Operating Characteristic)
    • FPRを横軸、TPRを縦軸にとった曲線
  • AUC (Area Under Curve)
    • ROC曲線の下部の面積
      • 1.0に近いほど評価が高い

ハイパーパラメータ

  • ハイパーパラメータ hyper parameter
    • 学習に先立って決定すべきパラメータ
    • eg) k近傍法のk, ニューラルネットの中間層の数, ユニット数など
  • モデル選択 model selection
    • 学習データへの適合度を最小化するのでなく、予測誤差を推定し、推定された予測誤差を最小化する方法をとる

交差検証法

  1. ハイパーパラメータλをある値に設定
  2. 学習データχをm個のグループに分割
  3. ひとつのグループを除いたパターンで学習し、そのグループで推定して誤識別率ei^λを計算
  4. 全ての分割で行い、誤識別率の平均e^λを計算
  5. 様々なλを用いてe^λを推定し、最小のe^λをとったλをハイパーパラメータとして決定

テレビCMの残存効果をAd Stock(アドストック)で計算してみる【R & Pythonコード付き】

f:id:ekanoh:20180712214522p:plain

テレビCMの効果測定

昨今の広告市場を席捲しているデジタル広告市場においては、「効果測定」をしろと言われたば、 CVR(コンバージョン率)やCPA(獲得単価)など、極めて精緻で細やかな指標を用いてレポートすることができる。 そのため、広告をどれだけ出稿するかの意思決定を正確なデータに基づいて行え、大変使い勝手がよい。

しかしながら、このようにデータが整備されているデジタル広告と異なり、 新聞、雑誌、ラジオ、テレビなど古来からのメディアの効果測定はデータ分析にひと工夫が必要だ。

今回は、最もポピュラーに使われている「テレビCM」の効果測定を例にして考えてみよう。

例:テレビCMの効果測定

たとえば、以下のように「テレビCMとその視聴率」と「売上」の時系列データがあったとして、 「効果測定」をしたい状況を考えよう。(※架空のデータ)

日付(週) 視聴率 売上
2018年6月11日 0% 30万
2018年6月18日 10% 80万
2018年6月25日 15% 60万
2018年7月2日 8% 120万
2018年7月9日 10% 140万

どのように分析すればいいだろうか?

まず考えたいのは、 「視聴率が高い日に売上もあがっているのではないか」ということだ。

――しかしながら、よく見てみると視聴率が最も高い15%の日に、売上が2番目に低い60万となっているため、 この仮説の蓋然性は低いと考えられる。

グラフにしても以下の通りである。 「視聴率が高い日に売上もあがっている」と読み取るのは難しいだろう。

f:id:ekanoh:20180712204748p:plain

このようなデータは頻繁に出くわすのだが、 実はひとつの理由にテレビCMの効果には時間差があることがある。

たしかに、ゲームアプリのCMを見て、すぐにウェブ検索をしてアプリをダウンロードすることもあるだろうが、 化粧品のCMを見て、翌日または数日後にドラッグストアで買って帰る場合や、 高級な家電製品のCMを見て、ボーナスが出た翌月に店頭で購入する場合など、 効果のあらわれ方には時間差があることは想像に難くないだろう。

どうやって正しく効果測定するか?

広告の残存効果(アドストック)

このような効果の測定には広告の残存効果をモデル化したアドストックという指標を導入する。 英語ではAd Stock、Carry Over Effect、あるいはDecay Effectなどという表現をされることもある。

f:id:ekanoh:20180712205311p:plain

上図のように、広告を打った初週だけでなく、 翌週、翌々週以降も効果が残存しているという設定でモデルを定式化する。

定式化

Def: Simon Broadbent's Adstock Advertising adstock - Wikipedia

時点tでの残存効果(アドストック)A_tを以下のように定義する。

{ \displaystyle
A_t = T_t + \lambda A_{t-1}
}

ただし、

  • A_t: 時点tでのAdStock
  • T_t: 時点tでの広告指標(たとえば視聴率)
  • \lambda: 忘却率(減衰率・残存率)※
    • どれくらいの割合で減衰していくかを表す定数
    • 0から1の間の数値を取る

エビングハウスの忘却曲線のように、「消費者の脳内に広告の効果が留まっている」という考え方をして、「忘却率」と呼ぶ場合がある。

具体例でみる

「むむむ数式だけだとイメージが湧かないゾイ」という方には、 実際にアドストックを計算した例を用意したのでご覧いただきたい。数値は上記の例をそのまま使っている。

忘却率を仮に0.80と仮定すると、以下のようになる。

日付(週) 視聴率 アドストック 売上
2018年6月11日 0% 0% 30万
2018年6月18日 10% 10% 80万
2018年6月25日 15% 23% 60万
2018年7月2日 8% 26% 120万
2018年7月9日 10% 31% 140万

Excelで計算した場合の数式は、以下の通りである。 ぜひ、上記のモデルの数式と見比べながら確認してみて欲しい。

f:id:ekanoh:20180711121817p:plain

グラフにしてみると、ただの視聴率(GRP)を使っていたときと比べて、 広告の効果がはっきりとわかる形になっていることがわかるだろう。

f:id:ekanoh:20180712205534p:plain

忘却率をどうやって決めるか

さきほどは忘却率を0.80と仮に決めていたが、実際の現場ではどのように決めるのが妥当だろうか。 以下にふたつの方法を提案する。

1. 忘却率ごとに相関を出して最適化する(定量的)

ひとつは、広告効果を最も適切に説明するようなパラメータを機械的に選びとる方法である。

忘却率が0.01のとき、0.02のとき、・・・、0.98のとき、0.99のとき、と忘却率を100通り試して、 アドストックと広告効果の相関が最も高くなるようなパラメータを選びとればよい。

PythonやRで計算してもよいし、100通り程度ならExcelでガガっと計算させるのいいだろう。今回はPythonスクリプトを書いて最適なパラメータを見つけ出してみよう。

本記事の下部に掲載したPythonスクリプトを読み込んだ上で、adstock_optimize(grp, sales)の形で実行すれば以下のような結果になる。

f:id:ekanoh:20180711101905p:plain

グラフより、忘却率=0.78で相関係数が最大値をとるようなので、 忘却率=0.80としていた上記の例は、定量的に考えても筋が悪くはなさそうだ。

2. 商材・メディア・クリエイティブなどに合わせて決める(定性的)

ふたつめは、商材・メディア・クリエイティブなどに合わせて経験的に設定する方法である。

前段で触れたように、商材やクリエイティブの訴求方法によって広告の効果の表れ方が変わるのは 明らかだが、メディアによっても平均的な忘却率が存在すると考えられている。

実際にメディアに携わっている人などからヒアリングしたり、 分析の経験豊富な人から経験的な数字を教えてもらうなどして、忘却率を設定しよう。

半減期

なお、忘却率を表現する指標として半減期というものがあり、

効果の半分が無くなってしまう時点のことを表し、 概ね「広告効果はこれだけ持続しますよ」というものを表現している。

概ね、以下のようなものだと言われている。

  • テレビ:2-6週間
  • ラジオ:1-5週間
  • 新聞:2-3週間
  • 雑誌:4-8週間
  • オンライン(認知):2-4週間
    • Yahooのトップページなどのように、認知目的の広告
  • オンライン(行動):1-2週間
    • 刈り取り型の広告、リターゲティング広告など

(引用元:How Long Does Your Ad Have an Impact?(筆者訳))

忘却率をヒューリスティック(経験的・直観的)に定めたあとは、 上記のようなベースラインと見比べて過度に大きく・小さくなっていないか確認しておくとよいだろう。

さいごに

今回は、以下の3つのキーワードを扱った。

  • アドストック
    • 残存効果・Ad Stock・Carry-Over Effect・Decay Effect などとも言う
  • 忘却率
  • 半減期

広告の効果測定にはさまざまなモデルが提案されていて、日々論文も書かれているため なかなか何を使えばいいか難しいのだが、主要なモデルのひとつとしてぜひ理解しておいてほしい。

付録:Ad Stockを最適化するスクリプト

Python

Calculate the optimal Ad Stock

R

Calculate the optimal Ad Stock in R