분포종류, 검정
정규분포
- 평균을 중심으로 좌우 대칭
- 데이터가 충분히 많다면 정규 분포를 따름
- 표준 편차는 분포의 퍼짐 정도
By Inductiveload - 자작 (원문: self-made, Mathematica, Inkscape), 퍼블릭 도메인, https://commons.wikimedia.org/w/index.php?curid=3817954
- 대부분의 데이터가 분포의 한쪽 끝에 몰려있고 반대쪽으로 긴 꼬리가 이어지는 형태
- 아무리 데이터가 많아져도 정규분포가 되지 않는다.
ex) 소수의 베스트셀러 도서가 전체 판매량의 대부분을 차지하고, 많은 수의 비인기 도서가 적은 판매를 기록하는 긴 꼬리 분포
- 표본의 크기가 작을 때(30개 미만) 정규분포 대신 사용
- 정규 분포보다 퍼져있고 꼬리가 두껍다 = 극단값을 가질 확률이 높다
- 자유도가 커질수록(=표본이 커질수록) 정규분포에 가까워짐
- 데이터의 수가 적을때 t분포 공식을 사용해서 모집단의 평균을 구함.
예시# 스튜던트 t 분포 생성 # 자유도가 10인 t분포를 만들고 거기에서 1000개의 데이터를 뽑는것임. 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()
- 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포
- 범주형 데이터 분석에 사용
k=자유도독립성 검정
- 두 범주형 변수 간의 관계가 있는지 확인할 때 사용(성별과 직업 선택 간의 독립성)
적합도 검정
- 관측한 값들이 특정 분포에 해당하는지 검정할 때 사용(노란색 완두와 녹색완두가 3:1의 비율로 나와야 하는데 실험적으로 측정한 데이터가 그렇게 나오는지)
- 결과가 2개가 나오는 상황일 때 사용하는 분포
- 특정한 정수값만 가질 수 있음.
- 데이터수가 많아질수록 정규분포로 근사함.
p= 확률
- 희귀한 사건이 발생할 때 사용하는 분포
- 평균 발생률 λ가 충분히 크다면 정규분포에 근사
ex) 한 시간동안 콜센터에 전화오는 건수가 10건이면 λ는 10- 푸아송분포는 단위 시간, 단위 면적당 희귀하게 발생하는 사건의 수를 모델링하는데 적합함.
λ가 작으면 희귀한 사건인 만큼 초반에 발생하면 나중에 발생할 확률은 거의 0이 됨.
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()
두 버전(A,B) 중 어떤 것이 더 효과적인지 평가하기 위해 사용하는 방법
ex)
# 기존 약물(A)와 새로운 약물(B) 효과 데이터 생성 A = np.random.normal(50, 10, 100) # 약물의 효과를 수치화 B = np.random.normal(55, 10, 100) # 평균 효과 계산 mean_A = np.mean(A) mean_B = np.mean(B) # t-검정 수행 t_stat, p_value = stats.ttest_ind(A, B) print(f"A 평균 효과: {mean_A}") print(f"B 평균 효과: {mean_B}") print(f"t-검정 통계량: {t_stat}") print(f"p-값: {p_value}") # t-검정의 p-값 확인 (위 예시에서 계산된 p-값 사용) print(f"p-값: {p_value}") if p_value < 0.05: print("귀무가설을 기각합니다. 통계적으로 유의미한 차이가 있습니다.") else: print("귀무가설을 기각하지 않습니다. 통계적으로 유의미한 차이가 없습니다.")
가설 검정의 대표적인 검정
두 집단간의 평균 차이가 통계적으로 유의미한지 확인하는 방법
- 가설 검정에서 했던 것 처럼 p-value 값이 0.05 미만이면 귀무가설 기각 = 변화가 있다 = 의미가 있다
- 독립표본 t검정: 두 클래스의 시험 성적 비교
- 대응표본 t검정: 다이어트 전후 체중 비교(실험 대상 사람은 동일함)
t_stat, p_value = stats.ttest_ind(A, B)사용함.
여러 가설을 동시에 검정
범주형 데이터의 분석에 사용한다는 것!
- 적합도 검정: 범주형 데이터의 표본 분포가 모집단 분포와 일치하는지 검정
- 독립성 검정: 두 범주형 변수 간의 독립성을 검정
scipy.stats.chisquare함수는 카이제곱 적합도 검정을 수행하여 관찰된 빈도 분포가 기대된 빈도 분포와 일치하는지 평가. 이 검정은 단일 표본에 대해 관찰된 빈도가 특정 이론적 분포에 일치하는지 확인함.
ex)
scipy.stats.chi2_contingency함수는 카이제곱 검정을 수행하여 두 개 이상의 범주형 변수 간의 독립성을 검정함. 관측 빈도를 담고 있는 교차표(contingency table)를 입력으로 받아 카이제곱 통계량, p-값, 자유도, 그리고 기대 빈도(expected frequencies)를 반환.
귀무가설이 참인데 기각하는 경우
귀무가설이 거짓인데 기각하지 않는 경우
ex)