# 인카금융 보험설계사 리쿠르팅 마케팅 A/B 테스트 통계 프로토콜

**문서 버전**: 1.0
**작성일**: 2026-03-26
**프로젝트**: 인카금융 TOP사업단 보험설계사 리쿠르팅 마케팅 캠페인
**캠페인 기간**: 12주 (총 300만원/월, 10만원/일)
**전담자**: 1인 운영 (자동화 기반)

---

## 1. 테스트 설계 원칙

### 1.1 단일 변수 격리 원칙 (Single Variable Isolation)

A/B 테스트의 신뢰도는 정확히 무엇이 결과를 결정하는지 파악하는 능력에 달려 있습니다. 이 프로토콜은 다음 원칙을 준수합니다:

- **한 번에 하나의 변수만 테스트**: Phase 1에서는 브랜드만, Phase 2에서는 메시지만, Phase 3에서는 대안 크리에이티브만 변경
- **나머지 변수는 통제**: 크리에이티브 스타일, 이미지, 광고 형식, 타겟팅, 입찰 전략 등은 고정
- **채널별 독립 평가**: 각 채널(Meta, Google, 네이버 등)의 사용자 특성이 다르므로, 채널별로 별도의 A/B 테스트 실시 (통합 분석 가능하나 채널별 판정은 독립적으로)

### 1.2 대조군/실험군 정의

**대조군(Control Group)**:
- 기존 또는 기본값으로 설정된 조건
- Phase 1: 브랜드 B (인카금융)
- Phase 2: 상시 메시지 A (보수적/신뢰 중심)
- Phase 3: 상시 메시지 승자

**실험군(Treatment Group)**:
- 변경을 시도하는 조건
- Phase 1: 브랜드 A (서울대보험쌤)
- Phase 2: 상시 메시지 B (비교 메시지)
- Phase 3: 긴급 메시지 (시한 소구)

**배치 방식**: 각 채널 내에서 동일 기간, 동일 예산 조건 하에 50:50 random split (UTM 매개변수로 추적)

### 1.3 동시 집행 조건

- **동일 기간**: 대조군과 실험군은 정확히 같은 날짜 범위에 실행 (주간/요일 효과 통제)
- **동일 예산**: A/B 스플릿 시 각 그룹에 정확히 50% 배분 (예: Meta 일 3만원 → A 1.5만원, B 1.5만원)
- **동일 타겟**: 동일한 오디언스 세그먼트 대상 (나이, 지역, 관심사, 디바이스 유형 동일)
- **동일 입찰 전략**: CPC 또는 자동 입찰 알고리즘 동일 설정
- **순차 실행 금지**: A 먼저 진행 후 B 실행 금지. 반드시 동시 실행. (시계열 외부 효과 제거)

---

## 2. 표본 크기 계산 및 통계적 검정력

### 2.1 표본 크기 산출 공식

두 비율 비교 z-검정 기반:

```
n = (Z_α/2 + Z_β)² × (p₁(1-p₁) + p₂(1-p₂)) / (p₂-p₁)²
```

**매개변수 정의**:
- **Z_α/2** = 1.96 (유의수준 α = 0.05, 양측 검정)
- **Z_β** = 0.842 (검정력 1-β = 0.80, 즉 80% 확률로 진정한 효과 탐지)
- **p₁** = 기준 전환율 (컨트롤)
- **p₂** = 탐지 목표 전환율 (실험군)
- **MDE (Minimum Detectable Effect)** = 20% 상대적 차이 (예: 1.5% → 1.8%)

**산출 상수**: (1.96 + 0.842)² = 2.838² = 8.053

---

### 2.2 각 채널별 표본 크기 (CTR 기준)

#### Meta (신규 사용자 광고)
- **기준 CTR**: 1.5%
- **탐지 목표**: 1.5% × 1.2 = 1.8%
- **절대 차이**: 0.3%

```
n = 8.053 × (0.015 × 0.985 + 0.018 × 0.982) / (0.003)²
  = 8.053 × (0.0147765 + 0.017676) / 0.000009
  = 8.053 × 0.0324525 / 0.000009
  = 8.053 × 3,605.833
  = 29,035 (그룹당)
```

**필요 총 노출**: 29,035 × 2 = 58,070 노출 (대조군 + 실험군 합산)

> **주의**: n은 **노출(impressions)** 수입니다. CTR 비교 z-검정에서 각 관찰 단위는 노출 1회.

#### Google 검색
- **기준 CTR**: 5% (검색 광고는 높음)
- **탐지 목표**: 5% × 1.2 = 6%
- **절대 차이**: 1%

```
n = 8.053 × (0.05 × 0.95 + 0.06 × 0.94) / (0.01)²
  = 8.053 × (0.0475 + 0.0564) / 0.0001
  = 8.053 × 0.1039 / 0.0001
  = 8.053 × 1,039
  = 8,371 (그룹당)
```

**필요 총 노출**: 8,371 × 2 = 16,742 노출

#### 네이버 SA (Power Link)
- **기준 CTR**: 3%
- **탐지 목표**: 3% × 1.2 = 3.6%
- **절대 차이**: 0.6%

```
n = 8.053 × (0.03 × 0.97 + 0.036 × 0.964) / (0.006)²
  = 8.053 × (0.0291 + 0.034704) / 0.000036
  = 8.053 × 0.062804 / 0.000036
  = 8.053 × 1,744.556
  = 14,049 (그룹당)
```

