본문 바로가기
Python notes/Statistical Analysis

Python-Statistics) 파이썬으로 이산형 확률분포 계산 (+scipy pmf, cdf, ppf 사용법)

by 성실한 나무 2022. 6. 29.

**아래 코드는 kaggle code에서 다운로드 받을 수 있음 >> https://www.kaggle.com/janejo/statistics-1-discrete-random-variable

#1. 이산형 확률분포란?

 이산형 확률분포는 확률변수 x가 이산형(Discrete)인 경우 각 x의 확률이 어떻게 분포되는지를 나타낸다. 그래프로 그리면 막대그래프로 x 축에 확률변수를 놓고, y축에 확률값을 표시할 수 있다. 그리고 이 확률값을 구하기 위한 함수는 확률질량함수(Probability Mass Function)이라고 하며 각 확률 분포 별로 구하는 공식이 다르다. 이 확률질량함수 값이 y축에 놓이게 된다.

 

 

#2. 파이썬 Scipy로 이산형 확률분포 계산

 파이썬에서 자주 쓰이는 통계 패키지 중 하나인 scipy를 사용해서 다양한 이산형 확률분포의 값을 쉽게 얻을 수 있다. 아래에서는 수동으로 계산하는 코드와 패키지를 이용해 계산하는 코드 모두를 작성해 보았다.

 이산형 확률분포의 종류로는 베르누이 분포, 기하 분포, 이항 분포, 다항 분포, 포아송 분포, 초기하 분포, 음이항 분포가 있다. 이해하려는 사건에 적합한 확률분포를 선택해서 그 사건의 분포를 계산해 볼 수 있다.

 

베르누이 분포

 베르누이 시행은 반복시행 결과가 오직 두 가지만 나올 수 있는 시행이다. 성공할 확률을 p에 담으면 실패할 확률 q는 1-p가 된다. 이 시행의 기대값은 p이고, 분산은 p*q이다. 표준편차는 분산에 제곱근을 씌워서 구한다.

 scipy.stats에서 bernoulli를 import하여 bernoulli.stats(성공확률)을 입력하면 기대값과 분산을 쉽게 구할 수 있다.

파이썬 베르누이 분포

 

기하 분포

 시행 횟수 x-1은 연속적으로 실패하고 x번째 성공에 적용되는 확률분포이다. 하나의 주사위를 세번 던질 때 세번째 시행에서 앞면 숫자가 6이 나올 확률은 기하분포를 따른다.

 scipy 패키지 중에서 geom으로 기대값과 분산을 구할 수 있고, geom.pmf()함수에 파라미터로 x(전체 시행횟수), p(성공할 확률)을 순서대로 입력하면 확률질량함수 값을 구할 수 있다.

파이썬 기하분포

 

이항 분포

 성공확률이 p인 베르누이 시행을 n번 독립적으로 반복했을 때 성공횟수를 x라 하면 확률변수 x는 이항 확률분포를 따른다. 확률변수 x가 취할 수 있는 가능한 값은 0, 1, 2, ..., n이다. 이 분포는 동일한 실험을 독립적으로 n번 반복하며, 매 시행의 결과는 성공과 실패로 나뉘어진다. 매 시행마다 성공이 일어날 확률은 p로 일정하다.

 이항분포는 np>=5이고 n(1-p)>=5일 때 정규 분포에 근사한다. 또한 p<=0.1이고 0.1<=np<=10이고 n>=50일 때 포아송분포에 근사한다. 근사한다는 뜻은 이항분포가 아닌 다른 분포를 사용해서 해당 사건의 분포를 계산해도 유사한 결과를 얻을 수 있다는 뜻이다. 

 scipy 각종 분포 함수에서는 cdf라는 메서드도 있다. binom.cdf() 식으로 사용한다. cdf는 cumulative distribution function으로 누적질량함수 값을 구할 수 있는 함수이다. pmf는 하나의 확률변수에 대한 확률값이라면 cdf는 특정 확률변수 이하의 확률변수들까지 포함하는 전체 확률값을 의미한다. 아래 문제에서는 1명 이하 즉 0명, 1명의 pmf를 합한 값이 1명 이하의 cdf에 해당한다.

파이썬 이항 분포

 

다항 분포

 이항 분포가 두개의 결과값이 있는 경우라면, 다항분포는 3개 이상의 결과값이 있는 시행을 n번 독립적으로 반복했을 때 따르는 분포이다.

 아래 다항분포 예제문제에서는 빨간신호 a에 대한 기대값과 분산을 구하였다.

다항분포

 

포아송 분포

 단위 시간이나 단위 공간에서 일어나는 현상을 나타낼 때 포아송 확률분포를 이용한다. 예를 들어 일정한 시간 동안 전화 교환 시스템에 전화 신청 횟수, 옷감 한뼘 당 결점 수, 1년 동안 화재가 발생할 횟수, 모 은행 창구에 시간당 도착하는 고객 수 등이다.

 포아송분포가 적용되기 위해서는 한 단위 시간 또는 공간에서 발생하는 횟수는 다른 시간 또는 공간에 대해 서로 독립이어야 한다. (독립이 아닐 경우, 초기하 분포를 따름) 또한, 단위 시간 또는 공간에서 사건의 평균 출현횟수는 일정해야 하며, 둘 이상의 사건이 일어날 가능성이 없어야 한다.

 포아송분포는 기대값과 분산이 같다. 람다(포아송 분포의 기대값)가 5이상일 때 정규분포에 근사한다. 람다가 5 미만이면 왼쪽으로 치우치고 오른쪽으로 긴 꼬리가 있는 비대칭 분포를 이룬다.

파이썬 포아송 분포

 

초기하 분포

 비복원추출에 적용되는 분포이다. 첫 시도의 결과에 따라 두번째 시도의 상황이 달라지므로 시도들이 종속 관계에 있다. 이와 같이 종속관계에 있는 확률은 초기하분포의 확률질량함수에 의해 계산된다.

파이썬 초기하 분포

 

음이항 분포

 x회 시행에서 k-1은 성공, x-k는 실패 후 마지막에 성공할 확률을 계산할 때 사용하는 분포이다. 이 때 k가 1인 경우는 기하분포를 따른다.

파이썬 음이항 분포

 

댓글