Data Analysis

Classification (분류 알고리즘) 개념

김심슨 2025. 6. 8. 18:21

분류(Classification) 알고리즘 

어떤 데이터가 어떤 범주(클래스)에 속하는지를 자동으로 판단하는 알고리즘 

예 : 

- 이메일이 스팸 메일인지 아닌지 분류하기 

- 은행에서 고객이 대출을 갚을 수 있는지 여부 판단하기 

- 사진 속 동물이 강아지인지 고양이인지 판단하기 


대표적인 분류 알고리즘 

1. K-최근접 이웃 (KNN, K-Nearest Neighbors) (=끼리끼리)

새로운 데이터가 들어오면 주변에 있는 가장 가까운 K개의 데이터를 보고, 가장 많은 데이터가 속한 범주로 분류하는 방법 

 

* 거리 기반 알고리즘 

KNN 은 '가깝다'라는 개념을 사용함 

데이터를 점으로 표현하고, 각 점 사이의 거리를 측정함. 

가장 가까운 K개의 데이터가 속한 그룹으로 분류

 

예 : 키와 몸무게로 축구선수, 농구선수를 분류할 때, 

키 170, 몸무게 65인 사람은 주변의 가장 가까운 3명 (K=3)을 보고 더 많이 속한 그룹을 따라감 

 

예 (2) :

- 민수는 축구를 좋아하는지 농구를 좋아하는지 궁금함. 

- 민수의 친한 친구 5명 중에 축구를 좋아하는 친구가 3명, 농구를 좋아하는 친구가 2명이라면 민수는 축구를 좋아할 가능성이 더 높다고 판단

 

장점 : 간단하고 이해하지 쉬우며 학습 시간이 매우 짧음 

단점 : 데이터가 너무 많거나 복잡하면 성능 떨어짐 + 계산 오래 걸림 

       : 거리 기반이기 때문에 데이터의 스케일이 다르면 정확도가 떨어질 수 있음 -> 데이터 정규화 해야함 

 

* 정규화란? (Normalication)

데이터의 범위를 통일하는 작업 

예 : 몸무게 30kg ~ 100kg를 0~1 사이로 변환하여 분석에 사용하기 좋게 만드는 과정 

 

실무 활용 예시 

- 고객의 특성을 기반으로 구매할 가능성이 높은 상품 추천 

- 영화 추천 시스템 (비슷한 취향의 사용자 기반 추천)

- 이메일 스팸 필터링 (유사한 이메일과 거리 계산)

 

2. 결정 트리 (Decision Tree, DT) (=스무고개 라잌...)

데이터를 특정 조건에 따라 단계별로 나눠 최종적으로 분류하는 방법

나무 가지처럼 여러 개의 조건을 통해 최종 분류함. 

 

예 : 

- 과일을 분류한다고 했을 때

크기가 큰가요? → 네 → 색깔이 빨간가요? → 네 → 사과
                     아니오 → 수박
            아니오 → 색깔이 노란가요? → 네 → 바나나
                     아니오 → 포도

 

중요한 개념 

(1) 노드(Node) : 질문(조건)을 나타내는 지점 (예 : 크기가 큰가요?)

(2) 가지 (Branch) : 질문의 답 (Yes/No)을 따라 나뉘는 경로 (예: "네", "아니오")

(3) 잎 (Leaf) : 최종 분류 결과 (예 : 사과, 바나나, 수박, 포도)

 

장점 : 매우 직관적이고 이해하기 쉬움 

       : 분류 결과를 시각화하여 쉽게 설명할 수 있음 (결과 해석이 중요할 때 사용)

