본문 바로가기
인공지능/ML, DL

[ML, DL] Baseline Accuracy란? (기준 모델, 기준 정확도)

by judy@ 2022. 8. 30.

딥러닝, 머신러닝 모델을 현업에서 활용하다 보니, 모델의 성능이 낮은 경우도 있고 터무니 없이 높은 경우도 마주하게 된다.
만든 모델의 성능이 비록 수치상으로 100에 다다르지 못하더라도, 데이터에 비하면! 잘 만들었다는 설명을 어떻게 할 수 있을까 고민하게 되었다.

그러던 와중, 상사분께서 "분류 문제의 경우 데이터 비율이 80:20이면, 최소 80은 넘어야 된다"라는 말씀을 해주셨는데, 어딘가에는 근거가 있을 것 같아 서치하던 중 "Baseline Accuracy"라는 개념을 접하게 되어 내가 이해한 바를 정리해보려 한다.

 

Baseline Accuracy (단순 번역: 기준 정확도)

기준 정확도는 말 그대로 기준이 되는 정확도이다. 위에서 내가 접한 문제처럼 딥러닝/ 머신러닝 모델이 잘 만들어진 것인지를 판단하기 위해 사용할 수 있는 정확도를 말한다. 일반적으로 모델의 성능을 평가할 때에는 이전 SOTA 또는 유사한 task를 잘 수행한다고 알려진 모델을 활용하여 평가 결과를 비교한다. 하지만, 이런 방식을 적용할 수 없는 경우도 있다. 이러한 경우, 지금 소개하는 간단한 두 가지 방식을 활용하여 Baseline Accuracy를 계산하고 분류 모델 평가 시, 비교하는 기준점으로 활용할 수 있다.

1. Zero Rate Classifier (ZeroR)

ZeroR is the simplest classification method which relies on the target and ignores all predictors. ZeroR classifier simply predicts the majority category (class). Although there is no predictability power in ZeroR, it is useful for determining a baseline performance as a benchmark for other classification methods. 

