AI · 머신러닝 기초
[머신러닝] Accuracy (정확도) 란?

Accuracy, 즉 정확도는 무엇인가요?
머신러닝에서 정확도는 모델이 낸 모든 답 가운데 실제 정답과 일치한 답의 비율입니다. 분류 문제를 예로 들면 사진을 고양이와 개로 나눌 때, 모델이 고양이라고 말한 결과와 실제 고양이 여부가 맞았는지 하나씩 비교합니다. 맞은 수를 전체 판단 수로 나누면 가장 직관적인 성능 지표가 됩니다.
정확도는 영어로 Accuracy라고 쓰며 보통 0과 1 사이의 소수 또는 백분율로 표현합니다. 시험 문제 100개 중 87개를 맞혔다면 정확도는 0.87, 다시 말해 87%입니다. 숫자가 높을수록 정답을 많이 맞혔다는 뜻이지만, 어떤 종류의 오답을 냈는지까지 자동으로 알려 주지는 않습니다.
처음 모델을 비교할 때 정확도는 빠르고 이해하기 쉬운 출발점입니다. 다만 같은 90%라도 데이터의 구성과 실수의 방향이 다르면 실제 사용 경험은 크게 달라질 수 있습니다. 그래서 정확도를 읽을 때는 문제의 목표, 데이터의 비율, 틀렸을 때의 비용을 함께 살펴야 합니다.
정확도 계산식은 어떻게 되나요?
기본 식은 매우 단순합니다. 정확도는 정답 예측 개수를 전체 예측 개수로 나눈 값입니다. 수식으로는 Accuracy = 올바른 예측 수 ÷ 전체 예측 수라고 적을 수 있습니다. 결과를 퍼센트로 보고 싶다면 이 값에 100을 곱합니다. 이 식은 이진 분류와 여러 범주를 고르는 다중 분류 모두에 적용됩니다.
예를 들어 고객 문의 200건을 긴급과 일반으로 분류했고 그중 170건의 라벨이 실제와 같았다면 정확도는 170 ÷ 200입니다. 계산 결과는 0.85이고, 보고서에는 85%라고 쓰면 됩니다. 남은 30건은 오답이지만, 그 오답이 긴급을 놓친 것인지 일반을 긴급으로 올린 것인지는 이 숫자 하나만으로 구별할 수 없습니다.
코드에서 계산할 때는 예측 배열과 실제 라벨 배열의 같은 위치를 비교해 일치 횟수를 셉니다. 평가 대상에는 학습에 이미 사용한 행이 아니라 검증 세트나 테스트 세트를 쓰는 것이 원칙입니다. 학습 데이터에서의 높은 점수는 모델이 새로운 사례에서도 잘 작동한다는 보장이 아니기 때문입니다.

혼동행렬로 정확도의 재료를 확인하기
이진 분류에서는 혼동행렬을 보면 정확도의 분자가 어디서 왔는지 분명해집니다. 실제 양성을 양성으로 맞힌 경우를 참양성, 실제 음성을 음성으로 맞힌 경우를 참음성이라고 부릅니다. 이 두 칸이 정확도에서 맞힌 예측으로 더해집니다. 반대로 거짓양성과 거짓음성은 전체 예측에는 들어가지만 분자에는 들어가지 않습니다.
의료 검사처럼 양성이 중요한 문제를 생각해 보겠습니다. 환자를 환자라고 판정한 참양성은 도움이 되지만, 환자를 건강하다고 놓친 거짓음성은 위험할 수 있습니다. 전체 정확도가 높더라도 거짓음성이 많으면 현장에서는 좋은 모델이 아닐 수 있습니다. 혼동행렬은 이런 차이를 칸별 숫자로 드러냅니다.
혼동행렬을 만든 뒤에는 대각선에 있는 맞힌 사례와 대각선 밖의 틀린 사례를 함께 읽으세요. 어떤 실제 클래스에서 오답이 집중되는지, 특정 범주를 과도하게 예측하는지 확인할 수 있습니다. 정확도는 이 표를 요약한 한 줄의 숫자이며, 표를 대신하는 완전한 설명은 아닙니다.
정확도가 유용한 상황
각 클래스의 수가 비슷하고 모든 오류의 비용이 대체로 같은 문제라면 정확도는 유용합니다. 손글씨 숫자 분류, 품질이 비슷하게 섞인 상품 범주 분류, 균형 있게 수집한 이미지 실험이 대표적입니다. 이때는 맞힌 비율이 사용자가 체감하는 전반적 성공률과 비교적 잘 맞아떨어집니다.
모델 후보가 여러 개일 때 같은 테스트 세트에서 정확도를 비교하면 기본 성능을 빠르게 가늠할 수 있습니다. 예를 들어 A 모델이 82%, B 모델이 88%라면 우선 B가 더 많은 사례를 맞혔다고 말할 수 있습니다. 그러나 실서비스로 옮기기 전에는 오답 사례를 점검하고 다른 지표도 확인해야 공정한 선택이 됩니다.
정확도는 기준선 모델을 만들 때도 편리합니다. 가장 많이 등장하는 클래스를 무조건 고르는 단순 모델의 정확도를 먼저 구해 두면, 새 모델이 정말 학습을 통해 개선됐는지 알 수 있습니다. 기준선보다 조금만 높다면 데이터 누수, 불균형, 평가 설계 문제를 다시 살펴보는 편이 좋습니다.

