[확률] numpy 이산 확률 변수 시뮬레이션
Numpy를 활용한 이산 확률 변수 시뮬레이션
이산 확률 변수는 정수와 같이 이산적인 값들을 갖는 확률 변수입니다. 간단히 말해서, 이산 확률 변수는 셀 수 있는 값의 집합을 결과로 가집니다. 예를 들어, 주사위 던지기의 결과는 1부터 6까지의 정수이며, 이는 전형적인 이산 확률 변수의 예시입니다.
이산 확률 변수 정의하기
이산 확률 변수의 예로 주사위의 결과를 들 수 있습니다. 주사위를 던졌을 때 나올 수 있는 결과는 총 6가지이며 각각의 결과가 나올 확률은 동일하게 입니다. 이산 확률 변수는 특정 값이 나올 확률을 명시적으로 정의할 수 있으며 이를 확률 질량 함수(PMF)라고 합니다.
Numpy의 랜덤 함수로 시뮬레이션하기
python의 numpy 라이브러리는 다양한 종류의 랜덤 함수를 제공, 이를 이용해 이산 확률 변수의 시뮬레이션을 용이하게 수행할 수 있습니다.
주사위 던지기 예시
주사위 던지기를 시뮬레이션하려면, 1부터 6까지의 숫자 중에서 무작위로 선택하면 됩니다.
import numpy as np
## 주사위 던지기 시뮬레이션 (1회)
result = np.random.randint(1, 7)
print(f"주사위 던지기 결과: {result}")
## 주사위를 1000번 던져보기
results = np.random.randint(1, 7, size=1000)
print(f"처음 5개의 던지기 결과: {results[:5]}")
이 코드는 numpy의 randint
함수를 사용해 1부터 6까지의 정수 중에서 무작위로 선택합니다. size
매개변수를 이용하면 주사위 던지기를 여러 번 반복할 수 있습니다.
베르누이 시행 예시
베르누이 시행은 단 두 가지 결과만을 가집니다 (성공과 실패, 혹은 1과 0). 예를 들어, 동전 던지기는 앞면(성공) 또는 뒷면(실패)의 결과를 가지는 베르누이 시행입니다.
## 동전 던지기 시뮬레이션
coin_flip = np.random.choice([0, 1])
print(f"동전 던지기 결과: {'앞면' if coin_flip == 1 else '뒷면'}")
## 동전을 1000번 던져보기
coin_flips = np.random.choice([0, 1], size=1000)
print(f"동전 던지기에서 앞면이 나온 횟수: {np.sum(coin_flips)}")
np.random.choice
함수를 사용하여 동전의 앞면과 뒷면 중 하나를 무작위로 선택할 수 있습니다. 여러 번 시뮬레이션한 후, 앞면이 나온 횟수를 셀 때 np.sum
함수를 사용할 수 있습니다.
시뮬레이션 결과 분석하기
이제 주사위 던지기와 동전 던지기 시뮬레이션 결과를 분석해 봅시다.
## 주사위 결과의 분포 분석
import matplotlib.pyplot as plt
plt.hist(results, bins=np.arange(1, 8)-0.5, density=True, rwidth=0.8)
plt.title("주사위 던지기 결과의 분포")
plt.xlabel("주사위 면")
plt.ylabel("상대 빈도")
plt.xticks(np.arange(1, 7))
plt.show()
이 히스토그램은 각 주사위 면이 나온 상대적 빈도를 보여줍니다. 이상적으로, 모든 면이 동일한 확률로 나와야 하므로, 모든 바(bar)는 대략적으로 동일한 높이를 가져야 합니다.
## 동전 던지기 결과 분석
heads = np.sum(coin_flips)
tails = len(coin_flips) - heads
print(f"앞면: {heads}, 뒷면: {tails}")
plt.bar(['앞면', '뒷면'], [heads, tails], color=['blue', 'red'])
plt.ylabel("횟수")
plt.title("동전 던지기 결과")
plt.show()
동전 던지기의 결과도 비슷하게 분석할 수 있습니다. 이론적으로, 앞면과 뒷면이 나올 확률은 동일하므로, 두 막대의 높이가 비슷해야 합니다.
위 예시와 코드를 통해 numpy를 사용해 이산 확률 변수의 시뮬레이션을 어떻게 수행하며 그 결과를 분석하는지 확인할 수 있습니다. Numpy와 같은 도구를 사용하여 복잡한 확률 실험을 쉽고 빠르게 시뮬레이션할 수 있음을 볼 수 있습니다.