지도학습에서는 입력 `x`와 정답 `y`가 함께 있다.
모델은 `x`를 보고 `y`를 맞히도록 학습한다.
CS 문의 분류 문제를 생각해보자.
- 입력 `x`: 문의 문장, 고객 등급, 주문 상태, 배송 상태, 결제 금액
- 정답 `y`: 배송 문의 / 환불 문의 / 교환 문의 / 상품 문의 / 기타 문의
이번에는 딥러닝 이전부터 널리 쓰인 머신러닝 모델을 알아본다.
먼저 볼 기준
| 기준 | 질문 |
| 문제 유형 | 회귀인가, 분류인가? |
| 데이터 형태 | 숫자형인가, 범주형인가, 텍스트인가? |
| 비선형성 | 단순 직선 관계인가, 복잡한 조건 관계인가? |
| 해석 가능성 | 왜 그런 예측을 했는지 설명해야 하는가? |
| 전처리 필요 | 스케일링, 인코딩, 결측치 처리에 민감한가? |
| 데이터 크기 | 샘플 수와 특징(feature) 수가 어느 정도인가? |
| 운영 조건 | 빠른 예측, 작은 모델, 설명 가능성이 필요한가? |
모델은 “좋은 모델 하나”를 고르는 문제가 아니라, 데이터와 목적에 맞는 모델을 고르는 문제다.
- 텍스트 분류라면 TF-IDF + Logistic Regression이 의외로 강한 출발점일 수 있다.
- 반대로 표 형태의 정형 데이터에서 비선형 조건이 많다면 Gradient Boosting 계열이 더 잘 맞을 수 있다.
- 설명 가능성이 최우선이면 성능이 조금 낮아도 선형 모델이나 작은 Decision Tree가 더 적합할 수 있다.
Linear Regression
Linear Regression은 회귀 문제에 쓰인다. 즉, 정답이 연속적인 숫자일 때 사용한다.
집값 예측
매출 예측
배송 소요 시간 예측
고객의 다음 달 구매 금액 예측
이 모델은 입력 특징(feature)들의 가중합으로 값을 예측한다.
$$
\hat{y} = w_1x_1 + w_2x_2 + \cdots + w_nx_n + b
$$
예를 들어 배송 소요 시간을 `배송 소요 시간 = 0.3 × 거리` 로 예측한다고 하자.
- 1.2 × 주말 여부
- 0.8 × 물량 지수
- 기본값
→ 학습하는 것: 각 특징의 가중치
거리의 영향은 얼마나 큰가?
주말 여부는 얼마나 영향을 주는가?
물량 지수는 얼마나 중요한가?
- 장점:
- 빠르다.
- 해석하기 쉽다.
- 특징과 예측값의 방향성을 보기 좋다.
- 첫 기준 모델(baseline)로 좋다.
- 약점:
- 관계가 직선적이라는 가정이 강하다.
- 복잡한 비선형 패턴을 잘 못 잡는다.
- 이상치에 민감할 수 있다.
- 특징 스케일링이 필요한 경우가 많다.
Logistic Regression
이름은 회귀지만 분류 모델이다. 보통 분류 문제에 사용한다.
스팸 / 정상 메일
이상 거래 / 정상 거래
환불 문의 / 환불 아님
이탈 고객 / 유지 고객
이 모델도 먼저 특징들의 가중합을 만든다.
$$
z = w_1x_1 + w_2x_2 + \cdots + w_nx_n + b
$$
그다음 이 값을 sigmoid 함수에 넣어 0~1 사이 확률로 바꾼다.
$$
p = \frac{1}{1 + e^{-z}}
$$
예를 들어 p = 0.82 일 때, 이 문의가 환불 문의일 확률 82%로 해석한다.
그리고 분류 기준값(threshold)을 기준으로 분류한다.
그러면 p >= 0.5 → 환불 문의 / p < 0.5 → 환불 아님 이 된다.
Logistic Regression은 단순하지만 강력한 첫 기준 모델이다.
특히 TF-IDF처럼 대부분의 값이 0인 희소 텍스트 특징과 잘 맞는 경우가 많다.
- 장점:
- 학습과 예측이 빠르다.
- 해석 가능성이 좋다.
- 확률 출력이 가능하다.
- 고차원 희소 특징에서도 잘 동작한다.
- L1/L2 정규화를 적용하기 쉽다.
- 약점:
- 복잡한 비선형 관계를 직접 잡기는 어렵다.
- 특징 설계(feature engineering)의 영향을 많이 받는다.
- 클래스가 복잡하게 섞여 있으면 한계가 있다.
KNN
KNN(K-Nearest Neighbors)은 새 데이터가 들어오면, 학습 데이터 중 가장 가까운 K개를 찾고 그 이웃들의 정답을 참고한다.
예를 들어 "택배가 아직 안 왔어요"라는 새 문의가 왔다고 하자.
KNN은 이 문장과 가장 비슷한 기존 문의들을 찾는다.
- "배송이 너무 늦어요" → 배송 문의
- "상품이 아직 도착하지 않았어요" → 배송 문의
- "택배 조회가 안 돼요" → 배송 문의
가까운 3개가 모두 배송 문의라면 새 문의도 배송 문의로 예측하는 것.
KNN은 일반적인 의미의 파라미터 학습이 거의 없다. 대신 학습 단계에서는 데이터를 저장하고, 예측 단계에서 거리를 계산한다.
- 학습: 기존 데이터를 저장
- 예측: 새 데이터와 기존 데이터 사이의 거리 계산
- → lazy learning이라고도 부른다.
장점 및 단점
- 장점:
- 아이디어가 직관적이다.
- 복잡한 결정 경계도 어느 정도 표현할 수 있다.
- 학습 과정이 단순하다.
- 약점:
- 예측할 때 느릴 수 있다.
- 데이터가 많으면 거리 계산 비용이 커진다.
- 특징 스케일링에 매우 민감하다.
- 고차원 데이터에서는 거리 개념이 약해질 수 있다.
- K 값을 잘 골라야 한다.
- K가 너무 작으면 노이즈에 민감하다.
- K가 너무 크면 세밀한 패턴을 놓친다.
KNN을 쓸 때는 “가깝다”의 기준이 특히 중요하다.
예를 들어 나이와 연봉을 함께 쓰는데 연봉 값의 범위가 훨씬 크면, 거리 계산은 거의 연봉 차이에 끌려갈 수 있다.
그래서 KNN에서는 스케일링을 하지 않으면 모델이 엉뚱한 특징을 더 중요하게 보는 일이 자주 생긴다.
Naive Bayes
Naive Bayes는 베이즈 정리를 기반으로 한 확률 모델로, 텍스트 분류에서 자주 쓰인다.
예를 들어 문의 문장에 이런 단어들이 있다고 하자.
환불, 취소, 결제, 돈
Naive Bayes는 각 클래스에서 이 단어들이 얼마나 자주 나왔는지를 보고 확률을 계산한다.
환불 문의일 확률
배송 문의일 확률
교환 문의일 확률
그리고 가장 확률이 높은 클래스를 고른다.
Naive Bayes는 특징들이 서로 독립이라고 가정한다.
위의 예시라면,
"환불"이라는 단어가 나올 확률과 "결제"라는 단어가 나올 확률을 서로 독립적으로 계산한다.
그러나 현실에서는 "환불"과 "결제"는 함께 나올 가능성이 높아서, 완전히 독립은 아니다. 모델에서만 독립적으로 계산하는데,
그래서 naive, 즉 단순한 가정이라고 부른다.
이 단순한 가정에도 불구하고 텍스트 분류에서는 꽤 잘 동작하는 경우가 많다.
- 장점:
- 매우 빠르다.
- 데이터가 적어도 첫 기준 모델로 쓸 수 있다.
- 텍스트 분류와 잘 맞는 경우가 많다.
- 약점:
- 특징 독립 가정이 강하다.
- 복잡한 특징 상호작용을 잘 못 잡는다.
- 확률값 자체가 잘 보정되어 있지 않을 수 있다.
Decision Tree
이 모델은 질문을 하나씩 던지며 데이터를 나눈다.
예를 들어 환불 문의를 분류한다고 하자.
문의 내용에 "환불"이 있는가?
예 → 환불 문의 가능성 높음
아니오 → 다음 질문
문의 내용에 "배송"이 있는가?
예 → 배송 문의 가능성 높음
아니오 → 다음 질문
트리는 이런 조건 분기를 여러 단계로 만든다.
Decision Tree는 각 단계에서 데이터를 가장 잘 나누는 조건을 찾는다.
- 어떤 특징을 기준으로 나눌까?
- 어떤 기준값으로 나눌까?
결제 금액 > 100,000원?
배송 지연일 > 3일?
문의 내용에 "환불" 포함?
좋은 분기는 나눈 뒤 각 그룹이 더 순수해지는 분기다.
e.g) 왼쪽 그룹은 대부분 환불 문의 / 오른쪽 그룹은 대부분 배송 문의
- 장점:
- 해석하기 쉽다.
- 비선형 관계를 잡을 수 있다.
- 숫자형/범주형 특징을 다룰 수 있다.
- 스케일링이 거의 필요 없다.
- 약점:
- 과적합되기 쉽다.
- 데이터가 조금 바뀌면 트리 구조가 크게 바뀔 수 있다.
- 단일 트리는 성능이 불안정할 수 있다.
Random Forest
Random Forest는 여러 개의 Decision Tree를 만든 뒤 투표한다.
- Decision Tree 하나: 한 명의 심사위원
- Random Forest: 여러 심사위원이 각자 판단한 뒤 다수결
각 트리는 조금씩 다른 데이터를 보고, 조금씩 다른 특징을 사용한다.
그래서 모두가 같은 실수를 하지 않게 만든다.
왜 random인가
Random Forest의 random은 보통 두 가지에서 나온다.
- 데이터를 랜덤하게 뽑아 각 트리를 학습
- 각 분기에서 사용할 특징 후보를 랜덤하게 제한
이렇게 하면 트리들이 서로 다양해지고, 트리들이 다양해야 ensemble 효과가 생긴다.
- 장점:
- 단일 트리보다 안정적이다.
- 과적합이 줄어든다.
- 전처리가 비교적 적다.
- 특징 중요도를 볼 수 있다.
- 약점:
- 단일 트리보다 해석이 어렵다.
- 모델 크기가 커질 수 있다.
- 매우 희소한 고차원 텍스트 특징에서는 선형 모델보다 비효율적일 수 있다.
Gradient Boosting
Gradient Boosting도 여러 개의 트리를 쓰지만, 하지만 Random Forest와 방식이 다르다.
- Random Forest: 여러 사람이 각자 독립적으로 답을 쓰고 투표
- Gradient Boosting: 첫 번째 사람이 푼 뒤, 두 번째 사람이 첫 번째 사람의 오답을 보완, 세 번째 사람이 남은 오답을 또 보완
- 아주 단순한 모델로 시작
- 현재 모델이 틀린 부분을 계산
- 그 오차를 줄이는 새 트리를 추가
- 여러 트리를 순서대로 쌓음
즉 boosting은 모델을 순차적으로 쌓는다. 각 단계의 새 모델은 이전 모델의 약점을 보완하는 역할을 한다.
- 장점:
- 정형 데이터(tabular data)에서 매우 강력하다.
- 비선형 관계와 특징 상호작용을 잘 잡는다.
- 다양한 실무 문제에서 첫 기준 모델 이상의 성능을 낸다.
- 약점:
- 하이퍼파라미터에 민감하다.
- 과적합을 조심해야 한다.
- 학습 시간이 길 수 있다.
- 해석이 단순 모델보다 어렵다.
XGBoost, LightGBM, CatBoost
이 셋은 Gradient Boosting 계열의 대표 구현체다.
셋 모두 “트리를 순서대로 쌓아 오차를 줄인다”는 큰 방향은 같지만, 속도와 범주형 처리 방식, 기본 튜닝 감각이 다르다.
실무에서는 특정 구현체가 항상 이긴다기보다 데이터 형태와 운영 조건에 따라 결과가 갈린다.
- XGBoost
- 강력하고 널리 쓰이는 boosting 라이브러리
정규화, missing value 처리, 병렬화 등 실전 기능이 많음
- 강력하고 널리 쓰이는 boosting 라이브러리
- LightGBM
- 대용량 데이터에서 빠른 학습을 목표로 설계
leaf-wise 성장 방식 사용
범주형 특징 처리 기능 제공
- 대용량 데이터에서 빠른 학습을 목표로 설계
- CatBoost
- 범주형 특징이 많은 데이터에 강점
target encoding으로 인한 누수를 줄이는 방식 제공
- 범주형 특징이 많은 데이터에 강점
정형 데이터에서 딥러닝보다 이런 boosting 모델이 더 좋은 경우도 많다.
특히 행과 열로 이루어진 테이블 데이터에서는 데이터 수가 충분해도 딥러닝이 항상 유리하지 않다.
트리 기반 부스팅은 결측치, 비선형 조건, 특징 간 상호작용을 비교적 적은 전처리로 잘 잡는 편이다.
SVM
SVM(Support Vector Machine)은 두 클래스 사이의 간격이 최대가 되는 경계를 찾는다.
클래스 A와 클래스 B를 나누되, 가장 가까운 데이터들과 경계 사이의 여백을 최대화하는 것.
이 여백을 margin이라고 한다.
margin이 넓으면 새 데이터가 조금 흔들려도 안정적으로 분류될 가능성이 높다.
Kernel Trick
데이터가 직선으로 나뉘지 않을 때는 kernel을 사용할 수 있다.
kernel은 데이터를 더 높은 차원의 공간에서 분리되는 것처럼 다루게 해준다.
원래 공간에서는 직선으로 안 나뉨
→ kernel을 사용하면 더 복잡한 경계 표현 가능
- 장점:
- 중소규모 데이터에서 강력할 수 있다.
- 고차원 데이터에서도 잘 동작하는 경우가 있다.
- margin 최대화라는 직관이 명확하다.
- 약점:
- 데이터가 매우 크면 느릴 수 있다.
- kernel과 파라미터 선택이 중요하다.
- 확률 출력이 기본적으로 자연스럽지 않다.
- 스케일링이 중요하다.
Random Forest와 Gradient Boosting 차이
| 구분 | Random Forest | Gradient Boosting |
| 트리 학습 방식 | 여러 트리를 독립적으로 학습 | 이전 오차를 보완하며 순차 학습 |
| 비유 | 여러 사람의 독립 투표 | 앞사람 오답을 다음 사람이 수정 |
| 과적합 | 비교적 덜 민감 | 하이퍼파라미터에 따라 민감 |
| 성능 | 안정적 | 정형 데이터에서 매우 강력 |
| 병렬화 | 쉬움 | 상대적으로 어려움 |