단점 : 너무 많은 조건으로 나누면(=트리 계층 구조(hierachy)가 커지면 과적합(overfittiong) 현상이 발생하여 새 데이터에 잘 맞지 않을 수 있음 

       : 작은 데이터 변화에도 나무 구조가 크게 변할 수 있다. 

 

* 과적합이란?

훈련 데이터에는 너무 잘 맞지만, 새 데이터에선 정확도가 떨어지는 현상 

시험에서 기출문제만 외웠는데, 새로운 문제는 못푸는 것. 

 

실무 활용 

- 은행 대출 승인 결정 

- 환자 질병 진단

- 고객 이탈 예측 및 원인 분석 

 

3. 서포트 벡터 머신 (SVM, support Vector Machine)

두 집단을 가장 명확하게 나눌 수 있는 경계선 또는 평면 (마진)을 찾아내는 방법

 

예 : 책상 위에 연필과 지우개가 섞여있을 때, 연필과 지우개를 구분하는 가장 좋은 경계선을 찾는 과정과 비슷함 

두 그룹 사이에 가장 넓은 공간을 가지는 경계를 선택함 

 

핵심 개념 :

1. 결정 경계 (Decision Boundary)

- 두 클래스를 나누는 기준선을 의미함. 

- 2차원 데이터에서는 선 형태, 3차원 데이터에서는 평면 형태, 더 높은 차원의 데이터에서는 초평면(hyperplane)으로 불림

 

예 :

운동장에 농구공(🔵)과 축구공(⚽)이 섞여 있다고 생각하자.

이 두 종류의 공을 구분하기 위해 줄을 하나 그어서 분리한다고 했을 때 이 줄이 결정 경계임 

⚽  ⚽  ⚽ | 🔵 🔵 🔵 🔵

 

2. 서포트 벡터 (Support Vector)

- 결정 경계와 가장 가까운 데이터

- SVM은 이 서포트 벡터를 기준으로 결정 경계를 만듦 

 

예 : 

두 그룹 사이의 가장 가까운 공들이 서포트 벡터가 됨 

⚽       ⚽ | 🔵       🔵
         ↑  ↑  ↑
서포트 벡터    서포트 벡터
         결정경계

 

3. 마진(Margin)

두 클래스 사이의 경계선으로부터 양쪽 서포트 벡터까지의 거리 

- SVM은 이 마진을 최대한 넓게 하는 경계선을 찾음 

- 마진이 넓을 수록 좋은 분류 성능을 보임 

 

예 :

축구공과 농구공 사이에 선을 그을 때 가능한 두 종류의 공 사이 간격을 넓게 유지하려고 함 

⚽           |         🔵
    ← 마진(최대 거리) →

 

+) 만약 데이터를 잘 나누기 어려울 때? (커널 함수)

데이터가 아래처럼 직선 또는 평면으로 나눌 수 없을 정도로 뒤죽박죽쓰~?

⚽ 🔵 ⚽ 🔵 ⚽ 🔵 ⚽ 🔵

 

=> Kernel function 이라는 기법을 사용함 = 데이터를 더 높은 차원으로 옮겨서 분리하기 쉽게 만드는 방법 

 

예 : 종이를 구기는 비유 

깨끗한 종이 위에 빨간점과 파란점이 섞여있을 때,

이 상태에선 선 하나로 나누기 어렵다면, 종이를 구겨서 입체적인 공간을 만들어 두 점을 나눌 수 있게 한다. 

 

장점 : 복잡한 데이터를 잘 구분함 

       : 데이터의 차원이 높거나 복잡한 형태라도 좋은 성능을 보임 

       : 과적합을 잘 방지함 

       : 데이터의 개수가 적어도 잘 동작함 

단점 : 성능을 좋게 하려면 하이퍼파라미터라는 설정값을 잘 조정해야함. 

        : 데이터가 많아지면 연산량이 증가해 느려질 수 있음 

        : 결과가 직관적이지 않을 수 있음 

 

* 하이퍼파라미터란?

사람이 설정하는 변수, 최적의 값을 찾으면 성능이 좋아짐 (예 : 마진의 크기, 규제 강도 등)

SVM에서 중요한 하이퍼파라미터는  C와 Gamma ( γ) 임 

 - C : 잘못 분류된 데이터에 얼마나 민감하게 반응할 지 결정 

       : C가 크면 데이터 분류에 엄격해지고, C가 작으면 어느 정도의 오류를 허용함 

 - Gamma(γ) : 하나의 데이터가 다른 데이터에 영향을 미치는 범위를 결정 

                     : Gamma가 크면 가까운 데이터만 영향을 주고, 작으면 멀리있는 데이터까지 영향을 줌

 

실무 활용 예시

- 이미지 분류 (얼굴 인식, 글자 인식, 사물 구분 등)

- 텍스트 분류 (스팸 메일 여부 판단, 뉴스 카테고리 분류 등)

- 의료 데이터 분석 (환자의 질병 진단 및 암세포 분류)

4. 로지스틱 회귀 (Logisitc Regression)

어떤 사건이 일어날 가능성을 예측할 때 사용되는 분류 알고리즘 

입력값들을 기반으로 확률을 계산하여 분류를 수행함. (확률값)

시그모이드 함수를 통해 최종 결과를 0과 1 사이의 확률 값으로 변환함.

(보통 확률이 0.5 이상이면 긍정(1), 미만이면 부정(0)으로 판단함) 

 

작동 방식 : 

1. 입력 데이터(x)에 가중치를 곱한 뒤 모두 합산 

2. 합산한 값을 시그모이드 함수에 넣어 확률을 얻는다 

3. 얻은 확률을 기반으로 최종 분류 (0 또는 1)를 결정함 

 

예 :

