OPEN HYPER STEP
← 목록으로 (math)
MATH · 17 / 45
math
CHAPTER 17 / 45
읽기 약 2
FUNCTION

벤 다이어그램: 데이터 교차 분석


핵심 개념

2~3 집합 시각화 — A/B 테스트 사용자 겹침, 기능 비교 매트릭스. matplotlib_venn으로 직접 그리기.

본문

2 집합 벤 다이어그램

📋 코드 (12줄)
     A          B
  ┌────┐    ┌────┐
  │    │    │    │
  │  ┌─┼────┼─┐  │
  │  │ │    │ │  │
  │  │ └────┼─┘  │
  │   only  │    │
  │  A      │ B  │
  └────┘    └────┘
            A∩B = 교집합
A 영역: A만 + A∩B
B 영역: B만 + A∩B

matplotlib_venn

PYTHON📋 코드 (22줄)
# pip install matplotlib_venn
from matplotlib_venn import venn2, venn3
import matplotlib.pyplot as plt

# 2 집합 — A/B 테스트 사용자 겹침
A = set(range(1, 51))    # 변형 A 노출 사용자
B = set(range(40, 80))   # 변형 B 노출 사용자

venn2([A, B], set_labels=('변형 A', '변형 B'))
plt.title('A/B 테스트 사용자 겹침')
plt.show()
# A만: 39명, B만: 30명, 둘 다: 11명


# 3 집합 — Pro + Active + Verified
pro      = set(range(1, 30))
active   = set(range(20, 50))
verified = set(range(40, 70))

venn3([pro, active, verified], set_labels=('Pro', 'Active', 'Verified'))
plt.title('사용자 세그먼트 3중 분석')
plt.show()

실전 — 두 배열의 교집합·차집합

PYTHON📋 코드 (27줄)
# 게시물 좋아요한 사용자 vs 댓글 단 사용자
likers   = ['alice', 'bob', 'charlie', 'dave']
commenters = ['bob', 'charlie', 'eve', 'frank']

L = set(likers)
C = set(commenters)

# 좋아요만 한 사람 (댓글 안 단)
only_like = L - C
print(only_like)  # {'alice', 'dave'}

# 댓글만 단 사람
only_comment = C - L
print(only_comment)  # {'eve', 'frank'}

# 둘 다 한 핵심 팬
both = L & C
print(both)  # {'bob', 'charlie'}

# 참여 사용자 전체
all_engaged = L | C
print(all_engaged)  # {'alice', 'bob', 'charlie', 'dave', 'eve', 'frank'}

# 핵심 KPI
total = len(all_engaged)
overlap_rate = len(both) / total * 100
print(f"교차 참여율: {overlap_rate:.1f}%")  # 33.3%

실전 — 기능 비교 매트릭스

PYTHON📋 코드 (30줄)
# Notion vs Confluence vs Roam — 기능 비교
notion     = {'페이지 트리', '데이터베이스', '템플릿', 'API', '협업', '오프라인'}
confluence = {'페이지 트리', '템플릿', 'API', '협업', 'Jira 통합'}
roam       = {'양방향 링크', '그래프 뷰', '템플릿', '오프라인'}


def compare_features(*tools):
    names = [name for name, _ in tools]
    sets  = [s for _, s in tools]

    # 모든 도구가 가진 기능 (전체 교집합)
    common = set.intersection(*sets)
    print(f"\n공통 기능: {common}")

    # 각 도구만의 차별점
    for i, (name, s) in enumerate(tools):
        others = set.union(*[t[1] for j, t in enumerate(tools) if j != i])
        unique = s - others
        print(f"{name}만: {unique}")


compare_features(
    ('Notion', notion),
    ('Confluence', confluence),
    ('Roam', roam),
)
# 공통 기능: {'템플릿'}
# Notion만: {'데이터베이스'}
# Confluence만: {'Jira 통합'}
# Roam만: {'양방향 링크', '그래프 뷰'}

실전 — A/B 테스트 깔때기 분석

PYTHON📋 코드 (19줄)
# 변형 A: 가입 → 결제
# 변형 B: 가입 → 결제

signup_a = set(range(1, 1001))         # 1000명
purchase_a = set(range(900, 1051))      # 일부 결제

signup_b = set(range(2000, 3001))      # 1000명
purchase_b = set(range(2900, 3081))     # 일부 결제

# 각 변형의 결제 전환
conv_a = signup_a & purchase_a
conv_b = signup_b & purchase_b

print(f"변형 A 전환: {len(conv_a)}/{len(signup_a)} = {len(conv_a)/len(signup_a)*100:.1f}%")
print(f"변형 B 전환: {len(conv_b)}/{len(signup_b)} = {len(conv_b)/len(signup_b)*100:.1f}%")

# 향상률
lift = (len(conv_b)/len(signup_b) - len(conv_a)/len(signup_a)) / (len(conv_a)/len(signup_a)) * 100
print(f"향상률: {lift:+.1f}%")

다음 챕터

CH.18 "순열" — 순서가 중요한 경우의 수 + 비밀번호 강도 계산.


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

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

내 사용자 행동 데이터(이벤트 로그)를
분석해서 세그먼트 벤 다이어그램과
핵심 인사이트 5개를 만들어줘.
ChatGPT

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

한국 데이터 분석 도구(Tableau/Looker/Mixpanel)의
벤 다이어그램 활용 사례와 한계를
비교 분석해줘.
Gemini

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

내 모든 GA4·Clarity 데이터에서
3중 교집합 코호트를 자동 발견해서
매출 기여도와 함께 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 그로스 해킹에서 벤 다이어그램
분석이 데이터 의사결정에 미치는
실제 영향을 솔직히 알려줘.

⭐ 이것만 기억하세요
벤 다이어그램: 데이터 교차 분석 이 3가지만 확실히 잡으세요
1.벤 다이어그램은 2~3 집합의 관계를 한눈에 — matplotlib_venn으로 즉시 시각화
2.A/B 테스트, 기능 비교, 사용자 세그먼트 모두 같은 집합 연산으로 분석 — 도메인 다르지만 패턴 동일
3.다음 챕터 CH.18에서 순열 — 순서가 의미를 갖는 경우의 수 (비밀번호·라우트·추천)


공유하기
진행도 17 / 45