Chi-Square Test와 T-Test는 데이터 특성에 따라 선택하여 사용합니다.

Chi-Square Test와 T-Test는 데이터 특성에 따라 선택하여 사용합니다.
Photo by Kelly Sikkema / Unsplash

Chi-Square Test가 A/B/C Test에서 사용되는 구체적인 경우

  • 범주형 데이터 분석: 각 그룹에서 클릭하거나 전환된 사람의 수를 비교할 때, 이 데이터를 범주형 변수로 간주하고 Chi-Square Test를 적용할 수 있습니다.
  • 다중 그룹 비교: A/B/C 테스트에서 세 개 이상의 그룹을 비교해야 할 때, Chi-Square Test는 모든 그룹 간의 독립성을 검정하는 데 적합합니다.
  • 클릭률 또는 전환율: 각 그룹의 클릭률 또는 전환율이 기대되는 비율과 얼마나 차이가 나는지를 평가할 때 사용됩니다.

T-Test와 Chi-Square Test의 차이

  • T-Test: 주로 연속형 데이터에서 두 그룹 간의 평균을 비교하는 데 사용됩니다. 예를 들어, A/B 테스트에서 두 광고 캠페인의 평균 클릭률이 유의미하게 다른지를 평가할 때 T-Test를 사용합니다.
    • 연속형 데이터: 측정값이 연속적인 수치일 때 사용 (예: 평균 클릭 수, 평균 매출액).
    • 선형적 차이: 두 그룹 간의 평균 차이를 중심으로 분석.
  • Chi-Square Test: 범주형 데이터에서 각 그룹 간의 빈도 차이를 평가합니다. 예를 들어, A/B/C 테스트에서 각 그룹의 클릭 여부나 전환 여부와 같은 이진 데이터를 비교할 때 Chi-Square Test를 사용합니다.
    • 범주형 데이터: 클릭 여부, 구매 여부처럼 범주로 나눌 수 있는 데이터에서 사용.
    • 빈도 기반 차이: 그룹 간의 빈도 차이를 평가하는 데 중점을 둠.

Chi-Square Test의 장단점

장점

  • 범주형 데이터에 적합: 카이제곱 검정은 범주형 데이터에서 효과적으로 사용할 수 있습니다.
    • 정규성 가정: T-Test는 데이터가 정규분포를 따른다고 가정합니다. 그러나 실제 전환율 데이터는 종종 비정규적이거나 분산이 고르지 않을 수 있습니다. 특히 샘플 크기가 작거나 전환율이 극단적으로 낮거나 높은 경우, 이 가정이 충족되지 않을 수 있습니다.
      • 전환율 데이터가 정규성을 따르지 않는다면, T-Test 결과가 부정확해질 수 있습니다. 이 경우에는 T-Test 대신 비모수 검정(예: Mann-Whitney U Test)을 사용하는 것이 적합할 수 있습니다.
    • T-Test는 **이상치(outlier)**에 민감합니다. 전환율이 극단적인 값(예: 한 그룹의 전환율이 매우 높거나 매우 낮은 경우)이 있을 때, T-Test 결과가 왜곡될 수 있습니다
    • T-Test는 연속형 데이터에서 두 그룹 간의 평균 차이를 비교할 때 적합합니다.
  • 비모수 검정: 데이터가 정규분포를 따를 필요가 없으며, 비모수 방법으로서 데이터 분포에 제약이 없습니다.
  • 다중 그룹 비교: 두 개 이상의 그룹을 비교하는 경우에도 적용이 가능합니다.

