✏️ 2025. 01. 08 TIL

Dada·2025년 1월 8일

▶ 통계학 라이브세션 : 1회차

1. 모집단 - 표본 관련 함수

  • numpy.random.normal : 정규분포를 따르는 난수 생성
numpy.random.normal(loc=0.0, scale=1.0, size=None)
  • loc : float
    • 정규분포의 평균
    • 기본값 : 0.0
  • scale : float
    • 정규분포의 표준편차
    • 기본값: 1.0
  • size : int / tuple of ints
    • 출력 배열의 크기 = 데이터 개수
    • 기본값: None → 스칼라 값 반환
  • numpy.random.choice : 지정된 배열에서 무작위로 선택된 요소를 반환하는 기능 제공
numpy.random.choice(a, size=None, replace=True, p=None)
  • a : 1-D array-like / int
    • 샘플링한 원본 배열
    • 정수인 경우 np.arange(a)와 동일하게 간주
  • size : int / tuple of ints
    • 출력 배열의 크기
    • 기본값 : None, 단일 값 반환
  • replace : boolean
    • 복원 추출 여부
    • True면 동일한 요소 여러 번 선택 가능
    • 기본값 : True
  • p : 1-D array-like (optional)
    • 각 요소가 선택될 확률
    • 배열의 합은 1이어야 함
  • plt.hist : Matplotlib 라이브러리에서 히스토그램을 그리는 함수
plt.hist(population, bins=50, alpha=0.5, label='population', color = 'blue')
plt.hist(sample, bins=50, alpha=0.5, label='sample', color='red')
  • bins
    • 히스토그램 빈(bins)의 개수 또는 경계
  • alpha
    • 히스토그램 막대의 투명도
    • 0(투명) - 1 (반투명) 사이의 값
  • label
    • 히스토그램의 레이블 지정
    • 범례 추가 시 사용
  • color
    • 히스토그램 막대의 색상 지정

2. 표본오차 - 신뢰구간

  • 표본오차 (Sampling Error)
    • 표본에서 계산된 통계량과 모집단의 진짜 값 간의 차이
    • 표본의 크기가 클수록 표본 오차는 작아짐
    • 무작위 추출 방법을 사용할 경우 표본오차를 줄일 수 있음 (모든 모집단 요소가 선택될 동등한 기회를 가지게 해야함)
  • 신뢰구간 (Confidence Interval)
    • 모집단의 특정 파라미터(예: 평균, 비율)에 대해 추정된 값이 포함될 것으로 기대되는 범위
    • 신뢰구간 = 표본평균 ± z × 표준오차
      • z = 신뢰 수준에 해당하는 z-값
  • stats.t.interval : 주어진 신뢰수준에서 t-분포를 사용하여 신뢰구간 계산
scipy.stats.t.interval(alpha, df, loc=0, scale=1)
  • alpha
    • 신뢰수준(confidence level)을 의미
    • 신뢰수준 95% > alpha 0.95로 설정
  • df
    • 자유도(degrees of freedom)을 나타냄
    • 일반적으로 표본 크기에서 1을 뺀 값으로 설정
  • loc
    • 위치 (parameter of location)
    • 일반적으로 표본 평균을 설정
  • scale
    • 스케일 (parameter of scale)
    • 일반적으로 표본 표준오차를 설정
    • 표본 표준오차 : 표본 표준편차를 표본 크기의 제곱근으로 나눈 값
      • scale = sample_std / sqrt(n)
  • 표준오차와 표준편차의 차이?
    • 표준편차: 표본 조사로 얻은 각 관측값과 표본 평균의 차이
    • 표준오차: 표준편차를 표본크기의 제곱근으로 나눈 값
      • 표본평균 추정값의 변동성을 의미
      • 표준오차가 작을수록 신뢰구간이 좁아지고, 커질수록 신뢰구간이 넓어짐

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('normal distribution histogram')
plt.show()

