캡쳐 사진 및 글작성에 대한 도움 출저 : 유튜브 - 허민석님


머신러닝을 가지고 모델을 만들어 예측하다보면, 하나의 꼬리를 가지고 여러 classifier로 만들 수 있다.
예를 들어, kNN이나 Decision Tree 등으로 만드는 것이다.
이 분류기(classifier)들 가운데 가장 성능이 좋은 것으로 채택해야하는데, 이 때 사용되는 개념이

  1. Accuracy
  2. precision
  3. recall
  4. f1 score

4가지 개념이다.


이전 시간을 학습한 Confusion Matrix를 통해, 우리가 만든 모델(classifier)를 평가할 수 있었다.


아래 2 Model이 2개의 classifier라고 가정해보자.
2개의 분류기 가운데 어느 것을 선택해야할까?

image

그 과정에서 사용되는 개념이 위의 4가지 개념이었다.

  1. Accuracy
  2. precision
  3. recall
  4. F1 score


    기본개념

    성능평가는 AccuracyF1 score가 주요개념이며,  이 f1score를 다루기 위해서는 precision과 recall을 알아야하는 것이다.
    그리고 이러한 개념들을 다루기 위해서는 아래와 같은 기본개념을 이해해야한다.

    1. TP(True Positive)
    2. TN(True Negative)
    3. FP(False Positive)
    4. FN(False Negative)
      image



    my) 뒤에서부터 해석
    올바른 것/거절해야할 것을( Posi/nega )-칼럼으로 매칭 ==>  True/False 에 잘 한것/반대로 한 것 - 행으로 매칭

    1. True Positive

    말 그대로, input 클래스(True)에 대해서
    올바른 것(Positive)을 --> 올바르게 예측(True)한 것이다.
    - Confusion matrix내에서는 대각선을 의미한다.

    image


    2. True Negative for A

    거절해야할 것을 (Negative) : B,C,D칼럼 --> 잘 거절 한 것(True) : B,C,D행이다.
    A 클래스 입장에서는, 아래 파란색 cell들이 True negative라고 할 수 있다.
    image

    예를 들어, D입장에서는 아래 구간이 True Negative라 할 수 있다.
    image


    3. False Positive for A

    올바른 것(Positive) --> 잘못 거절-다른 것을 예측(False)해버린 것이다.
    A예측 칼럼------------> A제외 B,C,D로 잘못예측한 것들
    image


    예를 들어서 False Positive for B는
    B칼럼(올바른것-positive) 중에서 --->  B제외 잘못예측한 것(A,C,D행)
    image


    4. False Negative for A

    거절해야할 것(B,C,D칼럼) -----> 거절하지 않고 잘못 맞다고 한 것(A행)
    - confusion matrix에서는 해당 row에서 대각선(True Positive)를 뺀 나머지 cell들이다.
    image





    Performance Measure 1. Accuracy

    Accuracy의 계산방법은 간단하다.

    True positive(대각선)의 합 / Confusion Matrix의 모든 cell의 합
    image


    이제 2개의 분류기의 Accuracy를 비교해보자.
    Accuracy만 따지면 Model1 분류기를 사용할 것이다.
    image


    이러한 Accuracy로 Performance Mesure를 사용할 때는,
    데이터가 balance할 때 효과적이라고 한다.
    image

    즉, 각 클래스별로 input되는 데이터량이 동일할 때, 사용한다.


    주의점)
    만약, 데이터가 imbalance하여 각 클래스별 input량이 다를 때는 정확하지 않을 수도 있다고 한다.
    즉, 해당 분류기의 performance가 좋지 않음에도 불구하고 아래와 같이 좋다고 얘기를 해버린다고 한다.
    image

    A에만 input데이터가 쏠린 imbalanced data이다.
    Accruacy는 Model2가 높지만, 사실상 자세히 들여다보면,
    B, C, D에 대해서는 10개중에 1개밖에 못맞추는 모델이다. 즉, A만 잘맞추는 모델이다.

    이것들 Model1보다 좋다고 얘기할 순 없는 것이다.
    오히려, 전반적으로 예측을 잘하는 Model1이 더 낫다.


    이렇게 imbalanced data가 주어진 상황에서는 어떤 performance measure를 사용해야할까?


    Performance Measure 2. f1-score

    F1-Score는 왜 imbalanced data에서도 성능 측정을 잘 할 수 있을까?


    먼저, recallprecision에 대해서 알아보자.

    아래의 confusion matrix가운데,

    1. Recall에 해당하는 행 방향
      input된 class에 대해서, 분류기(Classifier)가 어떤 class로 예측을 하는지에 대한 척도이다.
    2. Precision에 해당하는 칼럼 방향
      예측한 값들 중에서 제대로 예측했는지에 대한 척도이다.
      image


    f1-score
    는 이 Recall과 precision을 이용하여 조화평균(harmonic mean)을 이용한 score이다.
    image


    조화 평균은 [ 2 * ab / a + b ]의 공식을 가지고 있으며, 그림으로 나타내면 아래와 같다.
    즉, 2개의 길이에 대해서 반대편으로 선을 내릴 때, 서로 만나는 점의 길이다.
    image
    A가 B보다 큼에도 불구하고, 조화를 이루어서 B에 가깝에 어떠한 평균이 나타나게 된다.


    그렇다면, Recall과 Precision에 대해서도 아래와 같이 나타날 수 있다.
    비록, precision이 큰 경우에도, 작은 recall에 대해 조화를 이루는 높이를 평균으로 채택하게 된다. 반대도 마찬가지이다.
    image


    즉, 조화평균은 단순하게 평균을 구하는 것이 아니라, 먼가 큰 값이 있다면 패널티를 주어서, 작은값 위주로 평균을 구하게 된다.
    이러한 원리로, imbalanced data에 대해서 큰 값을 가진 A class가 있더라도, 강력한 효과를 통해 평균을 구하게 된다.

    image


    이제 이 F1 score를 구하려면, Precision과 Recall을 계산하여야할 것이다.


    공식상으로는 각 클래스별 precision =   TP / TP + FP 을 구한 뒤 평균을 내면 된다.
    FP는 올바른 것을 틀리계 예측한 것이므로, 각 칼럼 4개 cell 중 3개를 더하면 된다.

    모델 1의 경우
    - A의 precision은 100/ 100 + 0 = 1
    - B : 9 / 9 + 82
    - C : 8 / 8 + 10
    - D : 9 / 9+12
    image
    image


    이번에는 Recall을 계산해보자.
    공식상으로는 각 클래스별 =  TP / TP + FN를 구한 뒤 평균이다.
    FN는 아닌 것을 반대로 맞다고 판단하는 것이므로, BCD칼럼 중 A행을 택하는 것이다. 그러므로 TF이외에 행방향의 3개의 cell을 더하면 된다.
    - A의 recall : 100  / 100 + (80+10+10)  와 마찬가지로 다 구해서 평균을 낸다.
    image

    image


    모델2도 마찬가지로 precision과 recall을 계산하면, 0.342가 나온다.

    이렇게 imbalnaced data에서 모델간의 성능측정을 해보니, Accuracy와는 반대로 Model 1가 높게 나왔다.
    image

    결론적으로

    balanced data -> Accuracy로 Perfomance Measure로 채택

    imlbalanced data -> f1-score로 채택하자!





    1. minsuk 2018.10.08 11:39

      안녕하세요. 자료의 출처를 밝혀주시면 더욱 좋을 것 같아요! 요약해주셔서 감사합니다.

      • 2018.10.08 12:09

        비밀댓글입니다

    2. Daviec 2019.05.05 21:12 신고

      잘보고 갑니다! 자료의 출처 남겨주시면 더 좋을 것 같아요

    3. skybook 2020.06.24 15:21

      안녕하세요 글이 너무 좋아
      매번 다시 보면서 곱씹고 있습니다.

      궁금한점은

      accuracy 와 f1-score 를 둘 중에 하나만 평가지표로 쓰는 것이 아니라 50% 비중으로 둘 다 사용하는 것에 대해서는 어떻게 생각하시는지?
      그리고 balance data 에 대해서 accuracy 와 f1-score 둘 다를 평가지표로 사용하는 것에 대해서는 어떻게 생각하시는지요?

    4. 777천재777 2021.08.25 11:56 신고

      좋은 정보 감사합니다.
      그런데 f1score 가 실제 계산 한 값과 비교해볼 때 소수점 6이나 7번째 에서 달라지는데
      왜 그런 걸까요?

      2*(p * r) / (p + r) 계산 순서는 아래가 맞는 것 같고요

      1. (p * r)
      2. (p + r)
      3. (p * r) / (p + r)
      4. 2 * (p * r) / (p + r)

      • 777천재777 2021.08.25 12:10 신고

        sklearn 의 f1_score 함수를 썼을 때와 confusion matrix 를 보고 실제 공식으로 계산한 결과와 비교해서요

    + Recent posts