" 모집단과 표본 "
관심의 대상이 되는 전체 집단 ex) 한 국가의 모든 성인
모집단에서 추출한 일부 ex) 그 국가의 성인 중 일부를 조사
모집단 전체를 조사하는 방법, 대규모일 경우 시간과 비용이 많이 듦
표본만 조사하는 방법, 비용과 시간이 적게 들지만 표본이 대표성을 가져야 함
# 모집단 생성 (예: 국가의 모든 성인의 키 데이터)
population = np.random.normal(170, 10, 1000)
# 표본 추출
sample = np.random.choice(population, 200)
plt.hist(population, bins=50, alpha=0.5, label='population', color='blue')
plt.hist(sample, bins=50, alpha=0.5, label='sample', color='red')
plt.legend()
plt.title('population and sample distribution')
plt.show()
" 표본을 사용하는 이유 "
" 표본오차와 신뢰구간 "
표본에서 계산된 통계량과 모집단의 값 간의 차이
모집단에 대해 추정된 값이 포함될 것으로 기대되는 범위
계산
# 모집단 생성 (예: 국가의 모든 성인의 키 데이터)
population = np.random.normal(170, 10, 1000)
# 표본 추출
sample = np.random.choice(population, 200)
# 표본 평균과 표본 표준편차 계산
sample_mean = np.mean(sample)
sample_std = np.std(sample)
# 95% 신뢰구간 계산
conf_interval = stats.t.interval(0.95, len(sample)-1, loc=sample_mean, scale=sample_std/np.sqrt(len(sample)))
# loc = 표본 평균, scale = 표준오차
print(f"표본 평균: {round(sample_mean,2)}")
print(f"95% 신뢰구간: ({round(conf_interval[0],2)}, {round(conf_interval[1],2)})")
" 큰 수의 법칙 "
표본 수가 커질수록 표본평균이 모집단 평균에 가까워짐
관심 대상 : 표본평균 값
활용
" 중심극한정리 "
모집단 분포와 상관없이, 표본 크기가 충분히 크면 표본평균의 분포가 정규분포에 가까워짐
관심 대상 : 표본평균의 분포
활용
" 분포를 고르는 기준 "
정규분포
데이터의 수가 충분한 경우, 일반적으로 n ≥ 30
스튜던트 t 분포
데이터의 수가 적은 경우, 일반적으로 n < 30
긴 꼬리(롱 테일) 분포
일부 데이터가 전체적으로 큰 영향을 미치는 경우
카이제곱 분포
범주형 데이터의 독립성 검정 or 적합도 검정인 경우
이항 분포
결과가 2개만 나오는 경우
포아송 분포
특정 시간이나 공간에서 발생하는 사건의 경우
" 정규분포 "
연속 확률 분포 중 하나, 평균값을 중심으로 좌우 대칭을 이루는 종 모양의 대칭 분포
특징
# 정규분포 생성
normal_dist = np.random.normal(170, 10, 1000)
# 히스토그램으로 시각화
plt.hist(normal_dist, bins=30, density=True, alpha=0.6, color='g')
# 정규분포 곡선 추가
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = stats.norm.pdf(x, 170, 10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('normal distribution histogram')
plt.show()
" 긴 꼬리 분포 "
데이터가 한쪽에 몰리고 반대쪽으로 길게 꼬리를 가진 비대칭 분포
소수의 인기 항목이 전체 데이터를 크게 차지하는 반면, 나머지 다수의 희귀 항목들이 긴 꼬리를 형성
특징
사례
# 긴 꼬리 분포 생성 (예: 소득 데이터)
long_tail = np.random.exponential(1, 1000)
# 히스토그램으로 시각화
plt.hist(long_tail, bins=30, density=True, alpha=0.6, color='b')
plt.title('long tail distribution histogram')
plt.show()
" 스튜던트 t 분포 "
정규분포와 유사하나, 표본 크기가 작을수록 꼬리가 두꺼워짐
표본 크기가 작거나(30 미만), 모집단의 분산을 모르는 경우에 더 적합한 분포
특징
사례
# 스튜던트 t 분포 생성
t_dist = np.random.standard_t(df=10, size=1000)
# 히스토그램으로 시각화
plt.hist(t_dist, bins=30, density=True, alpha=0.6, color='r')
# 스튜던트 t 분포 곡선 추가
x = np.linspace(-4, 4, 100)
p = stats.t.pdf(x, df=10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('student t distribution histogram')
plt.show()
" 카이제곱 분포 "
범주형 데이터의 독립성 검정 or 적합도 검정에서 사용
특징
사례
# 카이제곱분포 생성
chi2_dist = np.random.chisquare(df=2, size=1000)
# 히스토그램으로 시각화
plt.hist(chi2_dist, bins=30, density=True, alpha=0.6, color='m')
# 카이제곱분포 곡선 추가
x = np.linspace(0, 10, 100)
p = stats.chi2.pdf(x, df=2)
plt.plot(x, p, 'k', linewidth=2)
plt.title('카이제곱 분포 히스토그램')
plt.show()
" 이항 분포 "
독립적인 시행을 n번 반복할 때, 특정 사건(성공/실패 등)이 발생하는 횟수를 확률변수로 나타낸 이산 확률분포
연속된 값을 가지지 않고 특정한 정수 값만을 갖는 이산형 분포
특징
사례
# 이항분포 생성 (예: 동전 던지기 10번 중 앞면이 나오는 횟수)
binom_dist = np.random.binomial(n=10, p=0.5, size=1000)
# 히스토그램으로 시각화
plt.hist(binom_dist, bins=10, density=True, alpha=0.6, color='y')
plt.title('이항 분포 히스토그램')
plt.show()
" 포아송 분포 "
특정 시간 또는 구간 내 사건이 발생하는 횟수를 확률변수로 나타낸 이산 확률분포
연속된 값을 가지지 않고 특정한 정수 값만을 갖는 이산형 분포
특징
사례
# 푸아송 분포 파라미터 설정
lambda_value = 4 # 평균 발생률
x = np.arange(0, 15) # 사건 발생 횟수 범위
# 푸아송 분포 확률 질량 함수 계산
poisson_pmf = poisson.pmf(x, lambda_value)
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.bar(x, poisson_pmf, alpha=0.6, color='b', label=f'Poisson PMF (lambda={lambda_value})')
plt.xlabel('Number of Events')
plt.ylabel('Probability')
plt.title('Poisson Distribution')
plt.legend()
plt.grid(True)
plt.show()

내용이 쏙 들어와요 잘봤습니다