머신러닝 모델을 평가할 때 가장 많이 사용되는 지표 중 하나는 정확도(Accuracy)입니다. 하지만 데이터의 특성과 분포에 따라 정확도가 항상 모델의 성능을 제대로 반영하지는 않습니다. 따라서 F1-score와 같은 다른 지표의 필요성이 대두됩니다. 이번 글에서는 정확도와 F1-score의 차이점, 각각의 장단점, 그리고 이 두 지표를 적절히 활용하는 방법에 대해 살펴보겠습니다.

정확도(Accuracy)

정확도는 모델이 올바르게 예측한 샘플의 비율을 나타냅니다. 수식으로 표현하면 다음과 같습니다.

\[ \text{정확도} = \frac{\text{올바른 예측 수}}{\text{전체 샘플 수}} \]

정확도는 직관적으로 이해하기 쉽고 계산이 간단하여 많이 사용됩니다. 하지만 불균형 데이터셋에서는 문제를 일으킬 수 있습니다. 예를 들어, 특정 클래스의 샘플 수가 매우 적을 경우, 모델이 대부분의 샘플을 대다수 클래스에 속하도록 예측하더라도 높은 정확도를 기록할 수 있습니다.

from sklearn.metrics import accuracy_score

y_true = [1, 0, 1, 1, 0, 0, 0, 1]  # 실제값
y_pred = [1, 0, 0, 1, 0, 0, 0, 0]  # 예측값

accuracy = accuracy_score(y_true, y_pred)
print(f'정확도: {accuracy:.2f}')

F1-score

F1-score는 정밀도(Precision)와 재현율(Recall)의 조화 평균입니다. 정밀도는 모델이 양성으로 예측한 것 중 실제 양성의 비율을 의미하고, 재현율은 실제 양성 중 모델이 양성으로 올바르게 예측한 비율을 나타냅니다. F1-score는 다음과 같이 계산됩니다.

\[ F1 = 2 \times \frac{\text{정밀도} \times \text{재현율}}{\text{정밀도} + \text{재현율}} \]

F1-score는 데이터가 불균형할 때 더 유용한 성능 지표로 간주됩니다. 왜냐하면, F1-score는 정밀도와 재현율의 균형을 고려하기 때문입니다.

from sklearn.metrics import f1_score

# 예시 데이터
y_true = [1, 0, 1, 1, 0, 0, 0, 1]
y_pred = [1, 0, 0, 1, 0, 0, 0, 0]

f1 = f1_score(y_true, y_pred)
print(f'F1-score: {f1:.2f}')

정확도와 F1-score의 비교

정확도와 F1-score는 서로 다른 측면에서 모델의 성능을 평가합니다. 정확도는 단순히 올바른 예측의 비율을 제공하는 반면, F1-score는 클래스 간 불균형 문제를 해결하는 데 더 효과적입니다. 예를 들어, 의료 진단 문제에서 건강한 사람과 병든 사람의 비율이 불균형할 경우, 정확도는 높은 값을 기록할 수 있지만, 실제로 필요한 양성 예측의 성능은 떨어질 수 있습니다. 이 경우 F1-score가 더 신뢰할 수 있는 지표가 됩니다.

모델 성능을 올리기 위한 전략

  1. 다양한 지표 활용: 모델의 성능을 평가할 때 정확도뿐만 아니라 F1-score, 정밀도, 재현율 등 다양한 지표를 고려하세요.
  2. 혼합 데이터셋 사용: 데이터셋을 균형 있게 구성하여 학습과 테스트를 진행합니다.
  3. 모델 튜닝: 하이퍼파라미터 튜닝, 교차 검증 등을 통해 모델 성능을 극대화하세요.
  4. 비즈니스 이해: 모델이 사용될 실제 비즈니스 환경을 이해하고, 해당 환경에서 중요한 지표를 선택하세요.

마무리

머신러닝 모델을 평가할 때 정확도와 F1-score는 각각의 장단점을 가지고 있습니다. 특정 상황에 따라 적절한 지표를 선택하는 것이 중요하며, 상황에 따라 여러 지표를 함께 사용해 모델의 성능을 종합적으로 평가하는 것이 필요합니다. 데이터의 특성을 파악하고, 그에 맞는 평가 지표를 선택함으로써 더 나은 머신러닝 솔루션을 개발할 수 있을 것입니다.