[챌린지] 프로덕트 데이터사이언스 - 5회차

Arin lee·2025년 1월 21일

contents

  • 신뢰 구간 계산 실습
  • 신괴 구간의 한계
  • 통계적 검정이란?
  • 샘플 t-test란 무엇인가?
  • p-value란?
  • 실습
  • 실질적 유의미성

summary

📊 1. 신뢰 구간 계산 실습

A/B 테스트 결과 데이터를 활용해, 각 그룹의 신뢰 구간을 Python으로 계산하는 방법을 실습합니다.

1.1 데이터 준비

import pandas as pd
import numpy as np

# 데이터 로드
data = pd.read_csv("online_classroom.csv")
online = data.query("format_ol==1")["falsexam"]
face_to_face = data.query("format_ol==0 & format_blended==0")["falsexam"]

# 표준 오차 계산 함수
def se(y: pd.Series):
    return y.std() / np.sqrt(len(y))
  • 온라인 학습 그룹 (online)
  • 대면 학습 그룹 (face_to_face)

1.2 신뢰 구간 계산

# z statistic 설정 (95% 신뢰 수준)
z = 1.96

# 신뢰 구간 계산 함수
def confidence_interval(mean, se, z=1.96):
    margin = z * se
    return mean - margin, mean + margin

# 온라인 학습 그룹
online_mean = online.mean()
online_se = se(online)
online_ci = confidence_interval(online_mean, online_se)

# 대면 학습 그룹
face_to_face_mean = face_to_face.mean()
face_to_face_se = se(face_to_face)
face_to_face_ci = confidence_interval(face_to_face_mean, face_to_face_se)

print(f"온라인 학습 그룹 평균: {online_mean:.2f}, 신뢰 구간: {online_ci}")
print(f"대면 학습 그룹 평균: {face_to_face_mean:.2f}, 신뢰 구간: {face_to_face_ci}")
  • 온라인 학습 그룹 평균: 73.63, 신뢰 구간: (70.98, 76.28)
  • 대면 학습 그룹 평균: 78.54, 신뢰 구간: (76.80, 80.28)

두 그룹의 신뢰 구간이 겹치지 않으므로, 대면 학습이 온라인 학습보다 시험 점수에 유의미한 영향을 미쳤을 가능성이 큽니다.

1.3 신뢰 구간 시각화

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 데이터 준비
x_online = np.linspace(online_mean - 4*online_se, online_mean + 4*online_se, 1000)
y_online = norm.pdf(x_online, loc=online_mean, scale=online_se)

x_face_to_face = np.linspace(face_to_face_mean - 4*face_to_face_se, face_to_face_mean + 4*face_to_face_se, 1000)
y_face_to_face = norm.pdf(x_face_to_face, loc=face_to_face_mean, scale=face_to_face_se)

# 신뢰 구간
online_ci_x = [online_ci[0], online_ci[1]]
face_to_face_ci_x = [face_to_face_ci[0], face_to_face_ci[1]]

# 시각화
plt.figure(figsize=(12, 6))

# 온라인 학습 그룹
plt.fill_between(x_online, y_online, alpha=0.3, label="Online Learning CI", color="blue")
plt.plot(x_online, y_online, label="Online Learning Distribution", color="blue")

# 대면 학습 그룹
plt.fill_between(x_face_to_face, y_face_to_face, alpha=0.3, label="Face-to-Face CI", color="green")
plt.plot(x_face_to_face, y_face_to_face, label="Face-to-Face Distribution", color="green")

# 신뢰 구간 강조
plt.axvline(online_ci[0], color="blue", linestyle="--", alpha=0.7)
plt.axvline(online_ci[1], color="blue", linestyle="--", alpha=0.7)
plt.axvline(face_to_face_ci[0], color="green", linestyle="--", alpha=0.7)
plt.axvline(face_to_face_ci[1], color="green", linestyle="--", alpha=0.7)

# 라벨링 및 설명
plt.title("Distribution and Confidence Interval for Online vs Face-to-Face Learning")
plt.xlabel("Exam Scores")
plt.ylabel("Probability Density")
plt.legend()
plt.grid(alpha=0.3)

plt.show()

  • 신뢰 구간을 활용한 분석:
    • 대면 학습 그룹의 점수가 더 높으며, 신뢰 구간이 겹치지 않아 통계적으로 유의미한 차이가 존재할 확률이 매우 높습니다.
  • 비즈니스 또는 학습적 관점:
    • 대면 학습이 온라인 학습보다 더 효과적일 가능성이 있으므로, 학습 방식 개선이나 추가 실험 설계를 검토해야 합니다.

❓2. 신뢰 구간의 한계

