何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

事象が起こるまで試行を繰り返した場合の試行回数の期待値

成功するまで何度でも繰り返す

先日、Twitterで以下のツイートを見かけた。

直感的にはそんな気がするが、せっかくなので自分でも計算して徒労感を味わってみよう。

期待値の計算

 0 \lt p \lt 1とする。確率0ならば何度試行を行っても事象は生じず、確率1ならば試行回数の期待値は明らかに1回である。 事象が生じる確率を pとすると、事象が生じない確率は 1-pとなる。

1回で事象が生じる確率は p、2回で事象が生じる確率は (1-p)p、3回で事象が生じる確率は (1-p)^{2}pである。 この論法から、確率 pの事象が起こるまで試行を繰り返した場合の試行回数の期待値は  \displaystyle \lim_{n \to \infty} \sum^{n}_{k=1}k(1-p)^{k-1}p となる。

この無限級数を計算すればよい。 なお、  \displaystyle \lim_{n \to \infty} \left | \frac{(n+1)(1-p)^{n}}{n(1-p)^{n-1}} \right | = \lim_{n \to \infty} \left | (1-p) (1 + \frac{1}{n}) \right | \lt 1 より 級数は絶対収束する。

級数の計算

  \displaystyle S = \sum^{n}_{k=1}k(1-p)^{k-1}とする。  \displaystyle S - (1-p)S = \sum^{n}_{k=1}(1-p)^{k-1} - n(1-p)^{n}より、

  \displaystyle pS = \frac{1}{p} -\frac{1}{p}(1-p)^{n} -n(1-p)^{n}.

以上より、

 \displaystyle \lim_{n \to \infty} \sum^{n}_{k=1}k(1-p)^{k-1}p = \lim_{n \to \infty} \left( \frac{1}{p} -\frac{1}{p}(1-p)^{n} -n(1-p)^{n} \right ) = \frac{1}{p}.

よって、確率 pの事象が起こるまで試行を繰り返した場合の試行回数の期待値は \displaystyle \frac{1}{p}となる。

考察

これは幾何分布と呼ばれる確率分布の期待値計算である。 計算したのちに幾何分布であることに気づいたのが恥ずかしい限りである。

BPStudy #123に参加しました

Tim Berners-Lee氏は物理学者...?

2017年11月24日に代々木にてBPStudy #123「技術書籍執筆の実際、ノウハウ」が行われた。

bpstudy.connpass.com

内容に関しては清水川さんのエントリがよくまとまっているのでリンクを張る。

www.freia.jp

今回、公募LT枠が存在したので、査読や校正に関するテーマで発表することにした。 タイトルは「技術書査読・校正の現場から」とした。 最初は何に気を付けて読んでいるのかを発表しようとしたが、LTなので実際に遭遇した例を一緒に考えてもらう形式を採用した。

speakerdeck.com

結局、何に気を付ければよいのか、という結論が落ちていた。 そこで、このエントリで出題した例に従って整理してみる。

シンタックスに関する着目点

固有名詞・人名は確実に

例えばプログラミング言語を説明する場合はPythonと書く。 また、インタプリタを起動するコマンドは大抵pythonであろう。 JavaScriptとJとSを大文字にするのが正しい表記であるが、文脈に応じてECMAScriptと書くべきかもしれない。 Pythonの作者名Guido van Rossumvanは小文字であり、van Rossumが苗字に当たる。

国文法は正確に

古典文法をまともに理解していない人間が偉そうに国文法を語るなど全く持ってい酷い話である。 まずは弖爾乎波をしっかり書く。卒論や修士論文で徹底的に指摘されるはずなので自分でも直せるはずである。 接続詞の関係。順接か逆接かを意識するだけでも効果があると思われる。

固有名詞、人名、単語、文法は言わばシンタックス(構文)に関する事柄である。 シンタックスに関するエラーは機械的にチェック可能であることが多い(と思う)。 例えば、綴りの間違いは(造語を持ち出していなければ)機械的に判定できる。 本当に難しいのはセマンティック(意味)に関するエラーである。

