忘れないうちに令和元年の振り返りをしておく。部署異動は特になく、引き続きデータサイエンティスト職を続ける。オンライン教材や社外セミナーを活用して学び、同時に、会社に自分が学んだ技術やノウハウを還元することを試みた。社内やチームで勉強会を開いてみると徐々に巻き込まれてくれる人も増えて、「自ら機会をつくり、その機会によって自分を育てる」「先陣を切って人を巻き込む」の必要性を実感し、働き方の引き出しが増えた感覚を得た。Scienceで初めてのメダルを獲得した。勾配ブースティングを筆頭にした汎用的で高度なモデルをチューニングしながら上手く取り合わせ、ドメイン知識を織り込みながらモデルの改善に尽力した。このころの業務ではRの使用率が高かったので、Pythonで長大なコードを書く機会が得られたのはいい経験になった。世界のデータサイエンティストが議論しているのをキャッチアップできるプラットフォームが存在するのは貴重である。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年は引き続き自由を追求しつつ、自身の健康と身の回りの人への感謝を胸に留めて生きていくことをしたい。Pricing』なる論文を読みました。上記を損失関数として定量化さらにシンプルな構造で理解しやすい1予約確率の予測→2最適価格の提案→3パーソナライズと、マクロ→ミクロに落ちていく構造という点において優れたデータサイエンスの応用例であると感じたため、主要な論点を要約しつつ解説に取り組んでみようかと思います。最適価格の提案をしたいまず、Airbnbではホスト側が宿泊料金を自由に設定することができます。自由は自由でいいのですが、Airbnbに代表されるCtoCのプラットフォームにおいて、需要と供給のよりよいマッチングのために『価格設定』は重要な要素になっていることを考えると、サービス側から最適な価格を提案を出来ると望ましいです。Pricing』という機能でモデルが算出した最適価格をユーザーが見れるようになっています。ユーザーはモデルが提案している価格を採用してもいいし、参考にして微調整してもいいし、全く利用しないことも出来るようになっていることはポイントになります。3段階のモデル1予約確率の予測(分類)まず、競合の状況や部屋の特長などを鑑みて、とある日付で予約が発生するか否かの確率を計算しています。予約ありを1、予約なしを0にした二値分類タスクになります。気になるのが使用しているモデルと特徴量ですが、モデルには勾配ブースティング(GBM)、特徴量は以下のような変数を利用しているようです。ds_nightで、これは計算日から、確率を推定したい日付(当日)までの残り日数のこと。残り日数に余裕があるほど予約確率は高まりますよね。neighborhood(近隣の宿泊可能な施設数)という変数もなるほどという感じです。個々のアイテムの特徴だけに注目しがちですが、競合の状況も説明変数に入れるとよさげですね。sampling)宿泊施設激戦区のサンプル数を相対的に増やすの2つの手法を使うことでパフォーマンスを上げている模様です。激戦区とそうでない部分では振る舞いに違いが出そうなので、このような差異を上記の手法でうまく処理できていそうですねー。ここで「最適とは何か?」というものを考えておく必要があります。教科書的な機械学習のモデリングと異なり、今回のタスクでは必ずしも正解ラベルというのが存在しません。「この価格が最適だった」を示せるような教師データが存在しないということです。非最適な価格に対して損失関数をあてがうことにします。予約されなかったのに、それより高い価格を提案していることになるため、高く見積もりすぎというわけで、上記の条件を使って、損失関数を以下のように定義します。)のそれぞれで、「悪くない」価格提案の領域を設定し、そこから離れれば離れるほど「誤差」=「最適ではない」として損失関数で勘定していきます。次に、以下のように最適価格を推定するモデルを定義します。*1に対して、以下の2つのスコアを使って補正をかけるイメージです。需要スコアが基準値より低い場合とそうでない場合でグラフを「曲げる」パラメータを分けていることです。イメージとしては以下のようになります。最適化をする際にざっくり以下の5つの工夫をしているようです。宿泊頻度を上げたい)や、宿泊価格の最大・最少値を設定できる*3ようになっているので、ユーザーの設定に合わせてモデルの結果をadjustしている模様です。「これが最適な価格やぞ」とは提案しつつも押し付けはしないわけですね。モデルの妥当性のチェックオフライン定量的には、需要関数が単に価格の関数になるというナイーブな*4モデルをベンチマークに、結果を比較して新しいモデルの効果を示しています。週末に価格が高騰する3月末~4月初旬の桜シーズンに東京の価格が高騰などといい感じにマーケット毎のシーズナリティを捉えられているようです。機械学習力不足によって読み下すのに丸1日かかってしまったのですが、データサイエンスのテクニックがかなり凝縮されているように感じました。「ホスティングの目標」に修正(2018.08.26)*4:「単純な」ないし「簡易的な」。需要を価格だけの関数と見なすのは経済学の教科書とかで最初の方に出てくるやつですよね。learning)に軸足を置いた「機械学習エンジニア」に近い人材もいれば、計量経済学(econometrics)に軸足を置いた「データアナリスト」に近い人材もいます。(もちろん名刺・役職的にどう呼ばれるかは会社によるところも大きいとは思いますが、後者の方が「〇〇サイエンティスト」「〇〇アナリスト」などと呼ばれることが多い印象ですネ)しかしながら、学部や大学院で計量経済学を専門に学んでからデータサイエンティストになっている人は必ずしも多くはないように思います。いった用語を、実務を通して都度都度学んで、少しずつ計量経済学の体系を身につけていることが多いのではないでしょうか。そこで今回は、計量経済学とはそもそも何だったかを振り返りつつ、計量経済学者が行う一般的な分析のワークフローを紹介していきたいと思います。予測するまとめそもそも計量経済学とはWikipediaによると、「経済学の理論に基づいて経済モデルを作成し、統計学の方法によってその経済モデルの妥当性に関する実証分析を行う学問」とあります。抽象的な説明でわかりにくいですよね。ひとつひとつ見ていきましょう。いくつかの分野があります。これらはどのようなもので、計量経済学とはどう違うのでしょうか?経済理論との違いまず、経済理論は、経済現象の定性的な理論・仮説を提案する学問と言ってよいかと思います。「その他の指標が一定で、商品の価格が上がれば、需要は下がる」と言った主張をします。それに対して計量経済学では、価格と需要はどのような数値的な関係があるのか定量的(経験的)に分析することになります。数理経済学との違いまた、数理経済学は経済現象の数学的な表現を考える学問です。一般的に、「それが経験的に正しいかどうか」は一旦脇に置いて考えているようなイメージです。それに対して計量経済学では、その数学的な表現の妥当性を検定することを行っていきます。計量経済学のワークフローでは、「経済学の」というところから計量経済学の位置づけを振り返ったところで、「(経済学の)理論に基づいて経済モデルを作成し、統計学の方法によってその経済モデルの妥当性に関する実証分析」という部分を考えていきましょう。これは、計量経済学の具体的なワークフローを見ていけばわかりやすいかと思います。定理・仮説を立てる経済学では言わずと知れたケインズは以下のような仮説を立てたそうです。定理を表現する数学的なモデルの設定1.の仮説では、収入と消費の数値的な関係性が具体的には設定されていませんよね。これを数字を使ってざっくりと表現し直すと、「新たに増加した1単位の所得のうち消費にまわる部分の割合(=限界消費性向、MPC)は0より大きく1より小さい。」という意味だと解釈できます。従って、数理経済学的には以下のような定式化を考えるのが妥当でしょう。(回帰分析)なお、この関数は一般に消費関数と呼ばれて、Yが従属変数(または目的変数)、Xが独立変数(または説明変数)と呼ばれます。(計量)経済学モデルの設定しかしながら、実際に500世帯の収入と支出の実データを取得できたとして、横軸に収入、縦軸の支出を取ってプロットしたとしても、上記のような綺麗な直線上に並ぶことはありません。(ありますか?)実際には、収入だけでなく、ほかの変数が支出に寄与することがあるからです。よって支出の傾向が変わることは容易に想像できますよね。計量経済学としてのモデリングでは上記の関数を以下のように修正します。term)と呼ばれる確率変数で、収入以外の他の変数による誤差を吸収するために追加されたものです。)を推定していきます。実務上は上のようなデータと、ExcelやRなどの統計ツールを使ってパラメータの最適化を行います。(データは架空のもの)ちなみに、具体的な回帰分析の方法については以下の記事などをチェックしてみてください。検定それでは、上記のデータを使って回帰分析を行って、たとえば、以下のような結果が得られたとします。(数字は適当に設定しています。なっているため、「収入が増加するほど消費も増加するが、消費の増加量は収入の増加量よりは少ない」という最初に設定した仮説を満たしているように見えますよね。「上のデータでたまたまそうなっただけじゃないのか」という可能性があるため、実際には統計的に確からしいかの検定が必要です(!)たとえデータに当てはまりがよかったとしても、それが一定確率で起こりうるような誤った結果(=有意ではない)ならば、仮説が検証できたと言えないというわけですね。ここで最初にも言及した「有意性」「カイ2乗検定」など、「検定」と呼ばれる統計用語が登場してきます。予測する仮説検定が終わり、上記のモデルの妥当性が証明できるところまでくれば、将来予測に使っても差し支えありません。上は2018年までのデータですが、収入の見込みなどわかっていれば翌年以降である2019年や2020年の消費予測などをすることができます。したがって、ビジネスや政治政策における意思決定に使っていくことができます。政策を変えれば収入が増えるとき、消費がどれくらい変化するか?を推定して、経済へのインパクトを織り込みながら政策の決定をすることができるわけですね。言葉も、いつどういう場面で登場するかわかった上で学習を進めていけると、見通しがよくなってよいかと思われます。www.hackerrank.comHackerRankという、世界中のハッカー(=ソフトウェアエンジニア・機械学習エンジニアなど)が、プログラミング課題を解決するサイトがあります。McDowellが監修しており、課題の質が非常に高いです。難易度設定が適切で、初心者でも考えやすい適度な難易度になっています。類書などのように「1章からいきなりむずすぎワロタ・・・」となりません🐜たとえば、以下の問題を見てみてください。2018/08/02)この問題は、問題タイトルにもある通り本来はビット演算を使って解くことが想定されているのですが、ハッシュなどを駆使すれば何とか解答することができそうですよね🤔このように、想定解となるアルゴリズムを知らなくても取り掛かりやすい程度のレベルに調整されています。ペーパーバック解説の質が高いさらに、解答は動画付きで丁寧に解説されていて、コードとにらめっこしていてもわからないようなアルゴリズムのかんどころを視覚的に説明してくれています。アルゴリズムは、言葉で聞くと難しく感じてもビジュアルで理解するとすんなりわかることも多いため、動画が付いてくるのは非常にありがたいです。以下は上記の問題の解説動画です。ご覧頂ければどれだけ詳しく解説してくれるかわかるかもしれません。ちなみに、ハッシュを使った解答もビット演算を使った解答も解説してくれていて、「なるほど、そう解けば良かったのか💡」と理解が丁寧に促されます。www.youtube.com問題が厳選されている問題が20問に厳選されていて、短期集中的に取り組みやすいです。私は週末で一気に終わらせました。具体的には、以下の全20題に厳選されています。単純に解いていて楽しい問題も多いためモチベーション維持にもGoodでした。議論が闊達に行われている問題ごとに設定されているディスカッションタブというのを開くと、各言語での実装例や、他の人の解法・考え方を学ぶことができます。他サイトと比べてもわりと議論がアクティブなため、どうしてもわからないことがある場合があっても質問すれば回答が返ってくることが多いです。私は質問を投稿して半日以内に返信が来ました🙏おわりに+Python3での実装例アルゴリズムはプログラミングに登場するさまざまな概念の基礎になっていることが多いので、このような教材で集中的に学んでおくのがよいと感じます。私はデータアナリストでふだんPythonを使って分析を行うことが多いため、Python3で挑戦してみました。CVR(コンバージョン率)やCPA(獲得単価)など、極めて精緻で細やかな指標を用いてレポートすることができる。そのため、広告をどれだけ出稿するかの意思決定を正確なデータに基づいて行え、大変使い勝手がよい。新聞、雑誌、ラジオ、テレビなど古来からのメディアの効果測定はデータ分析にひと工夫が必要だ。今回は、最もポピュラーに使われている「テレビCM」の効果測定を例にして考えてみよう。「効果測定」をしたい状況を考えよう。「視聴率が高い日に売上もあがっているのではないか」ということだ。この仮説の蓋然性は低いと考えられる。グラフにしても以下の通りである。「視聴率が高い日に売上もあがっている」と読み取るのは難しいだろう。実はひとつの理由にテレビCMの効果には時間差があることがある。効果のあらわれ方には時間差があることは想像に難くないだろう。やって正しく効果測定するか?広告の残存効果(アドストック)このような効果の測定には広告の残存効果をモデル化したアドストックという指標を導入する。Effectなどという表現をされることもある。翌週、翌々週以降も効果が残存しているという設定でモデルを定式化する。以下のように定義する。忘却率(減衰率・残存率)※どれくらいの割合で減衰していくかを表す定数0から1の間の数値を取る※エビングハウスの忘却曲線のように、「消費者の脳内に広告の効果が留まっている」という考え方をして、「忘却率」と呼ぶ場合がある。実際にアドストックを計算した例を用意したのでご覧いただきたい。数値は上記の例をそのまま使っている。忘却率を仮に0.80と仮定すると、以下のようになる。140万Excelで計算した場合の数式は、以下の通りである。上記のモデルの数式と見比べながら確認してみて欲しい。広告の効果がはっきりとわかる形になっていることがわかるだろう。忘却率をどうやって決めるかさきほどは忘却率を0.80と仮に決めていたが、実際の現場ではどのように決めるのが妥当だろうか。以下にふたつの方法を提案する。忘却率ごとに相関を出して最適化する(定量的)ひとつは、広告効果を最も適切に説明するようなパラメータを機械的に選びとる方法である。アドストックと広告効果の相関が最も高くなるようなパラメータを選びとればよい。PythonやRで計算してもよいし、100通り程度ならExcelでガガっと計算させるのいいだろう。今回はPythonでスクリプトを書いて最適なパラメータを見つけ出してみよう。sales)の形で実行すれば以下のような結果になる。忘却率=0.80としていた上記の例は、定量的に考えても筋が悪くはなさそうだ。商材・メディア・クリエイティブなどに合わせて決める(定性的)ふたつめは、商材・メディア・クリエイティブなどに合わせて経験的に設定する方法である。明らかだが、メディアによっても平均的な忘却率が存在すると考えられている。分析の経験豊富な人から経験的な数字を教えてもらうなどして、忘却率を設定しよう。概ね「広告効果はこれだけ持続しますよ」というものを表現している。概ね、以下のようなものだと言われている。上記のようなベースラインと見比べて過度に大きく・小さくなっていないか確認しておくとよいだろう。さいごに今回は、以下の3つのキーワードを扱った。何を使えばいいか難しいのだが、主要なモデルのひとつとしてぜひ理解しておいてほしい。Pythonコード付き】Tweet広告を非表示にする次のページプロフィールid:ekanoh港区で苦しんでいます。グロースハックなどに興味があります。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。