2.1 신뢰 구간의 역할

  • 데이터의 불확실성을 시각적이고 직관적으로 표현함
  • 평균의 추정치와 그 주변의 변동성을 나타냄
  • 두 그룹의 신뢰 구간이 겹치는지 여부로 유의미성을 빠르게 판단

2.2 신뢰 구간의 한계

  • 신뢰 구간이 겹치는 경우에도 차이가 유의미할 수 있음:
    • 구간이 각각 독립적으로 계산되기 때문입니다.
    • 두 그룹 간의 차이를 직접 비교하려면 통계 검정이 필요합니다.
  • 신뢰 구간이 겹치지 않는 경우에도 유의미하지 않을 수 있음:
    • 샘플 크기가 작거나 데이터 변동성이 크면 겹치지 않아도 우연일 가능성이 존재하기 때문입니다.
  • 신뢰 구간을 계산하는 이유는 결과의 불확실성을 시각적으로 이해하고, 분석 초기 단계에서 빠르게 판단하기 위함입니다. 그러나 최종적으로는 통계 검정을 통해 결론을 내려야 합니다.

📐 3. 통계적 검정 (Statistical Testing)이란?

3.1 통계적 검정의 의미

  • 통계적 검정이란, 두 그룹 간의 차이가 우연히 발생했는지 아니면 실제로 의미 있는 차이인지를 판별하는 방법입니다.
  • 예를 들어, A/B 테스트에서 그룹 A와 B의 전환율 차이가 “실제 효과”인지, 단순히 샘플링 과정에서 발생한 “우연”인지 알고 싶을 때 사용합니다.

3.2 가설 검정의 기본 개념

통계적 검정은 다음 두 가지 가설을 비교합니다:

  1. 귀무가설 (H0H_0):
    • “두 그룹 간 차이가 없다”고 가정합니다.
    • 예: “그룹 A와 B의 전환율은 동일하다.”
  2. 대립(대안)가설 (H1H_1):
    • “두 그룹 간 차이가 있다”고 가정합니다.
    • 예: “그룹 A와 B의 전환율은 다르다.”

📘 4. 2-Sample t-test 란 무엇인가?

2-Sample t-test는 두 그룹의 평균 차이가 통계적으로 유의미한지 검정하는 방법입니다. 이 테스트는 두 그룹 간의 차이가 단순히 우연히 발생한 것인지, 아니면 실제로 의미 있는 차이인지를 판단하는 데 사용됩니다.

t=Xˉ1Xˉ2s12n1+s22n2t = \frac{\bar{X}_1 - \bar{X}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}
  • Xˉ1,Xˉ2\bar{X}_1, \bar{X}_2 : 두 그룹의 평균
  • s12,s22s_1^2, s_2^2 : 두 그룹의 표본 분산
  • n1,n2n_1, n_2 : 두 그룹의 샘플 크기

t-test는 두 그룹의 평균 차이가 통계적으로 유의미한지 검정하는 방법입니다. A/B 테스트에서 자주 사용하는 검정으로, 그룹 A와 B의 평균을 비교하여 귀무가설이 참인지 판단합니다.

[참고] 다른 통계 검정 테스트와 비교

테스트사용 조건장점제한
2-Sample t-test정규성 가정, 두 그룹 평균 비교단순, 효율적, 널리 사용됨정규성 가정이 불만족 시 부적합 (샘플 작을때 n<30)
Mann-Whitney U Test비정규분포, 극단값 존재정규성을 가정하지 않음, 순위 기반 검정평균이 아닌 중앙값 비교
Welch’s t-test두 그룹 분산이 다를 때분산 차이가 큰 경우에도 신뢰할 수 있음2-Sample t-test와 결과가 비슷
Chi-Square Test범주형 데이터 비교
(예:성공/실패)범주형 데이터에 적합연속형 데이터에 부적합
Bayesian Testing확률적 결과 해석을 원할때직관적 결과 제공 (확률 기반)계산 복잡, 사전 분포 설정 필요
ANOVA세 개 이상의 그룹 비교다수 그룹 비교 가능그룹 간 세부 차이는 추가 분석 필요

2-Sample t-test가 A/B 테스트에서 널리 사용되는 이유

  1. 평균 차이를 직접적으로 분석함
    • A/B 테스트에서는 두 조건(예: 새로운 디자인 vs 기존 디자인) 간의 주요 성과 지표(예: 전환율, 매출)의 평균 차이를 비교하는 것이 목표입니다. t-test는 평균 차이를 검정하는 데 최적화되어 있습니다.
  2. 효율적이고 간단함
    • t-test는 이해하기 쉽고 계산이 효율적입니다. Python, R 등의 통계 도구에서 쉽게 구현할 수 있습니다.
  3. 정규성을 가정한 강력한 검정 방법
    • 데이터가 정규분포를 따르거나, 샘플 크기가 충분히 클 경우 중앙극한정리(Central Limit Theorem)에 의해 신뢰할 수 있는 결과를 제공합니다.
  4. 빠른 의사결정 지원:
    • p-value를 기반으로 그룹 간 차이가 유의미한지 빠르게 판단할 수 있어, 비즈니스 의사결정에 유리합니다.

