Machine learning & Deep learning

[Machine learning] Classification? Logistic Regression? 에 대한 완전 정리

ysk1m 2025. 3. 13. 23:47

Classification?

Classification은 입력 \(X\)에 대해 Qualitive response를 확률적으로 예측하는 것이다.

앞서 공부한 linear regression은 feature space(predictor)에서 qualitive variable을 다뤘다면 classification에서는 response space에서 qualitive variable을 다루는 것이라 할 수 있다.

 

Classification은 단순히 정확히 맞추고 분류하는 작업으로 해석하는 것보다도 좀 더 확률적으로 접근할 필요가 있다.

다음과 같은 예시를 봐보자.

파란색 원이 연체를 하지 않은 것(default=no)이고 빨간 십자가 연체를 한 것(default=yes)이다.

Balance(잔액)이 많을수록 더 연체를 하는 관계를 볼 수 있고 Income(수입)과는 상관관계가 없어 보인다.

Boxplot을 봐도 비슷하게 해석을 할 수 있다.

Default가 yes인 경우가 Balance의 평균이 no인 경우보다 높다.

반면 Income에서는 서로 별 차이가 없어 보인다.

그럼 연속형 variable인 이런 Balance와 Income을 가지고 qualitive variable인 Default를 예측할 수 있을까?

Linear Regression을 이용하여 Classification을 할 수 있을까?

먼저, 앞서 배웠던 Linear Regression을 이용해서 이것을 모델링할 수 있을까?

잘하면 할 수 있을 것이다.

output이 0.5보다 크면 1로 0.5보다 작으면 0으로 만들면 되니깐...

 

틀린 말은 아니지만 여기에는 심각한 오류가 있다. 

linear regression 식을 써보면 \(x\)라고 주어질 때의 \(y\)의 평균을 구하는 것이다.

$$ \mathbb {E}[Y \mid X = x] \;=\; P\bigl(Y = 1 \mid X = x\bigr) $$

binary classification으로 보면 \(y\)는 0 또는 1이므로 결국 1일 때의 확률과 같다고 결론을 지을 수 있다.

하지만 앞서 말했듯 여기에는 심각한 오류가 있다.

 

그것은 확률은 0부터 1로 표현해야 하지만 linear regression을 이용하는 경우는 음수 또는 1보다 큰 값이 나올 수 있다.

따라서 linear regression을 이용해서 분류문제를 풀 수 없다.

왼쪽은 linear regression으로 분류를 하려 한 것이고 오른쪽은 새로 배울 개념인 logistic regression으로 분류를 한 것이다.

 

linear regression의 경우 500보다 작은 값에 대해 음수로 예측한다.

Balance가 더 커질 때 확률의 값이 1보다도 커질 것이다.

 

반면 새로 배울 개념인 logistic regression은 잘 분류하는 것을 알 수 있다.

Logistic Regression이란??

여기서는 balance를 독립변수로 하여 default 한 확률을 예측하는 식으로 써보겠다.

$$ p(X; \beta) \;=\; \frac {e^{\beta_0 + \beta_1 X}}{1 + e^{\beta_0 + \beta_1 X}} $$

\(p(X; \beta)\)에서 \(;\)의 뜻은 확률 모델이 \(\beta\)라는 파라미터를 가지고 있을 때의 확률 분포를 나타낸다.

 

Logistic Regression은 0과 1 사이로 확률을 표현해 주기 위해 renormalization을 한 것이다.

그렇기 때문에 앞서 배운 대로 parametic function이고 모델링을 하기 위해서 \(\beta\)의 값을 추정해야 한다. 

여기서 좀 더 표현을 쉽게 하기 위해 Log Odds라는 개념을 배운다.

Log Odds(Logit)

Logistic regression을 쓰는 이유가 0~1 사이의 확률을 표현해 주기 위해서다.

식에 exponetial이 들어가 직관적이게 해석이 안될 수 있다. 

Log odds를 통해 Logistic Regression에서도 Linear regression형태처럼 써서 좀 더 직관적이게 표현한 것이다.

$$ \log\left( \frac {p(X; \beta)}{1 - p(X; \beta)} \right) \;=\; \beta_0 + \beta_1 X. $$

여기서 \(\beta_1\) 의 값은 \(X\)가 1 증가할 때 log odds가 증가하는 정도를 나타낸다.

 

Modeling을 하기 위해서는 \(\beta\)를 추정해야 한다고 했는데, 어떻게 추정할까?

Linear Regression에서는 MSE를 이용하여 추정했다.

그럼 Logistic Regression에서는?

 

Maximum Likelihood Estimation

바로 MLE(Maximum Likelihood Estimation)이다.

