일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 제약
- 분석
- 영어연설
- CC#3
- 데이터
- 데분
- 취업
- 엘뱌키안
- publicspeaking
- 인과추론
- 사이허브
- 공유경제
- 평창
- 연설
- 영화
- 카이제곱분포
- Toastmaster
- 구글#빅쿼리#데이터분석
- SQLD
- 풀러스
- CC#5
- 2018계획
- 토스트마스터
- 정형데이터
- 임상통계
- 데이터분석
- Public Speaking
- F분포
- 대중연설
- PGTM
- Today
- Total
지지플랏의 DataScience
(10) DSforS : Chap5. 분류 5.3 ~ 5.4. 로지스틱회귀(LoR), 분류모델 평가 본문
(10) DSforS : Chap5. 분류 5.3 ~ 5.4. 로지스틱회귀(LoR), 분류모델 평가
지지플랏 2024. 6. 11. 22:081. 목차
- 5.3. 로지스틱회귀
- 5.4. 분류모델 평가하기
- 5.4.1 ~ 3. 혼동행렬, 분류문제, 정밀도, 재현율, 특이도
- 5.4.4 ~ 5: ROC곡선, AUC
- 5.4.6. 향상도(lift)
2. 본문
늘 머신러닝을 배울 때 선형회귀만큼은 잘 이해가 된다. 선형직선은 중학교때부터 배웠기에 익숙하고 에러의 개념을 받아들이기도 어렵지않으니까. 하지만 이 로지스틱 회귀라는 놈은 늘 어딘가 2% 부족한 설명을 하게되는 경우가 많다. 왜그럴까? 일단 첫 번째 문턱은 바로 오즈비(odds ratio)에 대한 생소함이라고 생각한다.
2.1. 로지스틱 회귀
2.1.0. 나이브한 접근법
본격적으로 들어가기 전 선형회귀로 한번 이진 분류를 예측한다고 해보자.
import matplotlib.pyplot as plt
import numpy as np
# Sample data
np.random.seed(0)
x_0 = np.random.normal(2, 0.5, 20)
x_1 = np.random.normal(8, 0.5, 20)
y_0 = np.zeros(20)
y_1 = np.ones(20)
# Linear regression line (for demonstration purposes, using a simple linear relation)
x = np.linspace(0, 10, 100)
y = 0.1 * x
# Plotting
plt.figure(figsize=(10, 6))
plt.scatter(x_0, y_0, color='blue', label='Class 0')
plt.scatter(x_1, y_1, color='red', label='Class 1')
plt.plot(x, y, color='green', label='Linear Regression Line')
plt.xlabel('Feature Value')
plt.ylabel('Probability')
plt.title('Example of Linear Regression in Binary Classification')
plt.legend()
plt.grid(True)
plt.show()
어떤가? 선형회귀가 해당 하는 값들을 잘 설명한다고 할 수 있을까? 할수는 있을 것 같다. 그런데 문제는 실제로 class =0, 1에 대한 값들이 X축의 Feature Value와 같이 딱딱 떨어지지 않는 다는 점이다. 또한 선형회귀의 Y값은 0과 1과 같이 출력값을 제한하는 장치가 전혀없다. 그러니까 다시말하면 최종 결과 예측값이 음수가 될수도 1이 넘을 수도 있다.이건 확률의 정의와 맞지 않다.
따라서 몇가지 로지스틱회귀를 위한 원칙을 세워보자
- 종속변수 Y값은 확률로 정의하고 0과 1사이 값을 출력하도록 제한할 것
- 해당 값은 Y=1일 사건의 확률로 정의하자
- 선형그래프보다 더 유연한 그래프 (예를들면 곡선)을 만들어 데이터를 잘 설명하는 선을 그을 것
단순한 요구사항 같지만 여기서부터 기존식을 약간 변형해야한다. 선형회귀 식은 다음과 같다는 점을 확인하고 좌변만 이렇게 저렇게 바꿔보도록 하겠다.
$Y = \beta_0 + \beta_1X$
2.1.2. 오즈비(odds ratio)
오즈비라는 개념을 도입해보자. 오즈비라는 것은 다음과 같이 정의된다
$odds = \frac{p}{1-p}$
통상 오즈비라는 것은 실패대비 성공확률을 가르키는 도박사의 판단근거에서 왔다고 한다.예컨데 성공확률이 50%라면 0.5/0.5 = 오즈비는 1이다. 성공확률이 75% 라면 0.75/0.25 오즈비는 3이다. 아니 그럼 왜 실패 대비 성공비일까 하필? 사실 그냥 성공확률만 보고 도박을 걸면되는게 아닐까 라는 생각이 들었다. 한가지 합리적인 이유는 다음과 같다.
오즈비는 단순 성공확률이 아닌 실패와의 비율을 함께 포함하는 지표이다. 예컨데 질병발병확률이 매우 낮을때 (1%) 와 같이 극단적인 경우에도 쓸 수 있다는 것이다.
뭐 딱히 그렇게 와닿는 해설은 아니지만 어느정도 비율 실패비율과 성공비율을 동시에 표현한다는 점에서는 인정하는 바이다.
2.1.3. 그렇다면 로그오즈비는 어떠한가?
오즈라는 값은 바로 사용하기 어려운 점이 있다. 확률$P$가 0에 가까워지면 0에 가까워지고 1에 가까워지면 과 무한대로 발산하는 지표이기 때문이다.
$odds = \frac{p}{1-p}$
우리가 알고 싶은 값은 $P(Y = 1)$의 확률 값이다. 좌측 그래프처럼 Y축이 확률이 되었으니 잘 도시한거아니냐고? 다시 생각해보자 우리는 선형회귀에서 X축이 일반적으로 데이터값이 들어온다. 해당 데이터가 들어오는데 이렇게 극단적으로 치우쳐져 있으면 데이터를 잘 설명할 수 없게된다. 이것보다 더 완만한 그래프를 찾을 필요성을 느끼게된다.
우리가 그래서 나온 것이 오즈비에 로그를 씌운 로그오즈비이다. 우리가 알고 싶은 정보는 특정 클래스로 분류될 확률 $P(Y = 1)$이다. 오즈비를 바로 Y 값으로 쓴다면 적절하지 못하다.
$ 로그 오즈비(L) = log(\frac{p}{1-p}) $
위 식을 다시 도시하면 다음과 같다.
$ p = \frac{e^L}{1 + e^L} $
이제 $P(Y= 0)$ 때와 $P(Y=1)$일때를 각각 설명할 수 있는 유선형의 로지스틱함수가 완성이 되었다. 우리는 로그오즈를 이용하여 선형회귀의 우측 식을 차용할 것이다. 쉽게 말해서 회귀계수로 표현할 것이다.
$ \log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1X_1 + \beta_2X_2 + \dots + \beta_nX_n $
이식은 어떤 뜻일까? X 독립변수가 들어오면 우변의 값이 계산이 될 것이고. 어떤 값이 들어오든 0과 1사이에 진동하는 Y축의 값을 만든다는 것이다. 다시 말해 모델이 이미 완성되었다고 할 때, X값이 들어오면 $P(Y=1)$이라는 확률 값을 예측할 수 있다.
2.1.4. 로지스회귀의 적합방법
식은 어느정도 이해했다고 하자 그럼 로지스틱회귀는 어떻게 학습되는가에 대한 궁금증이 생긴다. 선형회귀의 경우는 RMSE라는 지표를 설정하여 그 값을 최소화 하는 식으로 회귀계수 $\beta$를 조절해왔다. 하지만 로지스틱회귀는 좌변이 로그오즈비이니 조금 복잡할 것으로 보인다.
로지스틱회귀는 선형회귀와 달리 확률을 예측하는 모델이다. 그러니까 우리의 목적은 $\beta$를 움직이면서 발생할 가능성을 최대화 하는 파라미터를 찾아야한다. 여기서 난이도가 급상승하게 되는데 바로 우도 함수(Likelihood function)의 개념이 등장한다. 우도함수는 주어진 데이터 집합에서 모델의 파라미터를 평가하는 함수로 로지스틱 회귀의 경우 각 데이터에 대한 예측확률을 결합하여 전체 데이터 집합의 우도를 계산한다.
$L_i = p_i^{yi}(1-p_{i})^{1-y_i}$
여기서 $y_i$는 종속변수 (이진결과), $p_i$는 에측된 성공확률, $L_i$는 우도이다.
전체 데이터 집합의 우도함수는 개별 우도의 곱으로 정의한다는 점을 받아들이자
$L(\beta) = \prod_{i=1}^{N} p_i^{y_i} (1 - p_i)^{1 - y_i}$
여기서 $\beta$는 모델의 파라미터 벡터이다.
우리는 로그 우도를 최대화하는 모델을 찾는것이 목적이였다. 하지만 실제로는 우도함수 그자체보다 로그 우도함수를 계산하는 것이 더 안정적이라고 알려져있습니다.
$\log L(\beta) = \sum_{i=1}^{N} \left[ y_i \log(p_i) + (1 - y_i) \log(1 - p_i) \right]$
해당하는 파라미터 $\beta$를 찾기위해선 흔히 알고있는 경사하강법을 사용하거나 뉴턴-랩슨 방법같은 알고리즘을 사용하게 됩니다. 디테일은 생략!
2.2.1. 분류모델 평가지표: f1-score
선형회귀도 평가하는 지표로 RMSE, MAE 등을 사용했으니 분류모델도 평가모델이 있어야 할 것이다. 분류모델 평가는 되게 쉬워보인다. 바로 정확도(Accuracy) 전체 데이터 중에 맞춘 것에 대한 비율이다. 직관적이고 쉽다. 하지만 정확도는 맹점이 있는데 바로 실제로 음성인 것을 음성으로 예측하고 양성인 것을 양성으로 예측하는 2가지 지표를 동시에 고려해야한다는 점을 간과한다. 이는 혼동행렬(confusion matrix)를 보면 쉽다.
Recall(재현율) 혹은 Sensitivity(민감도)이라는 값은 데이터에 관심을 가진다. 실제로 양성인 데이터 중 몇 개를 맞추었는가가 중점이다.
$Re = \frac{TP}{(TP+FN}$
반면 정밀도(Precision)는 모델에 관심을 가진다. 실제로 예측한 중에 얼마나 맞추었는가가 중점이다.
$Pr = \frac{TP}{TP+FP}$
두가지 지표를 종합하여 조화평균을 이용하면 일반적으로 분류모델이 사용하는 f1 score 가 만들어진다. 여기서 조화평균은 평균을 내는 방법 중에 하나 인데, 산술평균($\frac{a+b}{2}$)는 하나의 지표가 크거나 작으면 전체 값이 흔들려 지표의 강건함이 약하다. 따라서 이를 보완하기 위한 조화평균을 사용한다.
$f1-score = 2*\frac{Pe*Pr}{Pe+Pr}$
2.2.2. ROC커브와 AUC
혼동행렬에는 하나의 지표가 더 있다. 실제로 음성인 것을 정확히 음성으로 분류한 비율 특이도(Specificity)이다.
$Sp = \frac{TN}{TN+FP}$
사실 재현율과 특이도는 서로 trade-off 관계가 있다. 실제로 양성인 것중에 양성을 맞춘 비율(재현율)과 실제로음성인 것 중에 음성을 맞추는 비율(특이도)는 합리적인 시소관계가 성립할 것 같다. 그도 그럴 것이 양성으로 잘 예측 한다는 것은 음성을 양성으로 잘못 예측할 가능성도 높아진다는 말이기 때문이다. 따라서 이런 트레이드 오프 관계를 잘 설명하기 위한 지표가 ROC 곡선(receiver operating characteristic, 수신자 조작 특성) 이라고 한다.
엥그런데 이상한 점이 있다. 그럼 같은 모델이여도 트레이드 오프가 있다는 것인가? 우리는 분류를 할 때 하나 중요한 개념을 제외하였다 바로 임계값의 개념이다. 우리는 $P(Y=1)$ 그러니까 클래스 1에 속할 확률을 도출하고 일정 값 기준이면 class 1 이라고 분류 그렇지 않으면 class 0 이라고 분류한다. 어떻게 할까? 아무래도 0.5로 기준을 잡는게 적절해보인다. 이를 임계값(threshold)혹은 cut-off라고 한다.
그런데 말이다. 암 진단과 같은 경우에는 0.5라고 하는 비율이 그렇게 좋아보이지 않는다. 왜나면 일단 암과 같은 의증이 있기만 하면 정밀검사를 했을 때 소요하는 비용보다 암을 검진함으로서 얻는 이득이 훨씬 크기 때문이다. 따라서 양성을 판단하기 위한 기준을 더 낮게(임계 값을 낮게) 설정하여 더 케이스를 양성을 분류하여 재현율 혹은 민감도(참 양성비율)을 높이는 게 적절할 것이다.
다시 돌아와서 같은 모델이더라도 임계 값 기준에 따라 지표 값이 달라질 수 있다. 이를 두루두루 보고자 하는게 ROC커브의 본질이라고 할 수 있겠다.
이 ROC 커브는 x축에는 1-특이도를 표기하고 y축에는 재현율 혹은 민감율을 도시하여 다음과 같이 표기한다. 중간에 가로지르는 빨간색 점선이 기준값이고 왼쪽 상단으로 그래프가 붙을수록 더 좋은 모델이다. 좌상단에 끝으로 붙으면 해당 적분면적 비율이 1이 될 것이다. 그렇다 면적을 ROC커브를 측정하는 지표로 보고 이걸 AUC(area undereath the curve)라고 한다.
그래프를 해석하기 위해서는 특정한 점을 고정해놓고 x축 / y축을 고정시켜놓고 이해하는게 좋겠다.
- X축은 1-특이도이다. 그러니까 좌측으로 갈수록 음성데이터를 잘 맞추는 것 우측으로 갈수록 음성 데이터를 더 잘 못 맞춘다는 것이다.
- Y축은 재현율(민감도)이다 그러니까 위로 올라갈수록 양성 데이터를 더 잘맞춘다는 것이다.
위와 같은 이해가 있다고 할때 좌측 그래프의 가상의 초록색 선을 그어보자. 그럼 빨간선(기준선)의 4번 점보다 2번 점이 동일한 1-특이도 상에서 더 높은 재현율(민감도)를 가진다. 해석하자면 그래프는 위로 올라갈수록 좋다. 반면 우측그래프는 같은 재현율(민감도) 기준이라면 좌측으로 갈수록 특이도가 더 높다( X축은 1-특이도 이다) 다시 말해 왼쪽으로 붙을 수록 더 좋은 모델이다.
이번엔 분포로 한번 확인해보자. 암에 걸리지 않은 환자와 이미 암의 걸린 사람들이 정규분포를 따른다고 가정을 하고 다음과 같이 확률밀도함수를 그렸다. 그리고 threshold는 굵은 검은선으로 표현하자. 구분이 명확해진다.
False Positive라는 뜻은 암에 걸렸다고 판단했지만 실제로 암이 아닌 사람이며, True Positive는 암에 걸렸다고 판단했고 실제로 암인 사람들이다. 어떻게 되었든 우리는 threshold 낮춰 최대한 많은 사람들이 "아 그래도 검진 한번 받아 보시죠" 라고 권해야한다.
위 그래프가 잘 이해가 안간다면 아래 움짤을 보면 너무나 이해가 된다. 공돌이 수학정리노트 짱
threshold가 움직임에 따라 ROC커브의 움직임을 표현하면 다음과 같다.
더 자세한 설명을 듣고 싶으면 공돌이 님의 블로그를 참고해보자
2.2.3. 향상도(Lift)
여기까지 왔다면 그래 나이브하게 임계값을 0.5로 설정하는 것이 적절하지 못하고 맥락에 따라 조절해야하는 것은 알겟다. 그러면 어떻게 결정해야하는지에 대한 궁금증이 생긴다. 이를 평가하는 지표로 리프트(lift)를 활용할 수 있다.
향상도의 기조는 baseline을 랜덤하게 선택하는 분류하는 보다 모델을 사용했을때 얼마나 더 이득(gain)을 볼 수 있는 가를 측정한다. 예컨데 무작위 선택이 0.1%의 정확도인 반면 상위 10%에서 0.3%의 결과를 얻었다면 상위 10$에서 3의 리프트를 갖는다고 평가할 수 있다.
향상도의 개념은 연관 분석에도 나오는 개념이다.
$lift(B->A) = \frac{P(B|A)}{P(B)} = \frac{P(A∩B){P(A)P(B)}$
B 사건이 일어났을때(B 제품을 구입했을 때, $P(B)$), A를 구입했을때 B를 동시에 살 확률($P(B|A)$) 을 얼마나 끌어올리는가에 대한 지표이다. 일반적으로 향상도가 1이면 두 사건이 독립임을, 1 크면 두 항목이 양의 상관관계가 있음을 1보다 작으면 서로 구매하지 않음을(대체제 - 소고기와 돼지고기의 관계) 표현한다.
'Data Science > 데이터과학을 위한 통계' 카테고리의 다른 글
(12) DSforS: Chap6. 6.1. k-최근접 이웃, 거리지표(마할라노비스) (0) | 2024.06.16 |
---|---|
(11) DSforS : Chap5 5.5 불균형 데이터 다루기 (0) | 2024.06.16 |
(9) DSforS : Chap5. 분류 5.1 ~ 5.3 나이브베이즈(NB), 선형판별분석(LDA) (0) | 2024.06.10 |
(8) DSforS : Chap4. 회귀와 예측 4.5 ~ 4.8 회귀방정식의 해석 ~ 끝 (0) | 2024.06.04 |
(7) DSforS : Chap 4. 회귀와 예측 4.1 ~ 4.4 단순선형회귀 ~ 요인변수 (1) | 2024.06.03 |