**필요 총 노출**: 14,049 × 2 = 28,098 노출

#### GFA (성과형 광고네트워크)
- **기준 CTR**: 0.3% (네트워크 광고는 매우 낮음)
- **탐지 목표**: 0.3% × 1.2 = 0.36%
- **절대 차이**: 0.06%

```
n = 8.053 × (0.003 × 0.997 + 0.0036 × 0.9964) / (0.0006)²
  = 8.053 × (0.002991 + 0.0035846) / 0.00000036
  = 8.053 × 0.0065756 / 0.00000036
  = 8.053 × 18,265.556
  = 147,128 (그룹당)
```

**필요 총 노출**: 147,128 × 2 = 294,256 노출

---

### 2.3 일 예산 기준 도달 가능 추정

> **핵심**: 표본 크기 n은 **노출(impressions)** 단위입니다. 일 예산으로 확보 가능한 노출 수와 비교합니다.

#### Meta 채널
- **일 예산**: 30,000원 (A/B 스플릿 시 그룹당 15,000원)
- **예상 CPM**: 7,500원 (금융/고용 카테고리 한국 시장 기준)
- **일 노출**: 30,000 / 7.5 = **4,000 노출** (2그룹 합산)
- **그룹당 노출**: 2,000 노출/일
- **예상 CPC**: ~500원 → 일 ~60 클릭 (참고)

필요 표본: 29,035 노출(그룹당) / 2,000 노출/일 = **약 14.5일**
→ **2주(D+14) 내 80% 검정력 확보 가능** ✅

#### Google 검색
- **일 예산**: 25,000원 (그룹당 12,500원)
- **예상 CPC**: 1,000원 → 일 25 클릭
- **CTR 5% 가정 시 일 노출**: 25 / 0.05 = **500 노출** (2그룹 합산)
- **그룹당 노출**: 250 노출/일

필요 표본: 8,371 노출(그룹당) / 250 노출/일 = **약 33.5일**
→ 검색 광고 특성상 노출 제한적. D+14 내 달성 어려움 ⚠️
→ 대안: 클릭 기반 전환율 비교가 더 적합

#### 네이버 SA
- **일 예산**: 20,000원 (그룹당 10,000원)
- **예상 CPC**: 800원 → 일 25 클릭
- **CTR 3% 가정 시 일 노출**: 25 / 0.03 = **833 노출** (2그룹 합산)
- **그룹당 노출**: 416 노출/일

필요 표본: 14,049 노출(그룹당) / 416 노출/일 = **약 33.8일**
→ D+14 내 달성 어려움 ⚠️

#### 네이버 GFA (성과형 디스플레이)
- **일 예산**: 10,000원 (그룹당 5,000원)
- **예상 CPM**: 3,000원 (디스플레이 광고 저가)
- **일 노출**: 10,000 / 3 = **3,333 노출** (2그룹 합산)
- **그룹당 노출**: 1,667 노출/일

필요 표본: 147,128 노출(그룹당) / 1,667 노출/일 = **약 88일**
→ 12주 캠페인 기간 내 달성 불가 ❌

---

### 2.4 CPL(Cost Per Lead) 기준 표본 크기 분석

CPL은 연속형 변수이므로 t-검정 기반:

```
n = 2 × (Z_α/2 + Z_β)² × σ² / (μ₂ - μ₁)²
```

**현실적 한계**:
- **초기 데이터 부족**: Week 3~4에서 예상 리드 10~20건 (그룹당 5~10건)
- **CPL 표준편차**: 보험 리쿠르팅은 σ = 5,000~15,000원 (매우 높음)
- **필요 표본**: CPL 20% 차이 탐지 시 약 50~100건 필요 (실제로 2~4주에는 불가)

**결론**: **CPL 기반 통계적 유의성은 불가능**. CTR과 노출, 클릭 지표로 대체.

---

### 2.5 통계적 유의성 확보까지 예상 소요 기간

| 채널 | 필요 노출(그룹당) | 일 노출(그룹당) | 소요 기간 | 판정 |
|------|----------|-----------|---------|------|
| Meta | 29,035 | 2,000 | **14.5일** | ✅ D+14 충족 가능 |
| Google | 8,371 | 250 | **33.5일** | ⚠️ D+14 부족 |
| 네이버 SA | 14,049 | 416 | **33.8일** | ⚠️ D+14 부족 |
| GFA | 147,128 | 1,667 | **88일** | ❌ 기간 내 불가 |

**결론**:
- **Meta**: D+14 내 80% 검정력 확보 가능 → **Phase 1 주력 판정 채널**
- **Google/네이버 SA**: 검색 광고는 노출이 적어 4~5주 필요 → 보조 지표로 활용
- **GFA**: 기간 내 유의성 달성 불가 → 실용적 판정 기준(효과 크기 20%↑) 적용

---

### 2.6 단기 A/B 테스트 실용적 판정 기준 (본 프로토콜의 기준)

대신 다음 **실용적 기준**을 적용:

1. **노출/클릭 최소 기준**: 통계적 신뢰 가능 범위
   - 노출 5,000회 이상, 클릭 50개 이상 시 판정 가능
   - 미만 시 연장 또는 폴백 사용

