콘텐츠로 이동

고전 ML 개요

분류: Layer 11 - AI 기초 & 머신러닝 | 선수지식: L11-10 (ML 수학 토대)

고전 ML 개요 — 회귀, 트리, regularization, bias-variance

섹션 제목: “고전 ML 개요 — 회귀, 트리, regularization, bias-variance”

고전 ML은 데이터에서 규칙을 학습해 예측·분류·군집화·차원 축소를 수행하는 알고리즘 묶음이다. 이 문서의 목표는 알고리즘 이름을 외우는 것이 아니라, 각 알고리즘이 어떤 문제를 풀기 위해 만들어졌고 어떤 trade-off를 선택하는지 설명할 수 있게 만드는 것이다.

LLM 시대에도 이 기본기는 사라지지 않는다. LLM을 쓰기 전에 logistic regression baseline을 세우고, tabular 데이터에는 tree ensemble을 먼저 의심하며, fine-tuning 로그에서 overfitting·regularization·bias-variance를 읽는 능력은 여전히 같은 언어를 쓴다.

선행 한계에서 나온 이유 — 규칙 작성에서 학습으로

섹션 제목: “선행 한계에서 나온 이유 — 규칙 작성에서 학습으로”

소프트웨어가 처음부터 모든 규칙을 사람이 쓸 수 있으면 ML은 필요 없다. 하지만 다음과 같은 문제는 규칙이 빨리 무너진다.

  • 거래가 사기인지 판단할 때 금액 > 100만원 같은 단일 규칙만으로는 정상 고액 결제와 사기를 구분하기 어렵다.
  • 주택 가격은 면적·위치·연식·층수·금리 같은 feature가 동시에 작용한다.
  • 고객을 그룹화할 때 미리 “A 타입, B 타입”이라는 정답 레이블이 없을 수 있다.

고전 ML은 이런 상황에서 규칙을 직접 쓰는 대신, 데이터가 규칙의 계수·분기·경계면을 정하게 하는 방법으로 등장했다. L11-10에서 배운 벡터·확률·손실·gradient는 여기서 그대로 쓰인다. 입력은 feature 벡터 x, 정답은 label y, 모델은 f(x), 학습은 손실 L(y, f(x))를 줄이는 과정이다.

Overfitting 문제가 사고의 중심이 됐다

섹션 제목: “Overfitting 문제가 사고의 중심이 됐다”

모델이 복잡해질수록 학습 데이터는 더 잘 맞춘다. 문제는 학습 데이터만 외우고 새 데이터에서 무너지는 모델이다. 1980년대 이후 신경망과 통계 학습에서 이 현상이 반복되면서, Geman·Bienenstock·Doursat (1992)의 bias/variance dilemma처럼 “모델 복잡도를 어디까지 허용할 것인가”가 ML의 중심 질문이 됐다.

고전 ML 알고리즘은 이 질문에 서로 다르게 답한다.

  • Linear/logistic regression은 단순한 직선·평면을 택해 variance를 낮춘다.
  • Decision tree는 규칙 분기를 늘려 비선형 구조를 잡지만, 깊어질수록 variance가 커진다.
  • Random Forest는 여러 트리를 평균내 variance를 낮춘다.
  • Gradient Boosting은 약한 트리를 순서대로 더해 bias를 낮춘다.
  • SVM은 넓은 margin을 택해 경계 근처 노이즈에 덜 흔들리려 한다.
  • Regularization은 손실에 penalty를 더해 모델이 너무 큰 가중치나 복잡한 경계를 갖지 못하게 한다.

LLM fine-tuning에서도 train loss는 계속 떨어지는데 validation metric이 나빠지는 장면이 나온다. 그때 필요한 첫 언어가 바로 overfitting, regularization, bias-variance다. 다만 이 문서는 LLM 기법을 길게 설명하지 않고, 그 밑에 깔린 고전 ML 개념을 먼저 잡는다.

Feature는 모델에 넣는 입력 변수다. age, country, last_7d_purchase_count, embedding[1536] 같은 값이 모두 feature가 될 수 있다. Label은 맞히려는 정답이다. 가격 예측에서는 실제 가격, 사기 탐지에서는 사기 여부, 군집화에서는 label이 없을 수도 있다.

Model은 feature를 label 또는 유용한 구조로 바꾸는 함수다.

입력 feature x -> model f(x) -> 예측값 또는 점수

학습은 모델의 파라미터를 조정해 손실을 줄이는 과정이다. 선형 회귀의 가중치 w, 로지스틱 회귀의 계수, 트리의 split, k-means의 중심점이 모두 “데이터에서 정해지는 것”이다.

**지도학습(supervised learning)**은 label이 있는 학습이다. 회귀(regression)는 연속값을 예측하고, 분류(classification)는 클래스나 확률을 예측한다.

