정규분포
사악한 행위에 대한 퓨즈 측정
퓨즈를 설치하고 퓨즈가 타서 18초 안에 탈출할 수 있도록 하는 데 걸리는 시간을 측정합니다. 각 퓨즈가 타서 기록된 시간(초)은 다음과 같습니다. 19, 22, 20, 19, 23.
import numpy as np
import pandas as pd
from scipy import stats, special
import itertools
from sympy import *
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("darkgrid")
def decorate_plot(xlab, ylab, title=None, size=(4,3)):
plt.figure(figsize=size)
plt.xlabel(xlab)
plt.ylabel(ylab)
plt.title(title)
d=np.array([19, 22, 20, 19, 23]) m=d.mean(); m
20.6
s=d.std(); s
1.624807680927192
평균을 계산하면 μ = 20.6이고 표준 편차를 계산하면 σ = 1.62입니다.
정규분포
정규분포는 연속 확률 분포로, 평균과 표준 편차가 주어졌을 때 불확실한 측정값에 대한 가능한 믿음의 강도를 가장 잘 설명합니다.
decorate_plot("value","Prob.")
value=np.linspace(-5, 5, 1000)
st=[0.5, 1, 2]
col=['b','r', 'g']
for i, j in zip(st, col):
p=stats.norm.pdf(value, 0, i)
plt.plot(value, p, color=j, label=f"N(0, {i})")
plt.legend(loc="best", labelcolor="linecolor")
plt.show()
관찰된 데이터를 고려할 때, 퓨즈가 18초 이내에 작동할 확률은 얼마인가?예의 평균과 표준편차를 기반으로 하는 정규분포를 사용하여 알아볼 수 있습니다.
decorate_plot("value","Prob.")
value=np.linspace(10, 30, 1000)
p=stats.norm.pdf(value, m, s)
plt.plot(value, p, color=j, label=f"N({m}, {round(s, 2)})")
v2=np.linspace(10, 18, 100)
p2=stats.norm.pdf(v2, m, s)
plt.fill_between(v2, p2, alpha=0.6)
plt.legend(loc="best", labelcolor="linecolor")
plt.show()
음영 처리된 영역의 면적은 관찰 결과를 바탕으로 퓨즈가 18초 이하로 지속될 확률을 나타냅니다. 관찰된 값 중 어느 것도 18보다 작지 않았지만 관찰 결과의 분포로 인해 위 그림의 정규 분포는 18 이하의 값이 여전히 가능하다는 것을 보여줍니다.
위 음영으로 나타낸 부분의 확률은 누적분포를 사용하여 계산할 수 있습니다. scipy.stats.norm.cdf(x, μ, σ) 메서드를 사용합니다.
p18=stats.norm.cdf(18, m, s);p18
0.054778288391342723
특정한 표준편차에 따른 확률의 변화를 나타낼 수 있습니다.
| Distance from the mean | Probability |
|---|---|
| μ ± σ | 68 percent |
| μ ± 2σ | 95 percent |
| μ ± 3σ | 997 percent |
x=np.linspace(-3, 3, 1000)
p=stats.norm.pdf(x, 0, 1)
x1=stats.norm.interval(0.68, 0, 1)
x2=np.linspace(x1[0], x1[1], 100)
y2=stats.norm.pdf(x2, 0, 1)
decorate_plot("x","Prob", "N(0, 1)")
plt.plot(x, p)
plt.fill_between(x2, y2, alpha=0.6)
plt.xticks([-3, -1, 0, 1, 3], [-3, r"$\mu-\sigma$", 0, r"$\mu+\sigma$", 3])
plt.show()
베타분포와 정규분포
베타 분포는 α 개의 바람직한 결과와 β 개의 바람직하지 않은 결과를 관찰했을 때 실제 확률을 추정할 수 있게 해줍니다. 여기서 총 결과 수는 α + β입니다. 이를 바탕으로, 주어진 데이터 세트의 평균과 표준 편차만 알고 있기 때문에 정규 분포가 매개변수 추정을 모델링하는 가장 좋은 방법이라는 개념에 문제를 제기할 수 있습니다. 결국, 우리는 단순히 1의 세 값과 0의 네 값을 관찰함으로써 α = 3 및 β = 4인 상황을 설명할 수 있습니다. 이렇게 하면 μ = 0.43 및 σ = 0.53이 됩니다. 다음 그림에서 볼 수 있듯이 α = 3 및 β = 4인 베타 분포를 μ = 0.43 및 σ = 0.53인 정규 분포와 비교할 수 있습니다.
d=np.array([1,1,1,0,0,0,0]) m=d.mean(); m
0.42857142857142855
s=d.std(); s
0.4948716593053935
decorate_plot("Prob.","Prob. desnity")
p=np.linspace(0, 1, 100)
density1=stats.norm.pdf(p, m, s)
density2=stats.beta.pdf(p, 3, 4)
plt.plot(p, density1, label=f"N({round(m, 2)}, {round(s, 2)})")
plt.plot(p, density2, label="Beta(3, 4)")
plt.legend(loc="best", labelcolor="linecolor")
plt.show()
베타분포는 [0, 1]의 확률에 대한 확률을 나타내는데 반해 정규분포는 랜덤변수에 대한 확률을 나타냅니다. 즉, 정규분포의 x축의 값의 범위는 (-∞, ∞)이므로 베타분포와 다른 형태를 보이며 위 결과와 같이 직접 비교는 어렵습니다. 그러나 각 그래프의 peak를 나타내는 지점은 동일합니다. 이 점은 두 분포 모두 최적의 매개변수를 추정하기 위해 사용할 수 있음을 의미합니다.
평균과 분산 외에 데이터에 대해 아무것도 모를 때만 정규 분포를 가정하는 것이 안전합니다. 다음 차이점은 결정에 도움이 될 수 있습니다.
- 베타 분포: 찾고 있는 값은 0~1 범위에 있어야 합니다.
- 정규 분포는 –∞에서 ∞까지 정의되며, 종종 존재할 수 없는 값을 포함합니다.
연습
예) 평균보다 5시그마 이상의 값을 관찰할 확률은 얼마입니까?
1-stats.norm.cdf(5)
2.866515719235352e-07
예) 사람이 열이 난다는 것은 화씨 100.4도보다 높은 온도를 보일 경우입니다. 다음 측정값을 고려할 때 환자가 열이 날 확률은 얼마입니까?
100.0, 99.8, 101.0, 100.5, 99.7
d=np.array([100.0, 99.8, 101.0, 100.5, 99.7]) m=d.mean() s=d.std() m.round(2), s.round(2)
(100.2, 0.49)
1-stats.norm.cdf(100.4, m, s)
0.3402820504876537
예) 동전이 떨어지는 시간을 측정하여 우물의 깊이를 측정하려고 했고 다음과 같은 값을 얻었다고 가정해 보겠습니다.
2.5, 3, 3.5, 4, 2
물체가 떨어지는 거리는 다음 공식을 사용하여 (미터 단위로) 계산할 수 있습니다.
\begin{align}\text{distance}&=\frac{1}{2}\cdot G\cdot \text{time}^2\\G:&\; 9.8 m/s^2\end{align}<\p>
우물의 깊이가 500m 이상일 확률?
d=np.array([2.5, 3, 3.5, 4, 2]) deep=9.8*d**2/2 mu=deep.mean() sigma=deep.std() mu.round(2), sigma.round(2)
(46.55, 20.89)
1-stats.norm.cdf(500, mu, sigma)
0.0




댓글
댓글 쓰기