카테고리 없음
최종 프로젝트 가설 검정 과정 기록 📝
sawo11
2025. 3. 28. 16:59
목적
- 클러스터별 특징 확인을 통한 전략 방향성 도출
가설
- 예비 우수 판매자들은 관심 필요 판매자보다 상품의 평균 가격이 더 높을 것이다.
- 집단 A: 예비 우수 판매자 (클러스터 3)
- 집단 B: 관심 필요 판매자 (클러스터 0)
검정 방법 선택 과정
- 가설: 예비 우수 판매자들은 관심 필요 판매자보다 상품의 평균 가격이 더 높을 것이다.
- 종속변수: 상품의 평균 가격 (연속형)
- 독립변수: 예비 우수 판매자, 관심 필요 판매자 (범주형, 그룹 2개, 독립표본)
⇒ 정규성 검정을 통해 2 sample T-test 와 Mann-Whitney 중 선택해야함
정규성 검정
# 집단 나누기
group_a = merge_df[merge_df['군집'] == 3]['판매가']
group_b = merge_df[merge_df['군집'] == 0]['판매가']
# 정규성 검정
from scipy import stats
stat, p = stats.shapiro(group_a)
print(f'stat: {stat:.4f}')
print(f'stat: {p:.4f}')
if p > 0.05:
print('group_a는 정규성을 만족합니다.')
else:
print('group_a는 정규성을 만족하지 않습니다.')
stat, p = stats.shapiro(group_b)
print(f'stat: {stat:.4f}')
print(f'stat: {p:.4f}')
if p > 0.05:
print('group_b는 정규성을 만족합니다.')
else:
print('group_b는 정규성을 만족하지 않습니다.')
- group_a와 group_b 모두 정규성을 만족하지 않으므로 Mann-whitney 사용
- 하나라도 정규성을 만족지 않으면 비모수검정 사용
Mann-whitney 검정
from scipy.stats import mannwhitneyu
# 집단 나누기
group_a = merge_df[merge_df['군집'] == 3]['판매가']
group_b = merge_df[merge_df['군집'] == 0]['판매가']
# Mann-Whitney U 검정
stat, p_value = mannwhitneyu(group_a, group_b, alternative = 'greater')
# 결과 출력
print('\n독립표본 mannwhitneyu 검정 결과')
print(f't-통계량: {stat:.3f}')
print(f'p-value: {p_value:.4f}')
# 해석
if p_value < 0.05:
print('가설을 채택합니다. 예비 우수 판매자가 평균 가격이 더 높을 가능성이 높습니다.')
else:
print('가설을 기각합니다.')
!!!가설 채택!!!
잘못 생각했던 부분..
❓ t 검정이란? 두 집단 간의 평균 차이가 통계적으로 유의미한지 확인하는 검정 방법
1) 독립표본 t 검정: 두 독립된 그룹의 평균을 비교
2) 대응표본 t 검정: 동일한 그룹의 사전/사후 평균을 비교
t-검정 종류 | 함수 | 표본 구성 |
독립표본 t 검정 | ttest_ind() | df[df['성별']=='남']['점수'] vs 여 |
대응표본 t 검정 | ttest_rel() | df['before'], df['after'] |
➡️ 내가 사용할 것은? 독립표본 t 검정
- 1차 작성 코드 / 결과
- equal_var = False
from scipy.stats import ttest_ind
# 1. 집단 나누기
group_a = merge_df[merge_df['군집'] == 3]['판매가']
group_b = merge_df[merge_df['군집'] == 0]['판매가']
# 2. 평균 가격 출력
print(f'예비 우수 판매자 평균 가격: {group_a.mean():.2f}')
print(f'관심 필요 판매자 평균 가격: {group_b.mean():.2f}')
# 3. 독립표본 t-검정 수행
t_stat, p_value = ttest_ind(group_a, group_b, equal_var = False)
# 4. 결과 출력
print('\n독립표본 t-검정 결과:')
print(f't-통계량: {t_stat:.3f}')
print(f'p-value: {p_value:.4f}')
# 5. 해석
if p_value < 0.05:
print('가설을 채택합니다. 예비 우수 판매자가 평균 가격이 더 높을 가능성이 높습니다.')
else:
print('가설을 기각합니다.')
❗️문제점: equal_var = False or True? / alternative가 적용되지 않음
- 2차 작성 코드 / 결과
- equal_var = True
- alternative = 'greater'
from scipy.stats import ttest_ind
# 1. 집단 나누기
group_a = merge_df[merge_df['군집'] == 3]['판매가']
group_b = merge_df[merge_df['군집'] == 0]['판매가']
# 2. 평균 가격 출력
print(f'예비 우수 판매자 평균 가격: {group_a.mean():.2f}')
print(f'관심 필요 판매자 평균 가격: {group_b.mean():.2f}')
# 3. 독립표본 t-검정 수행
t_stat, p_value = ttest_ind(group_a, group_b, equal_var = True, alternative = 'greater')
# 4. 결과 출력
print('\n독립표본 t-검정 결과:')
print(f't-통계량: {t_stat:.3f}')
print(f'p-value: {p_value:.4f}')
# 5. 해석
if p_value < 0.05:
print('가설을 채택합니다. 예비 우수 판매자가 평균 가격이 더 높을 가능성이 높습니다.')
else:
print('가설을 기각합니다.')
- 3차 작성 코드 / 결과
- equal_var = False
- alternative = 'greater'
from scipy.stats import ttest_ind
# 1. 집단 나누기
group_a = merge_df[merge_df['군집'] == 3]['판매가']
group_b = merge_df[merge_df['군집'] == 0]['판매가']
# 2. 평균 가격 출력
print(f'예비 우수 판매자 평균 가격: {group_a.mean():.2f}')
print(f'관심 필요 판매자 평균 가격: {group_b.mean():.2f}')
# 3. 독립표본 t-검정 수행
t_stat, p_value = ttest_ind(group_a, group_b, equal_var = False, alternative = 'greater')
# 4. 결과 출력
print('\n독립표본 t-검정 결과:')
print(f't-통계량: {t_stat:.3f}')
print(f'p-value: {p_value:.4f}')
# 5. 해석
if p_value < 0.05:
print('가설을 채택합니다. 예비 우수 판매자가 평균 가격이 더 높을 가능성이 높습니다.')
else:
print('가설을 기각합니다.')