EDA & 데이터 분석/통계

통계학 기초 2주차[분포의 종류]

edcrfv458 2025. 1. 16. 14:22

목표

  1. 모집단과 표본에 대해 이해
  2. 각각의 분포에 대한 개념과 특징
  3. 표본오차와 신뢰구간 이해

2.1 모집단(Population)과 표본(Sample)

  • 모집단: 관심이 되는 전체 집단
  • 표본: 모집단에서 추출한 일부
  • 표본을 사용하는 이유: 현실적인 제약
    • 비용과 시간
      • 전체 모집단 조사하는 것은 비용과 시간이 많이 들어 대부분 불가능하거나 비효율적이다. 하지만 표본 조사는 이러한 자건을 절약하면서도 유의미한 결과 도출이 가능
    • 접근성
      • 모든 데이터 수집하는 것이 물리적으로 불가능한 경우가 많다
    • 대표성(표본의 대표성)
      • 잘 설계된 표본은 모집단의 특성을 반영할 수 있으며, 이를 통해 얻어진 결과를 모집단 전체에 일반화 가능
      • 무작위로 표본 추출하면 편향을 최소화하고 모집단의 다양한 특성을 포함할 수 있음
    • 데이터 관리
      • 데이터 처리의 용이성: 표본 데이터 사용하는 것은 전체 데이터를 다루는 것보다 데이터 처리와 분석이 훨씬 용이
      • 데이터 품질 관리: 작은 표본에서는 데이터 품질을 더 쉽게 관리하고, 오류나 이상값을 식별하여 수정 가능
    • 모델 검증 용이
      • 모델 적합도 테스트: 표본 데이터 사용하여 통계적 모델 검증 가능, 모델이 표본 데이터에 잘 맞는다면 모집단에도 잘 맞을 가능성이 높음
  • 전수 조사: 모집단 전체를 조사하는 방법, 대규모의 경우 비용과 시간이 많이 듦
  • 표본 조사: 표본만 조사하는 방법: 비용과 시간이 적게 들지만, 표본이 대표성을 가져야 함

 

np.random.normal(loc, scale, size)

  • 정규분포(가우시안분포)를 따르는 난수를 생성
    • loc: 정규분포의 평균(float, default=0.0)
    • scale: 정규분포의 표준편차(float, default=1.0)
    • size: 출력 배열의 크기(int or tuple of ints, default=None(스칼라값))

 

np.random.choice(a, size, replace, p)

  • 주여진 배열에서 임의로 샘플링하여 요소 선택
    • a: 샘플링할 원본 배열, 정수일 경우 np.arange(a)와 동일
    • size: 출력 배열의 크기(int or tuple of ints, default=None(단일값))
    • replace: 복원 추출 여부
    • p: 각 요소 선택될 확률

 

plt.his()

  • 히스토그램 그리는 함수
    • bins: 경계 설정(정수 or 리스트)
    • alpha: 막대의 투명도 지정
    • label: 히스토그램 레이블 지정(범례)
    • color: 색 지정

2.2 표본오차와 신뢰구간

  • 표본오차: 표본에서 계산된 통계량과 모집단의 진짜 값 간의 차이
    • 표본 크기가 클수록 표본오차는 작아짐
    • 무작위 추출 방법을 사용하면 표본오차를 줄일 수 있음(각 데이터가 뽑힐 확률을 동일하게 해줌)
  • 신뢰구간: 모집단의 특정 파라미터(평균, 비율)에 대해 추정된 값이 포함될 것으로 기대되는 범위
    • 신뢰구간 = 표본평균 ± z * 표준오차
    • 여기서 z는 선택된 신뢰 수준에 해당하는 z-값 (95% 신뢰수준의 z-값은 1.96)

 

import scipy.stats as stats 

  • 표본 평균과 표본 표준편차 계산
  • scipy.stats: SciPy 라이브러리의 일부, 통계 분석 위한 다양한 함수와 클래스들을 제공
  • scipy.stats.t.interval(alpha, df, loc, scale): 주어진 신뢰 수준에서 t-분포를 사용하는 신뢰구간을 계산
    • alpha: 신뢰 구간
    • df: 자유도(일반적으로 표본 크기에서 1을 뺀 값)
    • loc: 위치(일반적으로 표본 평균)
    • scale: 스케일(일반적으로 표본 표준 오차)
import scipy.stats as stats

# 표본 평균, 표준편차 계산
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)))

2.3 정규분포

  • 특징: 대부분의 데이터가 평균 주변에 몰려있으며, 평균에서 멀어질수록 빈도가 줄어듦
    • 데이터가 많아질수록 정규분포를 따름
# 정규분포 생성
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("정규 분포 히스토그램")
plt.show()