4. 긴 꼬리 분포

  • 긴 꼬리 분포 (Long-Tailed Distribution)

    • 대부분의 데이터가 분포의 한쪽 끝에 몰려있고, 반대쪽으로 긴 꼬리가 이어지는 형태의 분포
    • 특정한 하나의 분포를 의미하지 않으며 여러 종류의 분포를 포함
      → 파레토 분포, 지프의 법칙, 멱함수..
    • 데이터 수가 아무리 많아져도 정규분포가 되지 않음
  • 긴 꼬리 분포 그래프 그리기

# 긴 꼬리 분포 생성 (예: 소득 데이터)
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()

5. 스튜던트 t 분포

  • 스튜던트 t 분포

    • 모집단의 표준편차를 알 수 없고, 표본의 크기가 작은 경우(일반적으로 30 미만)에 사용되는 분포
  • 정규분포와 유사하지만, 표본의 크기가 작을수록 꼬리가 두꺼워지는 특징

  • 스튜던트 t 분포 그래프 그리기

# 스튜던트 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()

6. 카이제곱 분포

  • 카이제곱 분포

    • 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포
    • 자유도에 따라 모양이 달라짐
    • 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 완벽하게 서로 다른 질적 자료일 때 활용
      → 예 : 성별이나 나이에 따른 선거 후보 지지율
  • 카이제곱 분포의 실사용례

    • 독립성 검정 : 두 범주형 변수가 관계가 있는지 확인할 때 사용
      • 예시 1 - 성별과 직업 선택 간의 독립성 검토
      • 예시 2 - 성별이 후보 지지율에 끼치는 영향 검토
    • 적합도 검정 : 관측한 값들이 특정 분포에 해당하는지 검정할 때 사용
      • 예시 1 - 주사위의 각 면이 동일한 확률으로 나오는지 검토
      • 예시 2 - 노란 완두, 녹색 완두가 3:1 비율 발생 → 실험 데이터가 그렇게 나오는지 검토
  • 카이제곱 그래프 그리기

# 카이제곱분포 생성
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('chi2 distribution histogram')
plt.show()

7. 이항분포

  • 이항분포

    • 성공 / 실패와 같은 두 가지 결과를 가지는 실험을 여러 번 반복했을 때 성공 횟수의 분포
    • 성공확률을 p라고 할 때, 성공의 횟수를 확률적으로 나타냄
    • 실험횟수(n)과 성공확률(p)로 정의됨
  • 이항분포 그래프 그리기

 # 이항분포 생성 
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('binomial distribution histogram')
plt.show()

8. 푸아송 분포

  • 푸아송 분포

    • 단위 시간 또는 단위 면적 당 발생하는 사건의 수를 모델링 할 때 사용하는 분포
    • 평균 발생률 λ를 가진 사건이 주어진 시간 또는 공간 내에서 몇 번 발생하는지를 나타냄
  • 푸아송 분포 그래프 그리기

from scipy.stats import poisson

# 푸아송 분포 파라미터 설정
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()

9. 분포 정리하기

  • 분포들 간의 관계
    업로드중..
    • 중심극한정리 : 대부분의 경우 데이터 수가 많아지면 정규분포에 수렴
      → 긴 꼬리 분포는 데이터가 많아도 정규분포가 되지 않음
    • 데이터가 적을 경우에는 각 상황에 맞는 분포 선택
  • 분포 고르기 팁!
    • 데이터 수가 충분하다
      → 정규분포
    • 데이터 수가 작다
      → 스튜던트 t 분포
    • 일부 데이터가 전체적으로 큰 영향을 미친다
      → 롱 테일 분포
    • 범주형 데이터의 독립성 검정이나 적합도 검정
      → 카이 제곱 분포
    • 결과가 두 개(성공, 실패)만 나오는 상황
      → 이항 분포
    • 특정 시간, 공간에서 발생하는 사건
      → 푸아송 분포

0개의 댓글