본문 바로가기
👩🏻‍💻TECH/통계

[통계] 누적 분포 함수(Cumulative distribution function)

by Alicia03 2024. 12. 20.

👀 이 글에는 『Introduction to Basic Statistics in Python』의 내용 일부와 코드 문제가 포함되어 있습니다. 

💡이번 포스팅에서는 이런 것들을 다뤄요
통계 분석에서 자주 등장하는 누적 분포 함수(Cumulative distribution function)의 개념과 공식을 다루고 『Introduction to Basic Statistics in Python』 의 예제 코드를 작성해봅니다. 

- 누적 분포 함수란?
- 공식
- 원리 
  1) 이산형 확률 변수
  2) 연속형 확률 변수 
- 누적 분포 함수 예제 코드

 

 

💭 누적 분포 함수란?

누적 분포 함수(CDF, Cumulative Distribution Function / 누적 확률 분포)는 특정 값 x 이하의 확률을 나타내는 함수

 

"x보다 작거나 같은 값이 나올 확률은 얼마인가?"를 구하는 함수. 

 

✍공식

수식은 정의 그대로 이해하면 쉽다. 

  • F(x): 누적 분포 함수 (CDF) 
  • X: 확률 변수 
  • x: 특정 값

확률이기 때문에 0에서 1 사이의 값을 가지며 x가 증가하면 그만큼 누적될 범위가 넓어지기 때문에 F(x)도 증가한다. 

 

원리 

누적 분포 함수의 원리는 확률의 누적 합을 구하는 것이다.  

 

누적 합을 구하는 방법은 확률 분포가 이산형인지 연속형인지에 따라 계산 방법이 개별 합인지 적분인지가 달라진다. 

이산형 확률 분포와 연속형 확률 변수의 개념을 잠시 짚고 넘어가면 다음과 같다. 

구분 이산형 확률 변수 연속형 확률 변수
정의 셀 수 있는 유한하거나 무한한 값들의 집합에서 값을 가지는 확률 변수 특정 구간 내 모든 실수 값을 가질 수 있는 확률 변수
값의 특성 개별적이고 분리된 값들로 이루어짐 연속적인 실수 값들로 이루어짐
확률 표현 각 값에 대해 확률 질량 함수(PMF)로 표현 확률 밀도 함수(PDF)로 표현
확률의 합 각 값에 대해 확률을 더하면 1이 됨 특정 구간의 확률은 PDF를 적분하여 계산
대표적인 분포 이항 분포, 포아송 분포, 기하 분포 등 정규 분포, 균등 분포, 지수 분포 등
예시 - 주사위 눈의 합
- 동전 던지기의 앞뒷면
- 특정 상품의 판매량
- 사람의 키
- 특정 구간의 온도
- 시간 간격
확률 계산 방법 개별 사건에 대한 확률을 직접 계산 확률 밀도 함수(PDF)를 특정 구간에서 적분하여 계산
그래프 형태 점 그래프(Discrete Points) 곡선 그래프(Continuous Curve)

 

1) 이산형 확률 변수

이산형 확률 변수의 누적 확률 분포는 각 값의 개별 확률을 누적하여 더하는 방식으로 계산된다. 

 

e.g.) 고객에게 100개의 이메일을 보냈을 때 이메일을 20개 이하로 열어본 고객의 확률.

이항 분포  B(n= 100, p=0.3)* 의 CDF를 계산.

* n: 시행횟수, p 성공확률

 

2) 연속형 확률 변수

연속형 확률 변수에서는 특정 구간의 확률을 구할 때, 확률 밀도 함수(PDF, Probability Density Function)의 적분을 통해 누적 확률을 계산한다. 수식은 다음과 같다. 

 

e.g.) 고객의 구매 금액이 평균 50,000원, 표준편차 10,000원인 정규분포를 따른다고 했을 때, 60,000원 이하의 구매 금액을 지불할 확률을 구하고 싶다면 정규분포의 CDF을 계산 

 

👩🏻‍💻누적 분포 함수 예제 코드 (cdf())

 

문제) 포아송 분포와 표준 정규 분포의 누적 확률 분포Cumulative distribution function를 그려보세요.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm, poisson

def norm_cdf_drawer(mu, sigma):
    '''
    x의 범위는 평균을 기준으로 3시그마 전후로 한다
    '''
    x = np.arange(mu-3*sigma, mu+3*sigma)
    cdf = norm.cdf(x, mu, sigma)

    plt.plot(x, cdf)

def poisson_cdf_drawer(lamb):
    '''
    x의 범위는 0부터 람다의 2배까지
    '''
    x = np.arange(0,lamb*2)
    cdf = poisson.cdf(x, lamb)
    plt.plot(x,cdf)

 

📚참고문헌

Introduction to Basic Statistics in Python | 2.6. Cumulative distribution function

 

2.6. Cumulative distribution function

### 문제 포아송 분포와 표준 정규 분포의 `누적 확률 분포Cumulative distribution function`를 그려보세요. `베이스라인`의 `code here`…

wikidocs.net