Sparta/Theory

[250916] 통계 02 - 분포

junecho 2025. 9. 16. 22:10

✅ 데이터의 분포                                                        

🔰 모집단과 표본                                                                                                         

✔ 모집단 : 관심의 대상이 되는 전체 집단

✔ 표본 : 모집단에서 추출한 일부

  • 전수조사 : 모집단 전체를 조사하는 방법. 비용과 시간 많이 듦
  • 표본조사 : 표본만을 조사하는 방법. 표본이 대표성을 가져야 함
import numpy as np
import matplotlib.pyplot as plt

# 모집단 생성 (예: 국가의 모든 성인의 키 데이터)
population = np.random.normal(170, 10, 1000)

# 표본 추출
sample = np.random.choice(population, 100)

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()

np.random.normal

정규분포(가우시안 분포)를 따르는 난수 생성

정규분포 : 평균과 표준편차의 중심으로 데이터가 대칭적으로 분포하는 분포

numpy.random.normal(loc=0.0, scale=1.0, size=None)
  • loc (float) : 정규분포의 평균
  • scale (float) : 정규분포의 표준편차
  • size (int, tuple of ints) : 출력 배열 크기 (데이터의 개수)
  • 값 지정안하면 평균 0, 표준편차 1인 표준정규분포가 나옴

np.random.choice

주어진 배열에서 무작위로 선택된 요소를 반환

numpy.random.choice(a, size=None, replace=True, p)
  • a : 샘플링할 원본 배열. 정수인 경우 np.arange(a) 와 동일하게 간주
  • size (int, tuple of ints) : 출력 배열 크기 (데이터의 개수)
  • replace (boolean) : 중복값 여부. True 동일한 요소 여러번 선택될 수 있음.
  • p : 각 요소가 선택될 확률. 배열의 합은 1이어야 함

plt.hist

  • bins
    • : 데이터 몇개의 구간으로 나눌 것인지에 대한 것
    • 정수나 리스트로 입력 가능 - 정수 : 빈의 개수 지정 // 리스트 : 각 빈의 경계를 직접 지정

 

🔰 표본오차와 신뢰구간                                                                                     

✔ 표본이 모집단 대비해서 얼마나 차이나는지, 신뢰할 수 있는지 파악 가능

표본오차 (Sampling Error)

  • 표본에서 계산된 통계량과 모집단의 진짜 값 간의 차이
  • 표본이 모집단을 완벽하게 대표하지 못하기 때문에 발생
    • 표본의 크기 : 표본의 크기가 클수록 표본오차는 줄어듦. 더 많은 데이터를 수집할수록 모집단을 더 잘 대표함
    • 표본 추출 방법 : 무작위 추출 방법을 이용하면 표본오차를 줄일 수 있음. 모든 모집단 요소가 선택될 동등한 기회를 가지게 해야함

신뢰구간 (Confidence Interval)

  • 모집단의 특정 파라미터(ex. 평균, 비율)에 대해 추정된 값이 포함될 것으로 기대되는 범위
  • 계산 방법
    • 신뢰구간 = 표본평균 ± z * 표준오차
    • z : 신뢰수준에 해당하는 z- 값. ex) 95%의 신뢰수준의 z-값은 1.96
    • 일반적으로 95% 신뢰수준 많이 사용
import numpy as np
import scipy.stats as stats     # 통계 계산할 때 많이 쓰는 라이브러리

sample = np.random.choice(population, 100)

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

print(f"표본 평균: {sample_mean}")
print(f"95% 신뢰구간: {conf_interval}")

>>>
표본 평균: 168.19936158307624
95% 신뢰구간: (np.float64(166.34445911238578), np.float64(170.0542640537667))

 

stats.t.interval

scipy.stats.t.interval(alpha, df, loc=0, scale=1)
  • alpha : 신뢰수준. 95% 신뢰수준을 원하면 0.95 설정
  • df : 자유도. 일반적으로 표본 크기에서 1을 뺀 값으로 설정 (df = n - 1)
  • loc : 위치. 일반적으로 표본 평균 설정
  • scale : 일반적으로 표본 표준 오차 설정. 표본 표준 오차?? ⇒ 표본 표준편차를 표본 크기의 제곱근으로 나눈 값

 

⭐⭐⭐ 정규분포 ⭐⭐⭐ (Normal Distribution)                                            