2. **효과 크기 기준**: 실무적으로 의미 있는 차이
   - **CTR 20% 이상 상대적 차이** 또는 **CPL 30% 이상 상대적 차이**
   - 통계 검정보다 실질적 차이에 초점

3. **신뢰도 보완**: 정성적 신호
   - 트렌드 방향 (A의 CTR이 지속적으로 높은가?)
   - 이상치 제거 후 안정성 확인
   - 채널 간 일관성 (여러 채널에서 A가 높은가?)

---

## 3. Phase 1: 브랜드 A/B 테스트 (Week 3~4)

### 3.1 테스트 구조

**목표**: 브랜드 A(서울대보험쌤) vs B(인카금융) 중 더 높은 CTR/CPL을 제공하는 브랜드 확정

**변수**:
- **브랜드 A**: 서울대보험쌤 (개인 브랜드, 회사명 미노출)
  - 크리에이티브: "서울대 출신 보험설계사 3년 연속 수상자가..."
  - 신뢰성: 개인 실적 기반

- **브랜드 B**: 인카금융서비스 (코스닥 상장사 직접 노출)
  - 크리에이티브: "인카금융서비스에서 함께할 보험설계사 모집..."
  - 신뢰성: 회사 브랜드 기반

**고정 변수**:
- 메시지, 이미지, CTA, 타겟팅, 입찰 전략 동일
- 모든 7개 채널 동시 진행

**예산 배분** (각 채널 내 50:50 스플릿):
- Meta: A 1.5만원, B 1.5만원
- Google: A 1.25만원, B 1.25만원
- 네이버 SA: A 1만원, B 1만원
- GFA: A 0.5만원, B 0.5만원
- 카카오비즈보드: A 0.3만원, B 0.3만원
- 당근: A 0.2만원, B 0.2만원
- 채용사이트: A 0.25만원, B 0.25만원

**기간**: Week 3 월요일 09:00 ~ Week 4 일요일 23:59 (14일, 2주)

**추적**: 각 광고 소재에 다음 UTM 매개변수 첨부
- 브랜드 A: `utm_campaign=AB_A_snu` (Seoul National University)
- 브랜드 B: `utm_campaign=AB_B_incar`

---

### 3.2 Phase 1 판정 기준

#### 중간 점검 (D+7)

**점검 일시**: Week 3 월요일 + 7일 (Week 3 일요일 23:59)

**확인 사항**:
- 전체 7채널 합산 노출: 5,000회 이상 도달?
- 전체 7채널 합산 클릭: 50개 이상 도달?

**결과**:
- **YES**: 계획대로 진행. 최종 판정 D+14 실시
- **NO**:
  - 원인 분석: CPC 상승, CTR 저하, 예산 고갈 등
  - 선택지 1: 미성숙 채널에 예산 재배분
  - 선택지 2: 기간 1주 연장 (Week 5 초반 포함)
  - 의사결정: 캠페인 매니저 판단

#### 최종 판정 (D+14)

**판정 일시**: Week 4 일요일 23:59 (정확히 2주 후)

**판정 지표** (우선 순위):
1. **CTR 비교**: A의 CTR이 B의 1.2배 이상?
   - 예: A CTR 1.8%, B CTR 1.5% → 1.8/1.5 = 1.2배 (조건 충족)

2. **CPL 비교**: A의 CPL이 B의 0.7배 이하?
   - 예: A CPL 15,000원, B CPL 20,000원 → 15,000/20,000 = 0.75배 (조건 충족)

**판정 결과**:
- **한 가지 이상 조건 충족** → A가 승자 확정
- **조건 미충족** → D+21까지 1주 연장

**데이터 취합 방법**:
```
GA4 탐색 > 기본 지표 보고서
- 사용자 > 기본 이벤트 전환
  필터: campaign=AB_A_snu 또는 AB_B_incar
  분석: A와 B의 클릭 수, 노출 수 비교

Meta Ads Manager / Google Ads / 네이버 SA 각 플랫폼
- CTR = 클릭수 / 노출수
- 평균 CPC (각 채널별)
```

**연장 판정이 발생한 경우** (D+14에 조건 미충족):

#### 연장 판정 (D+21)

**판정 일시**: Week 5 일요일 23:59 (초안 테스트 2일 후) - **한계까지 진행**

**완화된 기준** (데이터 부족성 감안):
- CTR 차이 15% 이상 상대적 증가, 또는
- CPL 차이 25% 이상 상대적 감소, 또는
- 트렌드 방향 일관성 (3일 연속 같은 방향 우위)

**여전히 미확정 시**:
- **기본값 B안(인카금융) 선택**
- 사유: 금융업 신뢰성 측면에서 법인명 직접 노출이 규제 준수 및 신뢰 구축에 유리하다는 업계 관행
- Week 5 월요일부터 전 채널 브랜드 B 크리에이티브로 통일

---

### 3.3 Phase 1 폴백 절차

**폴백 시나리오**:

1. **조기 종료** (기술적 오류, 예산 고갈)
   - 기본값 B 선택
   - 이유 기록: 불완전 테스트, 신뢰성 낮음

2. **D+21 미확정**
   - 기본값 B 선택
   - 이유 기록: 통계적 유의성 부재, 규제 준수 우선 고려

