1. T-Test

# 라이브러리 호출 
import pandas as pd
import numpy as np 
# scipy: 과학 계산용 파이썬 라이브러리 
import scipy.stats as stats
from PIL import Image # 주피터 노트북에 이미지 삽입

df = pd.read_csv("statistics.csv")
df

가설 설정하기

  • 귀무가설(H₀)
    • 남성과 여성의 평균 구매금액에 차이가 없을 것이다
  • 대립가설(H₁)
    • 남성과 여성의 평균 구매금액에 차이가 있을 것이다
# 가설 설정 후 실제 데이터 비교
df.groupby(['Gender'])['Purchase Amount (USD)'].mean().reset_index()

★ 데이터 분석가는 가설 세운 결과가 통계적으로 유의미하다고 숫자로 나왔더라도 "실제 데이터프레임 내용"을 꼭 확인해야 함!
→ 통계적으로 유의미하다고 나왔어도 100% 정답이라 말하지 않고 반반이어야 함
: "통계적으로 의미는 있지만… (데이터 직접 뜯어보기)"

★ 데이터가 어떻게 생겼는지 눈으로 확인하는 건 필수!
→ 실제 데이터프레임이 어떻게 생겼는지 groupby해서 평균 확인

# 데이터 분리 
# mask method 
mask=(df['Gender']=='Male')
mask1 = (df['Gender']=='Female')

m_df = df[mask]
f_df = df[mask1]

m_df

# 결제금액 컬럼만 가져오기 
m_df=m_df[['Purchase Amount (USD)']]
f_df=f_df[['Purchase Amount (USD)']]

f_df

[[]]: 데이터프레임 형식으로 가져옴
cf. []: Series(array) 형식으로 가져옴
🡆 위와 같은 형태에서 []이 데이터프레임을 슬라이싱 하는 역할이라고 볼 수도 있어요

가설검정

  • scipy 라이브러리를 이용해 t-score, pvalue 확인 가능
    • t-test
      • 표본의 평균(차이 분석)을 알고자 할 때 사용
      • 모집단의 분산을 알 수 없는 경우 주로 사용
    • t-score
      -그룹 간 얼마나 차이가 있는지에 대한 지표
      • t-score가 크면 그룹 간 차이가 큼을 의미
    • p-value
      • 우연에 의해 나타날 확률에 대한 지표
      • p-value가 0.05 보다 크다
        = 우연히 일어났을 가능성이 높다
        = 연관성이 없다고 추정
t, pvalue=stats.ttest_ind(f_df, m_df)
t, pvalue
[실행 결과]
(array([0.87691521]), array([0.38058674]))
  • 여기서 p-value 값은 0.05 보다 크므로, 연관성이 없다고 추정할 수 있음
    → 대립가설 기각, 귀무가설 채택
    • 귀무가설
      • 남성과 여성의 평균 구매금액에 차이가 없을 것

QnA

Q. 평균 구매금액에 차이가 없다는 게 두 집단의 구매 금액이 비슷하다는 건가요?
A. 비슷하다보다는 "연관이 없다"로 생각해 주세요.(연관이 없다, 차이가 없다)

Q. '한쪽 성별이 더 크다고도, 작다고도 할 수 없다' 이렇게 봐도 될까요?
A. 연관이 없으니까 그렇게 판단해도 되긴 하지만 '성별과 결제 금액은 관계가 없다'가 정확한 표현입니다!



2. 카이제곱검정

가설 설정하기

  • 귀무가설(H₀)
    • 성별과 구매Size 에는 관련성이 없을 것이다 (독립적일 것이다)
  • 대립가설(H₁)
    • 성별과 구매Size 에는 관련성이 있을 것이다
# 가설 설정 후 실제 데이터 비교
df.groupby(['Gender','Size'])['Customer ID'].count().reset_index()

빈도표 그리기

  • pandas 라이브러리의 crosstab 함수를 통해, 두 범주형 자료의 빈도표 만들기
result = pd.crosstab(df['Gender'], df['Size'])
result

가설검정 (1)

  • 카이제곱 검정을 stat 함수를 통해 구현
    • chi2_contingency를 통해 카이제곱통계량, p-value를 출력할 수 있음
stats.chi2_contingency(observed=result)

→ 실행 결과:
Chi2ContingencyResult(statistic=6.615107840598039, pvalue=0.08523181331915772, dof=3, expected_freq=array([[ 336.96, 561.6 , 212.16, 137.28], [ 716.04, 1193.4 , 450.84, 291.72]]))

# 각 값들을 별도로 보기
# 카이제곱 검정 통계량, pvalue, 자유도를 확인할 수 있음 
stats.chi2_contingency(observed=result)[0]
  • p-value 는 우연에 의해 나타날 확률에 대한 지표
    • p-value가 0.05 보다 크다 = 우연히 일어났을 가능성이 높다 = 인과관계가 없다고 추정
  • 여기서 p-value 값은 0.05 보다 크므로, 연관성이 없다고 추정할 수 있음
    → 대립가설 기각, 귀무가설 채택
    • 귀무가설
      • 성별과 구매Size 에는 관련성이 없을 것이다 (독립적일 것이다)
stats.chi2_contingency(observed=result)[1]

# 실행 결과:
# 0.08523181331915772

가설검정 (2)

  • 자유도와 유의수준을 통해 귀무가설 기각 여부를 판단하기도 함
    • 자유도란, 굉장히 복잡한 개념
    • (변수1 그룹의 수-1)*(변수2 그룹의 수-1)
  • (성별 2개 - 1 ) * (옷 사이즈 4개 -1 )
    • 1*3 = 3 이 도출됨
stats.chi2_contingency(observed=result)[2]

# 출력 결과:
# 3

카이제곱분포표

  • x 축은 유의수준, y 축은 자유도 입니다.
    • 자유도 3, 유의수준을 0.05 로 본다면, 7.81 검정통계량이 나오게 됩니다.
    • 우리가 구한 카이제곱 검정통계량은 6.615 이므로 7.81 보다 작습니다.
  • 표에 명시된 기준보다 값이 작을 경우 대립가설을 기각합니다.
    • 대립가설 기각, 귀무가설 채택
      : 성별과 구매Size 에는 관련성이 없을 것

→ 이렇게까지는 잘 하지 않습니다… p-value 로 판단합니다.

QnA

Q. 카이제곱 분포에서 연관이 없다라는 게 두 그룹 간 분산의 차이에는 유의미한 발견이 되지 않는다? 요런건가요?
A. 네

구분상세
분석 기법기초 통계분석 ← DONE
상관분석← 4회차
회귀분석← 4회차
분류분석← 6회차
군집분석← 6회차
RFM 분석← 6회차
분석 방법론A/B TEST ← DONE
통계이론기초통계이론(평균, 분산, 표준편차) ← DONE
정규분포와 중심극한정리 ← DONE
신뢰구간과 유의수준 ← DONE
가설 설정 ← DONE
통계적 유의성 검정 ← DONE
통계적 가설 검정 ← DONE
profile
2 B R 0 2 B

0개의 댓글

Powered by GraphCDN, the GraphQL CDN