본문 바로가기
대외활동

[BDA 11기] 데이터 분석 모델링반 ML1 4주차

by 야딩 2025. 10. 13.


4주차 수업 내용

 

▶  로지스틱 회귀 (Logistic Regression)

○  개념

로지스틱 회귀는  실제로는 분류(classification) 문제에 사용됩니다.
즉, 어떤 입력이 들어왔을때 “어떤 일이 일어날 확률”을 계산해서 그 결과가 일어날지 / 안 일어날지를 판단하는 알고리즘입니다.

예를 들어,

  • 어떤 환자가 병에 걸릴 확률이 얼마나 될까? (걸림 / 안 걸림)
  • 이메일이 스팸일까 아닐까? (스팸 / 정상)
  • 고객이 구매할까 말까? (구매 / 비구매)

이런 식으로 결과가 두 가지(0 또는 1) 로 나뉘는 문제를 해결합니다.

 

 

○  원리

1. 선형 결합 (Linear Combination)
입력값을 각각의 가중치(weight)와 곱해서 더합니다.

 

$$ z=w1​x1​+w2​x2​+⋯+b $$

 

여기서 b는 절편(편향) 이고, w들은 각 입력의 중요도(가중치)를 의미합니다.

이 단계만 보면 그냥 선형 회귀(linear regression) 과 같습니다.

 

2. 시그모이드(Sigmoid) 함수 적용
하지만 결과값을 “확률(0~1)”로 표현하려면, 위의 결과 z를 그대로 쓰면 안됩니다.
따라서 아래 함수를 적용합니다.

$$ sigmoid(z)=11+e−z\text{sigmoid}(z) = \frac{1}{1 + e^{-z}}sigmoid(z)=1+e−z1 $$

  • z가 아주 큰 양수면 결과는 1에 가까움
  • z가 아주 큰 음수면 결과는 0에 가까움

       → 즉, “선형값을 확률처럼 바꿔주는 역할” 을 합니다.

 

최종적으로 모델은 다음처럼 확률을 예측합니다:

$$ P(y=1∣x)=11+e−(w1x1+w2x2+...+b)P(y=1|x) = \frac{1}{1 + e^{-(w_1x_1 + w_2x_2 + ... + b)}}P(y=1∣x)=1+e−(w1​x1​+w2​x2​+...+b)1 $$

이 값이 0.5보다 크면 “1이라고 예측”, 작으면 “0이라고 예측”합니다.

  • P > 0.5 → 긍정(예: 스팸, 병 있음)
  • P < 0.5 → 부정(예: 정상, 병 없음)

 

○  왜 "로지스틱(로그)" 이라고 부르는가

시그모이드 함수의 수학적 변형을 보면 “로그(log)”가 들어갑니다.
특히 로그 오즈(Log Odds) 형태로 확률을 표현하기 때문에 “로지스틱 회귀”라고 부릅니다.

$$ log⁡(P1−P)=w1x1+w2x2+...+b\log\left(\frac{P}{1-P}\right) = w_1x_1 + w_2x_2 + ... + blog(1−PP​)=w1​x1​+w2​x2​+...+b $$

즉, “확률을 로그 공간으로 바꿔 선형 관계로 만드는” 아이디어에서 출발했다고 볼 수 있습니다.

 

 

▶  혼동행렬 (confusion matrix)

○  개념

모델이 한 예측이 얼마나 맞고, 어떻게 틀렸는지를 한눈에 보여주는 입니다.

이 표는 실제 정답과 모델의 예측을 교차시켜 맞음/틀림의 유형을 구분합니다.

혼동 행렬
Confusion Matrix
예측값
긍정 (Positive) 부정 (Negative)
실제 값 긍정 (Positive) TP (True Positive) FN (False Negative)
부정 (Negative) FP (False Positive) TP (True Negative)

 

  • TP (True Positive): 진짜 긍정을 맞게 긍정으로 예측
  • TN (True Negative): 진짜 부정을 맞게 부정으로 예측
  • FP (False Positive): 부정인데 긍정으로 착각 (거짓 경보)
  • FN (False Negative): 긍정인데 부정으로 놓침 (놓친 케이스)

○  성능 지표

  • 정확도 (Accuracy) : 전체 중 맞춘 비율
$$ Accuracy=\dfrac{TP+TN}{TP+FP+FN+TN}​ $$

 

  • 정밀도 (Precision) : 긍정이라고 한 것 중 진짜 긍정의 비율 → 예측을 긍정이라 부른 것의 정확함
$$ Precision=\dfrac{TP}{TP+FP}​ $$

 

  • 재현율 (민감도, Recall) : 실제 긍정 중에 얼마나 잘 찾아냈는가  → 놓치지 않고 잘 건졌는가
$$ Recall=TP+FNTP​ $$

 

  • 특이도 (Specificity) : 실제 부정 중에 얼마나 잘 걸러냈는가
$$ Specificity=TN+FPTN​ $$

 

  • F1-score : 정밀도와 재현율의 조화평균
    • 조화평균 : 두 숫자의 역수의 산술평균의 역수

 

# 환경준비
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.model_selection import train_test_split

# 데이터 전처리
target = 'admit'
x = data.drop(target, axis=1)
y = data.loc[:, target]

cat_cols = ['rank']
x = pd.get_dummies(x, columns = cat_cols, drop_first = True)
x.head

x_train, x_val, y_train, y_val = train_test_split(x, y, test_size = .3, random_state = 20)

# 모델링
model = LogisticRegression() # 로지스틱 : 이진분류모델

model.fit(x_train, y_train)
model.coef_
model.intercept_

pred = model.predict(x_val)

accuracy_score( y_val, pred ) # 정확도

confusion_matrix( y_val , pred  )
print(classification_report(y_val , pred  ))

cm = confusion_matrix( y_val , pred  )

disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels = ['died', 'survived'])
disp.plot(cmap=plt.cm.Blues)
plt.xticks(rotation=90)
plt.show()

일반 학회원 상시 모집

 

빅데이터 분석 학회인 BDA에서는 일반 학회원을 상시 모집하고 있습니다 !

 

정규반 수강이 없어도, BDA의 다양한 콘텐츠와 활동에 참여할 수 있는 ✨유연한 멤버십✨💡

 이런 분들께 추천드려요!

- 스터디, 조별활동만 참여하고 싶으신 분
- 방학 기간 부트캠프 참여를 원하시는 분
- 정규반 수업보다 콘텐츠 위주로 듣고 싶은 분
- 현직자 강연/커리어 인사이트가 궁금하신 분

🙌 일반 학회원이 되면 누릴 수 있는 혜택 ✔️ 원데이 클래스 ✔️ 현직자 강연 (BDA JOB, BDA WAVE, BDA 페스티벌 등) ✔️ 스터디 & 공모전 ✔️ 커피챗 (실무자와의 커리어 대화) ✔️ 부트캠프 등

📌 지금 QR코드로 간편 지원 가능!

👉 우수 일반학회원에게는 특별 혜택도 준비되어 있어요 🎁

https://www.instagram.com/p/DO51_7PEtN2/?igsh=NDM5ODczOTRmYzFx

 

로그인 • Instagram

 

www.instagram.com