🔢 5. p-value이란?

p=2P(T>t)p = 2 \cdot P(T > |t|)
  • P(T>t)P(T > |t|) 는 t-statistic의 우측 꼬리(right tail)에서 t|t| 보다 큰 값이 나올 확률을 의미합니다.
  • 여기서 P(T>t)P(T > |t|) 는 t-statistic의 누적분포함수(CDF)를 사용하여 계산되며, t-분포는 자유도에 따라 달라집니다.
  • 식의 앞에 2를 곱하는 이유는, 양측 검정에서는 양쪽 꼬리의 확률을 모두 고려하기 때문입니다.

5.1  p-value의 정의

  • p-value 은 귀무가설이 실제로 참일 때, 관측된 데이터가 나타날 확률을 의미합니다.
  • 예:  p-value이 0.03이라면 실제로 차이가 없는데 (귀무가설이 참인데) 현재 데이터가 관측될 확률은 3%에 불과합니다.

5.2  p-value 해석

  • p < 0.05 :
    • 귀무가설을 기각할 수 있습니다.
    • “두 그룹 간 차이는 통계적으로 유의미하다”고 결론 내릴 수 있습니다.
  • p ≥ 0.05 :
    • 귀무가설을 기각할 충분한 증거가 없습니다.
    • “두 그룹 간 차이가 통계적으로 유의미하지 않다”고 결론 내립니다.

🧮 6. t-test 실습: 온라인 학습 vs 대면 학습

6.1 데이터 준비

import pandas as pd
from scipy.stats import ttest_ind

# 데이터 로드
data = pd.read_csv("online_classroom.csv")
online = data.query("format_ol==1")["falsexam"]
face_to_face = data.query("format_ol==0 & format_blended==0")["falsexam"]

6.2 t-test 실행

# t-test 실행
t_stat, p_val = ttest_ind(online, face_to_face, equal_var=False)

print(f"t-statistic: {t_stat:.2f}")
print(f"p-value: {p_val:.4f}")

if p_val < 0.05:
    print("통계적으로 유의미한 차이가 있습니다.")
else:
    print("통계적으로 유의미한 차이가 없습니다.")

결과 예시:

  • t-statistic: -4.67
  • p-value: 0.0001
  • 통계적으로 유의미한 차이가 있습니다.

💼 6. Practical Significance (실질적 유의미성)

🤔 6.1 Practical Significance란?

  • 통계적 유의미성(p-value)와 실질적 유의미성의 차이:
  • 많은 샘플을 수집하면 작은 차이여도  p-value이 낮게 나올 가능성이 높음.
  • 하지만, 이러한 차이가 비즈니스적으로 의미가 있는지는 별개의 문제.
  • 예시: 그룹 A와 그룹 B의 전환율 차이가 0.1%로  p-value은 유의미하지만, 매출 증가 효과는 미미할 수 있음.

다음 시간에 더 깊게 들어가보도록 하겠습니다.

key points

📌 TL;DR

  • 신뢰 구간 계산:
    • 데이터를 활용해 평균과 표준 오차로 95% 신뢰 구간 계산함
    • 신뢰 구간이 겹치지 않으면 차이가 있을 가능성이 높으나, 최종 판단은 통계적 검정으로 확인함
  • 통계적 검정과 t-test:
    • t-statistic은 두 그룹 간 평균 차이를 표준화한 값으로 계산함
    • p-value은 귀무가설 하에서 관측된 데이터가 나타날 확률을 의미하며,  p < 0.05 이면 통계적으로 유의미한 차이로 간주함
  • 시각화:
    • t-statistic 분포와 신뢰 구간,  t-statistic 및  p-value 영역을 그래프로 표현하여 직관적 이해함
  • A/B 테스트에서의 활용:
    • 그룹 간의 차이가 통계적으로 유의미한지 평가하고, 비즈니스적 유의미성까지 고려해 실험 결과를 해석.
  • 결론 (온라인 vs. 대면 수업)
    • 대면 학습이 온라인 학습보다 시험 점수에서 더 나은 결과를 보여주었으며, 이는 통계적으로 유의미한 차이로 확인됨
    • 추가 실험 설계나 정책 변경을 논의할 수 있음
profile
Be DBA

0개의 댓글