3. **A 명확히 열등** (CTR 30% 이상 낮음)
   - 즉시 B로 전환 (D+14 전 가능)
   - 손실 최소화

**B 선택 후 조치**:
```
1. 전 채널 크리에이티브 교체
   - 메인 광고: 인카금융 로고 포함
   - CTA: "인카금융서비스 보험설계사 모집"
   - 랜딩: 인카금융 공식 채용 페이지 링크

2. Phase 2 계획 수정
   - 메시지 A/B 준비 (브랜드 고정 B)

3. 문서화
   - Phase 1 최종 리포트 작성
   - 향후 브랜드 전략 논의
```

---

## 4. Phase 2: 상시/긴급 메시지 A/B (Week 5~8)

### 4.1 테스트 목표 및 구조

**목표**: Phase 1 승자 브랜드를 기반으로, 상시 메시지 중 더 효과적인 것을 확정한 후, 긴급 메시지의 자연 우위 정도를 파악

**실행 순서**:

**4A. 상시 메시지 A/B** (Week 5~6)
- 상시 메시지 A (기본값) vs B (비교)
- CTR 또는 CPL에서 20%/30% 차이 나을 때까지 진행
- 예상 기간: 2주

**4B. 상시 승자 vs 긴급 메시지** (Week 7~8)
- 4A에서 확정된 상시 메시지 vs 긴급 메시지
- 시한 소구의 자연 우위 정도 측정
- 7월 대안 메시지 준비를 위한 벤치마크 수립

### 4.2 상시 메시지 A/B (Week 5~6)

**메시지 A (보수적/신뢰 중심):**
```
"[브랜드 B] 보험설계사로 경력을 시작하세요.
안정적인 보수 + 수수료 체계,
전문성 있는 팀 환경에서 성장할 기회.
지원하기 → [CTA]"
```

**메시지 B (실적 강조):**
```
"[브랜드 B] 보험설계사 월 500만원 이상 달성 가능.
실제 설계사 실적 공개, 투명한 수익 구조.
지금 지원하고 교육 시작하기 → [CTA]"
```

**고정 변수**:
- 브랜드: Phase 1 승자 (A 또는 B)
- 이미지, 크리에이티브 포맷, 타겟팅 동일
- 모든 7개 채널 동시 진행

**예산 배분**: 각 채널 내 50:50 스플릿

**기간**: Week 5 월요일 09:00 ~ Week 6 일요일 23:59 (14일)

**판정 기준** (Phase 1과 동일):
- CTR 20% 이상 상대적 차이, 또는
- CPL 30% 이상 상대적 차이
- 미충족 시 1주 연장 (Week 7 초반), 여전히 미충족 시 A(보수적)를 기본값으로 선택

### 4.3 상시 승자 vs 긴급 메시지 (Week 7~8)

**목표**: 긴급 메시지(시한 소구)의 "자연 우위"를 정량화

**긴급 메시지:**
```
"[브랜드 B] 긴급 채용!
3월 말까지만 지원 가능, 이후 모집 중단 (예정).
지금 바로 지원 → [CTA]"
```

**제약 조건**:
- **1200% 규제 준수**: 2026년 7월 1일부터 GA에 적용되는 규제에 대비
- **잔여수수료 외부 노출 금지**: 금융소비자보호법(금소법) 준수, 메시지에 수익률 명시 절대 금지
- 메시지 B에서 "수수료 체계" 언급도 최소화 (7월 이후 제거 필요)

**기간**: Week 7 월요일 09:00 ~ Week 8 일요일 23:59 (14일)

**판정 기준** (이전과 동일):
- 긴급 메시지 CTR 20% 이상 상대적 우위, 또는
- 긴급 메시지 CPL 30% 이상 상대적 우위

**데이터 해석**:
- **긴급 > 상시 (20% 이상)**: 시한 소구가 강력. 4월~6월 계속 활용, 7월부터 대안 메시지로 전환 검토
- **긴급 ≈ 상시 (±20% 이내)**: 시간 효과 미미. 7월부터 대안 메시지 채택 권장
- **긴급 < 상시**: 비합리적 (이상 시나리오). 시한 소구 메시지 점검 또는 타겟팅 오류 확인

---

## 5. Phase 3: 대안 메시지 A/B (7월 이후)

### 5.1 배경: 1200% 룰과 대안 메시지의 필요성

**1200% 룰 개요**:
- **2026년 7월 1일부터**: 보험대리점(GA)에 1200% 룰 적용 — GA에서 설계사에게 지급하는 첫해 수수료+정착지원금+시책의 총액이 원수보험사 수수료의 1200% 이내로 제한
- **2027년**: 수수료 4년 분급 구조로 전환
- **2029년**: 수수료 7년 분급 구조로 전환
- **영향**: 6월까지는 "규제 적용 전 유리한 조건" 긴급성 메시지가 유효하나, 7월부터는 이 소구 포인트가 소멸

**대응 전략**:
- 4월~6월: 긴급 메시지(시한 소구 — "1200% 룰 적용 전 마지막 기회") 최대 활용
- 7월 이전(6월 중): 대안 메시지 3세트 사전 검증
- 7월 이후: 긴급성 없는 가치 중심 메시지로 전환 (교육 시스템, AI 자동화, 조직 안정성 등)

### 5.2 대안 메시지 3세트