**비지도학습(unsupervised learning)**은 label 없이 데이터의 구조를 찾는다. k-means는 비슷한 점끼리 묶고, PCA는 정보가 많은 방향을 찾아 차원을 줄인다.

분류 모델은 feature 공간을 여러 영역으로 나눈다. 그 영역을 가르는 선·평면·곡면을 **결정 경계(decision boundary)**라고 부른다.

선형 모델: 한 개의 직선/평면으로 나눔
결정트리: if-else 사각형 영역을 여러 개 이어 붙임
SVM + kernel: 원래 공간에서는 곡선처럼 보이는 경계를 만듦

결정 경계의 모양은 알고리즘의 철학을 그대로 보여준다. 단순한 경계는 안정적이지만 복잡한 패턴을 놓치고, 복잡한 경계는 패턴을 잘 잡지만 noise까지 외우기 쉽다.

4.1 Linear Regression — 연속값을 설명 가능한 직선으로 예측한다

섹션 제목: “4.1 Linear Regression — 연속값을 설명 가능한 직선으로 예측한다”

풀려던 문제: 연속값을 예측하고 싶다. 예를 들어 면적·방 개수·역까지 거리로 주택 가격을 예측하거나, 광고비로 매출을 예측한다. 사람이 규칙을 직접 쓰기에는 feature가 여러 개이고, 각 feature가 어느 정도 영향을 주는지 데이터에서 추정해야 한다.

선형 회귀는 다음 형태의 모델을 학습한다.

y = w_1*x_1 + w_2*x_2 + ... + w_n*x_n + b

여기서 w_i는 각 feature의 영향력이다. 손실은 보통 MSE(Mean Squared Error, 평균 제곱 오차)를 쓴다.

MSE = 평균((실제값 - 예측값)^2)

작은 예시:

가격(만원) = 5000 + 800*방개수 - 120*역까지거리_km
방 3개, 역까지 2km:
예측 가격 = 5000 + 800*3 - 120*2 = 7160만원

이 예시는 실제 가격 모델로 충분하지 않지만, 선형 회귀의 장점은 분명하다. 역까지거리_km의 계수가 -120이면 거리가 1km 늘 때 가격이 평균 120만원 낮아진다는 식으로 해석할 수 있다.

대가와 경계: 선형 회귀는 feature와 결과의 관계가 대체로 더하기로 설명된다고 가정한다. “역까지 거리가 1km에서 2km로 늘 때의 영향”과 “20km에서 21km로 늘 때의 영향”이 같다고 보는 식이다. 실제 관계가 곡선이거나 feature끼리 강하게 상호작용하면 underfitting이 난다. 대신 모델이 단순해 작은 데이터에서도 비교적 안정적이고, 해석 가능성이 높다.

4.2 Logistic Regression — 분류를 확률과 threshold 문제로 바꾼다

섹션 제목: “4.2 Logistic Regression — 분류를 확률과 threshold 문제로 바꾼다”

풀려던 문제: yes/no 또는 여러 클래스 중 하나를 예측하고 싶다. 예를 들어 이메일이 spam인지, 거래가 fraud인지, 고객이 이탈할지 판단한다. 단순히 “분류”만 하면 끝이 아니라, 운영에서는 얼마나 확신하는지어느 threshold에서 action을 취할지가 필요하다.

이진 logistic regression은 선형 점수 z = w^T x + b를 sigmoid로 확률처럼 바꾼다.

p = sigmoid(z) = 1 / (1 + exp(-z))

손실은 cross-entropy를 쓴다. L11-10에서 본 것처럼, 정답 클래스에 낮은 확률을 주면 손실이 크게 올라간다.

거래 사기 탐지 모델이 다음 확률을 냈다고 하자.

거래 A: fraud probability 0.92
거래 B: fraud probability 0.63
거래 C: fraud probability 0.48
거래 D: fraud probability 0.07

threshold를 0.5로 두면 A와 B를 차단한다. C는 통과한다. threshold를 0.8로 올리면 A만 차단한다.

threshold 0.5: 더 많이 잡음(recall 상승), 정상 거래 차단도 늘 수 있음(precision 하락)
threshold 0.8: 더 조심스럽게 차단(precision 상승), 놓치는 사기가 늘 수 있음(recall 하락)

이 때문에 logistic regression의 출력은 “정답/오답”보다 먼저 점수와 threshold의 조합으로 읽어야 한다. 모델이 같아도 운영 정책에 따라 결과가 달라진다.

대가와 경계: logistic regression은 빠르고, 설명 가능하며, baseline으로 강하다. 하지만 기본 형태는 선형 결정 경계만 만든다. XOR처럼 “두 조건이 같이 있을 때만 양성”인 패턴이나 L자 모양 경계는 feature engineering 없이 잘 못 잡는다. 또한 확률처럼 보이는 출력이 항상 calibration이 잘 된 확률이라는 뜻은 아니다. 0.8이라고 말한 샘플 100개 중 실제 양성이 80개인지 별도로 확인해야 한다.

