日本プロ野球(NPB)のチーム戦闘力の統計モデリング

ここ1ヶ月くらいでNumPyroの練習をやってきた(記事1記事2).よく分からなかったnumpyro.plateの意味も,ドキュメントを読んでようやくちゃんと分かった(気がする).

そろそろNumPyroの練習に切りをつけるために,何かよい課題はないかということで,2次元データのソフトクラスタリング(混合ガウス分布)を扱おうと思ったのだが,離散値を潜在変数に設定したときにNumPyroではNUTSが使えないことが分かり断念.

このまま終わるのは後味が悪いので,NumPyro短期練習の最終回として「日本プロ野球のチーム戦闘力のモデリング」を題材にしてみることにした(GitHub Gistの元記事).同じ題材を扱った事例がSlideShareにあるが,モデリングの方法が異なるので,比べてみると面白いと思う.

JCDL2020に論文が採択されました

兵庫県立大学の山本岳洋准教授との共同研究の成果として,下記の論文がThe 20th ACM/IEEE on Joint Conference on Digital Libraries (JCDL 2020) に採択されました.

Yusuke Yamamoto and Takehiro Yamamoto: “Personalization Finder: A Search Interface for Identifying and Self-controlling Web Search Personalization”, Proceedings of the 20th ACM/IEEE on Joint Conference on Digital Libraries (JCDL 2020), China, Xi’an, August 2020 (Full Paper 61/196 = 31.1%)

後日,詳細な書誌情報を掲載する予定です.

600人規模のオンライン学術学会DEIM2020が開始

2020年3月2日〜4日にかけて,福島は郡山で開催が予定されていた国内学会DEIM2020.コロナウイルスの影響で,オフライン開催からオンライン開催に実施形態を変更.600人規模が集まる国内学会をオンライン開催するというのは,実に壮大な実験である(報道).

参加してみると,心配は杞憂であった.うちの研究室からは,

  • 村田百葉, 山本祐輔, 「SmileGlasses:笑顔形成を促進するARメガネ」
  • 鈴木雅貴, 齊藤史明, 山本祐輔,「確証バイアスとウェブ検索行動の関係分析」
  • 齊藤史明, 山本祐輔,「QAサイトにおける質問応答に着目した気づきを促す問いかけの分析」

の3件を発表.うち1件を今日発表したのだが,研究発表,質疑応答ともに問題なく行えた.たしかに

  • 会場の雰囲気が肌感覚で分からない,
  • 質疑コメントをしていいのか,挙手をするタイミングが分かりづらい
  • セッション後のオフライントークができない

などの問題はあるかもしれないが,運営側がそこまで気が回らないのは仕方がないだろう.これだけの規模のオフライン会議を初めて実施したのだから,今回の経験を次に活かすことでもっと素晴らしいオンライン学会にできると思う.

さて,今回のオンラインDEIM2020であるが,参加にあたって,運営側が「DEIM2020 オンライン開催 虎の巻」をまとめてくださっている.DEIMはデータ工学の学会で参加者は情報社会の発展に貢献しようとしているわけだから,今回の学会の知見をGitHub上のコンテンツに反映し,虎の巻を充実させることで,大規模オンライン学会の運営や参加方法がオープンソース化されたらかっこいいのになぁと思う.

確率分布の平均と分散に関する諸公式の導出メモ

確率分布の期待値や分散に関する諸公式をしょっちゅう忘れるので,記憶に定着させるために諸公式を導出してみたメモ.以下の式は,確率変数\(X\)と\(Y\)がどんな確率分布に従っているかに依らず導き出される性質である.

期待値(平均)と分散

確率変数\(X\)の確率密度関数は\(f(x)\)とする.

$$ E(X) =  \int_{-\infty}^{\infty} x f(x) dx $$

\begin{align}
V(X) &= \int_{-\infty}^{\infty} (x – \mu)^2 f(x) dx \\
&= \int_{-\infty}^{\infty} x^2 f(x) dx -2 \int_{-\infty}^{\infty} \mu_x x f(x) dx + \mu^2 \int_{-\infty}^{\infty} f(x) dx \\
&= E(X^2) -2 (E(X))^2 + (E(X))^2 \\
&= E(X^2) – (E(X))^2
\end{align}

諸公式の導出

確率変数\(X\)の確率密度関数を\(f(x)\),\(E(X) = \mu_x\) ,\(V(X) = \sigma_x^2\)とする.また,確率変数\(Y\)の確率密度関数を\(g(x)\),\(E(Y) = \mu_y\) ,\(V(Y) = \sigma_y^2\)とする.また,確率変数\(X\)と\(Y\)の同時確率密度関数を\(p(x, y)\),共分散\(Cov(X,Y)\)をとする.このとき,