✔ 가장 대표적인 분포

⇒ 표준편차 작은게 파랑색, 크면 황토색. 크면 클수록 더 넓어지는 형태

  • : 대칭 분포. 대부분의 데이터가 평균 주위에 몰려 있는 분포
  • 평균을 중심으로 좌우 대칭이며, 평균에서 멀어질수록 데이터의 빈도 감소
  • 표준편차는 분포의 퍼짐 정도를 나타냄
  • 데이터 수가 많으면 정규분포라고 봐도 됨 (예외사항 제외)
# 정규분포 생성
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 Distribution)                                                            

✔ 데이터가 비대칭적으로 꼬리 형태로 분포할 때 사용

  • 대부분의 데이터가 분포의 한쪽 끝에 몰려 있고, 반대쪽으로 긴 꼬리가 이어지는 형태의 분포
  • 소수가 전체적으로 큰 영향을 미치는 경우 사용
  • 비대칭적
  • 특정한 하나의 분포를 의미❌ 여러 종류의 분포를 포함할 수 있음
  • 아무리 데이터가 많아져도 정규분포가 되지 않음
  • ex) 소득 분포, 웹사이트 방문자 수, 도서 판매 등…
# 긴 꼬리 분포 생성 (예: 소득 데이터)
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 분포 (Student's t - Distribution)                                                    

✔ 표본이 작을 때 정규분포 대신 사용

자유도

    데이터 개수랑 관련이 있는 값. 데이터가 많아지면 자유도도 커짐.

    즉, 데이터가 많아지면 많아질 수록 정규분포에 가까워진다.

 

  • t분포는 모집단의 표준편차를 알 수 없고, 표본의 크기가 작은 경우(일반적으로 30 미만) 사용
  • 정규분포와 유사, BUT 표본의 크기가 작을수록 꼬리가 두꺼워지는 특징
  • 표본 크기가 커지면 정규분포에 가까워짐
  • ex) 약물 임상 시험…
# 스튜던트 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()

 

 

🔰 카이제곱 분포 (Chi-squared Distribution)                                                       

✔ 독립성 검정이나 적합도 검정에서 사용되는 분포

  • 범주형 데이터독립성 검정이나 적합도 검정에 사용되는 분포
  • 자유도에 따라 모양이 달라짐
  • 데이터 수가 많아질 수록 (자유도가 클수록) 정규분포에 가까워짐
  • 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 “완벽하게 서로 다른 질적 자료”일 때 활용
  • ex) 성별이나 나이에 따른 선거 후보 지지율
  • 독립성 검정
    • 두 범주형 변수 간의 관계가 있는지? 확인할 때 사용
    • ex) 성별과 직업 선택간의 독립성 검토
    • ex) 성별이 후보 지지율에 영향을 끼치는지 검토
  • 적합도 검정
    • 관측한 값들이 특정 분포에 해당하는지? 검정할 때 사용
    • ex) 주사위의 각 면이 동일한 확률로 나오는지 검토
    • ex) 노란색 완두와 녹색 완두가 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()

 

 

🔰 이항 분포 (Binomial Distribution)                                                                   

결과가 2개만 나오는 상황일 때 사용하는 분포

  • 연속적으로 그려지지 않는 이유 ⇒ 연속된 값을 가지지 않고, 특정한 정수 값만을 가질 수 있음. ex) 동전을 10번 던질 때 앞면이 나오는 횟수는 0,1,2…같은 정수
  • 연속된 값을 가지지 않는 분포 = 이산형 분포 라고도 지칭
  • 데이터 수가 많아질 수록 정규분포에 가까워짐
  • 성공/실패 같은 두 가지 결과를 가지는 실험을 여러 번 반복했을 때 성공 횟수의 분포
  • 실험 횟수(n)와 성공 확률(p) 로 정의됨
  • ex) 동전 던지기, 품질 관리 - 제품 불량품의 수 …
# 이항분포 생성 (예: 동전 던지기 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('Binomial distribution histogram')
plt.show()

 

 

 

🔰 푸아송 분포 (Poisson Distribution)                                                            

희귀한 사건이 발생할 때 사용하는 분포