단점

  • 연속형 데이터에 부적합: 연속형 데이터를 분석할 때는 적절하지 않으며, 데이터를 범주형으로 변환해야 사용할 수 있습니다.
  • 샘플 크기에 민감: 작은 샘플에서는 카이제곱 검정이 부정확할 수 있으며, 기대값이 5 미만인 셀들이 많으면 정확도가 떨어집니다.
    • 리스크: 소규모 실험에서는 오차가 발생하거나 결과가 신뢰할 수 없을 수 있습니다. 특히 그룹의 전환율이 매우 낮을 때(예: 1~2% 전환) 결과 해석에 어려움이 생길 수 있습니다.
  • 관찰 빈도 기반: 기대 빈도와의 비교에 기반하여 결과를 도출하므로, 빈도 기반의 데이터가 필요합니다.
    • 빈도 기반 분석: Chi-Square Test는 각 범주의 빈도만 고려하므로, 연속적인 전환율 변화를 반영하지 못합니다. 예를 들어, 전환율이 20%에서 22%로 약간 변해도 그 변화를 정확하게 잡아내지 못할 수 있습니다.

A/B/C 테스트 진행시 고려사

T-Test를 사용하는 경우

  • 연속형 데이터로 전환율을 다룰 때 적합합니다. 각 그룹의 전환율 평균을 비교하는 방식입니다.
  • 그룹 간 전환율이 연속적 변화를 나타낼 때 유리합니다.
  • 두 그룹 간의 비교에 적합하지만, A/B/C처럼 세 그룹 이상일 때는 보통 ANOVA(분산분석)와 같은 방법을 사용하는 것이 일반적입니다.

적합한 상황:

  • 각 그룹의 전환율이 상대적으로 높거나, 정규분포를 따를 것으로 예상되는 경우.
  • 평균 전환율의 차이가 중심인 분석을 수행할 때.

Chi-Square Test를 사용하는 경우

  • 범주형 데이터를 다룰 때 적합하며, **전환 여부(성공/실패)**를 비교하는 데 유리합니다.
  • A/B/C 테스트에서 전환된 사람 수와 전환되지 않은 사람 수를 빈도로 분석할 때 사용합니다.
  • 세 그룹 이상의 데이터 비교가 가능하며, 각 그룹의 빈도 차이를 평가합니다.

적합한 상황:

  • 전환율이 매우 낮거나 (예: 5% 미만), 데이터가 이진형으로 나뉘어 있을 때.
  • 각 그룹에서 전환된 사람의 수가 주된 관심일 때.

두 방법을 조합하는 경우

  1. T-Test로 전환율의 평균 차이를 비교하면서, 그룹 간 전환율이 유의미하게 다른지 평가할 수 있습니다.
  2. Chi-Square Test로 빈도 기반 차이를 분석함으로써, 전환된 사람과 전환되지 않은 사람의 빈도 차이가 통계적으로 유의미한지 확인할 수 있습니다
  • 아래 코드를 보면 A/B/C 테스트에서 그룹 B의 전환율이 A, C 그룹과 유의미하게 다르다는 것을 알 수 있습니다.
import numpy as np
from scipy.stats import ttest_ind, chi2_contingency

# A/B/C 테스트 데이터를 생성
# 각 그룹의 전환 여부 데이터 (1은 전환, 0은 미전환)
group_a = np.random.binomial(1, 0.20, 100)  # 그룹 A: 전환율 20%
group_b = np.random.binomial(1, 0.25, 100)  # 그룹 B: 전환율 25%
group_c = np.random.binomial(1, 0.22, 100)  # 그룹 C: 전환율 22%

# 1. T-Test를 그룹 간 비교에 사용
t_stat_ab, p_value_ab = ttest_ind(group_a, group_b)
t_stat_ac, p_value_ac = ttest_ind(group_a, group_c)
t_stat_bc, p_value_bc = ttest_ind(group_b, group_c)

print(f"T-Test A vs B: t_stat={t_stat_ab:.4f}, p-value={p_value_ab:.4f}")
print(f"T-Test A vs C: t_stat={t_stat_ac:.4f}, p-value={p_value_ac:.4f}")
print(f"T-Test B vs C: t_stat={t_stat_bc:.4f}, p-value={p_value_bc:.4f}")

