다시 살펴보는 머신러닝 주요 개념 1편 – 분류와 회귀/분류 평가지표

경진대회를 푸는 데 필요한 주요 머신러닝 개념들을 요약·정리해뒀습니다. 머신러닝 이론을 기초부터 차근히 설명하려는 목적이 ‘아니므로’ 정독하실 필요는 없습니다. 문제를 풀다가 언뜻 떠오르지 않는 개념이 있을 때 참고해주세요. 총 4편으로 준비했습니다. 1편에서는 분류와 회귀, 분류 평가지표에 대해서 알아봅시다.

 

1. 분류와 회귀

대부분의 캐글 경진대회는 분류나 회귀 문제를 다룹니다.

특히 분류 문제가 많습니다. 시각화 대회 같이 전혀 다른 대회도 있긴 합니다. 예측하려는 타깃값이 범주형 데이터면 분류 문제고, 수치형 데이터면 회귀 문제입니다. 분류와 회귀에 관해 좀 더 자세히 알아보죠.

 

Note: 타깃값이 범주형 데이터면 분류 문제, 수치형 데이터면 회귀 문제!

 

 

1.1 분류

분류(classification)란 어떤 대상을 정해진 범주에 구분해 넣는 작업을 뜻합니다. 예를 들어보겠습니다.

서점의 IT도서 코너에는 IT도서가 있고, 문학도서 코너에는 문학도서가 있습니다. 이때 종업원 은 새로 출간된 《머신러닝·딥러닝 문제해결 전략》을 어느 코너에 꽂아둘까요? 책을 훑어보니 코드 가 많고 IT용어도 많고 데이터 관련 이론도 있습니다. 종업원은 이 책을 IT도서 코너에 꽂아둘 겁 니다. 책의 내용(피처feature; 특징)을 토대로 IT도서(타깃target)라고 판단한 거죠. 종업원이 한 작업이 바로 분류입니다.

머신러닝에서 분류는 주어진 피처에 따라 어떤 대상을 유한한 범주( 타깃값)로 구분하는 방법입니다. 여기서 ‘타깃값은 범주형 데이터’라는 점이 중요합니다. 범주형 데이터는 객관식 문제와 같이 선택지가 있는 값입니다. 개와 고양이를 구분하는 문제, 스팸 메일과 일반 메일을 구분하는 문제, 질병 검사 결과가 양성인지 음성인지 구분하는 문제 등이 모두 분류에 속합니다. 유한한 선택지 중 하나로 구분하면 되니까요. 타깃값이 두 개인 분류를 이진분류(binary classification), 세 개 이상인 분 류를 다중분류(multiclass classification)라고 합니다.

 

 

1.2 회귀

자연현상이나 사회 현상에서 변수 사이에 관계가 있는 경우가 많습니다. 예를 들어, 학습 시간이 시험 성적에 미치는 영향, 수면의 질이 건강에 미치는 영향, 공장의 재고 수준이 회사 이익에 미치는 영향 등이 있죠. 이때 영향을 미치는 변수를 독립변수(independent variable)라고 하고, 영향을 받는 변 수를 종속변수(dependent variable)라고 합니다. 방금 예에서는 학습 시간, 수면의 질, 공장의 재고 수준 이 독립변수고, 시험 성적, 건강, 회사 이익이 종속변수입니다.

회귀(regression)란 독립변수와 종속변수 간 관계를 모델링하는 방법입니다. 회귀가 분류와 다른 점은 종속변수( 타깃값)가 범주형 데이터가 아니라는 사실입니다. 회귀 문제에서 ‘종속변수는 수치형 데 이터’입니다.

학습 시간이 시험 성적에 미치는 영향을 예로 살펴보겠습니다. 종속변수인 시험 성적은 0점, 10 점, 50점, 88점, 100점 등 연속된 숫자값으로 나타낼 수 있습니다(둘 중 하나, 셋 중 하나를 선택 해야 하는 범주형 값이 아닙니다).

