가설과 가설 검정

  • 모집단(Population)과 표본(Sample)
    • 모집단 - 우리가 알고싶은 데이터
    • 표본 - 그 대상의 일부 데이터
  • 우리는 일부분(표본)으로 전체를 추정하고 싶음
  • 모집단에 대한 가설을 수립
    • 가설은 보통 X와 Y의 관계를 표현 예1: X에 따라 Y가 차이가 있다. 예2: X와 Y는 관계가 있다.
  • 표본을 가지고 가설이 진짜 그러한 지 검증
  • 비즈니스 이해단계에서
    • 비즈니스 문제로부터 우리의 관심사(y = target)를 도출하고,
    • y에 영향을 주는 요인(x)들을 뽑아서 초기 가설을 수립함

귀무가설 - 당신 주장 = 내 주장을 반대하는 입장

매장지역(𝑥2)과 수요량(y)은 아무런 관련이 없다

대립가설 - 내 주장

매장지역(𝑥2)과 수요량(y)은 관련이 있다

양 끝단을 보면 2.5%가 있는데 그 영역 보다 작은 영역이면 귀무가설을 기가할 충분한 근거가 있음을 의미

  • 가설검정(hypothesis testing)유의확률(p-value) 개념을 설명하는 자료

상황

“A매장과 B매장의 수요량에 차이가 있는가?”

즉, 두 집단의 평균이 같은지(차이가 없는지) 검정하는 상황

  • 귀무가설(H₀) : 두 매장의 수요량에 차이가 없다.
  • 대립가설(H₁) : 두 매장의 수요량에 차이가 있다.

그래프 의미

이미지의 곡선은 확률밀도함수(정규분포) 로,

‘차이가 얼마나 큰가(0을 기준으로)’를 나타낸다

  • 0 근처 → 차이가 거의 없음 (귀무가설이 맞을 가능성 높음)
  • 0에서 멀수록 → 차이가 큼 (대립가설을 지지할 가능성 높음)

노란색 영역 (유의수준 α = 0.05)

그래프의 양쪽 끝 = 노란색 부분 약 5%(0.05)

이 영역은 “귀무가설이 맞다고 생각했는데, 실제로는 틀린 경우의 확률” 즉 유의수준(α) 을 나타냄

  • 만약 실제 데이터가 이 영역에 들어간다면→ 귀무가설을 기각하고 대립가설을 채택
  • → “지금 관측된 데이터는 너무 극단적이어서 귀무가설이 맞다고 보기 어렵다”

즉, “A와 B 매장의 수요량이 다르다”고 결론 내리는 거예요.

 

 

시각화 - Bar Plot, Box Plot

  • Bar Plot을 사용해 두 집단의 평균 비교

바플롯이 만들어낸 평균 그래프에서 그 평균의 차이는 표본의 평균의 차이

우리는 모집단을 볼 수 없기 때문에.

그럼 이 표본의 평균의 차이가 모집단에도 의미가 있을까?

그래서 이 평균 비교표만 봤을 땐 차이가 있어 보이지만 확실하지 않기에

수치화가 필요함(T 통계량)

  • Bar Plot
sns.barplot(x='Outcome', y='BMI', data=diabetes, palette='deep') 
# palette: deep, bright, pastel, dark, muted, colorblind
plt.show()
  • 박스플롯(분포를 확인)
sns.boxplot(x='Outcome', y='BMI', data=diabetes, palette='deep')
plt.show()

수치화

  1. t-검정 (두 범주)
  2. ANOVA (세 범주 이상)

t - 검정 : 두 집단 비교

  • 두 그룹의 평균이 진짜로 다른지 확인하는 방법 예) 남학생 평균 키 : 170cm 여학생 평균 키 : 160cm “이 10cm 차이가 진짜로 다른 건지, 아니면 우연히 나온 건지”를 확인해주는 게 t-검정
  • 평균 차이를 표준오차(Standard Error)와 비교하여 "진짜 차이"인지 검정
  • scipy.stats 라이브러리의 ttest_ind() 함수로 t-검정을 수행

표준 오차와 표준 편차

  • 표준편차: 개별 데이터들이 평균에서 얼마나 흩어졌는지를 나타냄
  • 표준오차(SE): 표본 평균들이 모평균에서 얼마나 흩어졌는지를 나타냄

구분 뜻 비유

표준편차 학생 한 명 한 명의 점수가 평균에서 얼마나 다른가 같은 반 학생들끼리 점수 차이
표준오차(SE) 여러 반의 평균이 진짜 평균에서 얼마나 다른가 각 반 평균 점수들의 차이

즉, 표준편차는 개인 차이, 표준오차는 평균의 흔들림

t-statistics, t-통계량, t-value

  • 두 집단의 평균 차이를 표준오차(SE)로 나눈 값

  • t 값이 크면 평균 차이가 크고 우연일 가능성이 작다
  • 일반적으로 t-통계량 값이 -2보다 작거나 2보다 크면 차이가 있다고 봄 평균차이가 표준오차보다 충분히 크면 ‘진짜 차이’

즉 ! 두 변수(범주값)에 평균의 차이가 있냐 없냐를 보는 것

  • 범주 값이 3개 이상이면 t-통계량을 쓰기엔 너무 부담스러움 → 분산분석
s1 = rd.sample(pop1, 200)
s2 = rd.sample(pop2, 200)
t_test = spst.ttest_ind(s1, s2)
t-통계량 호출 방법은 쉬움 ttset_ind(표본1, 표본2)

print('* t-statistic:', t_test[0])
print('* p-value:', t_test[1])

분산분석(ANOVA) - 여러 집단을 한꺼번에 비교하기 위해 필요한 방법

  • 세 집단 이상의 평균 분석(두 집단은 t 통계량으로)
  • 평균 비교를 하려면 보통 t검정(두 집단 비교)을 쓰지만 예를 들어 3개라고 치면 3번이나 따로 검정해야함 → 비교가 많아질수록 실수할 확률(오류)가 커진다

f-statistics, f-통계량, f-value

  • 두 개 이상의 집단 간 분산의 비율을 검정하는 데 사용되는 통계량
  • 각 집단 내에서의 분산과 각 집단 간의 분산의 비율을 계산
  • f-통계량 값이 크다는 것은 각 집단 간 차이가 통계적으로 유의미하다는 것
  • f-통계량 값이 2~3 이상이면 차이가 있다

집단 간 분산 : 집단끼리의 차이(분산) 집단 내 부산 : 각 집단 안의 흩어짐(분산)

  • 집단 간 차이가 크면 → 평균이 다르다 (대립가설 채택)
  • 집단 내 차이가 크면 → 비슷하다 (귀무가설 유지)

그림 A는 집단간 분산은 크지만 집단 내 분산은 작음 = f 통계량 값이 크다(2보다 큼)

그림 B는 집단간 분산과 집단 내 분산이 모두 큼 = f 통계량 값이 거의 1이 나옴

그림 C는 집단 간 분산은 차이가 크지 않지만 집단 내 분산은 큼 = f 통계량이 1보다도 작아짐 (분모가 커지니까)

temp = diabetes.loc[(diabetes['BPStatus'].notnull()) & (diabetes['Age'].notnull())]
low = temp.loc[temp['BPStatus']=='Low', 'Age']
normal = temp.loc[temp['BPStatus']=='Normal', 'Age']
high = temp.loc[temp['BPStatus']=='High', 'Age']

anova = spst.f_oneway(low, normal, high)
print('* f-statistic:', anova[0])
print('* p-value:', anova[1])

 

+ Recent posts