セマンティックに関する着目点

言語仕様を把握する

Pythonには3つの数値型がある。」という文章があった場合、まずPythonのバージョンによって真偽が分かれる。 Python 2の場合はint, long, float, complex の4つ、Python 3の場合はint, float, complex の3つである。 さらに、標準モジュールをインポートすればDecimal型やFraction型も利用可能である。

裏を取る

「物理学者であるTim Berners-Leeは…」という記述があった場合、すぐに「物理学者という記述は誤りであり、計算機科学者が正しい」と直すになどうしたらよいのか。 僕は「裏を取る」という行動がよいのでは、と考えている。 ここで「裏」とは論理学の裏ではなく、別の方法で正しさを示すことである。 1点を通る直線は無数に存在するが、互いに異なる2点を通る直線は一意に決まるように、裏を取るようにすれば正しい記述なのかがわかる。

最初に「物理学者であるTim Berners-Leeは…」を読んだとき、Webで有名なTim Berners-Leeは物理出身なのか、と思いまずWikipediaを調べた。 そしたら計算機科学者とある。Wikipediaはとっかかりには最適であるが信頼性は落ちるので公式の情報源であるW3Cを調べて、 CERNにはconsultant software engineerとして仕事をしていたことを確認した。 その後のキャリアは計算機科学者そのものである。 確かに、オックスフォード大学のクイーンズ・カレッジの物理学科を卒業してCERNへ行って…となると「物理学者であるTim Berners-Leeは…」という記述は自然であるが、裏を取ることでわかるのである。

Typoを見つけるのが大好きなワタクシ

今の職場でも前の職場でも、Typoを発見するのが非常に早いと言われる。 先天性のものであろうか?運動神経はひどく悪いのでこの説は捨てたい。 僕が理由として挙げているのは、学部・院生時代に数学書を丹念に読んだからでは、と考えている。 学部・院生で読んだのは佐武一郎『線型代数学』とvan der Waerden『Algebra』の2冊であるが、名著と呼ばれるこの2つも意外と細かい誤植が存在するのである。 いい加減な理解ではセミナーは進まないので、1行ずつ読み進めていくのである。 この経験が査読や校正に生きているのでは、と考えている。

文章のシンタックスな間違いは機械的に処理できたとしても、文章のセマンティックを理解するために、査読は1行1行読み進めていくほかないのである。

コミュニティへの貢献としての査読・校正

来月2017年12月16日に埼玉県さいたま市大宮区で「Python Boot Camp in 埼玉」が開催される。 私はTAとして参加する。

そこで、第82回Python mini Hack-a-thonにおいて、 Boot Campでテキストとして用いられる「Python Boot Camp Text」を一通り読んだ。 目的は予習及び直すべき箇所があれば指摘しようと思ったからである。

pyhack.connpass.com

今回の成果は次のPull Requestとしてまとまった。

いずれも、言語仕様に関連した細々とした指摘である。 しかし、イテラブルとシーケンスは混同しがちな概念であったり(シーケンスはイテラブルであるが、イテラブルはシーケンスとは限らない)、 普段、型としてはあまり意識しない辞書のビューオブジェクト、 シーケンス型に対するインデックスによるアクセス(__getitem__)とスライスの違いなどありがちなものである。

過去の技術書の査読の経験が少し活用できた1日であった。 前の職場でも今の職場でも誤植を見つけるのがうまいといわれるので、他の人よりもそういうを見つけるのが得意なのかもしれない。 先天性のものか、学部・修士と数学書を読んだ影響なのか、どちらだろうか。

TAは修士の時にプログラミング演習以来である。 プログラミング演習では学部生に教えるのではなく、考えさせるように指導を受けた。 Boot Campなので何も知らない人に何もない状態で考えてもらうのは中々難しいかもしれないが、Boot Campが終わったあとも続けてプログラミングが学べるように手助けを行っていきたい。