\begin{align}
E(X+Y)&=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} (x+y) p(x, y) dx dy \\
&= \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} x p(x, y) dx dy + \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} y p(x, y) dx dy \\
&= \int_{-\infty}^{\infty}  x p(x) dx + \int_{-\infty}^{\infty}  y p(y) dy \\
&= E(X) + E(Y)
\end{align}
\begin{align}
E(aX+b)&=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} (ax+b) f(x) dx \\
&= a \int_{-\infty}^{\infty} xf(x)dx + b \int_{-\infty}^{\infty} f(x)dx\\
&= aE(X) + b
\end{align}
\begin{align}
V(aX+b)&= E((aX+b)^2) – (E(aX+b))^2 \\
&= E(a^2X^2 + 2abX + b^2) – (aE(X)+b)^2 \\
&= a^2E(X^2) + 2abE(X) + b^2 – a^2E(X)^2 – 2abE(X) – b^2 \\
&= a^2(E(X^2) – E(X)^2) \\
& = a^2 V(X)
\end{align}
\begin{align}
Cov(X,Y)&= E((X-\mu_x)(Y-\mu_y)) \\
&= E(XY-\mu_xY-X\mu_y+\mu_x\mu_y) \\
&= E(XY)-E(\mu_x)E(Y)-E(X)E(\mu_y) +E(\mu_x)E(\mu_y)\\
& = E(XY) – E(X)E(Y)
\end{align}
\begin{align}
V(X+Y)&= E((X+Y)^2) – (E(X+Y))^2 \\
&= E(X^2 + 2XY + Y^2) – (E(X) + E(Y))^2 \\
&= E(X^2)+2E(XY)+E(Y^2) – (E(X)^2 + 2E(X)E(Y) + E(Y)^2) \\
& = (E(X^2)-E(X)^2) + (E(Y)^2 – E(Y)^2) + 2(E(XY) – E(X)E(Y)) \\
& = V(X) + V(Y) + 2Cov(X,Y)
\end{align}

※ 確率変数\(X\)が正規分布\(N(\mu, \sigma^2)\)に従うとき,確率変数\(aX+b\)は平均\(a\mu +b)\),分散\(a^2\sigma^2\)の正規分布に従う.しかし,\(E(aX+b)=aE(X)+b\)をもって\(aX+b\)が正規分布に従うとは言えない.確率変数\(aX+b\)が正規分布に従うことは,別途証明が必要(正規分布の再生性).

MathJax-LaTeXで数式をインライン表示にする方法

WordPressで数式を表示するプラグインとしてMathJax-LaTeXというものがある.このプラグインを用いると,$$\[latex\]というタグで囲った箇所でLaTeXコードが使えるようになる.

ところが,上記コードはdisplay表示であるため,数式で改行されてしまう.文中で数式が使いたい,つまりインライン表示をしたいときには使えないのである.

MathJax-LaTeXに関する記事を漁ってみると,\( \)でLaTeXコードを囲むとインライン表示ができるという情報があったので試してみたが,うまくいかない.

試行錯誤した結果,\がエスケープ用の文字として認識しているのではないかと思い,\\( \\)と書いてみたところ… うまくできた!これで\(N(\mu, \sigma^2)\)のようにインライン表示ができるようになった.

\( \)と書いてもうまくいった人がいるようなので,おそらくWordpressに入れた他のプラグインが悪さをしているのかと思う.

受信メッセージ数のモデリング

先日投稿した記事「NumPyroによる本塁打率のモデリング」に続き,NumPyroの試し書きを続けている.今回の題材は「Pythonで体験するベイズ推論」の一節から.

この書籍はPyMC2を用いて確率的プログラミングを行っているのだが,個人的に題材が面白くて気になっていた.PyMC2をやろうと思って2,3年が経過して,その間,TheanoベースのPyMC3がリリースされ,その後Theanoの開発終了を受け,TensorFlowベースのPyMC4の開発が開始されることになり… NumPyroに心移りし,PyMCを学ぶのはやめることになったが,確率的プログラミングの題材としては十分に役知立ちそうだ.

GistにアップしたJupyter notebookの記事埋め込み時の問題

以下の記事を書く際,Jupyter notebookのファイルをGistにアップし,GistコードをWordpressに埋め込む処理を行った.しかし,なぜかスクロールバーが消えない.CSSでiframeの高さを設定してもうまくいかない.Gistコードの埋め込みを行っている他の記事ではこんな問題は起きなかったのだが…

どうやらJupyter notebookの埋め込みを行うときに問題が起きるよう.同じ問題に苦しんでいる人がチラホラいるようなのだが,よい解決法がないみたい.残念.

NumPyroによる本塁打率のモデリング

NumPyroによる本塁打率のモデリング

これまで,検索閲覧時間やページ閲覧回数などの行動データの統計モデリングを行うときは,メインのプログラミング言語であるPythonではなくRを使っていた.具体的にはbrmsというパッケージを利用していた.Rとbrmsを使えば,確率モデルを数式チックに記述できる.また結果を可視化し分析するパッケージ群が豊富にあるということで,Pythonを手放してまでRを使っていた.

ところが,Rだと計算が遅い.Rでは並列化やGPU利用に少々難がある.何より,使い慣れたPythonで前処理から分析を行いたい.これら問題を解決するためのツールとして,Pythonでは確率的プログラミングのライブラリとしてTensorFlow ProbabilityPyroが公開されている.しかし,これらはTensorの扱いに慣れていない軟弱な僕にはつらい.