(출처: https://www.saedsayad.com/zeror.htm)

 

 

위 글에 따르면, ZeroR대상에 의존하고 모든 예측 변수를 무시하는 가장 간단한 분류 방법이다. ZeroR 분류기가 대상에 의존한다는 것은 ZeroR 분류기는 가장 빈번하게 등장하는 클래스(범주)를 예측한다. 즉, 이 분류기는 분류 문제에서 하나의 클래스만 예측한다. 따라서, ZeroR에는 예측 가능성이 없지만, 다른 분류 방법에 대한 벤치마크로 기준 성능을 결정하는 데 유용하게 활용될 수 있다.

 

일례를 들어 ZeroR 분류기의 동작을 이해해보자

 

python 의 scikit-learn 라이브러리를 활용하면, wisconsin breast cancer 데이터를 쉽게 불러올 수 있다. 

 

실행 코드:

from sklearn.datasets import load_breast_cancer

data = load_breast_cancer()
np.unique(data['target'], return_counts=True)

실행 결과:

(array([0, 1]), array([212, 357]))

위와 같이 568개의 데이터 중 212개가 benign(양성 종양), 357개가 malignant(악성 종양)이라고 가정해보자. 위 설명에 따르면, ZeroR은 다수의 클래스로만 예측이 가능하므로, 전체 568개를 모두 357이라고 예측할 것이다. 즉, ZeroR의 성능은 다음과 같다.

Baseline Accuracy(ZeroR) = 357(malignant)/ 568(total) * 100 = 62.85%

2. Random Rate Classifier

Now we will put our high school math to work. Another baseline strategy we can use is to see what our accuracy would be if we guessed at the weighted percentages of each class. This value will always be lower than the ZeroR value, so it should not be your lower limit baseline. Instead, it can be used to explain and understand your results in terms of how much value is added by your model.

Random Rate Classifier — Applies prior knowledge of class assignments in making a random class assignment.

(출처: https://towardsdatascience.com/calculating-a-baseline-accuracy-for-a-classification-model-a4b342ceb88f)

 

 

Random Rate Classifier(직역: 무작위 확률 분류기)는 각 클래스의 가중치 백분율을 통해 정확도를 구하는 방법이다. 클래스의 가중치 백분율을 이용한다는 것은, 클래스의 비중이 Accuracy에 영향을 준다고 해석할 수 있다. 위 설명처럼, 이 값은 항상 ZeroR보다 낮은데, 하한 기준선이 될 수 없지만, 비교 대상인 모델(내가 만든 모델)이 잘 학습되었는지, 어떤 의미를 가지는지 이해하고 설명하는 데에 활용할 수 있다. 아래 예제를 통해 무작위 확률 분류기의 동작 원리를 이해해보자.

 

동전 던지기(Coin Flip)

동전을 던지면, 동전의 앞면 또는 뒷면이 나올 것이다. 동전에 어떠한 트릭도 없으며, 이에 따라 두 면이 나올 확률은 동일하다고 가정할 때, 결과의 50%는 앞면, 나머지 50%는 뒷면이다. 즉 결과에 대한 확률은 다음과 같이 계산될 수 있다고 말한다.

 

(head) 0.5 * 0.5 = 0.25
(tail) 0.5 * 0.5 = 0.25

Baseline Accuracy(Random Rate Classifier) = 0.5*0.5 + 0.5*0.5 = 0.5

 

결론만 말하자면, 무작위 분류기의 성능은 다음과 같이 표현될 수 있다.

acc = P(class=0) * P(prediction=0) + P(class=1) * P(prediction=1)

(출처: https://stackoverflow.com/questions/53182709/how-to-calculate-accuracy-score-of-a-random-classifier)

 

(여담: 사실 위 예제를 통해서는 단순하지만 결과의 근거가 무엇인지 생각하기 어려웠는데, stackoverflow의 도움을 통해 가까스로 이해가 되었다. 0.5와 0.5를 왜 곱하느냐에 대한 의문이었는데, 위 표현과 같이 전체에서 클래스의 비중과, 클래스의 발생 확률을 곱한 것으로 생각하니 이해가 되더라...)

 

이 값은 과연 항상 ZeroR보다 낮을까?

이 질문에 대한 답은 Yes이다. ZeroR 분류기의 경우, 클래스의 비중에 따라 Identical(y=x)하게 정확도가 증가하는 반면, 1 이하인 빈번도와 발생 확률을 곱하기 때문에 작을 수 밖에 없다. 이를 표현식과 차트로 나타내면 다음과 같다.

 

표현식:

ZeroR Classifier
Accuracy = P(A)      (if P(A) >= 0.5)
                     1-P(A)  (if P(A) < 0.5)

Random Rate Classifier
Accuracy = P(A)*P(A) + (1-P(A))*(1-P(A))

차트:

 

(파란색) ZeroR Classifier, (붉은색) Random Rate Classifier

위를 통해, ZeroR은 어떤 순간에도 Random Rate Classifier 보다 높은 성능을 나타낸다는 것을 알 수 있다.

 

불균형 데이터는?

위에서 소개한 wisconsin breast cancer 의 이진 분류 문제가 조금 더 기울어진다면 어떻게 될까? 만약 전체 358개 데이터 중, 양성 종양이 300, 악성 종량이 58이라면 Baseline Accuracy는 각각 어떻게 될까?

 

ZeroR Classifier
Accuracy = 300 / 358 * 100 = 83.80%

Random Rate Classifier
Accuracy = (300/358*300/358 + 58/358*58/358) * 100 = 72.85%

100을 곱한 것은 백분율로 나타내기 위함이니 신경쓰지 않아도 된다. 불균형이 심한 경우에도 마찬가지로 ZeroR 분류기의 성능이 더 좋은 것을 알 수 있다.

 

다중 분류라면?

이 또한 같은 방식으로 계산 가능하다. sklearn에서 제공하는 또 다른 데이터인 iris 데이터를 활용해 Baseline Accuracy를 구해보자.

 

실행 코드:

from sklearn.datasets import load_iris
import numpy as np

iris = load_iris()
np.unique(iris.target, return_counts=True)

실행 결과: 

(array([0, 1, 2]), array([50, 50, 50]))

이 경우, 3개의 클래스가 존재하며, 각 클래스의 비율이 완전히 균형을 이루고 있는 것을 알 수 있다.

ZeroR Classifier
Accuracy = 50 / 150 * 100 = 33.33%

Random Rate Classifier
Accuracy = (50/150*50/150 + 50/150*50/150 + 50/150*50/150) * 100 = 33.33%

클래스가 균형을 이루므로, 두 분류기의 성능은 동일한 값으로 계산된다. 이와 같이 다중 분류 문제에서도 위 두 가지 방법을 활용하여 Baseline Accuracy를 계산할 수 있다.

 


 

여기까지 Baseline Accuracy 계산 시 활용 가능한 두 가지 방식(ZeroR, Random Rate Classifier)을 소개하였다. 자료를 정리하며 중요한 내용임에도 불구하고, 참고할 수 있는 자료가 많지는 않았다는 것을 알 수 있었다. 아마도 분류 문제에서만 활용 가능하며, baseline보다 SOTA 또는 다른 분류기의 성능을 활용하기 때문이지 않을까..? 아무쪼록 나는 이 개념을 정리하며, 현업에도 모델 성능에 대한 가장 간단한 대조군(Control)으로서 활용하고 있는 만큼, 자료를 참고하는 분들도 baseline Accuracy의 개념과 계산 방법을 이해하고 활용할수 있기를 바라며 글을 마친다.

 

 

참고 자료:

반응형