**대안 1: AI 자동화 시스템 소구형**
```
"서울대 출신 경영전략컨설턴트가 무상으로 세팅해주는 AI 자동화 시스템.
월 실적을 시스템으로 만드는 설계사를 모십니다.
내 조건 확인하기 → [CTA]"
```

**대안 2: 코스닥 상장사 안정성 소구형**
```
"코스닥 상장사 인카금융서비스 TOP사업단.
체계적인 교육 + 정착지원금 + 5가지 전문 시스템.
경력직 설계사 조건 확인 → [CTA]"
```

**대안 3: 조직 성장 소구형 (지점장급 타겟 겸용)**
```
"교육·운영·협업 인프라를 갖춘 전문 조직.
지점장의 성공이 사업단의 성공입니다.
성장 전략 상담 신청 → [CTA]"
```

### 5.3 Phase 3 테스트 구조

**기간**: 6월 중순~6월 말 (약 2주)

**주요 비교**:
- 대안 1 vs 긴급 메시지
- 대안 2 vs 긴급 메시지
- 대안 3 vs 긴급 메시지

**순차 실행** (동시 실행으로 변경 가능):
- 각 대안마다 1주씩 순차 테스트
- 긴급 메시지는 상시 진행 (벤치마크)

**판정 기준**:

전환 판정식:
```
대안 CTR ≥ 긴급 CTR × 0.7
```

**해석**:
- 대안이 긴급의 70% 이상 성능이면 채택 가능
- (예: 긴급 2% CTR → 대안은 1.4% 이상이면 OK)
- 사유: 합법성(1200% 규제 준수), 지속 가능성(시한이 없음) 고려

**7월 이후 실행**:
- 채택된 대안 + 상시 메시지 조합으로 고정
- 긴급 메시지 중단 또는 월 1회 특별 캠페인으로 격하

---

## 6. 자동 판정 로직 및 GA4 통합

### 6.1 GA4 자동 알림 설정

**목표**: 1인 운영자가 수동으로 매일 데이터 확인하지 않아도 "판정 가능 신호" 자동으로 포착

### 6.2 z-test 기반 자동 판정 공식

각 날짜마다 (또는 매일 자정 기준) 다음 z-test 계산:

```
z = (p_A - p_B) / sqrt(p_pool × (1 - p_pool) × (1/n_A + 1/n_B))

여기서:
- p_A = A 그룹 클릭수 / A 그룹 노출수
- p_B = B 그룹 클릭수 / B 그룹 노출수
- p_pool = (A 클릭 + B 클릭) / (A 노출 + B 노출)
- n_A, n_B = 각 그룹의 노출수
```

**양측 검정**:
```
p-value = 2 × P(Z > |z|)  (표준정규분포 기반)
```

**자동 알림 조건**:
1. **노출 5,000회 이상** 도달 (양쪽 합산)
2. **p-value < 0.05** (통계적 유의성 충족)

**알림 메시지**:
```
📊 A/B 테스트 판정 가능 신호
- 채널: [Meta / Google / 네이버 등]
- 누적 노출: [X회]
- A CTR: [Y%], B CTR: [Z%]
- p-value: [0.xxx]
- 추천: [A 승자] 또는 [B 승자] 또는 [추가 관찰]
```

### 6.3 GA4 커스텀 이벤트 설정

**전제**: "리드" 또는 "전환"이 명확하게 정의되어야 함
- 예: 지원 양식 제출 = conversion 이벤트

**GA4 설정**:

1. **기본 이벤트 추적**
   ```
   이벤트명: page_view (자동 수집)
   → 노출로 사용
   ```

2. **클릭 이벤트**
   ```
   이벤트명: click (광고 클릭 시 자동)
   → CTR 계산용
   ```

3. **전환 이벤트**
   ```
   이벤트명: conversion (양식 제출 시)
   매개변수:
   - conversion_type: "lead" (리드)
   - campaign: utm_campaign 값 (AB_A_snu, AB_B_incar 등)
   - channel: utm_source 값 (meta, google, naver 등)
   ```

**보고서 설정** (매일 자정 자동 생성):
```
GA4 탐색 > 커스텀 보고서
- 행: campaign
- 열: 날짜
- 값:
  - 이벤트 수 (클릭)
  - 보기 수 (노출)
  - 전환 수
- 필터: source = [meta / google / naver 등]
```

### 6.4 z-test 자동화 스크립트 (Python 예시)

1인 운영자를 위한 간단한 자동 판정 로직:

