카테고리 없음

최종 프로젝트 가설 검정 과정 기록 📝

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('가설을 기각합니다.')