4.3 Decision Tree — 사람이 읽을 수 있는 if-else 규칙을 학습한다

섹션 제목: “4.3 Decision Tree — 사람이 읽을 수 있는 if-else 규칙을 학습한다”

풀려던 문제: 선형 모델로는 잡기 어려운 비선형 규칙을 사람이 읽을 수 있는 형태로 만들고 싶다. Decision tree는 feature 하나를 기준으로 데이터를 둘로 나누고, 그 하위 노드에서 다시 나누는 과정을 반복한다.

if 거래금액 > 100만원:
if 해외결제 == true:
fraud 가능성 높음
else:
fraud 가능성 중간
else:
fraud 가능성 낮음

트리는 분할할 때 impurity가 줄어드는 방향을 고른다. 분류에서는 Gini impurity나 entropy, 회귀에서는 MSE 감소를 기준으로 삼는다. 핵심은 “이 split을 하면 label이 더 한쪽으로 모이는가”다.

선형 모델은 한 번에 한 줄을 긋는다.

linear boundary:
x2 = 2*x1 + 1

트리는 축에 평행한 분기를 이어 붙인다.

tree boundary:
if x1 > 10 and x2 > 5 then class A
else if x1 <= 10 and x2 > 20 then class A
else class B

L자 모양, 계단 모양, 특정 구간에서만 바뀌는 규칙은 트리가 선형 모델보다 자연스럽다. 반대로 대각선 하나로 깔끔하게 나뉘는 문제에서는 선형 모델이 더 단순하고 안정적일 수 있다.

대가와 경계: 트리는 해석이 쉽지만 variance가 크다. 깊이를 제한하지 않으면 training set의 예외를 하나씩 외운다. max_depth, min_samples_leaf, pruning은 트리의 capacity를 줄이는 regularization이다.

4.4 Ensemble — 여러 약한 모델을 합쳐 안정성이나 정확도를 얻는다

섹션 제목: “4.4 Ensemble — 여러 약한 모델을 합쳐 안정성이나 정확도를 얻는다”

풀려던 문제: 단일 트리는 해석은 쉽지만 너무 흔들린다. train 데이터가 조금만 바뀌어도 split 구조가 바뀌고, 깊은 트리는 noise를 외운다. Ensemble은 여러 모델의 예측을 합쳐 이 문제를 줄인다.

Random Forest와 Gradient Boosting은 둘 다 트리를 많이 쓰지만 철학이 다르다.

트리 앙상블의 두 방향

Random Forest

여러 트리를 독립적으로 학습한 뒤 평균 또는 다수결. 개별 트리의 흔들림을 평균내 variance를 낮춘다.

Gradient Boosting

앞 모델이 틀린 잔차를 다음 트리가 순서대로 보완. 약한 모델을 누적해 bias를 낮춘다.

Bagging의 trade-off

안정성과 robustness가 좋지만, 단일 트리보다 설명은 어려워지고 추론 비용이 늘어난다.

Boosting의 trade-off

정확도가 강하지만 learning rate, tree depth, early stopping 같은 hyperparameter에 민감하다.

Tabular 데이터에서 XGBoost / LightGBM / CatBoost 같은 Gradient Boosting 계열이 강한 이유는 feature interaction과 missing value, 비선형 구간을 잘 다루기 때문이다. 하지만 “무조건 GBM”은 아니다. 규제·설명 가능성이 최우선이면 logistic regression이나 얕은 tree가 더 낫고, latency가 극단적으로 짧아야 하면 선형 모델이 이길 수 있다. 최근 tabular benchmark에서도 tree/boosting 계열은 여전히 강한 기준선으로 남아 있다. 다양한 tabular dataset 비교 연구를 읽을 때의 실무 결론은 “deep model이나 LLM 분류기로 바로 뛰어들기 전에 GBM과 logistic regression baseline을 먼저 세운다”에 가깝다. 예를 들어 100개가 넘는 tabular dataset을 비교한 benchmark에서도 boosting 계열은 평균적으로 강한 기준선으로 남고, 작은 표 데이터에서는 TabPFN 같은 특화 모델도 강하게 나온다. 정확한 논문 숫자를 외우는 것보다, baseline 없이 비싼 모델을 붙이면 성능·비용 판단 기준을 잃는다는 점이 중요하다.

4.5 SVM — 경계가 아니라 margin을 최적화한다

섹션 제목: “4.5 SVM — 경계가 아니라 margin을 최적화한다”

풀려던 문제: 분류 경계를 하나 찾더라도, 경계가 데이터 점에 너무 붙어 있으면 새 데이터에 불안정하다. SVM(Support Vector Machine)은 두 클래스를 나누는 경계 중 가장 넓은 margin을 가진 경계를 찾는다.