# 2. Chi-Square Test를 빈도 비교에 사용
table = np.array([[np.sum(group_a), len(group_a) - np.sum(group_a)],  # 그룹 A
                  [np.sum(group_b), len(group_b) - np.sum(group_b)],  # 그룹 B
                  [np.sum(group_c), len(group_c) - np.sum(group_c)]]) # 그룹 C

chi2_stat, p_value_chi2, dof, expected = chi2_contingency(table)
print(f"Chi-Square Test: chi2_stat={chi2_stat:.4f}, p-value={p_value_chi2:.4f}")

T-Test A vs B: t_stat=-2.4579, p-value=0.0148
T-Test A vs C: t_stat=0.3747, p-value=0.7083
T-Test B vs C: t_stat=2.8369, p-value=0.0050
Chi-Square Test: chi2_stat=9.9545, p-value=0.0069

예시코드

import numpy as np  
import pandas as pd  
from scipy.stats import chi2_contingency  
  
# A/B/C 테스트 데이터 (클릭/미클릭 여부)  
data = np.array([[40, 10],   # 그룹 A (클릭/미클릭)  
                 [35, 15],   # 그룹 B (클릭/미클릭)  
                 [50, 5]])   # 그룹 C (클릭/미클릭)  
  
# 카이제곱 검정 수행  
chi2, p_value, dof, expected = chi2_contingency(data)  
  
# 결과 출력  
print(f"Chi-Square Statistic: {chi2:.4f}")  
print(f"P-value: {p_value:.4f}")  
print(f"Degrees of Freedom: {dof}")  
print("Expected Frequencies:")  
print(expected)  
  
if p_value < 0.05:  
    print("유의미한 차이가 있습니다.")  
else:  
    print("유의미한 차이가 없습니다.")

Chi-Square Statistic: 7.3555
P-value: 0.0253
Degrees of Freedom: 2
Expected Frequencies:
[[40.32258065  9.67741935]
 [40.32258065  9.67741935]
 [44.35483871 10.64516129]]
유의미한 차이가 있습니다.

Read more

내가 놓치고 있던 미래, 먼저 온 미래를 읽고

내가 놓치고 있던 미래, 먼저 온 미래를 읽고

장강명 작가의 책은, 유학시절 읽고 처음이었다. 유학시절 "한국이 싫어서"라는 책은 동기부여가 상당히 되는 책이었다. 한국을 떠나 새로운 정채성을 학생으로서 Build up 해나가고 있던 상황에서 이 책은 제목부터 꽤 솔깃하였다. 물론 결말이 기억날 정도로 인상깊은 책은 아니었지만 말이다. 그렇게 시간이 흘러 장강명 작가의 책은 더 이상 읽지 않던

By Bongho, Lee
고객 경험이란 무엇일까?

고객 경험이란 무엇일까?

고객경험이란 무엇일까? 1. 과거 어느 대형 프로젝트에서 있던 일이다. 신사업을 위해서 예측 모델 값을 제공해야 하는 상황이었다. 데이터도 없고,어느정도의 정확도를 제공해야 하는지 답이 없었다. 점추정을 할 것인가? 구간 추정을 할 것인가를 가지고 논의중이었다. Product Manager 줄기차게 고객경험을 내세우며 점추정으로 해야 한다고 주장하였다. 근거는 오롯이 "고객 경험"이었다.

By Bongho, Lee
수요예측, 수정구슬이 아닌 목표를 향한 냉정한 나침반

수요예측, 수정구슬이 아닌 목표를 향한 냉정한 나침반

수요예측의 정의와 비즈니스에서의 중요성 기업의 성장과 운영 효율화를 위해 **수요예측(Demand Forecasting)**은 선택이 아닌 필수 요소로 자리 잡았다. 많은 경영진들이 수요예측을 미래 판매량을 정확히 맞히는 '예언'으로 기대하지만, 이는 수요예측의 본질을 오해하는 것이다. 수요예측의 진짜 의미: 미래를 점치는 수정구슬이 아니라, 우리가 도달해야 할 '목표'를

By Bongho, Lee