見出し画像

ビジュアル実証経済学10 誕生日が一致する確率とJupyterのパンドラ

最近,東急線に乗るとURBAN HACKSとしてエンジニアを募集するための求人を兼ねたクイズを見かける…

1.乗車する40名の中に同じ誕生日の人がいる確率は?
2.k人の乗客のうちn人が同じ誕生日である確率の一般式は?

多分意図的なんだろうけど問題がHPに記載されていない

というような問題であった…難易度的には高校数学程度で,これを数式化するところまでは,比較的色々なサイトに記載されている.念のため,簡単に復習すると

閏年は含まないものとして
$${ 2 \leq N \leq 365 }$$とおく.

余事象の考え方で求めればよい.
$${(二人目が一人目と異なる確率)*(三人目が先頭二人と異なる確率)*\cdots*(N人目が先頭N-1人と異なる確率)}$$
を全体から除算すればよい.
よって,全員の誕生日がそれぞれ異なる確率は
$${\frac{364}{365}*\frac{363}{365}*\cdots*\frac{365-(N-1)}{365}}$$
$${={}_{364}P_{N-1} / 365^{N-1}}$$
$${\frac{365}{365}}$$をかけると次式を得る.
$${{}_{365}P_{N} / 365^{N}}$$
従って,求める確率は,
$${1- {}_{365}P_{N} / 365^{N} }$$
となる.

1.に関しては$${N}$$=40として解けばよく,解答は約89%となる.
この時,$${N}$$=120程度まで計算すると,乗客数の増加に合わせ同じ誕生日の乗客がいる確率は,下図のように変化する.$${ 2 \leq N }$$に関して,60人程度で飽和漸近し,ほぼ100%一致する誕生日の者がいることが分かる.

誕生日が一致する確率

この程度であれば特筆に値しない.だが,せっかくなので,これをJupyter(Jupiter)の語源となったJu(lia)・pyt(hon)・Rのそれぞれで計算し比較してみようと思う.一応ルールっぽいものを定めると

  • 標準関数があれば標準関数を3rd partyライブラリより優先する

  • ライブラリがあればライブラリを自作関数より優先する

  • ただし,標準関数とライブラリと自作関数においては,計算結果の最も速いものを優先する

  • ライブラリの呼び出しにかかる時間は実行時間に含める

  • 自作関数の場合は定義後の呼び出しから実行時間に含める(コーディング時間は含まない)

一般的な感じだと,こんなものであろう…筆者は「速い」よりも「直感的」言語を好み,コーディングは「高可読性」を最優先する.が,順列・組み合わせを計算するだけのコードなので,普通に書いても3行程度である.

使用した環境は,DockerHubに公開し,実行結果は,Github上にホストした.

R実行結果
python実行結果

結果は意外であった…確率の方ではなく,現状ではRが最も速かった.ライブラリ参照がないためであろう.pythonはライブラリを参照するため1秒程度のレイテンシが発生するが,それでも十分に速かった.どちらも順列・組み合わせの計算自体は一瞬である…が,Juliaは高度な科学計算や数値解析水準まで対処するよう設計された高水準言語を標榜していたはずなのに,OverflowErrorを起こすのである.しかも$${{}_n P_r}$$のかなり手前の計算で…
言語設計がきれいで統計向きなのはR,言語仕様はきれいとは言えないが,ライブラリ開発が盛んで低レイヤーから機械学習・AI・ベイズに対応できるのはpython…Julia📦(完全にパンドラの箱)…どおりで流行らないわけである.謳い文句が本当ならみんな使っている.

julia実行結果

Julia開発チームのWhy We Created Juliaを読んで,個人的にはJAXA Jedi国立天文台GRAPEのパララックス,言語実装的なものを期待していたが…そんなことはなかった.IT系ベンチャーがエンジェルラウンドに使う甘言の一種と同じで,神格化された英雄の幻想を抱かせるような何かを話しているだけである.実際,Wolframのリプレイスできるかな?と思ったが,これは相当に遠い…数学・天文・物理(理論)・情報等には極めて稀なレベルの天才は確かにいるのであるが,Juliaは「狼少年」という感じである.そもそもLLで高速化・並列化を標榜する連中で本当に優秀な奴をこれまで見たことはない.

むしろ,手書きの数式をそのまま解読してTeXにしたり,実装してくれるような機能があれば,既存言語より相当便利である.あるいはJuliaを書くならJavaやC++の方が意味がある.が,現状では言語レベルのチューニングより,サーバーサイドや環境構築ができる方がコストパフォーマンスが圧倒的に高い.

それに,もはや汎用性の高い言語(Juliaの貪欲)を誰か求めているのだろうか?という感じである.いっそ多体計算や流体計算及びトポロジー,あるいはGRIB・HD5等が直感的に扱えて演算・処理可能なら,専用言語でも圧倒的に利便性が高い.

ちなみに,TOP画を探していると,いつの間にかJAXAの画像・映像引用の際の利用規約が,ちょっと昔のNASAの利用規約と同じような内容に変更されていた.国立研究所の予算は税金である以上,成果は公開(還流)されるべきであるという認識は正しいであろう.
IT系では資金力よりも技術力の勝負が礼賛され,絶対のカリスマ的な何者かを囃したてるが…pythonをスターダムに押し上げた最強ライブラリpandasを作ったのはAQR Capital Management(運用資産20兆円くらいの投資会社)であり,そもそもGAFAに代表される企業は資金力に物を言わせるプレーは多い.
すると,なぜか絶対に無料で使える方法を編み出したくなり,結構時間を溶かすためコストは見合わない.

GRAPE/国立天文台

人工衛星xスポーツ・アートで,論文はいくらでも書けるため,道楽でやっていたお宝探しで本当にお宝が見つかったようなものだが,宝箱の中身が金銀財宝とは限らない.
パンドラも最初から開けられていたなら,パンドラだと思わないだろう.そうすると天文台GRAPE的な金なさそう感は,実は青い鳥なのかもしれない.

この記事が気に入ったらサポートをしてみませんか?