문제 4. 카이제곱검정
- 출제의도
- 귀무가설과 대립가설을 설정할 수 있다.
- 카이제곱 검정을 이해하고 올바르게 해석할 수 있다.
- 카이제곱 검정 함수에 적절한 전달인자를 넣을 수 있다.
- 문제
- 다음 click_rate 데이터는 헤드라인별 클릭과 클릭하지 않은 수 에 대한 데이터입니다.
- 귀무가설과 대립가설을 설정하세요.
- 카이제곱 검정 수행하여 실제로 클릭률에 대한 차이가 있는지 유의수준 0.05 에서 검정해보세요.
- Skeleton code
import pandas as pd
from scipy import stats
# URL 로 데이터 가져오기
url = "https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/click_rates.csv"
click_rate = pd.read_csv(url)
clicks = click_rate.pivot(index='Click', columns='Headline', values='Rate')
display(clicks)
'''
여기에 코드를 작성하세요.
'''
# 결론
alpha = 0.05 # 유의수준
if pvalue < alpha:
print("귀무가설 기각: 헤드라인과 페이지 클릭율에는 관련이 있다..")
else:
print("귀무가설 채택: 헤드라인과 페이지 클릭율에는 관련이 없다.")
출력 결과 예시
'''
H0: 귀무가설은 ~~ 이다
H1: 대립가설은 ~~ 이다.
chisq:1.666
pvalue:0.435
귀무가설 채택: 헤드라인과 페이지 클릭율에는 관련이 없다.
'''
💡 문제 풀이
`내 풀이`
#문제4
# 카이제곱검정
import pandas as pd
from scipy import stats
# URL 로 데이터 가져오기
url = "https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/click_rates.csv"
click_rate = pd.read_csv(url)
clicks = click_rate.pivot(index='Click', columns='Headline', values='Rate')
display(clicks)
# 독립성 검정
chisq, pvalue, dof, expeted = stats.chi2_contingency(clicks)
H0 =f"헤드라인과 페이지 클릭율에는 관련이 없다."
H1 =f"헤드라인과 페이지 클릭율에는 관련이 있다."
print(f"H0(귀무가설):{H0} \nH1(대립가설):{H1} \nchisq:{chisq:.3f} \npvalue:{pvalue:.3f}")
# 결론
alpha = 0.05 # 유의수준
if pvalue < alpha:
print("귀무가설 기각: 헤드라인과 페이지 클릭율에는 관련이 있다.")
else:
print("귀무가설 채택: 헤드라인과 페이지 클릭율에는 관련이 없다.")
`출력 결과`
`오답노트`
- 참고) 독립성 검정 `scipy.stats.chi2_contingency` : 반환하는 변수 4개
- chisq, pvalue, dof, expeted = stats.chi2_contingency(clicks)
chi2_contingency — SciPy v1.15.1 Manual
A two-way example (2 x 3): >>> import numpy as np >>> from scipy.stats import chi2_contingency >>> obs = np.array([[10, 10, 20], [20, 20, 20]]) >>> res = chi2_contingency(obs) >>> res.statistic 2.7777777777777777 >>> res.pvalue 0.24935220877729619 >>> res.
docs.scipy.org
- 참고) 피벗테이블 `pandas.DataFrame.pivot(index= , columns= , values= )`
- click_rate.pivot(index='Click', columns='Headline', values='Rate')
pandas.DataFrame.pivot — pandas 2.2.3 documentation
Column(s) to use for populating new frame’s values. If not specified, all remaining columns will be used and the result will have hierarchically indexed columns.
pandas.pydata.org