간단한 선형 회귀 식을 보겠습니다.

 

 

이와 같이 독립변수 하나( x )와y 종속변수 하나( Y )=사이의 관계를 나타낸 모델링 기법을 단순 선형 회귀(simple linear regression)라고 합니다. 물건 개수와 가격의 관계는 단순 선형 회귀로 나타낼 수 있습니다. 독립변수 x가 물건 개수를, 종속변수 Y가 가격을 뜻합니다.

한편 다음과 같이 독립변수 여러 개와 종속변수 하나 사이의 관계를 나타낸 모델링 기법을 다중 선형 회귀(multiple linear regression)라고 합니다.

 

회귀 문제에서는 주어진 독립변수(피처)와 종속변수(타깃값) 사이의 관계를 기반으로 최적의 회귀 계수를 찾아내야 합니다 . 앞의식에서 회귀 계수(regression coefficient)는 ????1~????3입니다 . 피처와 타깃값으로 구성된 훈련 데이터로 회귀 모델을 훈련해 최적 회귀계수를 추정해야 하는 거죠.

 

회귀 평가지표

회귀 모델을 훈련해 최적의 회귀계수를 구할 수 있습니다. 최적 회귀계수를 구하려면 예측값과 실 젯값의 차이, 즉 오차를 최소화해야 합니다. 오차가 작다는 말은 주어진 데이터에 회귀 모델이 잘 들어맞는다는 뜻입니다. 이론적으로 오차가 0이면 주어진 데이터에 회귀 모델이 정확히 일치합니다. 그러나 현실적으로 힘든 이야기죠. 가능하더라도 훈련 데이터에 지나치게 과대적합(overfitting; 과적합)된 결과일 가능성이 있습니다. 그러면 다른 데이터에는 잘 들어맞지 않겠죠.

이번에는 회귀 모델의 성능을 측정하는 평가지표를 알아보겠습니다. 회귀 평가지표 값이 작을수록 모델 성능이 좋습니다. 주로 사용하는 회귀 평가지표를 표로 정리했습니다. 표의 수식에서 y????는 실제 타깃값이고, ŷ????는 예측 타깃값입니다.

 

▼ 자주 이용하는 회귀 평가지표

 

MSLE와 RMSLE에서 log(y)가 아니라 log(y+1)을 사용했습니다. y에 1을 더한 이유는 로그값 이 음의 무한대(-∞)가 되는 상황을 방지하기 위해서입니다. 다음 그림처럼 로그함수 log(x)는 x가 0일 때 음의 무한대가 됩니다. 한편 log(x+1)은 x가 0일 때 0이 됩니다.

 

▼ 로그함수 그래프

 

이제, 사이킷런의 metrics 라이브러리를 활용해 회귀 평가지표 값을 구해보겠습니다.

 

import numpy as np
# MAE, MSE, MSLE, R2 임포트
from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_ squared_log_error, r2_score

true = np.array([1, 2, 3, 2, 3, 5, 4, 6, 5, 6, 7, 8, 8]) # 실젯값
preds = np.array([1, 1, 2, 2, 3, 4, 4, 5, 5, 7, 7, 6, 8]) # 예측값

MAE = mean_absolute_error(true, preds)
MSE = mean_squared_error(true, preds)
RMSE = np.sqrt(MSE)
MSLE = mean_squared_log_error(true, preds)
RMSLE = np.sqrt(mean_squared_log_error(true, preds))
R2 = r2_score(true, preds)
MAE: 0.5385
MSE: 0.6923
RMSE: 0.8321
MSLE: 0.0296
RMSLE: 0.1721
R2: 0.8617

 

실젯값과 예측값을 임의의 값으로 정한 뒤, 각 평가지표에 따라 값을 출력했습니다. 사이킷런의 metrics 라이브러리를 활용하니 쉽게 구할 수 있죠?

 

상관계수