Margin은 결정 경계와 가장 가까운 학습 샘플 사이의 거리다. 경계 근처의 샘플이 support vector이고, 이 샘플들이 최종 경계를 좌우한다.

나쁜 경계: 한 클래스 점에 너무 가까움 -> 작은 noise에도 오분류
좋은 경계: 양쪽 클래스에서 멀리 떨어짐 -> margin이 큼

SVM의 손실은 hinge loss로 이해할 수 있다. 정답 쪽으로 충분히 멀리 떨어져 있으면 손실이 0이고, margin 안쪽에 있거나 틀리면 penalty가 생긴다.

Kernel trick은 비선형 문제를 다루기 위한 장치다. 원래 공간에서는 곡선 경계가 필요하지만, 더 높은 차원으로 보낸 뒤에는 선형 경계로 나눌 수 있는 경우가 있다. kernel은 이 고차원 매핑을 명시적으로 만들지 않고 내적 값만 계산한다.

작은 반례로 XOR을 생각하면 된다. x1만 봐도, x2만 봐도 정답이 갈리지 않지만 x1x2의 조합을 보면 네 구역이 나뉜다. 원래 2차원에서 직선 하나로는 나누기 어렵지만, x1 * x2 같은 조합 feature를 추가한 공간에서는 선형 경계가 가능해진다. kernel은 이런 조합 공간을 직접 만들지 않고도 비슷한 효과를 낸다.

대가와 경계: SVM은 작은 데이터셋, 고차원 sparse feature, margin이 중요한 분류에서 강하다. 하지만 큰 데이터에서는 학습 비용이 부담될 수 있고, logistic regression처럼 바로 해석 가능한 확률을 주지 않는다. threshold 운영이나 calibration이 중요하면 별도 확률 보정이 필요하다.

4.6 k-means — label 없이 중심점으로 군집을 만든다

섹션 제목: “4.6 k-means — label 없이 중심점으로 군집을 만든다”

풀려던 문제: 정답 레이블은 없지만 비슷한 데이터끼리 묶고 싶다. 고객군을 나누거나, 임베딩된 문서를 토픽별로 묶거나, 중복 후보를 찾는 상황이다.

k-means는 다음을 반복한다.

  1. 군집 수 k를 정하고 중심점 k개를 둔다.
  2. 각 점을 가장 가까운 중심점에 할당한다.
  3. 각 군집의 평균 위치로 중심점을 다시 옮긴다.
  4. 할당이 크게 변하지 않을 때까지 반복한다.

작은 예시:

점: (0,0), (0,1), (1,0), (8,8), (8,9), (9,8)
k = 2
결과:
cluster 1 center ~= (0.3, 0.3)
cluster 2 center ~= (8.3, 8.3)

이 예시는 k-means가 잘 맞는 경우다. 군집이 둥글고, 크기가 비슷하고, 중심으로 설명된다.

다음 상황에서는 k-means가 자연스러운 구조를 깨뜨린다.

데이터 구조:
- 길게 휘어진 초승달 모양 그룹 2개
- 한쪽은 조밀하고 다른 한쪽은 퍼져 있음
- 실제 그룹은 3개인데 k를 2로 고정

k-means는 “중심점까지의 거리”로만 판단하므로 초승달 모양의 같은 그룹을 둘로 자르거나, 서로 다른 밀도의 점을 한 군집으로 합칠 수 있다. 이때 군집 결과가 예쁘게 색칠되어 보여도 실제 의미 구조와 다를 수 있다.

대가와 경계: k-means는 빠르고 이해하기 쉽다. 대신 k를 미리 정해야 하고, 구형·비슷한 크기·비슷한 밀도의 군집을 가정한다. 군집 모양이 복잡하거나 밀도가 다르면 HDBSCAN, Gaussian Mixture Model, spectral clustering 같은 대안을 검토한다.

4.7 PCA — 정보를 많이 담은 방향으로 차원을 줄인다

섹션 제목: “4.7 PCA — 정보를 많이 담은 방향으로 차원을 줄인다”

풀려던 문제: feature가 너무 많아 시각화·저장·학습이 어렵다. 모든 차원을 다 쓰면 비용이 커지고 noise까지 학습할 수 있다. PCA(Principal Component Analysis)는 데이터 분산이 큰 방향을 새 축으로 잡고, 앞쪽 몇 개 축만 남긴다.

PCA는 축을 회전한다. 원래 feature가 x1, x2, x3라면, PCA의 첫 번째 축은 이 feature들의 선형 결합일 수 있다.

PC1 = 0.7*x1 + 0.6*x2 + 0.1*x3
PC2 = -0.2*x1 + 0.3*x2 + 0.9*x3

L11-10에서 이름을 잡은 SVD가 PCA 계산의 핵심 도구다. 여기서는 SVD 공식을 다시 풀기보다, PCA가 “데이터가 가장 많이 퍼진 방향”을 찾아 feature 축을 새로 잡는다고 이해하면 충분하다.