```python
from scipy import stats
import json
from datetime import datetime

def ab_test_judge(group_a_clicks, group_a_impressions,
                   group_b_clicks, group_b_impressions):
    """
    A vs B z-test 수행 및 판정
    """
    # CTR 계산
    p_a = group_a_clicks / group_a_impressions if group_a_impressions > 0 else 0
    p_b = group_b_clicks / group_b_impressions if group_b_impressions > 0 else 0

    # 풀링된 비율
    p_pool = (group_a_clicks + group_b_clicks) / (group_a_impressions + group_b_impressions)

    # 표준오차
    se = p_pool * (1 - p_pool) * (1/group_a_impressions + 1/group_b_impressions)
    se = se ** 0.5 if se > 0 else 0

    # z-통계
    if se > 0:
        z = (p_a - p_b) / se
        p_value = 2 * (1 - stats.norm.cdf(abs(z)))  # 양측
    else:
        z, p_value = 0, 1.0

    # 판정
    min_impressions = 5000
    total_impressions = group_a_impressions + group_b_impressions

    if total_impressions < min_impressions:
        decision = "데이터 부족 (계속 진행)"
        confidence = "낮음"
    elif p_value < 0.05:
        if p_a > p_b:
            decision = "A 승자"
        else:
            decision = "B 승자"
        confidence = "높음 (p < 0.05)"
    else:
        decision = "추가 관찰 필요"
        confidence = f"낮음 (p = {p_value:.4f})"

    return {
        "timestamp": datetime.now().isoformat(),
        "group_a_ctr": f"{p_a*100:.2f}%",
        "group_b_ctr": f"{p_b*100:.2f}%",
        "z_statistic": f"{z:.4f}",
        "p_value": f"{p_value:.4f}",
        "total_impressions": total_impressions,
        "decision": decision,
        "confidence": confidence
    }

# 사용 예시
result = ab_test_judge(
    group_a_clicks=150,
    group_a_impressions=5000,
    group_b_clicks=120,
    group_b_impressions=5000
)
print(json.dumps(result, indent=2, ensure_ascii=False))
```

**스크립트 사용 방법**:
1. GA4에서 매일 자정 데이터 다운로드 (CSV)
2. 스크립트 실행 → 자동 판정
3. Slack 또는 이메일로 알림 전송

---

## 7. 다중 비교 보정 (Multiple Testing Correction)

### 7.1 다중 비교 문제

A/B 테스트를 여러 번 수행할 때, 각 테스트의 유의수준 α가 누적되어 실제 Type I 오류(거짓양성) 확률이 증가합니다.

**예시**:
- Phase 1: 1번 비교 (A vs B) → α = 0.05
- Phase 2: 1번 비교 (메시지 A vs B) → α 누적
- Phase 3: 3번 비교 (대안 1,2,3 각각 vs 긴급) → α 누적

### 7.2 Bonferroni 보정 적용 기준

**공식**:
```
α' = α / k
여기서 k = 비교 횟수
```

**적용 규칙**:

| Phase | 비교 횟수 | 보정 필요? | 보정된 α |
|-------|----------|---------|---------|
| 1 (브랜드 A vs B) | 1 | 불필요 | α = 0.05 |
| 2A (메시지 A vs B) | 1 | 불필요 | α = 0.05 |
| 2B (상시 vs 긴급) | 1 | 불필요 | α = 0.05 |
| 3 (대안 1,2,3 각각 vs 긴급) | 3 | 필요 | α' = 0.05/3 = 0.0167 |

**보정 미적용 단계**:
- **Phase 1**: 브랜드 선택은 단일 비교
- **Phase 2**: 상시 메시지 확정과 긴급 테스트는 순차적 (동시 비교 아님)
- 따라서 Phase 1, 2 전체에서 보정 불필요

**보정 적용 단계**:
- **Phase 3**: 동시에 대안 3개를 긴급 메시지와 비교
- **적용 방법**: p-value 판정 시 0.05 대신 0.0167 사용

### 7.3 구체적 적용 예시 (Phase 3)

**테스트**:
- 대안 1 vs 긴급 메시지
- 대안 2 vs 긴급 메시지
- 대안 3 vs 긴급 메시지

**각 테스트별 p-value 산출** (3개):
- p₁ = 0.012 (대안 1)
- p₂ = 0.035 (대안 2)
- p₃ = 0.048 (대안 3)

**Bonferroni 보정 후 판정**:
- 보정된 α' = 0.05/3 = 0.0167
- p₁ = 0.012 < 0.0167 ✓ → **대안 1 유의성 있음** (채택 권장)
- p₂ = 0.035 > 0.0167 ✗ → 대안 2 유의하지 않음 (불채택)
- p₃ = 0.048 > 0.0167 ✗ → 대안 3 유의하지 않음 (불채택)

**최종 결정**: 대안 1만 채택

---

## 8. 결과 문서화 템플릿

각 Phase 완료 후 다음 마크다운 템플릿으로 결과 보고:

### 8.1 Phase 1 결과 템플릿

