파이썬(Python)/numpy

[Python]이산 확률 분포란? 파이썬으로 구현하고 그래프로 그리기(Binomial/Discrete)

끄적끄적아무거나 2022. 1. 18. 18:35
반응형

 

목차

     

     

     

     

    이산 확률 분포란(Discrete Probability Distribution)?

     

    이산 확률 분포는 영어로 Discrete Distribution 또는 Binomial Distribution 이라고 합니다. 이산이라는 의미가 설명하듯이 연속된 값이 아닌 별개의 값에 대한 확률을 부여해서 별개의 값이 발생할 확률을 그래프로 쉽게 알 수 있습니다. 

     

    예를 들어 동전을 100번 던져서 앞 뒤가 나오는 것을 기록해서 앞, 뒤라는 이산 값(Discrete Value)에 확률 값을 부여 합니다. 그리고 101번 째 던질 때 앞서 구한 이산 확률 분포를 통해 앞이 나올지 뒤가 나올지에 대한 확률을 알 수 있게 됩니다. 

     

    이산 확률 분포 수식은 아래와 같습니다.

     

    p는 한번 시행했을 때 발생 확률이고 위 시근 어떤 시험을 n번 진행하고 그 중 k번이 발생할 확률의 분포입니다.

     

     

     

     

    이산 확률 분포(Discrete Probability Distribution) 파이썬으로 구현하기

     

    파이썬의 Numpy의 랜덤에 binomial 이라는 함수를 사용하면 이산 확률 분포를 따르는 데이터 값을 구할 수 있습니다. 

     

    binomial 사용법은 아래와 같습니다.

    random.binomial(n, p, size)

     

    n은 이산 값 입니다.

    p는 각 시도의 확률 입니다.

    size는 시도 회수 입니다.

     

    아래 코드는 앞서 동전 앞을 0, 동전 뒤를 1이라고 보고 총 50번 던졌을 때 확률 값 0.5를 대입해서 나오는 값을 출력하는 코드 입니다.

     

    예제 코드>>

    from numpy import random
    
    x_list = random.binomial(n=1, p=0.5, size=50)
    
    print(x_list)

     

    결과>>

    [0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 0 0 0 1 0 0 1 0 1 1 0 1 1 1 1 0 0 0 1 1
     0 1 1 0 1 0 0 1 0 0 1 0 0]

    던지는 회수가 많아질 수록 0과 1이 나오는 확률이 0.5에 수렴 합니다.

     

     

     

     

    이산 확률 분포(Discrete Distribution) 그래프 구현하기(Graph)

     

    코드>>

    from numpy import random
    
    x_list = random.binomial(n=1, p=0.5, size=50)
    
    print(x_list)
    
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    sns.displot(x_list, kind="hist")
    plt.show()

    라인7~11줄:  앞서 이산 확률분포로 만든 리스트를 matplotlib을 사용하는 seaborn 라이브러리로 histogram 형식으로 만들었습니다.

     

    결과>>

    size가 50이여서 확률 값에 수렴하지는 않습니다. 

     

     

    아래는 size를 10000으로 증가하였을때의 그래프입니다.

    둘다 0.5 확률에 가깝게 결과가 나왔음을 확인할 수 있습니다.

     

     

    반응형