오늘은 확률 개념 중에서도 조건부 확률(Conditional Probability)을 중심으로 학습했고, 이를 기반으로 한 베이즈 정리(Bayes' Theorem), 나아가 나이브 베이즈(Naive Bayes) 모델을 활용한 스팸 메일 필터링 실습까지 진행해보았다. 이 개념들은 단순히 수학적인 확률의 계산을 넘어서, 생성 AI 개발에 있어 핵심적인 이론적 기반이 된다.
확률이란?
확률은 어떤 사건이 일어날 가능성을 수치로 나타낸 개념이다. 전체 가능한 경우의 수 중 특정 사건이 일어나는 경우의 수 비율로 정의되며, 수식으로는 다음과 같이 표현된다:
\[P(A) = \frac{\text{사건 A가 일어나는 경우의 수}}{\text{전체 경우의 수}}\]
이때 표본공간(Sample Space, \( S \))은 실험에서 가능한 모든 결과의 집합을 의미하고, 그 안에 포함된 각각의 결과는 근원사건(Outcome)이라 부른다. 특정 조건을 만족하는 결과들의 집합을 사건(Event)이라 하며, 우리가 확률을 계산하고자 하는 대상이 된다.
예를 들어 주사위를 던졌을 때 짝수가 나올 사건을 \( A = \{2, 4, 6\} \)라고 하면, 표본공간은 \( S = \{1, 2, 3, 4, 5, 6\} \)이고, 각 숫자가 하나의 근원사건이다.
확률의 값은 \( 0 \leq P(A) \leq 1 \) 범위 안에 있으며, 1에 가까울수록 사건이 일어날 가능성이 높다는 뜻이다. 이 개념은 이후 학습할 조건부 확률, 독립 사건, 베이즈 정리 등의 기초가 되며, 생성 AI나 데이터 분석에서도 필수적으로 활용된다.
조건부 확률이란?
조건부 확률이란, 어떤 사건 A가 발생했다는 조건 하에 사건 B가 발생할 확률을 의미한다. 즉, 전체 모집단이 아니라 '조건에 해당하는 부분 집합'을 기준으로 다시 확률을 계산하는 것이다.
수식으로 표현하면 다음과 같다:
\[ P(B|A) = \frac{P(A \cap B)}{P(A)} \]
이 수식이 중요한 이유는, AI가 학습된 모델을 바탕으로 입력된 조건(Feature)에 따라 출력(Label)의 확률을 예측하는 방식과 밀접하게 연결되기 때문이다. 특히 의료 진단, 사용자 행동 예측, 자연어 처리 등에서 '어떤 조건이 주어졌을 때 결과가 나올 확률'을 판단하는 데 널리 활용된다.
베이지안 이론(Bayesian Inference)이란?
베이지안 이론은 데이터가 주어졌을 때 우리가 갖고 있는 믿음을 어떻게 업데이트할 수 있을까?에 대한 체계적인 방법을 제공한다.
핵심 아이디어는 다음과 같다:
- 사전 확률 (Prior): 어떤 사건이 발생할 것이라는 기존의 믿음
- 우도 (Likelihood): 데이터를 관측했을 때 그 데이터가 특정 사건에서 발생할 가능성
- 사후 확률 (Posterior): 관측된 데이터를 바탕으로 기존의 믿음을 갱신한 결과
수학적으로는 다음과 같은 베이즈 정리를 이용하여 계산한다:
\[ P(\text{가설} | \text{데이터}) = \frac{P(\text{데이터} | \text{가설}) \cdot P(\text{가설})}{P(\text{데이터})} \]
이 방식은 단순히 확률을 계산하는 것을 넘어서, 계속해서 학습하고 갱신하는 과정으로 이어지기 때문에 머신러닝과 생성 AI 모델링에도 자연스럽게 연결된다.
베이즈 정리(Bayes' Theorem)
베이즈 정리는 조건부 확률을 역으로 활용하는 대표적인 수학적 정리다. 우리가 알고 있는 사전 확률(Prior Probability)과 우도(Likelihood)를 기반으로, 어떤 사건이 관측된 이후의 사후 확률(Posterior Probability)을 계산할 수 있게 해준다.
\[ P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} \]
이 공식을 통해 우리는 모델이 학습된 후 새로운 데이터가 들어왔을 때, 기존의 믿음(Prior)을 관측된 데이터로 업데이트하면서 더 정확한 확률 예측을 수행할 수 있게 된다.
베이즈 정리의 직관적인 예시
한 학급에 100명의 학생이 있다. 이 중 여학생은 30명, 남학생은 70명이다. 여학생의 3%는 외국인이고, 남학생의 8%가 외국인이라고 하자. 전체 외국인의 비율은 다음과 같이 계산할 수 있다.
- 여학생 외국인: 30 × 0.03 = 0.009
- 남학생 외국인: 70 × 0.08 = 0.056
- 전체 외국인 비율: 0.009 + 0.056 = 0.065
이때 외국인을 임의로 1명 뽑았을 때, 이 학생이 여학생일 확률은?
\[ P(여학생|외국인) = \frac{0.009}{0.065} ≒ 0.14 \]
이는 바로 베이즈 정리를 적용한 대표적인 문제다. 이처럼 베이즈 정리는 '거꾸로 추정'하는 방식으로 작동한다. 특정한 결과가 나왔을 때, 그 원인이 무엇일지 확률적으로 계산하는 방식이다.
베이즈 정리와 인공지능
베이즈 정리는 많은 AI 시스템에서 핵심 이론으로 작용한다. 예를 들어 사용자의 검색 패턴을 분석해 뉴스 기사를 추천하거나, 이메일 내용을 분석해 스팸 여부를 판단하는 작업 모두 베이즈 정리의 응용이다.
특히 우리가 오늘 실습한 나이브 베이즈 분류기(Naive Bayes Classifier)는 베이즈 정리를 기반으로 하되, '조건부 독립성'이라는 가정을 더하여 계산을 단순화시킨 모델이다.
나이브 베이즈(Naive Bayes) 모델 실습
사용 데이터셋
총 6개의 메일 본문 데이터와 라벨(spam/ham)을 포함한 간단한 CSV 파일을 로드했다.
num | label | text | label_num |
---|---|---|---|
1 | spam | your free lottery | 1 |
2 | spam | free lottery free you | 1 |
3 | ham | your free apple | 0 |
4 | ham | free to contact me | 0 |
5 | ham | I won award | 0 |
6 | spam | my lottery ticket | 1 |
전처리 단계
from nltk.corpus import stopwords
import string
def process_text(text):
nopunc = ''.join([char for char in text if char not in string.punctuation])
cleaned_words = [word for word in nopunc.split() if word.lower() not in stopwords.words('english')]
return cleaned_words
- 불용어 제거: 의미 없는 단어들(I, me, my 등)을 제거하여 정보 밀도를 높인다.
- 구두점 제거 및 소문자 변환으로 통일성을 확보
벡터화 및 모델 학습
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
cv = CountVectorizer(analyzer=process_text)
X = cv.fit_transform(df['text'])
y = df['label_num']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
model = MultinomialNB()
model.fit(X_train, y_train)
예측 결과 및 정확도 평가
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
print("Accuracy:", accuracy_score(y_test, y_pred))
- 스팸메일에 등장하는 단어들의 빈도수가 학습되어 있으므로, 새로운 메일을 입력하면 확률적으로 분류가 가능
- 모델은 단어의 조합이 특정 클래스(spam/ham)에 얼마나 많이 등장했는지를 기반으로 예측을 수행
스팸 분류의 확률 계산 방식
입력 텍스트가 "my free lottery"
라고 했을 때, 이 텍스트가 정상 메일일 확률과 스팸 메일일 확률을 각각 계산해보면 다음과 같다.
\[ P(\text{정상}|본문) = 0 \quad (\text{단어 중 'my', 'free', 'lottery' 모두 정상메일에 없음}) \] \[ P(\text{스팸}|본문) = \frac{1}{10} \cdot \frac{3}{10} \cdot \frac{3}{10} = 0.009 \]
→ 따라서 해당 메일은 확률적으로 스팸 메일로 분류됨
오늘의 회고
오늘 학습한 조건부 확률과 베이즈 정리는 단순히 수학적 개념을 넘어, 실제 인공지능 모델의 핵심 원리로 작용한다. 특히 나이브 베이즈 분류기는 구조는 단순하지만 텍스트 분류, 감정 분석, 이메일 필터링 등 다양한 분야에서 널리 쓰이는 실용적인 모델이다.
앞으로 생성 AI 모델에 다양한 입력 조건이 들어왔을 때, 각 조건에 맞는 출력을 예측하는 데에도 이러한 확률 기반 사고가 핵심이 될 것이다. 단어 하나하나에 확률을 부여하고 이를 조합해 최종 판단을 내리는 방식은, 언어 생성형 AI가 문장을 생성하는 원리와도 닮아 있다.
'[kakao x goorm] 생성 AI 응용 서비스 개발자 양성 과정 > 회고록' 카테고리의 다른 글
[kakao x goorm] 배열이란? 기본 개념과 실습으로 익히기 (0) | 2025.04.08 |
---|---|
[kakao x goorm] 반복문과 조건문을 활용한 알고리즘 개념 정리 (0) | 2025.04.07 |
[kakao x goorm] 벡터와 텐서의 깊은 이해 및 인공지능에서의 중요성 (0) | 2025.04.04 |
[kakao x goorm] 미분법과 오차역전파의 기초 (0) | 2025.04.03 |
[kakao x goorm] 극한, 연속, 미분 수학 (2) | 2025.04.01 |