【統計学・データ分析】Pythonで実装しながら覚える二項分布

こんにちは。今日は、統計学に関する内容です!

最近、統計検定の勉強をしているのですが、その中でいろいろな統計分布の種類があることを知ったは良いものの、違いが直感的によく分からず、実務に活かせる気がしなかったので、実際に絵や式を書いてみながら自分の頭を整理しておきたいと思います。

今回はその中でも二項分布について整理してみたいと思います。

なお、各内容の詳細については、他のWebサイトに分かりやすい説明があれば、そちらを引用させていただき、紹介させていただいております。

それでは早速参ります!

二項分布の理論

概要

以下のサイトで定義が分かりやすくまとめられていました。こちらによると、二項分布の定義は以下です。

二項分布(Binomial Distribution)とは、互いに独立したベルヌーイ試行をn回行ったときに、ある事象が何回起こるかの確率分布です。例えば、「コインを5回投げた時に表2回出る確率」「対戦ゲームで90%の確率で当たる技を10回中8回当てる確率」などを表した確率分布です。

上記ページより引用

確率関数(確率質量関数)

$$P(X = x) = {}_n\mathrm{C}_xp^x(1 – p)^{n – x}$$

期待値

$$ \mu = E(X) = np $$

分散

$$ \sigma^2 = E[X^2] – \mu^2 = V(X) = np(1 – p) $$

Pythonによる実装サンプル

Scipyを使って簡単に実装する

二項分布は、Scipyが提供するメソッドで簡単に再現できてしまいます!

文法については以下から確認できます。

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.binom.html

from scipy.stats import binom
import numpy as np

#Probablity of Success
n = 10
p = 0.7

mean, var, skew, kurt = binom.stats(n, p, moments='mvsk')

#Mean
print("Mean:", mean)

#Var
print("Var:", var)

#Skew
print("Skew:", skew)

#Kurt
print("Kurt:", kurt)

#PMF (Probablity Mass Function)
x = np.arange(0,n+1)
print("PMF:",binom.pmf(x,n,p))

plt.bar(x, binom.pmf(x,n,p), label="PMF")
plt.title("PMF")
plt.xlabel("Data Points")
plt.ylabel("Probablity")
plt.legend()
plt.show()

#CDF (Cumulative Density Function)

print("CDF:",binom.cdf(x,n,p))

plt.bar(x, binom.cdf(x,n,p), label="CDF")
plt.title("CDF")
plt.xlabel("Data Points")
plt.ylabel("Cumulative Probablity")
plt.legend()
plt.show()

一から実装する

こちらは、以下のサイトを参考にさせていただきました。

https://qiita.com/g-k/items/d45fe6dd73964c41882a

こちらでは、scipyに頼らず、上の理論式の通りに関数を実装しています。

import numpy as np
import math
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
%matplotlib notebook

def comb_(n, k):
    result = math.factorial(n) / (np.math.factorial(n - k) * np.math.factorial(k))
    return result


def binomial_dist(p, n, k):
    result = comb_(n, k) * (p**k) * ((1 - p) ** (n - k))
    return result

fig = plt.figure()

def update(a):
    plt.cla() 
    x =  np.arange(1, 50, 1)
    y = [binomial_dist(a, 50, i) for i in x]

    plt.bar(x, y, align="center", width=0.4, color="blue", 
                 alpha=0.5, label="binomial p= " + "{:.1f}".format(a))

    plt.legend()
    plt.ylim(0, 0.3)
    plt.xlim(0, 50)


ani = animation.FuncAnimation(fig,
                              update,
                              interval=1000,
                              frames = np.arange(0.1, 1, 0.1),
                              blit=True)
HTML(ani.to_jshtml())

二項分布に関する疑問

ベルヌーイ分布との違いは?

こちらは、以下のWebページの解説が分かりやすかったです。

ベルヌーイ分布は、試行回数が1のときの確率分布で、二項分布は試行回数がn回の場合の確率分布と、より一般化された分布になるのですね。

https://data-science.gr.jp/theory/tpd_bernoulli_distribution.html#:~:text=%E4%BA%8C%E9%A0%85%E5%88%86%E5%B8%83%E3%81%A8%E3%81%AE,%E7%94%9F%E8%B5%B7%E7%A2%BA%E7%8E%87p%E3%81%A7%E3%81%82%E3%82%8B%EF%BC%8E

二項分布との違いは,二項分布ベルヌーイ試行を独立にn回繰り返したときに,生起確率がpである片方の結果がx回生じる確率が従う分布であるのに対し,ベルヌーイ分布は試行回数が1回 (n=1) のみのときにおいて片方の結果が生起する確率が従う分布である点である. パラメーター (母数) は一方の結果の生起確率pである.

上記サイトからの引用

確率分布についてもっと勉強するなら・・・

統計検定公式テキストで体系的に理解を深める

確率分布は、統計検定2級の出題範囲となっています。理論的な部分をもっと勉強されたい方は、以下のテキストを読まれると、体系的に学ぶことができます。

私もこちらで勉強しています。統計検定の公式テキストではありますが、比較的に分かりやすく解説されており、何より知識が体系的に整理されているので全体像を掴んで、理論の概要を理解するには良いと思います。

このテキストで分かりづらいと思った部分は、部分毎にネットで詳しく解説された記事を探したり、Udemyなどのオンラインコンテンツを利用していけば十分に理解が深まると思います。

オンライン講座を受講する

オンラインの講座を活用することも有効です。これらの講座は科目毎に単体で販売されているので、購入してすぐに受講を開始することができます。

Udemyは私も資格試験対策などでよく利用するのですが、30日以内の返金保証もあり、また、受講者数が多く口コミ評価が良いコースは内容もとても充実していて満足度が高いため、安心して利用できています。書籍と違ってスマホでみれるため、移動時間などの隙間時間などにも進めることができてオススメです。

頻繁に割引セールを行っているので、割引されているタイミングで購入を検討しても良いと思います。

ちなみに、日本語の統計学のコースは、こちらが最も受講者数が多く、口コミ評価も良いものになります。

【ゼロからおさらい】統計学の基礎

画像に alt 属性が指定されていません。ファイル名: image-9-1024x491.jpg

以上、確率分布について勉強したり実験してみたことをまとめた記事でした。

最後までご覧いただきありがとうございました!

0

この記事を気に入っていただけたらシェアをお願いします!

ABOUT US

アバター
Yuu113
初めまして。Yuu113と申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。