두 변수 사이의 상관관계(correlation) 정도를 수치로 나타낸 값을 상관계수(correlation coefficient)라고 합니다. 상관계수는 보통 약자 r로 표기합니다. 여러 상관계수가 있지만 가장 많이 쓰는 선형 회귀 상 관계수는 피어슨 상관계수입니다. 피어슨 상관계수(pearson correlation coefficient)는 선형 상관관계의 강도 (strength)와 방향(direction)을 나타내며, -1부터 1 사이의 값을 갖습니다. 상관계수가 음수면 음의 상관 관계가 있다고 하고, 양수면 양의 상관관계가 있다고 합니다.

 

▼ 피어슨 상관계수

 

 

2. 분류 평가지표

이번 절에서는 분류 문제에서 사용하는 평가지표를 알아보겠습니다. 여러 가지가 있지만 가장 기 본적인 지표인 오차 행렬, 로그 손실, ROC 곡선과 AUC를 살펴보겠습니다.

 

 

2.1 오차 행렬

오차 행렬(confusion matrix)은 실제 타깃값과 예측한 타깃값이 어떻게 매칭되는지를 보여주는 표입니다. 혼동 행렬이라고도 합니다. 실제 타깃값이 양성인데 예측도 양성으로 했다면 참 양성(true positive)이고, 실제 타깃값은 양성인데 예측을 음성으로 했다면 거짓 음성(false negative)입니다. 실제 타깃값이 음성인데 예측을 양성으로 했다면 거짓 양성(false positive)이고, 실제 타깃값이 음성인데 예측도 음성으로 했다면 참 음성(true negative)입니다. 네 가지 경우를 표 형태로 나타낸 것이 오차 행렬입니다.

 

▼ 오차행렬

 

참 양성, 거짓 양성, 거짓 음성, 참 음성은 각각 약어로 TP, FP, FN, TN으로 표시합니다. 오차 행렬을 활용한 주요 평가지표로는 정확도, 정밀도, 재현율, F1 점수가 있습니다. 모두 값이 클수록 좋 은 지표입니다.

 

정확도

정확도(accuracy)는 실젯값과 예측값이 얼마나 일치되는지를 비율로 나타낸 평가지표입니다. 전체 값 중 참 양성(TP)과 참 음성(TN)이 차지하는 비율이 정확도입니다.

 

 

평가지표로 정확도를 사용하는 경우는 많지 않습니다. 왜 그럴까요? 10일 중 1일 꼴로 비가 온다고 가정해보겠습니다. 매일 비가 ‘안’ 온다고 예측해도 정확도는 90%입니다. 꽤 높네요. 그런데 이 수치가 의미 있을까요? 우리는 비 오는 날을 잘 예측하길 원합니다. 맑은 날을 아무리 잘 맞춰도 궂은 날을 예측하지 못한다면 실생활에서는 의미가 없습니다. 높은 정확도가 모델의 우수성을 담보하지 않는 경우죠. 이런 이유로 정확도는 평가지표로 잘 쓰이지 않습니다.

 

정밀도

정밀도(precision)는 양성 예측의 정확도를 의미합니다. 양성이라고 예측한 값(TP + FP) 중 실제 양성 인 값(TP)의 비율입니다.

 

 

정밀도는 음성을 양성으로 잘못 판단하면 문제가 발생하는 경우에 사용합니다. 스팸 메일 필터링을 예로 생각해봅시다. 스팸 메일은 양성, 일반 메일은 음성입니다. 양성을 음성으로 잘못 판단하면, 즉 스팸을 일반 메일로 잘못 판단하면 받은 메일함에 스팸이 하나 들어오겠죠. 그래도 ‘필터링 을 제대로 못해줬네’라고 생각하며 스팸을 지우면 끝입니다. 반대의 경우를 생각해보죠. 음성을 양성으로 잘못 판단하면, 즉 일반 메일을 스팸으로 잘못 판단하면 업무상 중요한 메일인데 받지 못할 수 있습니다. 결론적으로 스팸 필터링은 음성을 양성으로 잘못 판단하는 경우에 더 문제가 됩니다. 이럴 때 정밀도를 사용할 수 있습니다.