諦めていたところ,最近NumPyroというライブラリがあることを知った.なんとTensorではなくnumpyのarray形式でデータを扱えるというではないか.開発もPyroと同じUber AI Labsによって行われているので,メンテナンスもしっかりしてそう.ということで,NumPyroの使い方を勉強してみることにした.

題材として,以前から気になっていた@muijpさんの「野球選手が本塁打を一番打てるのは何歳のときなのかPythonStanで求める」をNumPyroで実装してみることにした.

以下は,NumPyroでの統計モデリングの実装方法に関する記事である.どうぞご笑覧ください(Github Gistコードへの直リンク).

昆虫食

鴨江アートセンターで開催された「未来はディストピアか?ユートピアか?」に参加した.フリーフードのおやつとして昆虫食が提供されていた.普段なら絶対食べないが,イベント参加前からお酒が入って酔っぱらっていたので,食べてみることにした.

昆虫食はタンパクを多く含んでおり,アジアでは貴重なタンパク源として食されている.日本でも地域によってはイナゴを佃煮にして食すことは知られている.昆虫食と聞くとびびってしまうが,先に述べたようにアジアでは普通に食べられているし,日本でもNPO法人食用昆虫科学研究会などが食糧危機の対策の一つとして昆虫食を推している.ここまでは知っていたのだが,日本に昆虫食販売店があることは知らなかった.今回提供された昆虫食はtakeo.tokyoが提供しているもの.パッケージが外国で売っているドライトマトのようで,洗練されている.今日のメニューはバッタ,コオロギ,ミルワームだと思われる.

酒の勢いで食べてみる.サクサクした食感で小エビの唐揚げのような食感.味は不味くはない.ザ・たんぱく質である.昆虫によって微妙に味が異なり,バッタよりもワームの方がコクがある,ような気がする.見た目さえ気にしなければ,割とパクパクいけそうだ.これで食料危機が脱せるのであれば,悪くないと思う.

写真はどら焼きと昆虫食(バッタ)のコラボ.昆虫食ばかり食べていると味に飽きてくるので,甘いものと併せて食べると良いでしょう.

西浦田楽:真夜中に山奥で踊りを観る

2月12日夜,浜松市水窪町の西浦観音堂まで西浦田楽(にしうれでんがく)を観に出かけた.西浦田楽は,知る人ぞ知る国の重要無形文化財.凍えるような寒さの中,月の出から翌日の日の出まで,20名程度の能衆によって夜通し演劇や舞が行われる.詳しいことは「情報サイト水窪」をご覧いただくのがよいと思う.

参加のきっかけは昨年開催された学会「じんもんこん2019」.学会中,たまたま西浦田楽のアーカイブに関する研究発表をされている方がおり,浜松市の山奥でマニアックな田楽が1000年以上催されていることを知り興味をもった.年が新しくなり,西浦田楽の時期が近づいてきたことを知り,開催日当日に鑑賞を決心.防寒具を用意し,車で出かける.

浜松市街から40km程度,水窪町まで車を走らせる.本当に人がいるのか不安になるくらい,街灯も人気もほとんどない山道を車で駆ける.20時15分頃,会場近くにあるとされていた駐車場に着き,車が30台程度停まっているのを見て,たしかに人間がいることを確認して安心した(車が停めるスペースが足りない状況にやや焦った).会場である西浦観音堂まで行くと,田楽が始まる21時までまだ45分もあるにも関わらず,すでに30名程度人が陣取っていた.

21時になると,観音堂下の階段から能衆の方々がやってきて,田楽がスタート.ここから47演目,途中休憩を1時間程度挟むらしいが,7m x 7mくらいの狭い空間の中で,原則朝7時頃までぶっ通しで演じられる.田楽がスタートすると,ちょうど良いタイミングで山肌から満月が顔を出した.真っ暗闇を照らす月,燃え上がる松明が西浦田楽をさらに幻想的なものにしていた.

予習もせずに鑑賞し始めたこともあり,何演目か見てようやく気付いたのだが,西浦田楽は完全に宗教的なものではなく,民俗芸能要素も多く見られた.

今のご時世にこんな山奥で夜通し昔の民俗芸能をやって何が面白いという意見もあるかもしれないが,1000年以上も同じ場所でほぼ同じ演目をやり続けていることの意味の大きさを感じざるを得なかった.田楽を演じられている能衆の方は10代から70代まで様々.神聖な演目は真剣な表情で演じられる一方で,「高足」などのコミカルな演目は,能衆が楽しそうに会話をしながら演じられていた.能衆の方々は田楽を大変楽しまれている様子で,出番がやってくると「それじゃ,行ってくるわ!」と声を掛け合いながら演目に臨まれている様子が印象的だった.

水窪町の方々にとって,西浦田楽は自らのアイデンティティを決定するものなのだろう.水窪町の方々の「人生」を強く感じた.

今回の鑑賞はあまりにも寒すぎて,足先が痛くなってきたので,12時頃に行われた「船渡し」の演目を観て帰宅することにした.来年は最後まで観れるように準備をしたい.