불균형 데이터에서는 왜 조심해야 하나요?
불균형 데이터란 한 클래스가 다른 클래스보다 훨씬 많은 데이터입니다. 예를 들어 1000건 중 990건이 정상이고 10건만 이상 거래라면 정상이라고만 예측해도 99%의 정확도를 얻습니다. 그러나 정작 찾아야 하는 이상 거래를 하나도 잡지 못했다면 그 모델은 목적을 달성하지 못한 것입니다.
이 사례에서 정확도는 다수 클래스의 영향에 크게 끌려갑니다. 소수 클래스의 실패가 전체 분모에서 작게 보이기 때문에, 중요한 문제를 놓쳐도 수치가 좋아 보일 수 있습니다. 질병 탐지, 사기 거래 감지, 장애 알림처럼 드문 사건을 찾아야 하는 업무에서 특히 위험한 해석입니다.
불균형이 의심되면 클래스별 데이터 수와 혼동행렬을 먼저 확인하세요. 그 다음 양성을 얼마나 놓치지 않았는지 보여 주는 재현율, 양성이라고 한 것 중 얼마나 맞았는지 보여 주는 정밀도, 두 값을 함께 보는 F1 점수를 추가합니다. 정확도를 버리는 것이 아니라, 맥락 안에 배치하는 접근이 중요합니다.
정확도와 정밀도·재현율의 차이
정밀도는 모델이 양성이라고 예측한 사례 가운데 실제 양성의 비율입니다. 스팸 필터라면 스팸으로 옮긴 메일 중 실제 스팸이 얼마나 많은지에 해당합니다. 정밀도가 낮으면 중요한 정상 메일을 스팸으로 잘못 보내는 일이 많아질 수 있습니다. 정확도와 달리 특정 예측 결정의 신뢰도를 보는 지표입니다.
재현율은 실제 양성 사례 가운데 모델이 찾아낸 비율입니다. 암 검진 보조 모델에서는 실제 환자를 놓치지 않는 정도를 보여 주므로 재현율이 매우 중요할 수 있습니다. 재현율만 지나치게 올리면 양성이 아닌 사례까지 양성으로 부르는 일이 늘어 정밀도가 떨어질 수 있습니다. 따라서 두 값 사이의 균형을 문제에 맞게 정해야 합니다.
F1 점수는 정밀도와 재현율의 조화평균으로, 두 값 중 하나만 낮아도 크게 올라가지 않습니다. 정확도는 전체 성공률을 한눈에 보여 주고, 정밀도와 재현율은 오류의 성격을 나눠 보여 줍니다. 실무 보고서에는 이 지표들을 함께 제시하고, 무엇을 우선하는지 문장으로 설명하면 오해를 줄일 수 있습니다.
올바른 정확도 평가 절차
평가용 데이터를 먼저 분리하는 일부터 시작합니다. 일반적으로 학습 세트는 모델을 훈련하는 데 쓰고, 검증 세트는 설정을 고르는 데 쓰며, 테스트 세트는 마지막 성능을 확인하는 데 남겨 둡니다. 테스트 세트를 반복해서 보고 모델을 고치면 사실상 그 데이터에 맞춰진 결과가 되어 새 데이터 성능을 과대평가할 수 있습니다.
학습이 끝난 모델로 테스트 세트의 예측을 만들고 실제 정답과 같은 순서로 비교합니다. 일치한 건수를 세어 정확도를 계산한 뒤, 클래스별 표본 수와 혼동행렬도 저장합니다. 데이터가 적다면 교차 검증을 사용해 여러 분할에서 점수를 구하고 평균과 흔들림을 함께 확인하는 방법이 안정적입니다.
평가 기록에는 데이터 버전, 분할 방식, 무작위 시드, 모델 버전, 임계값을 남기는 습관이 좋습니다. 같은 정확도라도 임계값을 바꾸면 정밀도와 재현율이 달라질 수 있습니다. 재현 가능한 기록이 있어야 다음 실험에서 점수 차이가 진짜 개선인지, 우연한 분할 차이인지 판단할 수 있습니다.
자주 하는 해석 실수
첫 번째 실수는 정확도 하나만 보고 모델이 충분히 좋다고 결론 내리는 것입니다. 숫자가 높아도 중요한 소수 사례를 놓치거나 특정 집단에서 성능이 낮을 수 있습니다. 두 번째 실수는 학습 데이터 점수를 테스트 점수처럼 제시하는 것입니다. 학습 점수는 모델이 이미 본 답을 얼마나 기억했는지에 가까울 수 있습니다.
세 번째 실수는 서로 다른 데이터셋의 정확도를 직접 비교하는 일입니다. 난이도와 클래스 비율, 라벨 품질이 다르면 90%와 85% 중 어느 모델이 더 낫다고 단정할 수 없습니다. 가능한 한 동일한 평가 세트와 동일한 전처리 조건에서 비교해야 합니다. 운영 환경이 바뀌면 새 평가도 필요합니다.
마지막으로 평균 정확도 뒤에 숨은 사례를 보지 않는 문제가 있습니다. 오답 샘플을 직접 살펴보면 라벨 오류, 애매한 규칙, 특정 입력 형식의 취약점이 발견되곤 합니다. 수치는 방향을 알려 주고, 사례 검토는 원인을 알려 줍니다. 둘을 함께 사용해야 개선 우선순위를 제대로 정할 수 있습니다.
임계값을 바꾸면 정확도도 달라집니다
많은 분류 모델은 각 클래스에 대한 확률이나 점수를 먼저 만듭니다. 그 점수가 정해 둔 임계값보다 높으면 양성, 낮으면 음성으로 결정합니다. 기본값으로 0.5를 쓰는 경우가 많지만, 이것이 모든 업무에 정답은 아닙니다. 임계값을 올리거나 내리면 양성 판정 수와 오류의 종류가 함께 달라집니다.
임계값을 낮추면 양성으로 잡는 사례가 늘어 재현율이 올라갈 수 있지만, 거짓양성도 많아져 정밀도와 정확도가 내려갈 수 있습니다. 반대로 임계값을 높이면 보수적인 모델이 되어 불필요한 경보는 줄어들지만 중요한 양성을 놓칠 위험이 생깁니다. 따라서 목표 지표는 사업이나 안전 조건을 반영해 결정해야 합니다.
후보 임계값마다 혼동행렬과 정확도를 표로 기록하면 선택 근거가 선명해집니다. 예를 들어 상담 우선순위 분류에서는 놓친 긴급 건의 비용이 큰지, 과도한 알림의 비용이 큰지를 먼저 정합니다. 그 기준이 있어야 0.5라는 관습 대신 실제 목적에 맞는 판단선을 고를 수 있습니다.
다중 분류의 정확도는 어떻게 읽을까요?
정확도는 두 범주만 고르는 문제에만 쓰이는 값이 아닙니다. 음식 사진을 한식·양식·중식·일식으로 구분하거나 문의를 여러 부서로 배정하는 다중 분류에서도, 예측한 범주가 실제 범주와 같으면 한 건의 정답으로 셉니다. 전체 일치 건수를 전체 사례 수로 나누는 원칙은 변하지 않습니다.
다만 범주가 많아지면 일부 클래스가 쉬워서 전체 정확도를 끌어올릴 수 있습니다. 자주 등장하는 범주에서는 잘 맞지만 드문 범주에서는 계속 틀리는 모델도 가능합니다. 클래스별 정확도에 가까운 재현율, 클래스별 정밀도, 그리고 각 범주의 표본 수를 함께 제시하면 평균값이 감춘 편차를 발견할 수 있습니다.
다중 분류 혼동행렬은 행과 열이 많아지므로 특히 유용합니다. 특정 두 범주가 자주 서로 바뀌어 예측되는지, 하나의 범주로 결과가 쏠리는지 시각적으로 볼 수 있습니다. 개선 작업은 전체 정확도를 조금 올리는 것보다 실제로 혼동되는 범주를 구분할 입력 특성을 찾는 쪽에서 시작되는 경우가 많습니다.
보고서에 정확도를 쓰는 실전 형식
성능 보고서에는 단순히 정확도 92%라고 적기보다 평가 조건을 한 문장으로 붙이세요. 예를 들면 독립 테스트 세트 2,000건에서 정확도 92.1%를 기록했고, 양성 클래스 비율은 18%였다고 쓰는 방식입니다. 이 정보가 있으면 읽는 사람이 숫자의 기반과 해석 범위를 빠르게 이해할 수 있습니다.
다음에는 혼동행렬 또는 참양성·참음성·거짓양성·거짓음성의 개수를 제공합니다. 중요한 오류 유형이 있다면 그 비용을 별도로 설명합니다. 고객 이탈 예측에서 이탈 고객을 놓치는 비용이 크다면, 정확도가 약간 낮아도 재현율이 더 좋은 모델을 선택한 이유를 투명하게 밝힐 수 있습니다.
마지막으로 이전 모델이나 기준선과 같은 데이터에서 비교한 변화량을 적습니다. 점수 차이만 제시하지 말고 새 데이터에서도 유지되는지, 특정 집단에서 악화되지 않았는지, 운영 중 모니터링 계획은 무엇인지 연결하세요. 이런 보고 방식은 정확도를 과장하지 않으면서 의사결정에 필요한 정보를 제공합니다.
운영 환경에서 정확도를 지속적으로 확인하기
모델을 배포한 뒤에도 초기 테스트 정확도가 계속 유지된다고 가정해서는 안 됩니다. 계절 변화, 고객 행동 변화, 새 제품 출시, 입력 방식 변경처럼 데이터 분포가 달라지면 모델이 학습 당시보다 자주 틀릴 수 있습니다. 이런 현상은 데이터 드리프트라고 부르며, 정확도와 오류 유형을 정기적으로 다시 측정해야 발견할 수 있습니다.
운영 로그에는 실제 정답이 늦게 도착하는 경우가 많습니다. 그래서 즉시 확인할 수 있는 입력 분포, 예측 비율, 임계값 근처 사례를 모니터링하고, 정답이 확보된 뒤에는 일정 기간 단위로 정확도와 재현율을 재계산합니다. 단순 평균만 보지 말고 주간·월간 추세와 주요 고객군별 결과도 비교하면 문제를 더 빨리 찾습니다.
점수가 떨어졌을 때는 바로 모델을 교체하기보다 데이터 파이프라인과 라벨 품질부터 확인하세요. 누락된 값, 코드 체계 변경, 잘못 연결된 정답 테이블 같은 운영 이슈가 원인일 수 있습니다. 원인을 분리한 다음 재학습, 임계값 조정, 추가 데이터 수집 중 무엇이 필요한지 결정하면 정확도 개선이 더 안정적으로 이어집니다.
간단한 예제로 계산을 연습해 보기
열두 건의 테스트 사례에서 모델이 아홉 건을 맞혔다면 정확도는 9 ÷ 12입니다. 약분하면 0.75이고, 백분율로는 75%입니다. 이 계산은 결과를 빠르게 요약하지만, 세 건의 오답이 모두 같은 범주인지 서로 다른 범주인지에는 답하지 않습니다. 그래서 계산을 마친 뒤에는 각 오답의 실제값과 예측값을 나란히 기록하는 습관이 좋습니다.
예를 들어 세 건 가운데 두 건이 실제 양성을 음성으로 분류한 실수라면, 양성 탐지가 목적일 때는 개선이 시급합니다. 반대로 세 건이 서로 비슷한 두 상품을 헷갈린 경우라면 사용자가 느끼는 영향은 더 작을 수 있습니다. 똑같은 75%라는 수치도 업무 맥락에 따라 전혀 다른 결론으로 이어질 수 있다는 점을 기억하세요.
연습할 때는 작은 표를 직접 만들어 실제 정답, 모델 예측, 맞음 여부의 세 열을 채워 보세요. 맞음으로 표시된 행을 세고 전체 행 수로 나누면 정확도가 나옵니다. 이어서 양성·음성 또는 각 클래스별로 행을 묶어 보면, 혼동행렬과 정밀도·재현율이 왜 필요한지도 자연스럽게 이해할 수 있습니다.
정리: 정확도는 시작점으로 읽기
Accuracy는 전체 예측 가운데 맞힌 예측의 비율을 나타내는 가장 기본적인 분류 성능 지표입니다. 계산이 쉽고 전달이 간단해서 모델의 첫 성적표로 적합합니다. 균형 잡힌 데이터와 비슷한 오류 비용이라는 조건에서는 실제 품질을 빠르게 가늠하는 데 특히 도움이 됩니다.
하지만 정확도가 높다는 말만으로 모델이 안전하거나 유용하다고 결론 내리면 안 됩니다. 불균형 데이터인지 확인하고, 혼동행렬로 어떤 오류가 발생했는지 살피며, 목적에 따라 정밀도와 재현율을 함께 보세요. 중요한 사례를 놓치는 비용이 큰 문제일수록 이 과정은 선택이 아니라 필수입니다.
좋은 평가는 한 개의 숫자를 크게 만드는 일이 아니라, 그 숫자가 무엇을 담고 무엇을 감추는지 설명하는 일입니다. 테스트 데이터를 분리하고 같은 조건에서 비교하며, 실제 사용 환경의 위험을 반영한 지표를 선택하세요. 그렇게 읽은 정확도는 단순한 퍼센트를 넘어 모델 개선을 위한 믿을 만한 출발점이 됩니다.