통계 뿌시기 - 분포

수수수수퍼노인·2025년 9월 16일

통계 뿌시기

목록 보기
2/11

" 모집단과 표본 "

모집단

관심의 대상이 되는 전체 집단 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()

" 표본을 사용하는 이유 "

현실적인 제약

  • 비용과 시간 : 전수조사는 비용과 시간이 많이 들어 불가능하거나 비효율적임
  • 접근성 : 전수조사는 물리적으로 불가능한 경우가 많음
    ex) 특정 질병에 걸린 모든 환자의 데이터 수집은 어려움

대표성

  • 표본의 대표성 : 잘 설계된 표본은 모집단의 특성을 반영하여 일반화할 수 있음
  • 무작위 추출로 편향을 최소화하고 다양한 특성을 포함할 수 있음

데이터 관리

  • 데이터 처리의 용이성 : 컴퓨팅 자원의 부담을 줄여줌
  • 데이터 품질 관리 : 데이터 품질을 더 쉽게 관리하고 오류나 이상값을 식별하여 수정할 수 있음

모델 검증 용이

  • 모델 적합도 테스트 : 통계적 모델을 검증할 수 있음
  • 모델이 표본에 적합하다면, 모집단에도 적합할 가능성이 높음

" 표본오차와 신뢰구간 "

표본오차(Sampling Error)

표본에서 계산된 통계량과 모집단의 값 간의 차이

  • 표본의 크기 : 표본의 크기가 클수록 표본오차는 줄어듦
  • 표본 추출 방법 : 무작위 추출 방법으로 표본오차를 줄일 수 있음

신뢰구간(Confidence Interval)

모집단에 대해 추정된 값이 포함될 것으로 기대되는 범위

계산

  • 신뢰구간 = 표본평균 ± Z * 표준오차
  • 표준오차 = 표준편차 / 데이터 개수의 제곱근
# 모집단 생성 (예: 국가의 모든 성인의 키 데이터)
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)})")

" 큰 수의 법칙 "

큰 수의 법칙(Law of Large Numbers, LLN)

표본 수가 커질수록 표본평균이 모집단 평균에 가까워짐

관심 대상 : 표본평균 값

활용

  • 모집단 평균을 표본평균으로 추정하는 근거
  • 데이터가 많을수록 신뢰성이 높음을 설명

" 중심극한정리 "

중심극한정리 (Central Limit Theorem, CLT)

모집단 분포와 상관없이, 표본 크기가 충분히 크면 표본평균의 분포가 정규분포에 가까워짐

관심 대상 : 표본평균의 분포

활용

  • 신뢰구간 계산
  • 가설검정(z-test, t-test 등)

" 분포를 고르는 기준 "

정규분포

데이터의 수가 충분한 경우, 일반적으로 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)

데이터가 한쪽에 몰리고 반대쪽으로 길게 꼬리를 가진 비대칭 분포

소수의 인기 항목이 전체 데이터를 크게 차지하는 반면, 나머지 다수의 희귀 항목들이 긴 꼬리를 형성

특징

  • 비대칭적 분포
  • 특정한 하나의 분포를 의미하지 않으며 여러 종류의 분포를 포함할 수 있음 (파레토 분포, 지프의 법칙, 멱함수 등)
  • 롱테일 분포는 이상치가 너무 자주 발생해 데이터가 많아져도 분포 모양이 정규분포로 안정되지 않음
  • 평균 ≠ 중앙값 ≠ 최빈값

사례

  • 소득 분포 : 일부 부유층이 전체 소득에서 큰 비중을 차지
  • 온라인 쇼핑 : 대형 온라인 쇼핑몰에서 소수의 인기 제품이 많은 판매를 기록하는 반면, 수많은 비인기 제품이 적은 판매를 기록하면서 전체 매출에서 중요한 비중을 차지함
    “롱테일 전략(Long Tail Strategy)”으로, 희귀 상품들을 합산하면 상위 인기 제품 매출과 비슷하거나 더 큰 효과를 낼 수 있음