```markdown
# Phase 1 결과 보고서: 브랜드 A/B 테스트

**테스트 기간**: [Week 3 월 09:00 ~ Week 4 일 23:59]
**테스트 채널**: 7개 전체 (Meta, Google, 네이버 SA, GFA, 카카오, 당근, 채용사이트)

## 핵심 결과

| 항목 | 브랜드 A (서울대보험쌤) | 브랜드 B (인카금융) | 차이 | 승자 |
|------|------|------|------|------|
| 총 노출 | 28,000 | 27,500 | +500 (+1.8%) | - |
| 총 클릭 | 380 | 340 | +40 (+11.8%) | **A** |
| 클릭율 (CTR) | 1.36% | 1.24% | +0.12pp | **A** |
| 총 리드 | 18 | 15 | +3 (+20%) | A |
| 평균 CPL | 45,833원 | 50,667원 | -4,834원 (-9.5%) | A |

## 채널별 상세 결과

### Meta
- 브랜드 A: CTR 1.5%, CPL 42,000원
- 브랜드 B: CTR 1.2%, CPL 48,000원
- **평가**: A 우위 (CTR +25%, CPL -12.5%)

### Google
- 브랜드 A: CTR 5.2%, CPL 22,000원
- 브랜드 B: CTR 4.8%, CPL 24,000원
- **평가**: A 우위 (CTR +8.3%, CPL -8.3%)

### 네이버 SA
- 브랜드 A: CTR 3.1%, CPL 38,000원
- 브랜드 B: CTR 3.0%, CPL 40,000원
- **평가**: A 소폭 우위 (차이 미미)

### GFA, 카카오, 당근, 채용사이트
- [각 채널별 결과 기록]
- **평가**: [평가]

## 통계 검증

- **필요 표본** (80% 검정력, 20% MDE): 58,070 클릭
- **실제 획득**: 720 클릭 (1.2% 달성)
- **통계적 유의성**: 낮음 (샘플 크기 부족)
- **실질적 차이**: CTR +12%, CPL -10% (비즈니스 관점에서 의미 있음)

## 판정

**결정**: **브랜드 A (서울대보험쌤) 채택**

**근거**:
- CTR 11.8% 상대적 증가 (1.2배 조건 충족)
- CPL 9.5% 상대적 감소
- 모든 채널에서 A 동향

**다음 단계**:
- Week 5부터 모든 크리에이티브를 브랜드 A로 통일
- Phase 2 (메시지 A/B) 시작

---

## 개선 사항 및 학습

1. **GFA 채널 이슈**: GFA는 전체 클릭의 5% 미만 기여 → 일 1만원 예산 검토
2. **당근 채널 저성과**: CTR 0.2% (기준 0.3% 이하)로 예상보다 낮음 → 지역 타겟팅 조정
3. **채용사이트 데이터 불완전**: 리드 추적 불가 → Week 5에 GA 태깅 재점검

---

## 부록: 원본 데이터

[GA4 다운로드 CSV, 각 플랫폼 성과 스크린샷 등]
```

---

### 8.2 최종 캠페인 성과 종합 템플릿

```markdown
# 인카금융 보험설계사 리쿠르팅 A/B 테스트 최종 보고서

**캠페인 기간**: 2026년 4월 1일 ~ 6월 30일 (12주)
**총 예산**: 300만원/월 × 3개월 = 900만원
**총 리드**: [X건]
**총 전환율**: [Y%]
**ROI**: [Z배]

## Phase 1 결과 (Week 3~4): 브랜드 선택

**결정**: 브랜드 B (인카금융) 채택

**근거**: [상세 기술]

## Phase 2 결과 (Week 5~8): 메시지 선택

**상시 메시지 우위**: 메시지 B (실적 강조) +18% CTR

**상시 vs 긴급 비교**: 긴급 메시지 +35% CTR (예상대로 높음)

## Phase 3 예상 (7월~): 대안 메시지 준비

**6월 검증 결과**: [대안 1,2,3 성과]

**7월 채택 메시지**: [최종 선택]

## 효율성 분석

### 채널별 최종 CPL

| 채널 | 초기 예상 | 최종 실제 | 개선율 |
|------|---------|---------|-------|
| Meta | 30,000~80,000원 | 28,500원 | **-10%** |
| Google | 50,000~100,000원 | 45,200원 | **-10%** |
| 네이버 SA | 25,000원 | 22,800원 | **-9%** |

### 채널별 기여도

[파이 차트 또는 적절한 시각화]

## 권장 사항

1. **4월~6월**: 현재 캠페인 구조 유지
2. **7월 이후**: 대안 메시지 + 긴급 메시지 월 1회 조합
3. **8월 이후**: 우수 채널 예산 증액 고려 (Meta, Google)
4. **2026 하반기**: 전환 추적(CRM 연동) 강화

---

**보고 일자**: [작성일]
**담당자**: [이름]
**서명**: ________________
```

---

## 9. 일일 운영 체크리스트

1인 운영자가 매일 수행할 사항:

### 9.1 매일 08:00 (캠페인 시작 전)

- [ ] GA4 리포트 확인 (어제 데이터)
- [ ] 각 광고 플랫폼 대시보드 확인
  - Meta Ads Manager
  - Google Ads
  - 네이버 SA, GFA, 카카오, 당근, 채용사이트
- [ ] 이상 신호 (CPL 급증, CTR 급락) 확인
  - 있으면: 원인 분석 (예산 고갈, 기술 오류)
  - 없으면: 계속 진행

### 9.2 매일 18:00 (오후 점검)

- [ ] 누적 클릭, 노출 추이 확인
- [ ] A/B 그룹 간 성과 차이 현저한지 확인
  - CTR 차이 30% 이상인가?
  - CPL 차이 50% 이상인가?
  - 있으면: 의사결정 (조기 종료 검토)

### 9.3 매주 월요일 09:00 (주간 판정)

- [ ] 지난 주 누적 데이터 정리
- [ ] Phase 판정점 확인 (D+7, D+14 등)
- [ ] 예산 배분 상태 확인
  - 예산 남은 것이 있는가?
  - 채널별 도달 속도 차이가 있는가? (재배분 필요?)

### 9.4 매월 말일 (월간 결산)

- [ ] Phase 완료 여부 확인
- [ ] 최종 리포트 작성
- [ ] 다음 Phase 준비

---

## 10. 미리 예상되는 이슈 및 해결 방안