시험점수와 공부시간을 기반으로 "합격" 여부를 판단할 때, 합격할 확률이 0.7이면 합격, 0.4면 불합격으로 판단하는 식 

입력 변수 : 공부시간 (x1), 수업 출석률(x2)

가중치 : 공부시간 (w1 = 2), 출석률(w2=1), 편향 (b=-4)

확률 : 시그모이드(2 * 공부시간 + 1 * 출석률 -1) => 공부시간과 출석률이 높을수록 시그모이드 값이 높아져, 합격 확률이 증가

 

장점 : 간단하고 빠르게 계산됨

       : 결과가 확률값으로 나오기 때문에 결과 해석이 쉬움 

단점 : 데이터가 선형적(직선 형태)일 때만 성능이 좋음, 복잡한 데이터는 잘 다루지 못함 

 

* 시그모이드 함수 (Sigmoid function)

어떤 입력이든 0~1 사이의 확률 값으로 바꿔주는 함수 

수식 :

예시 : 

  • 시그모이드(10) ≈ 0.99995 (매우 높은 확률)
  • 시그모이드(0) = 0.5 (중립)
  • 시그모이드(-10) ≈ 0.00005 (매우 낮은 확률)

실무에선 어디에서 쓰일까? 

- 이메일이 스팸메일인지 아닌지 분류 

- 고객이 제품을 살 확률 예측 

- 은행 고객이 대출을 갚을 확률 예측 

 

5. 랜덤 포레스트 (Random Forest)

결정트리를 여러 개 만들어, 가장 많은 투표를 받은 결과로 최종 결정을 내린다. 

(한 명의 전문가가 아니라 여러 명의 전문가가 투표해서 가장 많은 표를 받은 답을 선택하는 방식이라고 생각하면 됨)

 

+) 투표의 개념? = 결정트리 각각이 바로 투표를 하는 사람이라고 생각하면 됨 

즉, 랜포에서의 투표는 각각의 결정트리가 자신의 판단(예측)을 내리는 행위 

모든 결정트리가 독립적으로 판단한 후, 가장 많은 결정 트리들이 선택한 결과를 최종 결론으로 삼는 것 

 

랜덤포레스트의 핵심 개념 :

(1) 결정트리 (Decision Tree, DT) : 데이터를 조건에 따라 단계별로 나누어 최종적으로 분류하는 나무 형태의 구조

환자가 열이 있나요? 
 ├─ 네 → 기침이 심한가요?
 │     ├─ 네 → 독감으로 분류
 │     └─ 아니오 → 감기로 분류
 └─ 아니오 → 건강으로 분류

-> 이러한 결정트리를 수십 개 ~ 수백 개 만듦 

 

(2) 앙상블(Ensemble) 학습 

앙상블은 여러 개의 모델을 함께 사용하여 성능을 높이는 방식 

- 랜포는 많은 결정트리를 만들고 각 트리가 독립적으로 분류를 진행함 

- 최종 결과는 각 결정트리의 결과를 모아 가장 많은 투표를 받은 분류를 선택함. 

 

예 : 

친구 5명에게 날씨 예측을 부탁했다. 친구 3명은 비가 온다고 했고 2명은 안온다고 했을 때 최종적으로 비가 오는 것으로 결정

 

작동 원리 : 

1. 데이터에서 무작위로 일부 데이터를 뽑아 여러 개의 결정트리를 만듦 

2. 각 결정 트리는 주어진 데이터를 가지고 서로 조금씩 다른 방식으로 학습

3. 새로운 데이터가 들어왔을 때 각 결정 트리의 결과를 수집하여 다수결 투표로 최종 결론을 정함 

 

예 :

100명의 의사가 한 환자의 병을 진단한다고 생각해보자. 

각각의 의사는 자신의 경험과 진료법으로 독립적으로 진단함. 

70명의 의사가 환자에게 독감이라고 진단을 내리면 최종 진단은 독감이 됨. 

 

장점 : 정확도가 높고 과적합을 방지할 수 있어 매우 강력함

       : 데이터의 복잡한 패턴도 잘 찾음 

단점 : 많은 트리를 만들어서 속도가 느리고 자원(메모리, cpu)을 많이 사용함 

       : 결과가 어떻게 나왔는지 직관적으로 설명하기 어려움 

 

실무에선 어디에서 쓰일까?

- 주식 가격 예측 및 투자 분석 

- 보험사의 고객 위험 평가 

- 질병 진단 및 의료 데이터 분석 (MRI 사진 분석 등)

- 고객이 구매할 제품 추천 (추천 시스템)

 


분류 성능 평가 지표 

모델이 얼마나 정확하게 분류했는지 평가하는 기준 

정확도 (Accuracy)

전체 중 맞춘 비율 (맞춘 데이터의 수 / 전체 데이터의 수)