2.4 긴 꼬리 분포

  • 대부분의 데이터가 분포의 한쪽 끝에 몰려있고, 반대쪽으로 긴 꼬리가 이어지는 형태의 분포
    • 데이터가 아무리 많아져도 정규분포가 되지 않음
# 긴 꼬리 분포
long_tail = np.random.exponential(1, 1000)

# 히스토그램
plt.hist(long_tail, bins=30, density=True, alpha=0.6, color='g')
plt.title("긴 꼬리 히스토그램")
plt.show()

2.5 스튜던트 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='g')

# 스튜던트 t 분포 곡선
x = np.linespace(-4, 4, 100)
p = stats.t.pdf(x, df=10)
plt.plot(x, p, 'k', linewidth=2)
plt.title("스튜던트 t 분포")
plt.show()

2.6 카이제곱분포

  • 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포
    • 자유도 (표본의 크기와 관련이 있는 값) 에 따라 모양이 달라짐
    • 표본이 커지면 대칭형태가 되면서 정규분포 형태가 됨 
    • 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 완벽하게 서로 다른 질적 자료일때 활용(성별, 나이)
  • 독립성 검정: 두 범주형 변수 간의 관계가 있는지 확인(ex. 성별과 직업 선택 간의 독립성 검토)
  • 적합도 검정: 관측한 값들이 특정 분포에 해당하는지 검정(ex. 주사위의 각 면이 동일한 확률로 나오는지 검토)
# 카이제곱분포
chi2_dist = np.random.chisquare(df=2, size=1000)

# 히스토그램
plt.hist(chi2_dist, bins=30, density=True, alpha=0.6, color='g')

# 카이제곱분포 곡선
x = np.linespace(0, 10, 100)
p = stats.chi2.pdf(x, df=2)
plt.plot(x, p, 'k', linewidth=2)
plt.title("카이제곱분포")
plt.show()

2.7 이항 분포(이산형 분포)

  • 결과가 2개 나오는 상황일때 사용하는 분포
  • 띄엄띄엄 그래프가 그려지는데 그 이유는 이항분포는 연속된 값을 가지지 않고 특정한 정수 값만을 가짐
    • (ex. 동전을 10번 던질때 앞면이 나오는 횟수는 0, 1, 2, ..., 10과 같은 정수로 연속적으로 그려지지 않음)
  • 실험 횟수(n)와 성공 확률(p)로 정의
# 이항분포 생성 (동전 던지기 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='g')
plt.title("이항 분포 히스토그램")
plt.show()

2.8 푸아송 분포

  • 희귀환 사건이 발생할 때 사용하는 분포
    • 람다 = 발생률
    • 람다가 커질수록 정규분포를 따름
  • 이항 분포처럼 연속된 값을 가지지 않기 때문에 이산형 분포에 해당
from scipy.stats import poisson

# 푸아송 분포 파라미터 설정
lambda_value = 4		# 평균 발생률
x = np.arange(0, 15)	# 사건 발생 횟수 범위

# 푸아송 분포 확률 질량 함수 계산
poission_pmf = poisson.pmf(x, lambda_value)

# 시각화
plt.figure(figsize=(10,6))
plt.bar(x, poisson_pmf, alpha=0.6, color='b', label=f'Possion PMF (lambda={lambda_value})')
plt.xlabel("사건 발생 수")
plt.ylabel("확률")
plt.title("푸아송 분포")
plt.legend()
plt.gird(True)
plt.show()

2.9 정리

  • 데이터 수가 많으면 정규분포에 수렴(중심극한정리)
  • 따라서 데이터 수가 많으면 정규분포로 가정
  • 하지만 데이터 적을 경우에는 상황에 맞는 분포 선택
  • 특히 긴 꼬리 분포는 데이터 많아도 정규분포가 되지 않음

 

분포 선택

  • 데이터 수가 충분 ➡️ 정규분포
  • 데이터 수가 적음 ➡️ 스튜던트 t 분포
  • 일부 데이터가 전체적으로 큰 영향 ➡️ 롱 테일 분포(파레토 분포)
  • 범주형 데이터의 독립성 검정 or 적합도 검정 ➡️ 카이 제곱 분포
  • 결과가 두개(성공 or 실패)만 나오는 상황 ➡️ 이항 분포
  • 특정 공간, 시간에서 발생하는 사건 ➡️ 푸아송 분

'EDA & 데이터 분석 > 통계' 카테고리의 다른 글

통계학 6주차[가설검정의 주의점]  (0) 2025.01.20
통계학 5주차[상관관계]  (0) 2025.01.17
통계학 4주차[회귀]  (0) 2025.01.17
통계학 3주차[유의성 검정]  (0) 2025.01.17
통계학 기초 1주차  (0) 2025.01.16