100차원 데이터를 PCA로 2차원까지 줄였다고 하자.

PC1 설명 분산: 62%
PC2 설명 분산: 23%
남은 98개 축: 15%

2차원 산점도는 전체 분산의 85%를 보여준다. 시각화에는 충분할 수 있지만, 버린 15% 안에 rare fraud signal이나 minority class 구분 정보가 들어 있으면 분류 성능은 떨어질 수 있다. PCA는 label을 보지 않고 분산만 본다. “분산이 큰 방향”이 항상 “예측에 중요한 방향”은 아니다.

대가와 경계: PCA는 차원 축소와 noise 제거에 좋고, multicollinearity가 강한 feature를 압축할 수 있다. 대신 축의 의미가 원래 feature보다 덜 직관적이고, 정보 손실이 생긴다. 임베딩을 시각화할 때 PCA 2D 그림에서 군집이 안 보인다고 해서 원래 임베딩이 쓸모없다는 뜻은 아니다. 2D로 줄이는 과정에서 정보가 사라졌을 수 있다.

5. Overfitting, regularization, bias-variance

섹션 제목: “5. Overfitting, regularization, bias-variance”

5.1 Overfitting은 “학습 점수가 좋다”와 다르다

섹션 제목: “5.1 Overfitting은 “학습 점수가 좋다”와 다르다”

Overfitting은 모델이 학습 데이터의 일반 패턴이 아니라 우연한 noise와 예외까지 외운 상태다. 학습 점수만 보면 좋아 보이지만, validation 또는 test 데이터에서 무너진다.

작은 train/validation 예시:

모델 A: decision tree max_depth=2
train accuracy = 0.78
validation accuracy = 0.76
모델 B: decision tree max_depth=20
train accuracy = 0.99
validation accuracy = 0.71

모델 B는 train에서는 거의 완벽하지만 validation에서 더 나쁘다. 이때 “모델이 더 똑똑해졌다”가 아니라 “train set을 외웠다”로 읽어야 한다.

반대로 train과 validation이 모두 낮으면 underfitting이다.

train 낮음 + validation 낮음 -> bias 큼, 모델이 너무 단순하거나 feature 부족
train 높음 + validation 낮음 -> variance 큼, 모델이 너무 복잡하거나 데이터 부족
train 높음 + validation도 높음 -> 현재 기준에서는 적정

5.2 Regularization은 모델에게 복잡도 비용을 청구한다

섹션 제목: “5.2 Regularization은 모델에게 복잡도 비용을 청구한다”

Regularization은 손실 함수에 penalty를 더한다.

total_loss = data_loss + lambda * penalty

lambda가 크면 모델은 train data를 조금 덜 맞추더라도 더 단순한 해를 고른다. 핵심은 “정답을 못 맞히게 방해한다”가 아니라, 학습 데이터에만 맞는 과도한 설명을 비싸게 만든다는 점이다.

Penalty 직관:

가중치 A: [10, -8, 0, 0]
L2 penalty = 10^2 + (-8)^2 = 164
가중치 B: [3, -2, 1, 0]
L2 penalty = 3^2 + (-2)^2 + 1^2 = 14

두 모델의 train error가 비슷하다면 L2 regularization은 B를 선호한다. 큰 가중치 몇 개에 의존하는 모델은 feature noise나 분포 변화에 흔들릴 가능성이 높기 때문이다.

L1과 L2의 차이:

RegularizationPenalty모델에 주는 압력자주 쓰는 이유
L1 / Lassosum(abs(w_i))일부 가중치를 정확히 0으로 만든다feature selection, sparse 모델
L2 / Ridgesum(w_i^2)모든 가중치를 작게 만들지만 보통 정확히 0은 아니다multicollinearity 완화, smooth 모델
Elastic NetL1 + L2sparse와 smooth를 함께 요구한다feature가 많고 상관관계도 있을 때

AdamW의 weight decay는 L2 계열 사고와 연결된다. SGD에서는 L2 regularization과 weight decay가 거의 같은 효과를 내지만, Adam에서는 adaptive gradient와 결합되며 달라진다. AdamW는 이 결합을 끊어 모든 가중치를 일정 비율로 줄이는 방식이다. LLM fine-tuning에서 weight decay를 볼 때도 기본 직관은 “가중치가 과도하게 커지는 것을 막아 generalization을 돕는다”다.

Bias는 모델이 너무 단순해서 일관되게 틀리는 경향이다. 직선 하나로 곡선을 맞히려는 상황이 대표적이다.

Variance는 모델이 너무 복잡해서 학습 데이터가 조금만 바뀌어도 예측이 크게 흔들리는 경향이다. 깊은 트리가 noise까지 외우는 상황이 대표적이다.

오차
|
| bias variance
|\\ /
| \\ /
| \\______________________/
| 적정 복잡도
+-------------------------------> 모델 복잡도

