모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!
🎲 00. 베르누이 시행
- 정의 : 성공과 실패의 결과만을 가지는 시행이 반복되면서, 각 시행의 결과가 다른 시행의 결과에 영향을 주지 않는 경우
- 확률 : 성공 p, 실패 q = (1-p)
- 예시 : 동전 던지기(앞/뒤), 복원추출
🎲 01. 이산형확률분포
• 이산형확률분포 01. 이항분포
- 정의 : 성공 확률이 p인 베르누이 시행을 n번 반복하는 경우 성공 횟수를 X라 할 때, 이 확률변수 X의 확률분포
$X$ ~ $B(n, p)$
☑️ 이항분포의 확률질량함수
# X ~ B(n, p)
# 이항분포의 확률질량함수
# X ~ B(6, 0.5) 를 따른다고 할 때
# binom.pmf(k, n, p, loc = 0)
# X ~ B(n, p) 일 때 P(X = k)의 값을 구함
from scipy.stats import binom
import numpy as np
import matplotlib.pyplot as plt
k = np.arange(0, 7)
px = binom.pmf(k, n = 6, p = 0.5)
plt.plot(k, px, 'C0o', linewidth = 1)
plt.vlines(k, 0, px, color = 'C0', linewidth = 2)
plt.title('Binomial distribution')
plt.show()
☑️ 이항분포의 확률계산
# 이항분포의 확률계산
# X ~ B(10, 0.5) 에 대해서
# 확률질량함수 = binom.pmf(k, n = 10, p = 0.5)
# 동전을 10번 던져서 3번 나올 확률
print(binom.pmf(3, 10, 0.5))
# 누적분포함수 P(X <= k) : cdf(k, n, p)
# 동전을 10번 던져서 앞면이 6번 이하로 나올 확률
print(binom.cdf(6, 10, 0.5))
# 동전을 10번 던져서 앞면이 7번 이상 나올 확률
print(1 - binom.cdf(6, 10, 0.5))
# 분위수 : binom.ppf(q, n, p)
# 누적확률이 q 이상이 되는 k(=x)를 구함
print(binom.ppf(0.3, 10, 0.5))
# 난수 생성 : binom.rvs(n, p, size)
# 동전을 10번 던지는 실험을 30번 반복
print(binom.rvs(10, 0.5, size = 30))
>> 0.1171875
>> 0.828125
>> 0.171875
>> 4.0
>> [7 4 4 6 6 9 2 7 6 6 6 6 3 5 6 5 4 6 6 4 2 7 6 7 4 5 6 3 7 3]
☑️ 이항분포 상황 적용
# 예제
## 예. 어느 생산 공정의 불량률은 10%라고 한다.
## (1) 이 공정에서 임의로 5개의 표본을 추출할 때, 불량품이 3개일 확률을 구하시오.
from scipy.stats import binom
print(binom.pmf(k = 3, n = 5, p = 0.1))
##(2) 이 공정에서 임의로 추출한 20개의 표본 중에서 불량품이 5개 이하일 확률은 얼마인가?
print(binom.cdf(5, n = 20, p = 0.1))
>> 0.0081
>> 0.988746865835491
• 이산형확률분포 02. 초기하분포
- 정의 : 요소가 N개인 모집단에서 A개만 성공인 경우, N개 중에서 n개를 비복원추출할 때 성공횟수 X의 확률분포
$X$ ~ $HG(N, A, n)$
☑️ 초기하분포의 확률계산
# X ~ HG(N, A, n)
# N개로 구성된 모집단에서 A개가 성공이고 나머지 N-A개가 실패일 때,
# N개 중에서 n개를 비복원추출하였을 때,
# 그 중 성공일 경우의 수 x의 확률분포를 초기하분포라고 함
from scipy.stats import hypergeom
# 확률질량함수 : hypergeom.pmf(x, N, A, n)
# N:1000, A:200, n:50 -> P(X=10)
print(hypergeom.pmf(10, 1000, 200, 50))
# 누적분포함수 P(X <= x) : 복원추출 결과 성공이 10번 이하로 나올 때
print(hypergeom.cdf(10, 1000, 200, 50))
# 11번 이상 나올 떼
print(1 - hypergeom.cdf(10, 1000, 200, 50))
# 분위수 : hypergeom.ppf(p, N, A, n)
# 누적확률이 p 이상이 되는 x값 구해줌
print(hypergeom.ppf(0.5, 1000, 200, 50))
# 모의실험을 25번 반복하는 경우
print(hypergeom.rvs(1000, 200, 50, size = 25))
>> 0.14344796941073099
>> 0.5843039735710351
>> 0.41569602642896486
>> 10.0
>> [ 7 12 9 9 8 11 7 10 12 13 11 10 5 11 8 14 7 11 10 12 7 9 11 15 9]
• 이산형확률분포 03. 포아송분포
$X$ ~ $P(μ)$
단위 시간당 나타나는 사건의 건수를 설명하는 데 자주 사용되는 확률분포
- 하루 동안 경부고속도로 상에서 일어나는 교통사고 건수
- 일정시간 안에 걸려오는 전화의 수
- 생산된 1000개 부품당 불량품의 개수
- 일주일 동안에 어느 보험회사에서 접수되는 사망보험금 청구건수
☑️포아송분포의 확률계산
# X ~ P(μ)
# 단위 시간당 나타나는 사건의 건수를 설명하는 데 자주 사용되는 확률분포
from scipy.stats import poisson
# 확률질량함수 : P(X = x) : poisson.pmf(x, mu)
# mu = 5 에 대한 X = 7일 확률
print(poisson.pmf(7, 5))
# 누적분포함수 P(X <= x) : poisson.cdf(x, mu)
print(poisson.cdf(7, 5))
# 8번 이상 일어날 확률
print(1 - poisson.cdf(7, 5))
# 분위수 : poisson.ppf(q, mu)
# 누적확률이 q 이상이 되는 x
print(poisson.ppf(0.7, 5))
# 난수 : poisson.rvs(mu, size)
print(poisson.rvs(5, size = 30))
>> 0.10444486295705395
>> 0.8666283259299925
>> 0.1333716740700075
>> 6.0
>> [ 7 5 3 9 3 6 6 4 5 4 4 2 3 3 9 4 5 2 5 5 6 6 3 2 7 8 0 10 3 6]
🎲 03. 연속확률분포
• 00. 중심극한정리
모집단이 평균이 μ이고 표준편차가 σ인 임의의 분포를 따르고, 이 모집단으로부터 추출된 표본의 크기 n이 충분히 크다면, 이 표본의 평균들이 이루는 분포는 평균이 μ이고 표준편차가 σ / n½ 인 정규분포에 근접한다.
즉, n = 30인 표본을 400번 추출할 때, 이 400개 표본의 평균들이 이루는 분포가 중심극한정리에서의 표본평균 분포이다.
이때 n이 클수록, 표본평균의 분포가 평균이 μ이고 표준편차가 σ / n½ 인 정규분포에 가까워진다는 것이다.
따라서, 모집단의 분포 형태에 관계없이 추출한 표본의 크기가 충분히 크다면, 표본평균들의 분포가 모집단의 모수( μ, σ )에서 파생되는 정규분포를 이루기 때문에 특정 사건이 일어날 확률값을 계산할 수 있다. 중심극한정리는 표본 평균들이 이루는 분포와 모집단 간의 관계를 보여줌으로써, 수집한 표본의 통계량을 통해 모집단의 모수를 추정할 수 있는 수학적 근거를 마련해 준다.
• 01. 표준편차 / 표준오차
표준편차 ( s ) : 추출한 표본에서 얻은 각 관측값과 표본평균의 차이를 나타내는 값
표준오차 ( SE = s / n½ ) : 표본평균들의 편차 - 표본이 크고, 모표준편차 σ를 모르는 경우 표준오차를 통해 신뢰구간 결정
• 연속확률분포 02. 정규분포
$X$ ~ $N(μ,σ^2)$
☑️ 정규분포의 확률밀도함수
# X ~ N(μ,σ^2)
# 정규분포의 확률밀도함수 그리기
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 100, endpoint = True)
fx = norm.pdf(x, loc = 0, scale = 1)
plt.plot(x, fx, color = 'C0', linewidth = 1, linestyle = '-')
plt.title('Standard normal distribution')
plt.show()
☑️ 정규분포의 확률계산
# 정규분포의 확률계산
# X ~ N(42, 5^2)
# 확률밀도함수 : norm.pdf(x, mu,sigma)
# f(x = 40) : x = 40 일 확률
print(norm.pdf(40, 42, 5))
# 누적분포함수 : norm.cdf(x, mu, sigma)
# P(x <= 54)
print(norm.cdf(54, 42, 5))
# P(40 <= x <= 54) = P(x <= 54) - P(x < 40)
print(norm.cdf(54, 42, 5) - norm.cdf(40, 42, 5))
# 분위수 : norm.ppf(q, mu, sigma)
# 누적확률이 0.9 이상인 x
print(norm.ppf(0.9, 42, 5))
# 난수생성 : norm.rvs(mu, sigma, size= k)
# 모의실험을 7번 하는 경우
print(42, 5, 7)
>> 0.07365402806066466
>> 0.9918024640754038
>> 0.647224205685728
>> 48.407757827723
>> 42 5 7
☑️ 정규분포 상황 적용
# 예. A회사에서 생산되는 전구의 수명은 평균이 2000시간이고
# 표준편차가 200시간 정규분포를 따른다고 한다.
# (1) 이 회사 제품인 전구의 수명은 평균이 2500시간 이하일 확률을 구하시오
# X ~ N(2000, 200^2)
print(norm.cdf(2500, 2000, 200))
# (2) 이 회사 제품인 전구의 수명이 1800시간 이상일 확률을 구하시오.
print(1 - norm.cdf(1800, 2000, 200))
>> 0.9937903346742238
>> 0.8413447460685429
# 예. IQ테스트에서 상위 2% 이내의 점수를 받아야 멘사 회원의 자격이 주어진다고 한다.
# 만약 IQ 테스트의 점수가 평균이 100이고 표준편차가 15인 정규분포를 따를 때,
# 멘사 회원이 되기 위해서는 약 몇 점 이상의 점수를 받아야 하는가?
# X ~ N(100, 15^2)
# 누적확률이 0.98이 되는 x 값을 구하면 됨
print(norm.ppf(0.98, 100, 15))
>> 130.80623365947733
• 연속확률분포 03. 카이제곱분포
$\frac{(n-1)s^2}{σ^2}$ ~ ${χ^2}_{n-1}$
- 정규모집단분포부터의 랜덤 표본의 분포
- k개의 서로 독립적인 표준확률변수를 각각 제곱한 다음 합해서 얻어지는 분포
- 표본이 $z_1, z_2...z_k$ ~ $N(0,1)$ 일때, $V = z_1^2 + z_2^2 + ... + z_k^2$의, 자유도 k를 따르는 분포
- 표본분산을 보고 모분산을 추측하는 것이 카이제곱분포의 주요 용도
- 범주형 자료 준석에 사용 : 모분산 검정, 적합도 검정, 독립성 / 동질성 검정
☑️ 카이제곱분포의 확률계산
from scipy.stats import chi2
# 확률밀도함수 f(X=x) : chi2.pdf(x, v)
# 자유도 = v = 3인 카이제곱분포, f(X=1)
print(chi2.pdf(1, 3))
# 누적분포함수 P(X <= x) : chi2.cdf(x, v)
# P(X <= 1)
print(chi2.cdf(1, 3))
# 분위수 : chi2.ppf(q, v)
# 누적확률이 0.9 이상이 되는 x
print(chi2.ppf(0.9, 3))
# 난수생성 : chi2.rvs(v, size)
# 모의실험을 10번 반복하는 경우
print(chi2.rvs(3, size = 10))
>> 0.24197072451914337
>> 0.19874804309879915
>> 6.251388631170325
>> [0.38402881 5.11578318 2.6200179 2.87919349 0.91619747 0.12736358
2.33938728 5.48496231 1.43972606 0.62355219]
• 연속확률분포 04. T분포
$\frac{\bar{X} - μ}{s/\sqrt{n}}$ ~ $t_{n-1}$
- 표준정규분포를 따르는 Z와 카이제곱분포를 따르는 U와의 비에서 정의되는 분포.
- $t = \frac{Z}{\sqrt{U/v}}$ ~ $t_{v}$ (단, $v$는 자유도. $n-1$)
- 모표준편차 대신 표본표준편차의 값을 이용한 T분포로 모평균 추측
- 독립표본 t 검정 : 두 집단 간의 차이 비교 (등분산 / 이분산)
- 대응표본 t 검정 : 같은 집단의 전후 차이 비교
☑️ T분포의 확률계산
from scipy.stats import t
# 확률밀도함수 f(X=x) : t.pdf(x, v)
# 자유도 5인 t-분포. f(X = 1.64)
print(t.pdf(1.64, 5))
# 누적분포함수 P(X <= x) : t.cdf(x, v)
# P(X <= 1.64)
print(t.cdf(1.64, 5))
# 분위수 : t.ppf(q, v)
# 누적확률이 0.9 이상이 되는 t 값
print(t.ppf(0.9, 5))
# 모의실험을 10번 반복하는 경우
print(t.rvs(5, size = 10))
>> 0.10435965219804018
>> 0.9190351742553341
>> 1.4758840487820273
>> [-0.89633319 -2.81677958 1.56827634 1.28425609 -1.30632326 0.13472634
0.74057534 0.03702968 0.10830647 0.34438492]
• 연속확률분포 05. F분포
$\frac{{s^2}_1/{σ^2}_1}{{s^2}_2/{σ^2}_2}$ ~ $F_{n_1-1,\, n_2-1}$
- 두 정규모집단에서 랜덤표본을 추출했을 때, 두 집단의 표본분산 비에 대한 분포.
- 분산 비 검정, 분산 분석(정량변수-범주형변수 관계 분석), 회귀 분석 등에 사용
☑️ F분포의 확률계산
from scipy.stats import f
# 확률밀도함수 f(X = x) : f.pdf(x, v1, v2)
# 자유도 5,5 인 F 분포. f(X = 2)
print(f.pdf(2, 5, 5))
# 누적분포함수 P(X <= x) : f.cdf(x, v1, v2)
# P(X <= 2)
print(f.cdf(2, 5, 5))
# 분위수 : f.ppf(0.9, 5, 5)
print(f.ppf(0.9, 5, 5))
# 난수 : 모의실험을 10번 반복하는 경우
print(f.rvs(5, 5, size= 10))
>> 0.15808023109480038
>> 0.7674886808696213
>> 3.4529822480379053
>> [ 2.88771788 1.63613897 0.98826918 0.38587367 10.49539494 2.77641
0.73505146 3.79974154 1.9476103 3.48451504]