참고로, 검출하기 원하는 상태를 보통 양성으로 정합니다. 앞의 예에서도 스팸 메일을 양성이라고 정했습니다. 쉽게 말하면, 문제가 되는 상태를 양성, 정상인 상태를 음성이라고 보면 됩니다.

 

재현율

재현율(recall)은 실제 양성 값(TP + FN) 중 양성으로 잘 예측한 값(TP)의 비율입니다. 재현율은 민 감도(sensitivity) 또는 참 양성 비율(TPR, true positive rate)이라고도 합니다.

 

 

재현율은 양성을 음성으로 잘못 판단하면 문제가 되는 경우에 사용합니다. 암을 진단하는 상황을 예로 들어보겠습니다. 암인데(양성인데) 암이 아니라고(음성이라고) 진단하면 큰 문제가 발생하겠죠. 적시에 치료하지 못해 암이 더 전이될 수 있습니다. 반대로 암이 아닌데( 음성인데) 암이라고 ( 양성이라고) 진단하면 어떨까요? 오진이긴 해도 생명에 문제가 되진 않습니다.

 

F1 점수

F1 점수(F1 score)는 정밀도와 재현율을 조합한 평가지표입니다. 정밀도와 재현율 중 어느 하나에 편 중하지 않고 적절히 조합하고 싶을 때 사용합니다. F1 점수는 정밀도와 재현율의 조화 평균2으로 구합니다. 수식은 다음과 같습니다.

 

 

2.2 로그 손실

로그 손실(logloss)은 분류 문제에서 타깃값을 확률로 예측할 때 기본적으로 사용하는 평가지표입니다. 값이 작을수록 좋은 지표입니다( 이름에서 알 수 있겠지만 ‘손실’은 작을수록 좋겠죠?). 수식으로 나타내면 다음과 같습니다.

 

 

여기서 y 는 실제 타깃값을, ŷ 는 타깃값일 예측 확률을 나타냅니다. 이진분류 문제라고 생각해 봅시다. y는 0(음성) 또는 1(양성)입니다. ŷ는 타깃값이1(양성)일 예측 확률입니다.0.1,0.2, 0.99 등 다양하겠죠.

다음은 로그 손실을 구하는 간단한 예시입니다. 실제 타깃값이 1, 0, 1이고, 타깃값이 1일 확률을 0.9, 0.2, 0.7로 예측했다고 합시다. 이때 로그 손실은 다음과 같이 구합니다.

 

▼ 로그 손실 예시

 

세 값의 평균에 음의 부호를 취한 값인 0.2284가 최종 로그 손실값입니다(-{ (-0.1054) + (-0.2231) + (-0.3567) }/3 = 0.2284). [1, 0, 1]에 대해서 양성일 확률을 [0.9, 0.2, 0.7]로 예측했을 때 로그 손실은 0.2284인 겁니다.

 

 

2.3 ROC 곡선과 AUC

ROC(Receiver Operating Characteristic)곡선은 참 양성 비율(TPR)에 대한 거짓 양성 비율(FPR, False Positive Rate)곡선입니다. AUC(Area Under the Curve)는 ROC 곡선 아래 면적을 말합니다(다음 페이지의 그림 참고). AUC는 기본적으로 예측값이 확률인 분류 문제에서 사용합니다.

참 양성 비율(TPR)은 양성을 얼마나 정확히 예측하는지 나타내는 지표로, 앞 절에서 살펴본 재현율과 같은 개념입니다. 양성을 음성으로 잘못 판단하면 문제가 되는 경우에 사용한다고 했습니다.

