← AI 놀이터 홈으로

🎯 로지스틱 회귀 (Logistic Regression)

'공부 시간이 x시간이면 합격 확률은 몇 %일까?' — 직선 대신 S자 곡선으로 확률을 예측하고, 50%를 기준으로 분류해요.

📖 따라하기 가이드 — 1 / 6 단계

Step 1. 데이터 살펴보기

가로축은 공부 시간, 학생들은 위(합격=1) 아니면 아래(불합격=0)에 있어요. 파란 S자 곡선이 모델의 예측 — "x시간 공부하면 합격 확률은 몇 %". 선형회귀의 직선으로는 확률(0~1)을 표현할 수 없어서 곡선이 필요해요.
🎯 미션: 화면 위쪽을 클릭해 합격 학생을, 아래쪽을 클릭해 불합격 학생을 추가해 보세요
📂 데이터 꾸러미:

🖱️ 화면 위쪽을 클릭하면 합격(파랑), 아래쪽을 클릭하면 불합격(빨강) 학생이 추가돼요. 점을 다시 클릭하면 삭제.

🎛️ S자 곡선 조절하기

📊 지금 상태

맞힌 학생
0 / 0명
손실 (교차 엔트로피)
0.0000
가파름 w
1.200
절편 b = −w·c
-3.600

곡선의 식은 p = σ(w·x + b) 이고, 보라색 결정 경계(p=50%)를 기준으로 오른쪽/왼쪽을 합격/불합격으로 분류해요.

🧪 이렇게 실험해 보세요

  1. 슬라이더만으로 전원 정답을 만들어 보세요
  2. 가파름을 아주 크게(5 이상) 하면? — 확신에 찬 AI가 돼요. 근데 경계 근처 학생에게도 그게 좋은 예측일까요?
  3. 3시간 공부하고 합격한 학생을 하나 추가하고 자동 학습 — 곡선이 어떻게 타협하나요?
  4. 가파름을 음수로 바꾸면 무슨 뜻이 될까요?

🧮 수식과 파이썬

p = σ(w·x + b)
시그모이드 σ가 어떤 값이든 0~1 사이 확률로 바꿔줘요.
손실 = −log(정답에 준 확률)
정답에 준 확률이 낮을수록 벌점이 커지는 손실이에요.
🐍 파이썬 코드로 보면? (펼치기)
import torch
import torch.nn as nn

x = torch.tensor([[1.0], [2.5], [4.0], [5.5], [7.0], [9.0]])
y = torch.tensor([[0.0], [0.0], [0.0], [1.0], [1.0], [1.0]])

model = nn.Sequential(
    nn.Linear(1, 1),      # w·x + b
    nn.Sigmoid(),         # 0~1 확률로 변환
)
loss_fn = nn.BCELoss()    # 교차 엔트로피 (이진 분류용)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

for epoch in range(500):
    p = model(x)                  # 합격 확률 예측
    loss = loss_fn(p, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

print(model(torch.tensor([[6.0]])))  # 6시간 공부 → 합격 확률?