모델별 전처리 요구사항
| 모델 | 스케일링 필요성 | 범주형 처리 | 결측치 처리 | 해석 가능성 |
| Linear Regression | 높음 | 인코딩 필요 | 필요 | 높음 |
| Logistic Regression | 높음 | 인코딩 필요 | 필요 | 높음 |
| KNN | 매우 높음 | 인코딩 필요 | 필요 | 낮음 |
| Naive Bayes | 경우에 따라 | 텍스트에 강함 | 필요 | 중간 |
| Decision Tree | 낮음 | 구현체에 따라 | 필요 | 높음 |
| Random Forest | 낮음 | 구현체에 따라 | 필요 | 중간 |
| Gradient Boosting | 낮음~중간 | 구현체에 따라 | 구현체에 따라 | 중간 |
| SVM | 높음 | 인코딩 필요 | 필요 | 낮음~중간 |
실무에서의 실험 순서
처음부터 복잡한 모델을 쓰기보다, 단순한 첫 기준 모델부터 시작하는 게 좋다.
텍스트 분류
- TF-IDF + Logistic Regression
- TF-IDF + Linear SVM
- 임베딩 + Logistic Regression
- 필요하면 Transformer fine-tuning
정형 데이터 분류/회귀
- Logistic Regression 또는 Linear Regression
- Decision Tree
- Random Forest
- LightGBM / XGBoost / CatBoost
데이터가 작고 해석이 중요할 때
Logistic Regression
Decision Tree
성능이 가장 중요하고 정형 데이터일 때
LightGBM / XGBoost / CatBoost
정리
- 전통 지도학습 모델은 각자 데이터를 바라보는 방식이 다르다.
- 선형 모델은 가중합으로, 트리는 조건 분기로, 앙상블은 여러 모델의 판단을 결합해서 예측한다.
- 모델 선택의 핵심: 가장 유명한 모델을 고르는 것이 아니라, 데이터 형태와 문제 목적에 맞는 모델을 고르는 것.
GitHub 댓글