참 음성 비율(TNR, True Negative Rate)은 음성을 얼마나 정확히 예측하는지 나타내는 지표입니다. 특이도(specificity)라고도 합니다. 참 음성 비율(TNR) 수식은 아래와 같습니다.

 

 

거짓 양성 비율(FPR)은 1 – 참 음성 비율(TNR)입니다. 즉, 1 – 특이도입니다.

 

 

ROC 곡선이 참 양성 비율(TPR)에 대한 거짓 양성 비율(FPR) 곡선이라고 했습니다. 달리 말하 면 민감도에 대한 (1 – 특이도) 곡선입니다.

 

▼ ROC곡선

 

그림의 가로축이 거짓 양성 비율, 세로축이 참 양성 비율입니다. 가운데 점선은 완전 무작위 분류 시 ROC 곡선입니다. 어떻게 하면 이진분류 성능이 가장 나쁠까요? 무작위로 막 분류할 때겠죠. 무작위로 이진분류한 결과를 ROC 곡선으로 그리면 가운데 점선과 같이 나타납니다. 즉, ROC 곡 선이 가운데 점선과 가까울수록 모델 성능이 떨어지며, 위쪽으로 멀어질수록 성능이 좋은 겁니다.

FPR, TPR 모두 0부터 1 사이의 값을 갖습니다. 또한 AUC는 곡선 아래 면적을 의미하기 때문에 100% 완벽하게 분류하면 AUC가 1이고, 완전 무작위로 분류하면 0.5입니다. 다시 말해 모델 성능이 좋을수록 AUC가 큽니다.

 

Note: AUC는 예측값의 크기에 따라 결정됩니다. 즉, 예측 확률이 [0.1, 0.2, 0.7, 0.9]이든 [0.2, 0.3, 0.8, 0.9]이든 AUC 값은 똑같습니다. 예측 확률값의 대소 관계 순서가 같다면 AUC도 같은 거죠. 한편, 로그 손실은 반대입니다. 예측 확률의 대소 관계 순서가 같더라도 확률값이 다르면 로그 손실 점수도 달라집니다. 또한, 양성인 타깃값이 부족한 경우에는 양성을 얼마나 잘 예측했는지가 AUC에 영향을 많이 줍니다. 다시 말해, 평가지표 가 AUC이고 양성이 부족할 때는 음성을 잘 예측하는 것보단 양성을 잘 예측하는 것이 중요합니다.

 

다음은 세 가지 예시 모델의 ROC 곡선입니다.

 

▼ ROC 곡선 비교

 

Dummy Classifier는 무작위 분류기입니다. 조건 없이 무작위로 분류하여 ROC 곡선은 가운데 점선과 같으며, 이때 AUC는 0.5입니다.

이제 SGD 분류기와 Gradient Boosting 분류기의 성능을 비교해봅시다. Gradient Boosting 의 ROC 곡선이 SGD의 ROC 곡선보다 위에 있으므로 Gradient Boosting의 AUC가 더 큽니다. Gradient Boosting 분류기의 성능이 더 우수하다는 뜻입니다.ROC AUC는 캐글에서 종종 사용하는 평가지표입니다.

 

Note: 이 그림은 ROC AUC 차이를 뚜렷이 나타내려는 예시일 뿐입니다. 실제로 Gradient Boosting 모델이 SGD 모델보다 절대적으로 성능이 좋다는 뜻은 아닙니다.

 

2편에서는 데이터 인코딩과 피처 스케일링, 교차 검증에 대해서 알아봅시다.

신백균
KAIST 산업및시스템공학과 졸업 후 한국생산성본부에서 직무교육 기획 및 운영을 담당하는 전문위원입니다. 세계 랭킹 0.18%의 캐글 노트북 엑스퍼트(Expert)이며, 월 평균 6만여 명이 방문하는 데이터 분석/머신러닝 관련 기술 블로그를 운영하고 있습니다. 참여자 1,200명 이상인 머신러닝 관련 오픈 채팅방의 운영진이기도 합니다.

1 Comment

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내