발생률 : 특정 시간이나 특정 공간에서 발생하는 사건의 수

  • 연속된 값을 가지지 않기 때문에 이산형 분포에 해당
  • 람다가 무한으로 가게되면 정규분포에 가까워짐
  • 단위 시간 or 단위 면적 당 발생하는 사건의 수를 모델링 할 때 사용하는 분포
  • 람다가 작으면 작을수록 정말 희귀한 일이 벌어지는 것 = 어떤 사건이 잘 발생하지 않는다 ⇒ 즉 앞에서 한 번이라도 나오면 뒤에서 나올 일이 거의 없음
  • ex) 특정 시간 동안 콜센터에 도착하는 전화 수 / 특정 도로 구간에서 일정 기간동안 발생한 교통사고 수 / 특정 시간 동안 웹사이트의 방문자 수 ….
import numpy as np
import matplotlib.pyplot as plt
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()

 

 

 

💥 정리 💥                                                                  

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

 


🔰 문제                                                                                                                      

더보기
더보기
  1. 모집단(population)과 표본(sample)의 차이에 대한 설명으로 옳은 것을 고르세요.
    1. 모집단은 연구 대상 전체를 의미하고, 표본은 모집단의 일부를 의미한다.
    2. 모집단은 표본의 일부이며, 표본은 모집단 전체를 의미한다.
    3. 모집단과 표본은 같은 의미를 가진다.
    4. 모집단은 표본보다 항상 작다.
  2. 어떤 표본의 평균이 50이고, 표본 표준편차가 10인 경우, 95% 신뢰구간을 구하세요. (표본 크기는 충분히 크다고 가정)
    • 95% 신뢰구간은 표본 평균 ± (1.96 * 표본 표준오차)로 계산됩니다.
    • 표본 표준오차는 표준편차를 표본 크기의 제곱근으로 나눈 값입니다.
  3. 다음 중 정규분포에 해당하는 데이터의 분포를 나타내는 그래프의 모양은 무엇인가요?
    1. U자형
    2. 종 모양
    3. 지수 감소형
    4. 선형
  4. 정규분포에서 평균과 표준편차에 대한 설명으로 옳은 것을 고르세요.
    1. 평균은 분포의 중앙값과 항상 다르다.
    2. 표준편차는 데이터의 퍼짐 정도를 나타낸다.
    3. 평균이 커지면 분포는 좁아진다.
    4. 표준편차가 작아지면 분포는 넓어진다.
  5. 긴 꼬리 분포(Long Tail Distribution)의 특징으로 옳지 않은 것을 고르세요.
    1. 데이터의 대부분이 낮은 빈도 값을 갖는다.
    2. 꼬리 부분에 많은 데이터가 분포되어 있다.
    3. 꼬리가 길어질수록 정규분포에 가까워진다.
    4. 일부 항목이 매우 높은 빈도 값을 가진다.
  6. 스튜던트 t 분포를 사용하는 이유는 무엇인가요?
    1. 표본 크기가 작을 때 사용한다.
    2. 모집단이 정규분포가 아닐 때 사용한다.
    3. 모집단 표준편차를 알 때 사용한다.
    4. 모집단 평균을 알 때 사용한다.
  7. 카이제곱분포(Chi-Square Distribution)는 주로 어떤 분석에 사용되나요?
    1. 두 변수 간의 상관관계 분석
    2. 평균 간의 차이 분석
    3. 범주형 데이터의 독립성 검정
    4. 연속형 데이터의 분포 분석
  8. 동전 던지기를 10번 했을 때, 앞면이 6번 나올 확률을 구할 때 사용하는 분포는 무엇인가요?
    1. 정규분포
    2. 이항분포
    3. 푸아송분포
    4. 카이제곱분포
  9. 어느 병원에서 1시간 동안 평균 3명의 환자가 도착한다고 할 때, 1시간 동안 5명의 환자가 도착할 확률을 구할 때 사용하는 분포는 무엇인가요?
    1. 정규분포
    2. 이항분포
    3. 푸아송분포
    4. 스튜던트 t 분포

 

'Sparta > Theory' 카테고리의 다른 글

[250917] 통계 04 - 회귀  (1) 2025.09.17
[250916] 통계 03 - 검정  (0) 2025.09.16
[250916] 통계 01 - 분석방법  (0) 2025.09.16
[250901] pandas visualizer  (0) 2025.09.01
[250830] pandas  (1) 2025.09.01