https://youtu.be/6UerMbGvwZk
https://blog.naver.com/data_station/222493268636
CDA(확증적 데이터 분석)
통계적 가설검정
귀무가설 : 대립가설의 반대 (보통가설 / 일반적 상태(의심x))
대립가설 : 내가 의심하는 상태 / 내가 규명하고자 하는 가설
p.value : 귀무가설이 참일 확률 (0~1) -> 이 값이 낮을수록 귀무가설을 기각
유의수준 : 가설검정 판단의 기준 (보통 0.05)
p.value > 0.05 : 귀무가설이 참 (귀무가설 기각 실패)
p.value < 0.05 : 대립가설이 참 (귀무가설 기각)
ex) 고객 성별에 따라 매출액에 차이가 있는가?
- 귀무가설 : 고객 설병에 따라 매출액에 차이가 없을 것이다.
- 대립가설 : 고객 성별에 따라 매출액에 차이가 있을 것이다.
Two sample t-test -> p.value 0.03 -> 귀무가설 기각 -> 성별에 따라 매출액에 차이가 있다.
단일변수
연속형 변수 : 정규성 검정 / One sample T-TEST (일표본 평균 검정)
-> 하나의 값과 이 집단의 평균의 값이 같은지 / 매출액이 정규분포를 따르는지
범주형 변수 : 비율 검정
다변수
X 범주형 / Y 연속형 (성별에 따른 매출액) :
-> Two sample t-test / 등분산 검정 (Y가 정규분포) , 비모수적 검정 (Y가 비정규분포)
X 범주형 / Y 범주형 (성별에 따른 합격 여부) :
-> chi^2 검정
X 연속형 / 연속형 :
-> 상관분석 / 회귀분석
X 연속형 / Y 범주형 :
-> 로지스틱
파이썬 실습(scipy)
sns.histplot(x = '상품구매금액', data = df, kde = True, bins = 50)
stats.normaltest(df['상품구매금액']) # 시리즈 형태로
-> 정규분포 x
일표본 평균검정(ttest_1samp)
전체를 대상으로 평균값을 구하고 하나의 집단을 추출해서 그 집단의 평균값과 비교한다.
귀무가설: 특정 값은 집단의 평균과 같다.
대립가설: 특정 값은 집단의 평균과 다르다
# 전체 데이터의 평균값
df['amount'].mean()
-> 93994
#계약 유형이 멤버십인 그룹만 선택
cond1 = df.loc[df['type_of_contract'] == '멤버십']
# 1samp = 일표본 평균검정
# 멤버십 그룹과 비교
stats.ttest_1samp(cond1['amount'], 93994)
-> p.value 0.0
귀무가설 기각 대립가설 채택 -> 멤버십 집단의 평균값과 다르다.
이표본 평균검정(Levene, ttest_ind)
서로 다른 두 집단의 평균의 차이가 있는지 ( 집단이 서로 등분산성을 보이지 않을 때 )
Levene Test : 두 집단 분산의 차이가 있는지 검정
차이가 있다면 이표본 평균검정 진행
- 귀무가설: 두 집단의 분산이 같다.
- 대립가설: 두 집단의 분산이 다르다. -> 채택 -> 이표본 평균검정
# 계약유형이 렌탈인 그룹과 멤버십인 그룹 구분
df1_rental = df.loc[df['type_of_contract'] == '렌탈']
df1_member = df.loc[df['type_of_contract'] == '멤버십']
# 1. 분산의 차이가 있는지 확인 (levene)
print(stats.levene(df1_rental['amount'], df1_member['amount']))
print(df1_rental['amount'].var()) -> 144928790
print(df1_member['amount'].var()) -> 40851747
# 귀무 가설 : 렌탈 그룹과 멤버십 그룹 간 분산(amount)의 차이가 없다.
# 대립 가설 : 렌탈 그룹과 멤버십 그룹 간 분산(amount)의 차이가 있다. -> 채택 -> 이표본 평균 검정
# pvalue=1.0782290403372968e-72 < 0.05
# 2. 이표본 평균검정
print(stats.ttest_ind(df1_rental['amount'], df1_member['amount']))
print(df1_rental['amount'].mean()) -> 97200
print(df1_member['amount'].mean()) -> 63075
# 귀무 가설: 렌탈 그룹과 멤버십 그룹의 amonut 값의 평균의 차이가 없다.
# 대립 가설: 렌탈 그룹과 멤버십 그룹의 amount 값의 평균의 차이가 있다.
# pvalue=0.0 < 0.05 대립가설 채택
카이제곱 검정(chi2_contigency)
두 범주형 집단의 독립성 검정
- 귀무가설 : A 항목과 B 항목은 서로 독립적이다. (연관성 X)
- 대립가설 : A 항목과 B 항목은 서로 의존적이다. (연관성 O)
# contigency table (빈도수)
df_cross = pd.crosstab(df['type_of_contract'], df['product'])
stats.chi2_contingency(df_cross) # 크로스 테이블을 넣어줘야함 # dof = 자유도
# pvalue=9.218461328024675e-288 < 0.05 -> 대립가설 채택 -> 계약 유형에 따라 선택하는 제품군의 차이가 있다.
'데이터 분석 > python' 카테고리의 다른 글
[python] 캐글 설문조사 Q1~Q6 (1) | 2023.12.26 |
---|---|
[5주차] 코호트 분석 / 프로덕트 개선은 정말 도움이 되었을까? (0) | 2023.12.19 |
[3주차 숙제] 가장 많은 수강생들의 수강이 완료되는 시점을 알아내기 (0) | 2023.12.12 |
상관계수 구하기, 그래프 그리기 (0) | 2023.12.11 |