이 그림은 “항상 중간 크기 모델이 정답”이라는 뜻이 아니다. over-parameterized 모델에서는 double descent처럼 다른 현상도 관측된다. 그래도 첫 번째 회독에서는 이 U자 곡선을 기준 언어로 잡으면 된다. 모델을 키울 때는 bias를 줄이려는 것이고, regularization·데이터 추가·앙상블 평균은 variance를 줄이려는 조치다.

5.4 고전 ML 개념이 LLM 학습에 남아 있는 자리

섹션 제목: “5.4 고전 ML 개념이 LLM 학습에 남아 있는 자리”

고전 ML 개념과 LLM 학습의 연결

Regularization

weight decay, dropout, data augmentation, early stopping으로 이어진다.

Bias-variance

모델 크기, fine-tuning step 수, LoRA rank, 데이터 양을 고를 때 쓰는 기본 언어다. LoRA는 다음 문서에서 정의하므로, 여기서는 rank를 adapter의 표현력 크기 정도로만 먼저 읽는다.

Baseline

LLM 분류기를 쓰기 전에 embedding + logistic regression 같은 싼 기준선을 먼저 세운다.

Validation split

train loss가 계속 내려가도 validation metric이 꺾이면 overfitting으로 읽는다.

Feature engineering은 원본 데이터를 모델이 잘 학습할 수 있는 feature로 바꾸는 작업이다. 고전 ML에서는 모델보다 feature가 성능을 더 많이 좌우하는 경우가 많았다.

예를 들어 거래 데이터의 원본 컬럼이 user_id, amount, created_at, merchant_id뿐이라면 다음 feature를 만들 수 있다.

last_7d_purchase_count
last_7d_total_amount
hour_of_day
is_new_merchant_for_user
amount_vs_user_median_ratio

이 feature들은 모델에게 “이 거래가 평소 행동에서 얼마나 벗어났는가”를 직접 보여준다. Logistic regression이나 GBM은 이런 feature 위에서 강해진다.

대가와 경계:

  • 좋은 feature는 도메인 지식을 압축한다.
  • 나쁜 feature는 leakage를 만든다. 예를 들어 chargeback_created_at처럼 label 이후에 생기는 값을 feature로 넣으면 validation 점수가 비현실적으로 좋아진다.
  • 텍스트·이미지에서는 사람이 feature를 설계하기보다 embedding이나 deep model이 feature를 학습하는 쪽이 자연스럽다.
  • tabular, 추천, 리스크 모델에서는 여전히 feature engineering이 핵심이다.

Feature engineering과 embedding은 대립이 아니다. 현재 실무에서는 tabular feature와 embedding feature를 같이 쓰는 hybrid가 흔하다. 예를 들어 사용자 행동 통계 feature와 상품 설명 embedding을 합쳐 추천 모델의 입력으로 쓸 수 있다.

새 알고리즘을 만났을 때는 이름보다 다음 질문을 먼저 던진다.

  1. 어떤 문제를 푸는가? 회귀, 분류, 군집화, 차원 축소, ranking 중 무엇인가?
  2. 어떤 가정을 하는가? 선형성, 구형 군집, 독립성, margin, feature interaction 중 무엇을 기대하는가?
  3. 무엇으로 capacity를 조절하는가? regularization alpha, tree depth, number of estimators, kernel, k, PCA component 수 등.
  4. 어떤 실패 신호가 있는가? overfitting gap, leakage, imbalance, calibration 오류, drift, 해석 불가능성 등.
상황먼저 시도할 모델이유와 trade-off
연속값 예측 + 해석 중요Linear Regression, Ridge빠르고 계수 해석이 쉽다. 비선형 관계는 놓칠 수 있다.
이진/다중 분류 + baseline 필요Logistic Regression확률 점수와 threshold 운영이 쉽다. 경계는 기본적으로 선형.
tabular + 비선형 feature interactionRandom Forest, Gradient Boosting상호작용과 결측에 강하다. 튜닝·설명 비용은 커진다.
작은 데이터 + 고차원 sparse featureLogistic Regression, Linear SVM단순하고 안정적이다. 복잡한 경계는 feature에 의존한다.
label 없음 + 그룹 탐색k-means, HDBSCAN 후보구조 탐색에 좋다. 군집 의미는 사람이 검증해야 한다.
차원 축소·시각화·상관 feature 압축PCA빠르고 안정적이다. label에 중요한 작은 신호를 버릴 수 있다.
해석 가능성·규제 요구Linear/Logistic Regression, 얕은 Tree설명 가능성이 높다. 최고 정확도와는 trade-off가 있다.
latency가 극도로 짧아야 함Linear/Logistic Regression, 작은 Tree추론 비용이 낮다. 복잡한 패턴은 제한적이다.