MLE에 대해 간단히 설명하면 서로 i.i.d일 때 샘플이 나올 확률(Likelihood)이 최대로 되게 하는 \(\beta\)를 추정하는 것이다.

$$ \mathcal{L}(\beta) = \mathcal {L}(\beta_0, \beta_1) \;=\; \prod_{i: y_i = 1} p(x_i; \beta) \prod_{j: y_j = 0} (1 - p(x_j; \beta)) $$

위의 예시를 통해 설명하면 default일 샘플(i일 때)과 default이 아닐 샘플(j일 때)이 나올 확률이 전부 전부 최대가 되게 하는 \(\beta\)를 추정하는 것이다.

여기에 이제 \(log\)연산을 통해 product를 sum으로 바꿔준다.

곱셈의 형태는 최적화하기 어렵기 때문이다.

 

$$ \log \mathcal{L}(\beta) \;=\; \sum_{i: y_i = 1} \log p(x_i; \beta) \;+\; \sum_{j: y_j = 0} \log (1 - p(x_j; \beta)) $$

이때 \(log\)는 monotonic increasing 함수로 \(log\)를 씌어도 최댓값만 변할 뿐 최댓값이 되게 하는 \(x\)의 값(여기서는 \(\beta\))은 변하지 않는다.

 

최댓값을 찾기 위해 미분을 한다.

objective function에 대해 다음과 같이 정리할 수 있고 시간이 있으면 직접 해보자.

추정해야 할 \(\beta_1\) 와 \(\beta_0\)에 대해 미분을 해서 최댓값을 찾아야 하는데 closed form이 없어 구할 수 없다.

그럼 어떻게 해야 할까?

 

그렇다면 iterative 하게 최대점에 점점 가까워져야 한다.

임의의 점에서 시작해서 미분 방향대로 이동하는 Gradient descent를 써서 최댓값에 조금씩 가까워지는 것이다.

Gradient descent에 대해 자세히 공부한 내용은 다음에 정리해 보도록 하겠다.

 

암튼, Logistic Regression에서는 estimator를 구하기 위한 Optimization 방법으로 Gradient descent를 이용한다.

 

\(\beta\) 추정치를 보고 한번 해석해 보도록 하자.

Interpretation

balance가 1 단위 증가하면 확률이 0.0055만큼 증가하는 것일까?

정확하게 말하면 아니다.

 

아까 logit(log odds) 값이 0.0055만큼 증가하는 것이다.

$$ \log\left( \frac {p(X; \beta)}{1 - p(X; \beta)} \right) \;=\; \beta_0 + \beta_1 X. $$

식을 보면 확률이 0.0055만큼 증가하는 것은 아니지만 확률이 증가하는 것이긴 하다.

 

추가로 여기서 얼마나 변하는지는 feature가 어디에 있는지에 따라 다르다.

sigmoid함수를 생각해 보면 0 근처에서 값이 변할 때 확률 값이 크게 변할 것이다.

 

이제 직접 balance에 따라 y값을 예측해 보도록 하자.

Prediction

이제 feature값을 직접 넣어서 확률이 어떻게 되는지 예측해 보면

Balance(연속형 변수)만 있을 때

연속형 변수이므로 그냥 값을 넣어주면 된다.

balance(잔액) \(X = 1000\) 일 때:

$$ p(1000) = \frac {e^{-10.6513 + 0.0055 \times 1000}} {1 + e^{-10.6513 + 0.0055 \times 1000}} = 0.006 $$

→ balance(잔액)이 $1000일 때 Default 확률은 0.6%.

balance(잔액) \(X = 2000\) 일 때:

$$ p(2000) = \frac {e^{-10.6513 + 0.0055 \times 2000}} {1 + e^{-10.6513 + 0.0055 \times 2000}} = 0.586 $$

→ balance(잔액)이 $2000일 때 Default 확률은 58.6%.

 

맨 처음 boxplot에서 봤듯이 balance가 증가할수록 default가 yes일 확률이 커지는 것이다.

Student만 있을 때

feature student에도 똑같이 적용해 볼 수 있다.

단, 여기서 중요한 점은 student는 이산형 변수이다. 

연속형 변수와는 다르게 feature가 1 또는 0으로 계산된다는 점이다.

학생(Student = Yes, \(X = 1\)) 일 때:

$$ p(\text {student} = \text {Yes}) = \frac {e^{-3.5041 + 0.4049 \times 1}} {1 + e^{-3.5041 + 0.4049 \times 1}} = 0.0431 $$

→ 학생이면 Default 확률은 4.31%.

비학생(Student = No, \(X = 0\)) 일 때:

$$ p(\text {student} = \text {No}) = \frac {e^{-3.5041 + 0.4049 \times 0}} {1 + e^{-3.5041 + 0.4049 \times 0}} = 0.0292 $$

→ 비학생이면 Default 확률은 2.92%.

 

student인지 아닌지는 확률을 예측하는데 별 영향을 못 미치는 것을 알 수 있다.

모든 Variable 다 넣을 때(Multi-Logistic Regression)

log odds는 다음과 같다.

$$ \log\left( \frac {p(X; \beta)}{1 - p(X; \beta)} \right) = \beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p $$

$$ p(X; \beta) = \frac {e^{\beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p}} {1 + e^{\beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p}} $$

그냥 multi-linear regression에서 했던 것처럼 feature를 늘려주는 것이다.

Variable을 여러 개로 늘려줬을 때, Student의 Coefficient가 음수로 바뀐 점을 주목해 보자.

왜 바뀌었을까?

Confounding Effect

바로 Confounding Effect 때문이다.

이전 모델에서는 Student가 홀로 쓰였고, 이제는 Balance도 함께 고려되므로 Confounding Effect가 사라진 것이다.

 

student일 경우 Balance가 많아 default가 될 확률이 커지는 것인데, student만 홀로 쓰인 모델에서는 이를 잡아낼 수 없는 것이다.

반면, Balance와 student가 같이 쓰인 모델에서는 confounding인 balance도 함께 고려돼 confounding effect가 사라진 것이다.

 

이해를 돕기 위해 예시를 들어보면

얼음 판매량이 증가하면 익사량이 증가한다.라는 가정이 있을 때

실제로는 날씨가 더워서 얼음 판매량이 올라가고 날씨가 더워지니깐 물놀이를 가서 익사량이 증가한 것인데 이를 고려하지 못한 것이다.

 

여러 변수를 넣어 모델링하면(Multi-Logistic Regression) 이런 confounding effect를 줄일 수 있다.

왼쪽 그래프를 보면, 같은 Balance에 대해 학생이 아닌 사람이 더 default확률이 높은 걸 알 수 있다.

오른쪽 그래프는 학생이 평균 Balance가 높은 것을 알 수 있고, 이는 default확률을 높인다.

학생이어서 default 확률이 높은게 아니라 학생을 봤는데 우연히 balance가 더 높았고 이것이 작용해서 default 확률이 높은 것이다.

즉, student의 여부가 defualt의 positive 효과를 준 것은 confounding effect 때문이었고 multi logistic regression을 통해 이를 해결했다.

 

지금까지 binary classification을 했다면, multi-class에 대해서는 classification을 어떻게 할까?

비슷하게 하면 되는데 이때는 Softmax function을 사용한다.

 

Multiclass logistic regression(multinomial regression)

이제 3개 이상의 클래스가 있을 때는 어떻게 될까?
예를 들어, \( Y \)가 \( K \)개의 클래스를 가질 수 있다고 가정해 보자.

$$ Y \in \{1, 2, \dots, K\} $$

각 클래스 \( k \)에 대해 확률을 다음과 같이 정의한다.

$$ P(Y = k \mid X, \beta) = \frac{e^{\beta_{0k} + \beta_{1k} X_1 + \cdots + \beta_{pk} X_p}} {\sum_{\ell=1}^{K} e^{\beta_{0\ell} + \beta_{1\ell} X_1 + \cdots + \beta_{p\ell} X_p}} $$

분모는 모든 클래스에 대한 지수 함수의 합이고 분자는 클래스 k에 대한 지수 함수이다.

 

사실 binary classification을 할때 쓴 확률 식을 일반화한게  softmax이다.

binary classification은 softmax로 표현하면 다음과 같이 나타낼 수 있다.

$$ P(Y = 1) = \frac{e^{z_1}}{e^{z_0} + e^{z_1}} $$

$$ P(Y = 0) = \frac{e^{z_0}}{e^{z_0} + e^{z_1}} $$

이때, 우리는 보통 기준 클래스(Reference Class)인 \( Y = 0 \)에 대해 \( z_0 = 0 \)으로 설정한다.

즉,

$$ z_0 = \beta_{00} + \beta_{10} X_1 + \cdots + \beta_{p0} X_p $$

를 그냥 0으로 설정하면,

$$ e^{z_0} = e^0 = 1 $$이 된다.

 

그럼 기준 클래스의 \(\beta\)가 0이라는 의미일까?

그건 아니다.

모델을 정규화하기 위해 기준 클래스를 0으로 두는 것이다.

모든 클래스에 대해 \(\beta\) 값을 학습할 수 있지만, 한 클래스는 기준으로 두고 나머지 클래스와 상대적인 확률을 구하는 것이다.