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

[책]Reshuffle: Who wins when AI restacks the knowledge economy

[책]Reshuffle: Who wins when AI restacks the knowledge economy

원래는 Amazon에 가서 Personal Knowledge Managment에 관한 책을 사려고 했다. Sketch Your Mind라는 책이었는데, 그 때 이 책 “Reshuffle”을 발견하였다. AI가 어떻게 Knowledge Economy를 흔들 것가? 라는 부제를 훑어보면서 저자가 쓴 다른 책을 보게 되었는데 거기에 내가 좋아했던 책을쓴 저자라는 것을 알게 되었다. 그래서 크게 고민하지 않고 구매를 하고

By Bongho, Lee
[책]올라운드투자, 누군가의 투자일기

[책]올라운드투자, 누군가의 투자일기

“올라운드 투자”라는 제목을 보았을 때는, “올라운드 플레이어”가 생각이 났다. “올라운드”라는 표현을 오랜만에 들어본 까닭이었다. 그럼에도 불구하고 이 책을 고른 것은 저자가 그간 보여준 컨텐츠에 대한 신뢰가 있던 까닭이었다. 컨텐츠를 다양하게 보는 편이지만 깊이가 아주 있지는 않았다. 여기서 깊이라 함은 기존 전문적인 정량적 분석의 내용의 수준을 말하는 것이다.

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

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

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

By Bongho, Lee