# 긴 꼬리 분포 생성 (예: 소득 데이터)
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 분포 "

스튜던트 t 분포

정규분포와 유사하나, 표본 크기가 작을수록 꼬리가 두꺼워짐

표본 크기가 작거나(30 미만), 모집단의 분산을 모르는 경우에 더 적합한 분포

특징

  • 종 모양, 대칭 분포 : 평균을 중심으로 좌우 대칭
  • 정규분포보다 꼬리가 두꺼워 이상치에 더 민감함
    • 꼬리가 두꺼움 → 극단적인 값이 나올 확률이 상대적으로 높음
  • 자유도(degree of freedom, df)에 따라 형태 변화
    • 자유도(df = n - 1)가 작으면 꼬리가 더 두꺼움
    • 자유도가 커질수록 정규분포에 가까워짐

사례

  • 약물 시험 : 새로운 약물의 효과에 대한 소규모 임상 시험에서 두 그룹 간의 차이를 분석하는 데 사용
# 스튜던트 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 적합도 검정에서 사용

특징

  • 비대칭적 분포 : 0을 기준으로 오른쪽으로 치우침
  • 평균 = 자유도(df), 분산 = 2 × 자유도(df)
  • 자유도(degree of freedom, df)에 따라 형태 변화
    • 자유도(df)가 작으면 분포가 오른쪽으로 치우친 형태
    • 자유도가 커질수록 정규분포에 가까워짐

사례

  • 독립성 검정 : 두 범주형 변수 간의 독립성 검정
    • 성별과 직업 선택 간의 관계가 있는지
  • 적합도 검정 : 관측값들이 특정 분포에 해당하는지
    • 주사위의 각 면이 동일한 확률로 나오는지
# 카이제곱분포 생성
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번 반복할 때, 특정 사건(성공/실패 등)이 발생하는 횟수를 확률변수로 나타낸 이산 확률분포

연속된 값을 가지지 않고 특정한 정수 값만을 갖는 이산형 분포

특징

  • 독립적인 시행 n회, 사건 발생 확률 p
  • 평균 = np, 분산 = np(1-p)
  • 사건 발생 확률(p)에 따라 형태 변화
    • p = 0.5일 때 대칭형
    • p < 0.5 → 왼쪽으로 치우침
    • p > 0.5 → 오른쪽으로 치우침

사례

  • 동전 던지기 : 동전을 10번 던졌을 때, 앞면이 나오는 횟수
  • 품질 관리 : 제조업체가 제품의 불량률을 모니터링할 때, 무작위로 선택된 100개의 제품 중 불량품의 수
# 이항분포 생성 (예: 동전 던지기 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()

" 포아송 분포 "

포아송 분포

특정 시간 또는 구간 내 사건이 발생하는 횟수를 확률변수로 나타낸 이산 확률분포

연속된 값을 가지지 않고 특정한 정수 값만을 갖는 이산형 분포

특징

  • 평균 발생률 λ : 주어진 시간이나 구간에서 사건이 몇 번 발생했는지
    • ex) 1시간 동안 콜센터에 전화오는 건 수가 10건이면 λ = 10
  • λ가 작을수록 희귀하게 발생하는 사건
  • 평균 = λ, 분산 = λ
  • 평균 발생률(λ)에 따라 형태 변화
    • λ가 작으면 오른쪽으로 치우친 분포
    • λ가 커지면 정규분포와 유사한 종 모양

사례

  • 교통사고 : 특정 도로 구간에서 일정 기간 동안 발생하는 교통사고의 수
  • 웹사이트 트래픽 : 특정 시간 동안 웹사이트에 도착하는 방문자 수
# 푸아송 분포 파라미터 설정
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()
profile
화이팅구리

1개의 댓글

comment-user-thumbnail
2025년 9월 17일

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

답글 달기