정량 기준은 절대값보다 자릿수 감각으로 읽는다. 샘플이 50개 미만이면 모델 종류보다 데이터 검수, label 품질, cross-validation 설계가 먼저다. 샘플이 50개1만 개라면 logistic regression, 작은 tree, GBM을 함께 baseline으로 세운다. tabular가 1만10만 행 규모이고 feature interaction이 많다면 GBM을 강한 후보로 둔다. 요청당 추론이 1ms 안팎이어야 하거나 대량 배치 scoring을 해야 한다면 선형 모델과 작은 tree의 비용 장점이 커진다.

  • Logistic regression이 train/validation 모두 낮으면 feature가 부족하거나 경계가 비선형일 수 있다. polynomial feature, interaction feature, tree model을 검토한다.
  • Tree가 train은 높고 validation이 낮으면 depth를 줄이거나 min_samples_leaf를 키우고, Random Forest/GBM의 early stopping을 본다.
  • GBM이 좋아 보이지만 metric이 split마다 크게 흔들리면 데이터 수가 부족하거나 leakage 가능성이 있다.
  • k-means 군집이 매번 달라지거나 해석이 안 되면 k가 틀렸거나 군집 모양 가정이 맞지 않을 수 있다.
  • PCA 2D 그림이 예쁘지 않아도 원래 고차원 구조가 없다는 뜻은 아니다. 축소 정보량과 downstream metric을 같이 본다.
  • LLM 분류기가 logistic regression baseline보다 조금만 좋다면 비용·latency·운영 일관성을 같이 비교한다. 평균 F1만 보지 말고 minority class recall과 calibration도 본다. 예를 들어 LLM uplift가 23%p인데 호출 비용이 baseline보다 수십100배 커지고 latency도 크게 늘어난다면, embedding + logistic regression이나 GBM baseline이 더 나은 제품 선택일 수 있다. 반대로 baseline이 특정 class에서 계속 틀리고 LLM이 그 class의 recall을 크게 올린다면 비용을 낼 근거가 생긴다.

긴 복구 절차보다 먼저 알아야 할 것은 “어떤 현상이 어떤 개념 실패를 뜻하는가”다.

신호의미먼저 의심할 것
train score 상승, validation score 하락overfitting모델 capacity, regularization, 데이터 중복
train과 validation이 모두 낮음underfittingfeature 부족, 모델 단순, 학습 부족
validation 점수가 비현실적으로 높음data leakage 가능성split 전 preprocessing, target 파생 feature
accuracy는 높은데 minority recall이 낮음label imbalance silent passconfusion matrix, precision/recall, threshold
같은 모델이 split마다 점수 편차가 큼variance 큼데이터 수 부족, k-fold std, stratified split
운영 투입 후 성능만 하락train/serve skew 또는 distribution shiftfeature 분포, null rate, cardinality, time split
LR/Lasso 계수가 split마다 부호까지 바뀜multicollinearity상관 feature, VIF, Ridge/PCA
확률 0.9 예측이 실제로 90% 맞지 않음calibration 실패calibration curve, Platt scaling, isotonic 후보
k-means 군집이 도메인 의미와 맞지 않음구형 군집 가정 위반 또는 잘못된 kHDBSCAN, GMM, 거리 척도, embedding 품질
PCA 후 성능이 급락버린 축에 label 신호가 있었음explained variance만 보지 말고 validation metric

정규화를 train/test split 전에 전체 데이터로 fit하면 test set의 평균과 표준편차가 train 과정에 들어간다.

잘못된 순서:
전체 데이터로 scaler.fit_transform()
train/test split
올바른 순서:
train/test split
train으로 scaler.fit()
train/test 각각 transform()

첫 번째 순서는 validation 점수를 좋게 만들 수 있지만 운영에서는 같은 정보가 없다. 그래서 preprocessing도 모델 학습의 일부로 보고, split 이후 train set에만 fit해야 한다.

99%가 negative인 데이터에서 전부 negative로 예측하면 accuracy는 99%다. 하지만 positive를 하나도 못 잡으면 실제 목적은 실패다.

데이터 10,000건:
negative 9,900
positive 100
모델 예측:
전부 negative
accuracy = 9,900 / 10,000 = 99%
positive recall = 0 / 100 = 0%

이때 accuracy는 silent failure를 숨긴다. confusion matrix, precision, recall, F1, ROC-AUC, PR-AUC를 같이 봐야 한다. 운영 action이 threshold에 연결되어 있다면 threshold sweep도 필요하다.

  • 추천 시스템 baseline: logistic regression, matrix factorization, GBM
  • A/B 테스트와 causal 분석의 주변 도구: linear regression, regularization, feature control
  • 이상 탐지: Isolation Forest, k-means, PCA reconstruction error
  • 신용 평가·리스크 모델: 해석 가능한 linear/logistic model, tree model
  • LLM 시스템 평가 baseline: embedding + logistic regression, 작은 classifier
  • RAG(Retrieval-Augmented Generation, 검색으로 문서를 넣고 답하게 하는 방식) 운영 보조: k-means로 chunk 군집화, PCA/UMAP으로 embedding 품질 시각화
  • 모델 gateway: 쉬운 요청은 싼 모델이나 고전 classifier로 라우팅하고, 어려운 요청만 LLM으로 보낸다
