OPEN HYPER STEP
← 목록으로 (수익화)
MONETIZATION · 49 / 69
monetization
CHAPTER 49 / 69
읽기 약 2
FUNCTION

A/B 테스트로 전환율 올리기


핵심 개념

가설→실험→통계적 유의성 — 데이터 기반으로 전환율을 검증한다.

본문

A/B 테스트 5단계

1. 가설 (Hypothesis)

📋 코드 (3줄)
❌ 나쁨: "버튼 색을 빨간색으로 바꾸면 클릭이 늘 것이다"
✅ 좋음: "현재 CTA 버튼이 페이지 색과 비슷해서 잘 안 보인다.
        대비를 높이면 (3:1 → 7:1) 클릭률이 30% 오를 것이다"

2. 측정 지표

TYPESCRIPT📋 코드 (5줄)
const A_B_TEST = {
  primaryMetric: '결제 페이지 도달률',  // 0.05 → 0.07 목표
  secondaryMetrics: ['CTA 클릭률', '체류 시간', '바운스율'],
  guardrails: ['총 매출은 감소하지 않을 것'],
};

3. 표본 수 계산

JAVASCRIPT📋 코드 (14줄)
// 통계적 유의성을 위한 최소 표본 수
function calculateSampleSize(baselineRate, mde, alpha = 0.05, power = 0.8) {
  // baselineRate: 현재 전환율 (0.05 = 5%)
  // mde: 최소 감지 효과 (0.01 = 1%p 차이를 감지하고 싶음)
  const z_alpha = 1.96;  // 95% 신뢰구간
  const z_beta = 0.84;   // 80% 검정력

  const p = baselineRate;
  const sigma = Math.sqrt(2 * p * (1 - p));
  const n = Math.ceil(Math.pow((z_alpha + z_beta) * sigma / mde, 2));
  return n;  // 변형당 최소 표본 수
}

console.log(calculateSampleSize(0.05, 0.01));  // ≈ 7,663명/변형

4. 구현 — 50:50 분할

TYPESCRIPT📋 코드 (45줄)
// app/components/ABTestProvider.tsx
'use client';
import { useEffect, useState } from 'react';

type Variant = 'A' | 'B';

export function useABTest(experimentId: string): Variant {
  const [variant, setVariant] = useState<Variant>('A');

  useEffect(() => {
    const stored = localStorage.getItem(`ab_${experimentId}`);
    if (stored === 'A' || stored === 'B') {
      setVariant(stored);
      return;
    }

    // 50:50 균등 분할 — userId 해시 기반 (재방문 시 일관)
    const userId = localStorage.getItem('userId') || crypto.randomUUID();
    localStorage.setItem('userId', userId);

    const hash = userId.split('').reduce((acc, c) => acc + c.charCodeAt(0), 0);
    const v: Variant = hash % 2 === 0 ? 'A' : 'B';

    setVariant(v);
    localStorage.setItem(`ab_${experimentId}`, v);

    // GA4 이벤트로 변형 추적
    window.gtag?.('event', 'experiment_impression', {
      experiment_id: experimentId,
      variant: v,
    });
  }, [experimentId]);

  return variant;
}

// 사용
export function CTAButton() {
  const variant = useABTest('cta_button_2026_04');

  if (variant === 'A') {
    return <button className="bg-indigo-500">시작하기</button>;
  }
  return <button className="bg-emerald-500">무료로 시작하기 →</button>;
}

5. 통계적 유의성 검증

TYPESCRIPT📋 코드 (35줄)
// Z-test for proportions
function zTestProportions(
  conversionsA: number, totalA: number,
  conversionsB: number, totalB: number,
): { pValue: number; significant: boolean; lift: string } {
  const pA = conversionsA / totalA;
  const pB = conversionsB / totalB;
  const pPooled = (conversionsA + conversionsB) / (totalA + totalB);

  const se = Math.sqrt(pPooled * (1 - pPooled) * (1/totalA + 1/totalB));
  const z = (pB - pA) / se;
  const pValue = 2 * (1 - normalCDF(Math.abs(z)));

  return {
    pValue: Number(pValue.toFixed(4)),
    significant: pValue < 0.05,  // 95% 신뢰
    lift: ((pB - pA) / pA * 100).toFixed(1) + '%',
  };
}

function normalCDF(x: number): number {
  // 표준 정규 분포 CDF 근사
  const a1 = 0.254829592, a2 = -0.284496736, a3 = 1.421413741;
  const a4 = -1.453152027, a5 = 1.061405429, p = 0.3275911;
  const sign = x < 0 ? -1 : 1;
  x = Math.abs(x) / Math.sqrt(2);
  const t = 1 / (1 + p * x);
  const y = 1 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t * Math.exp(-x*x);
  return 0.5 * (1 + sign * y);
}

// 예시
const result = zTestProportions(100, 1000, 130, 1000);
console.log(result);
// { pValue: 0.0489, significant: true, lift: '30.0%' }

⚠️ 흔한 실수

JAVASCRIPT📋 코드 (14줄)
const COMMON_MISTAKES = {
  earlyStop: {
    bad: '3일 만에 통계적으로 유의해 보이면 중단',
    fix: '최소 1주 이상 + 표본 수 계산값 도달 후 판단',
  },
  multipleTesting: {
    bad: '한 번에 5개 변경사항 동시 테스트',
    fix: 'A/B/C 다변량 테스트는 표본 수 폭증 — 일대일 비교 권장',
  },
  goodhartLaw: {
    bad: '클릭률만 최적화 → 매출은 오히려 감소',
    fix: '주 지표(매출) + 보조 지표(클릭률) + 가드레일(이탈율) 동시 추적',
  },
};

실전 도구

도구무료 한도적합
GA4 + GTM무제한기본 추적
Microsoft Clarity무제한히트맵 + 세션 녹화
Vercel Edge Config1,000 reads변형 분기 (서버 사이드)
PostHog1M events/월All-in-one (오픈소스)
Optimizely유료엔터프라이즈

AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 A/B 테스트 결과(전환율/표본수/p-value)를
통계적 유의성과 실용적 의미 측면에서 분석하고
다음 실험 설계를 추천해줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

전환율 50%+ 올린 A/B 테스트 사례 5개의
가설·구현·결과를 비교표로 정리해줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 GA4 + Clarity 데이터를 분석해서
전환 funnel의 가장 큰 누수 지점을
다음 A/B 테스트 후보로 우선순위 정리해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 A/B 테스트 도구 트렌드 —
Google Optimize 종료 이후 대안과
1인 개발자에게 적합한 무료 도구를 솔직히 알려줘.

⭐ 이것만 기억하세요
A/B 테스트로 전환율 올리기 이 3가지만 확실히 잡으세요
1.가설→표본 수 계산→구현→Z-test 5단계로 데이터 기반 의사결정을 할 수 있다
2.95% 신뢰(p < 0.05) + 표본 수 7,000+/변형이 최소 기준 — 미달이면 우연일 가능성
3.다음 챕터에서 사용자 지원 자동화로 운영 비용을 줄이는 방법을 다룬다


공유하기
진행도 49 / 69