### 10.1 예산 고갈 (예정 기간 전 소진)

**증상**: 일 10만원 예산이 3일 만에 소진, CTR 매우 높음

**원인**: CPM/CPC 상승 (경쟁도 증가 또는 알고리즘 학습 초기 비효율)

**대응**:
1. **일시적**: 예산 조정 (일 7만원으로 축소, 기간 1주 연장)
2. **영구적**: 그룹당 스플릿 비율 재조정 (50% 대신 30%/70%)

### 10.2 데이터 수집 오류 (GTM/GA4 추적 실패)

**증상**: GA4에 리드 데이터가 보이지 않음, 하지만 광고 플랫폼에는 클릭 기록 있음

**원인**: GTM 태그 오류, 이벤트 정의 변경

**대응**:
1. GA4 실시간 보고서에서 이벤트 확인
2. GTM 미리보기 모드에서 태그 트리거 확인
3. 긴급: GA4 없이 광고 플랫폼 데이터(CTR, CPC)만으로 판정 (덜 정확하지만 가능)

### 10.3 특정 채널 성과 급락

**증상**: Meta CTR이 갑자기 0.5% 이하로 떨어짐

**원인**:
- 오디언스 피로 (같은 사용자 반복 노출)
- 광고 심사 통과 안 됨
- 플랫폼 알고리즘 변화
- 경쟁사 공격적 입찰

**대응**:
1. **즉시**: 광고 상태 확인 (활성/중지/거부)
2. **단기**: 예산 감축, 오디언스 확대
3. **중기**: 크리에이티브 새로 제작 (이미지/카피 변경)

### 10.4 A/B 그룹 간 성과 거의 같음 (판정 불가)

**증상**: CTR 차이가 5% 미만 (20% 기준 미달)

**원인**:
- 두 변수(브랜드/메시지)의 실제 효과 미미
- 샘플 크기 부족
- 다른 변수(타겟팅, 이미지)가 더 큼

**대응**:
1. **1차**: 기간 1주 연장 (데이터 수집 계속)
2. **2차**: 여전히 비슷하면 기본값(B) 선택, 진행
3. **학습**: 향후 더 큰 차이의 변수 테스트 (예: 이미지 완전 변경)

### 10.5 법적/규제 이슈

**증상**: 광고가 금소법 위반으로 심사 거부됨

**원인**: 메시지에 "수익" 또는 "수수료" 노출

**대응**:
1. **즉시**: 해당 크리에이티브 중단
2. **긴급 수정**: 모든 수익 관련 언급 제거
3. **제출**: 수정된 크리에이티브 재심사
4. **문서화**: 금소법 제약 사항 프로토콜에 기록

---

## 11. 참고: 통계 용어집

| 용어 | 정의 | 본 프로토콜에서의 값 |
|------|------|--------|
| **유의수준(α)** | 거짓양성 허용 확률 | 0.05 (5%) |
| **검정력(1-β)** | 진정한 효과를 올바르게 탐지할 확률 | 0.80 (80%) |
| **MDE (Minimum Detectable Effect)** | 탐지 가능한 최소 상대적 차이 | 20% |
| **표본 크기(n)** | 한 그룹에 필요한 최소 관찰 수 | 채널별 2,000~30,000 |
| **CTR (Click-Through Rate)** | 클릭율 = 클릭 / 노출 | 주요 지표 |
| **CPL (Cost Per Lead)** | 리드당 비용 = 예산 / 리드 | 보조 지표 |
| **p-value** | 관찰된 데이터가 대조군과 같을 확률 | p < 0.05 시 유의 |
| **신뢰구간(CI)** | 모수가 포함될 확률 범위 | 95% CI |
| **Type I 오류** | 거짓양성 (실제로는 차이 없는데 있다고 판정) | α와 관련 |
| **Type II 오류** | 거짓음성 (실제로는 차이 있는데 없다고 판정) | β와 관련 |

---

## 12. 최종 체크리스트

이 프로토콜을 실행 전에 다음을 확인하세요:

- [ ] GA4 설정 완료 (이벤트 정의, UTM 매개변수 확인)
- [ ] 각 광고 플랫폼에서 A/B 그룹 생성 완료 (50:50 스플릿)
- [ ] 크리에이티브 자산 준비 (Phase 1 브랜드 A/B, Phase 2 메시지 A/B, Phase 3 대안 메시지)
- [ ] 랜딩 페이지 (또는 캠페인 페이지) URL 확정
- [ ] 리드 추적 방식 확정 (양식 제출 / 클릭 / 전화 등)
- [ ] 자동 알림 스크립트 테스트 완료 (또는 수동 확인 일정 수립)
- [ ] 팀 내 의사결정 프로세스 확정 (누가 승인?)
- [ ] 예산 관리 체계 확정 (일별 예산 배분, 재배분 기준)
- [ ] 긴급 연락처 정보 공유 (크리에이티브 오류 발생 시 누구에게 연락?)

---

**문서 작성**: 2026-03-26
**버전**: 1.0
**다음 검토**: Phase 1 완료 후 (Week 4 말)

이 프로토콜은 인카금융 TOP사업단의 12주 보험설계사 리쿠르팅 마케팅 캠페인을 위해 설계되었습니다. 모든 판정은 데이터 기반이며, 의사결정은 이 문서의 기준에 따릅니다.