개념 A개념 B차이점
Linear regressionLogistic regression연속값 예측 vs 클래스 확률 예측. 손실은 MSE vs cross-entropy
Decision treeLinear model계단형 if-else 경계 vs 직선/평면 경계
Random ForestGradient Boosting독립 트리 평균으로 variance 감소 vs 잔차를 순차 보완해 bias 감소
L1 regularizationL2 regularizationsparse feature 선택 효과 vs 전체 가중치 smooth 축소
BiasVariance모델이 단순해 생기는 일관된 오차 vs 데이터에 민감한 흔들림
k-meansPCA군집 label을 만든다 vs 축을 바꿔 차원을 줄인다
Feature engineeringEmbedding사람이 만든 feature vs 모델이 학습한 dense representation

기본 비교 체크

  • California Housing 같은 회귀 데이터에 `LinearRegression`과 `RandomForestRegressor`를 학습하고 train/test R² gap을 비교한다
  • 같은 회귀 데이터에 `Lasso(alpha=0.1)`와 `Ridge(alpha=0.1)`를 적용해 `coef_ == 0` 개수를 비교한다
  • 이진 분류 데이터에서 logistic regression의 threshold를 0.3, 0.5, 0.8로 바꾸며 precision/recall 변화를 본다

Bias-variance 관측 체크

  • `validation_curve`로 결정트리의 `max_depth`를 1~20까지 바꿔 train/validation 점수를 그린다
  • `GridSearchCV(cv=5)` 결과에서 평균 점수뿐 아니라 std를 본다. std가 크면 split에 민감한 모델이다
  • learning curve에서 데이터 수가 늘어날 때 validation 점수가 계속 오르는지, train/validation gap이 줄어드는지 확인한다

Silent failure 진단 체크

  • 분류 모델에 `classification_report`와 `confusion_matrix`를 출력하고 minority class recall을 확인한다
  • feature 간 상관계수 행렬을 보고 0.9 이상 쌍이 많으면 Ridge와 Lasso 계수 안정성을 비교한다
  • 시계열 성격이 있는 데이터에서는 random split과 time-based split 점수를 비교해 leakage 가능성을 본다
  • PCA 2D 시각화 결과가 애매하면 explained variance와 downstream validation metric을 함께 본다

결과가 예상과 다를 때의 첫 해석

섹션 제목: “결과가 예상과 다를 때의 첫 해석”
  • Linear/logistic regression이 약하다면 먼저 feature와 비선형 경계를 의심한다.
  • Tree가 train만 높다면 depth와 leaf size를 의심한다.
  • GBM이 split마다 흔들리면 데이터 양, leakage, label noise를 의심한다.
  • k-means 결과가 도메인 의미와 다르면 k, 거리 척도, embedding 품질, 군집 모양 가정을 의심한다.
  • PCA 축소 후 성능이 떨어지면 버린 축에 예측 신호가 있었는지 본다.
  • 회귀: Ridge, Lasso, Elastic Net, polynomial regression
  • 트리/앙상블: XGBoost, LightGBM, CatBoost, AdaBoost, stacking
  • 분류: SVM, kernel methods, naive Bayes, k-NN
  • 비지도: HDBSCAN, GMM, t-SNE, UMAP
  • 평가 지표: ROC-AUC, PR-AUC, F1, precision-recall curve, calibration plot, log loss
  • 검증: k-fold cross-validation, stratified sampling, time-series split

고전 ML 개요 체크

  • 선형 회귀가 어떤 문제를 풀고, 선형성 가정 때문에 언제 깨지는지 설명할 수 있다
  • 로지스틱 회귀의 확률 출력과 threshold가 precision/recall trade-off를 만든다는 점을 설명할 수 있다
  • Decision tree와 linear model의 결정 경계 차이를 작은 예로 설명할 수 있다
  • Random Forest와 Gradient Boosting이 bias-variance를 서로 다른 방식으로 다룬다는 점을 설명할 수 있다
  • SVM의 margin과 kernel trick이 어떤 문제를 풀기 위해 등장했는지 설명할 수 있다
  • k-means가 왜 구형 군집에 강하고, 초승달 모양 군집에서 왜 깨지는지 설명할 수 있다
  • PCA가 분산이 큰 방향을 남기지만 label에 중요한 작은 신호를 버릴 수 있다는 점을 설명할 수 있다
  • Overfitting, regularization, bias-variance를 train/validation 점수 패턴으로 읽을 수 있다
  • Data leakage, imbalance, train/serve skew 같은 silent failure 신호를 구분할 수 있다

최종 수정: 2026-07-09