✅ 데이터의 분포
🔰 모집단과 표본
✔ 모집단 : 관심의 대상이 되는 전체 집단
✔ 표본 : 모집단에서 추출한 일부
- 전수조사 : 모집단 전체를 조사하는 방법. 비용과 시간 많이 듦
- 표본조사 : 표본만을 조사하는 방법. 표본이 대표성을 가져야 함
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 분포
- 일부 데이터가 전체적으로 큰 영향을 미친다 ⇒ 롱 테일 분포 (파레토 분포)
- 범주형 데이터의 독립성 검정이나 적합도 검정 ⇒ 카이 제곱 분포
- 결과가 두 개(성공/실패)만 나오는 상황 ⇒ 이항 분포
- 특정 시간/공간 에서 발생하는 사건 ⇒ 푸아송 분포
🔰 문제
더보기
더보기
- 모집단(population)과 표본(sample)의 차이에 대한 설명으로 옳은 것을 고르세요.
- 모집단은 연구 대상 전체를 의미하고, 표본은 모집단의 일부를 의미한다.
- 모집단은 표본의 일부이며, 표본은 모집단 전체를 의미한다.
- 모집단과 표본은 같은 의미를 가진다.
- 모집단은 표본보다 항상 작다.
- 어떤 표본의 평균이 50이고, 표본 표준편차가 10인 경우, 95% 신뢰구간을 구하세요. (표본 크기는 충분히 크다고 가정)
- 95% 신뢰구간은 표본 평균 ± (1.96 * 표본 표준오차)로 계산됩니다.
- 표본 표준오차는 표준편차를 표본 크기의 제곱근으로 나눈 값입니다.
- 다음 중 정규분포에 해당하는 데이터의 분포를 나타내는 그래프의 모양은 무엇인가요?
- U자형
- 종 모양
- 지수 감소형
- 선형
- 정규분포에서 평균과 표준편차에 대한 설명으로 옳은 것을 고르세요.
- 평균은 분포의 중앙값과 항상 다르다.
- 표준편차는 데이터의 퍼짐 정도를 나타낸다.
- 평균이 커지면 분포는 좁아진다.
- 표준편차가 작아지면 분포는 넓어진다.
- 긴 꼬리 분포(Long Tail Distribution)의 특징으로 옳지 않은 것을 고르세요.
- 데이터의 대부분이 낮은 빈도 값을 갖는다.
- 꼬리 부분에 많은 데이터가 분포되어 있다.
- 꼬리가 길어질수록 정규분포에 가까워진다.
- 일부 항목이 매우 높은 빈도 값을 가진다.
- 스튜던트 t 분포를 사용하는 이유는 무엇인가요?
- 표본 크기가 작을 때 사용한다.
- 모집단이 정규분포가 아닐 때 사용한다.
- 모집단 표준편차를 알 때 사용한다.
- 모집단 평균을 알 때 사용한다.
- 카이제곱분포(Chi-Square Distribution)는 주로 어떤 분석에 사용되나요?
- 두 변수 간의 상관관계 분석
- 평균 간의 차이 분석
- 범주형 데이터의 독립성 검정
- 연속형 데이터의 분포 분석
- 동전 던지기를 10번 했을 때, 앞면이 6번 나올 확률을 구할 때 사용하는 분포는 무엇인가요?
- 정규분포
- 이항분포
- 푸아송분포
- 카이제곱분포
- 어느 병원에서 1시간 동안 평균 3명의 환자가 도착한다고 할 때, 1시간 동안 5명의 환자가 도착할 확률을 구할 때 사용하는 분포는 무엇인가요?
- 정규분포
- 이항분포
- 푸아송분포
- 스튜던트 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 |