예 : 100문제 중 90문제를 맞추면 정확도는 90% 

 

정확도의 한계 : 한 클래스에 데이터가 몰려있는 경우 (불균형 데이터) 

 

예 : 

100명 중 98명이 건강하고 2명만 아픈 경우, 모든 사람을 무조건 건강하다로 예측해도 정확도는 98%가 됨 

이 때 정확도는 높지만, 모델의 성능은 나쁨

-> 정확도 외의 지표도 중요햠. 

 

혼동 행렬 (Confusion Matrix)

정답과 오답을 네 가지 방식으로 표현한 표 

  실제로 "참"(긍정) 실제로 "거짓"(부정)
모델이 "참"이라고 예측 TP (True Positive, 진짜 긍정) ✅ FP (False Positive, 거짓 긍정) ❌
모델이 "거짓"이라고 예측 FN (False Negative, 거짓 부정) ❌ TN (True Negative, 진짜 부정) ✅

 

암 진단 예시 : 

 

  • TP: 암 환자를 암이라고 정확히 진단 ✅
  • FP: 암이 아닌데 암이라고 잘못 진단 ❌
  • FN: 암 환자를 암이 아니라고 잘못 진단 ❌
  • TN: 암이 아닌 환자를 정확히 암이 아니라고 진단 ✅

 

분류 리포트 (Classification Report)

정밀도 (Precision)

모델이 맞다고 한 것 중 실제로 맞는 비율 (스팸 메일 분류할 때 중요)

FP를 줄이고 싶을 때 중요한 지표 

 

이메일 100개 중 스펨메일이라고 분류한 메일이 10개인데, 실제 스팸메일은 그 중 8개 뿐이라면? 

정밀도 = 8/10 = 0.8 (80%)

=> 즉 모델이 긍정이라고 판단한 결과를 얼마나 믿을 수 있는가를 의미 

 

재현율 (Recall) 

실제 맞는 것 중 모델이 얼마나 찾아냈는가?  (암 진단처럼 놓치면 안되는 경우 중요)

FN을 줄이고 싶을 때 중요한 지표

 

암 환자 10명이 있는데, 모델이 암이라고 정확히 진단한 환자가 7명이라면?

재현율 = 7/10 = 0.7(70%)

=> 즉 실제로 중요한 데이터를 얼마나 놓치지 않고 잡아내느냐의 능력을 의미

 

* 정밀도와 재현율의 차이 

정밀도 : 모델이 긍정이라고 예측한 결과 중 실제 긍정 비율 (틀리지 않는 것이 중요)

재현율 : 실제 긍정인 데이터 중 모델이 맞춘 비율 (놓치지 않는 것이 중요)

스팸 메일 분류는 정밀도가 중요하다 (정상 메일을 스팸메일이라고 하면 큰 문제가 발생)

암 진단은 재현율이 중요하다 (환자를 놓치면 위험)

F1-score

정밀도와 재현율의 조화 평균 (두 지표가 모두 중요할 때 사용)

 

정밀도가 0.8이고 재현율이 0.6이라면 f1-score 는 약 0.686이 됨 

정밀도와 재현율 중 하나라도 낮으면 f1-score도 낮아짐 

두 지표가 모두 중요할 때 유용함 

 

* 조화 평균 vs 산술 평균 

산술평균 : (정밀도 + 재현율) / 2  -> 일반적인 평균 

조화평균 : 두 값의 균형을 더 강하게 강조하는 평균, 한 쪽이 극단적으로 낮으면 값이 크게 낮아짐 

조화 평균 예시:

  • 60km/h와 30km/h로 같은 거리를 달렸을 때 전체 평균 속도는 40km/h (산술 평균인 45km/h보다 낮음)
  • 즉, 성능이 한쪽으로 치우치면 점수가 크게 떨어집니다.

실무 활용 팁 

데이터가 한쪽으로 쏠려있으면 정확도보다 정밀도/재현율/f1-score를 우선 평가

암진단, 금융사기 탐지 등 위험한 분야에서는 재현율을 우선 평가 (놓치면 안됨, 의심 많이 해라~)

추천 시스템이나 스팸메일 등 잘못된 판단이 문제되는 경우는 정밀도를 우선 평가함 (일단 널널하게 해라)


분류 알고리즘 선택 기준 

필요성                                                                                                          적합한 알고리즘

빠르고 단순한 분류 KNN, 로지스틱 회귀
복잡하고 비선형적 데이터 처리 SVM, 랜덤 포레스트
결과 해석과 설명이 중요할 때 결정 트리
데이터가 매우 적을 때 KNN, SVM
정확성이 가장 중요할 때 SVM, 랜덤 포레스트