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

확률 기초: 0과 1 사이의 세계


핵심 개념

확률 정의·표본공간·독립/종속·조건부 확률 — 스팸 필터·광고 클릭·서버 장애의 수학.

본문

확률의 기본

📋 코드 (7줄)
P(A) = (A가 일어나는 경우의 수) / (전체 경우의 수)

성질:
- 0 ≤ P(A) ≤ 1
- P(A) + P(¬A) = 1  (A와 그 여집합 합 = 1)
- P(전체) = 1
- P(공집합) = 0

Python random 시뮬레이션

PYTHON📋 코드 (21줄)
import random

# 동전 던지기
def coin_flip():
    return 'H' if random.random() < 0.5 else 'T'


# 1000번 시뮬레이션
n = 10000
heads = sum(1 for _ in range(n) if coin_flip() == 'H')
print(f"앞면 비율: {heads/n:.4f}")  # 약 0.5


# 주사위
def roll_die():
    return random.randint(1, 6)


# 6이 나올 확률 (이론: 1/6 ≈ 0.167)
sixes = sum(1 for _ in range(n) if roll_die() == 6)
print(f"6 비율: {sixes/n:.4f}")

독립 사건 vs 종속 사건

PYTHON📋 코드 (23줄)
# 독립: P(A ∩ B) = P(A) × P(B)
# 종속: P(A ∩ B) = P(A) × P(B|A)


# 동전 두 번 — 독립
# 둘 다 앞면 = 0.5 × 0.5 = 0.25
n = 10000
both_h = sum(1 for _ in range(n) if coin_flip() == 'H' and coin_flip() == 'H')
print(f"둘 다 앞면: {both_h/n:.4f}")  # 약 0.25


# 카드 두 장 (복원 없음) — 종속
deck = ['hearts', 'diamonds', 'clubs', 'spades'] * 13  # 52장

def draw_two():
    d = deck.copy()
    random.shuffle(d)
    return d[0], d[1]


# 둘 다 hearts = 13/52 × 12/51 ≈ 0.0588
two_hearts = sum(1 for _ in range(n) if all(s == 'hearts' for s in draw_two()))
print(f"둘 다 hearts: {two_hearts/n:.4f}")

조건부 확률

📋 코드 (4줄)
P(A|B) = P(A ∩ B) / P(B)
"B가 일어났을 때 A가 일어날 확률"

예: P(비|구름) = 구름 낀 날 중 비 오는 비율
PYTHON📋 코드 (25줄)
# 데이터 시뮬레이션 — 1000일 날씨
import random

days = []
for _ in range(1000):
    cloudy = random.random() < 0.4    # 40% 확률로 흐림
    if cloudy:
        rain = random.random() < 0.7  # 흐릴 때 70%
    else:
        rain = random.random() < 0.1  # 맑을 때 10%
    days.append({'cloudy': cloudy, 'rain': rain})


# P(비)
rain_days = sum(1 for d in days if d['rain'])
print(f"P(비) = {rain_days/1000:.3f}")

# P(비|흐림)
cloudy_days = sum(1 for d in days if d['cloudy'])
rain_when_cloudy = sum(1 for d in days if d['cloudy'] and d['rain'])
print(f"P(비|흐림) = {rain_when_cloudy/cloudy_days:.3f}")

# P(흐림|비)
rain_and_cloudy = rain_when_cloudy
print(f"P(흐림|비) = {rain_and_cloudy/rain_days:.3f}")

실전 — 스팸 필터 확률

PYTHON📋 코드 (21줄)
# 단어 "FREE"가 포함된 메일 1000개 중 800개가 스팸
# 단어 "FREE"가 없는 메일 9000개 중 100개가 스팸

# P(스팸) = 900 / 10000 = 0.09
# P(FREE|스팸) = 800 / 900 = 0.889
# P(FREE|정상) = 200 / 9100 = 0.022
# P(스팸|FREE) = ?

# 베이즈 정리로 계산 (CH.42에서 자세히)
p_spam = 900 / 10000
p_free_given_spam = 800 / 900
p_free_given_ham = 200 / 9100
p_ham = 1 - p_spam

# P(FREE) = P(FREE|스팸)·P(스팸) + P(FREE|정상)·P(정상)
p_free = p_free_given_spam * p_spam + p_free_given_ham * p_ham

# P(스팸|FREE) = P(FREE|스팸)·P(스팸) / P(FREE)
p_spam_given_free = p_free_given_spam * p_spam / p_free
print(f"FREE 단어가 있을 때 스팸 확률: {p_spam_given_free:.4f}")
# 약 0.80 — FREE 단어 = 80% 스팸

실전 — 광고 클릭 확률

PYTHON📋 코드 (16줄)
# A/B 테스트 시뮬레이션
import numpy as np

# 변형 A의 진짜 CTR = 5%
# 변형 B의 진짜 CTR = 6%
true_ctr_a = 0.05
true_ctr_b = 0.06
n_visitors = 1000

clicks_a = np.random.binomial(1, true_ctr_a, n_visitors).sum()
clicks_b = np.random.binomial(1, true_ctr_b, n_visitors).sum()

print(f"변형 A: {clicks_a}/{n_visitors} = {clicks_a/n_visitors:.3f}")
print(f"변형 B: {clicks_b}/{n_visitors} = {clicks_b/n_visitors:.3f}")

# 통계적 유의성은 CH.44 (p-value)에서

실전 — 서버 장애 확률

PYTHON📋 코드 (18줄)
# 단일 서버: 99.9% 가용성 = 장애 확률 0.1%
# 복제 서버 N개 (모두 독립적 장애)

def availability(servers, single_uptime=0.999):
    """N개 서버 중 1개라도 살아있을 확률"""
    failure_prob = 1 - single_uptime
    all_fail = failure_prob ** servers
    return 1 - all_fail


for n in [1, 2, 3, 5]:
    a = availability(n)
    downtime_per_year = (1 - a) * 365 * 24 * 60  # 분
    print(f"{n}개 서버: {a*100:.4f}% 가용 (연 {downtime_per_year:.1f}분 다운)")

# 1개: 99.9000% (연 525분)
# 2개: 99.9999% (연 0.5분)
# 3개: 99.99999...% (사실상 0)

다음 챕터

CH.41 "확률 분포" — 데이터의 모양을 설명하는 수학.


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

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

내 시스템의 가용성 / 신뢰성을 확률로
분석해서 SLA 충족 + 복제 권장안을
수학적 근거로 만들어줘.
ChatGPT

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

한국 핀테크 / 헬스케어 시스템의
장애 확률 관리 사례 5개를 비교해줘.
Gemini

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

내 사용자 행동 데이터에서 조건부
확률로 발견 가능한 인사이트 Top 10을
시각화해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 클라우드 SLA 99.95 vs 99.99
비용 차이와 실제 효과를 솔직히 알려줘.

⭐ 이것만 기억하세요
확률 기초: 0과 1 사이의 세계 이 3가지만 확실히 잡으세요
1.확률은 0~1 사이 — 0% 불가능, 100% 확실, 시뮬레이션으로 이론값 검증
2.독립 사건은 곱셈, 종속은 조건부 확률 — 잘못 가정하면 결과 크게 달라짐
3.다음 챕터 CH.41에서 확률 분포 — 정규분포·이항분포·포아송으로 데이터 모양 분석


공유하기
진행도 40 / 45