Random Forest
여러 트리를 독립적으로 학습한 뒤 평균 또는 다수결. 개별 트리의 흔들림을 평균내 variance를 낮춘다.
분류: Layer 11 - AI 기초 & 머신러닝 | 선수지식: L11-10 (ML 수학 토대)
고전 ML은 데이터에서 규칙을 학습해 예측·분류·군집화·차원 축소를 수행하는 알고리즘 묶음이다. 이 문서의 목표는 알고리즘 이름을 외우는 것이 아니라, 각 알고리즘이 어떤 문제를 풀기 위해 만들어졌고 어떤 trade-off를 선택하는지 설명할 수 있게 만드는 것이다.
LLM 시대에도 이 기본기는 사라지지 않는다. LLM을 쓰기 전에 logistic regression baseline을 세우고, tabular 데이터에는 tree ensemble을 먼저 의심하며, fine-tuning 로그에서 overfitting·regularization·bias-variance를 읽는 능력은 여전히 같은 언어를 쓴다.
소프트웨어가 처음부터 모든 규칙을 사람이 쓸 수 있으면 ML은 필요 없다. 하지만 다음과 같은 문제는 규칙이 빨리 무너진다.
금액 > 100만원 같은 단일 규칙만으로는 정상 고액 결제와 사기를 구분하기 어렵다.고전 ML은 이런 상황에서 규칙을 직접 쓰는 대신, 데이터가 규칙의 계수·분기·경계면을 정하게 하는 방법으로 등장했다. L11-10에서 배운 벡터·확률·손실·gradient는 여기서 그대로 쓰인다. 입력은 feature 벡터 x, 정답은 label y, 모델은 f(x), 학습은 손실 L(y, f(x))를 줄이는 과정이다.
모델이 복잡해질수록 학습 데이터는 더 잘 맞춘다. 문제는 학습 데이터만 외우고 새 데이터에서 무너지는 모델이다. 1980년대 이후 신경망과 통계 학습에서 이 현상이 반복되면서, Geman·Bienenstock·Doursat (1992)의 bias/variance dilemma처럼 “모델 복잡도를 어디까지 허용할 것인가”가 ML의 중심 질문이 됐다.
고전 ML 알고리즘은 이 질문에 서로 다르게 답한다.
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까지 외우기 쉽다.
풀려던 문제: 연속값을 예측하고 싶다. 예를 들어 면적·방 개수·역까지 거리로 주택 가격을 예측하거나, 광고비로 매출을 예측한다. 사람이 규칙을 직접 쓰기에는 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이 난다. 대신 모델이 단순해 작은 데이터에서도 비교적 안정적이고, 해석 가능성이 높다.
풀려던 문제: 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.07threshold를 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개인지 별도로 확인해야 한다.
풀려던 문제: 선형 모델로는 잡기 어려운 비선형 규칙을 사람이 읽을 수 있는 형태로 만들고 싶다. 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 BL자 모양, 계단 모양, 특정 구간에서만 바뀌는 규칙은 트리가 선형 모델보다 자연스럽다. 반대로 대각선 하나로 깔끔하게 나뉘는 문제에서는 선형 모델이 더 단순하고 안정적일 수 있다.
대가와 경계: 트리는 해석이 쉽지만 variance가 크다. 깊이를 제한하지 않으면 training set의 예외를 하나씩 외운다. max_depth, min_samples_leaf, pruning은 트리의 capacity를 줄이는 regularization이다.
풀려던 문제: 단일 트리는 해석은 쉽지만 너무 흔들린다. train 데이터가 조금만 바뀌어도 split 구조가 바뀌고, 깊은 트리는 noise를 외운다. Ensemble은 여러 모델의 예측을 합쳐 이 문제를 줄인다.
Random Forest와 Gradient Boosting은 둘 다 트리를 많이 쓰지만 철학이 다르다.
여러 트리를 독립적으로 학습한 뒤 평균 또는 다수결. 개별 트리의 흔들림을 평균내 variance를 낮춘다.
앞 모델이 틀린 잔차를 다음 트리가 순서대로 보완. 약한 모델을 누적해 bias를 낮춘다.
안정성과 robustness가 좋지만, 단일 트리보다 설명은 어려워지고 추론 비용이 늘어난다.
정확도가 강하지만 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 없이 비싼 모델을 붙이면 성능·비용 판단 기준을 잃는다는 점이 중요하다.
풀려던 문제: 분류 경계를 하나 찾더라도, 경계가 데이터 점에 너무 붙어 있으면 새 데이터에 불안정하다. SVM(Support Vector Machine)은 두 클래스를 나누는 경계 중 가장 넓은 margin을 가진 경계를 찾는다.
Margin은 결정 경계와 가장 가까운 학습 샘플 사이의 거리다. 경계 근처의 샘플이 support vector이고, 이 샘플들이 최종 경계를 좌우한다.
나쁜 경계: 한 클래스 점에 너무 가까움 -> 작은 noise에도 오분류좋은 경계: 양쪽 클래스에서 멀리 떨어짐 -> margin이 큼SVM의 손실은 hinge loss로 이해할 수 있다. 정답 쪽으로 충분히 멀리 떨어져 있으면 손실이 0이고, margin 안쪽에 있거나 틀리면 penalty가 생긴다.
Kernel trick은 비선형 문제를 다루기 위한 장치다. 원래 공간에서는 곡선 경계가 필요하지만, 더 높은 차원으로 보낸 뒤에는 선형 경계로 나눌 수 있는 경우가 있다. kernel은 이 고차원 매핑을 명시적으로 만들지 않고 내적 값만 계산한다.
작은 반례로 XOR을 생각하면 된다.
x1만 봐도, x2만 봐도 정답이 갈리지 않지만 x1과 x2의 조합을 보면
네 구역이 나뉜다.
원래 2차원에서 직선 하나로는 나누기 어렵지만, x1 * x2 같은 조합 feature를
추가한 공간에서는 선형 경계가 가능해진다.
kernel은 이런 조합 공간을 직접 만들지 않고도 비슷한 효과를 낸다.
대가와 경계: SVM은 작은 데이터셋, 고차원 sparse feature, margin이 중요한 분류에서 강하다. 하지만 큰 데이터에서는 학습 비용이 부담될 수 있고, logistic regression처럼 바로 해석 가능한 확률을 주지 않는다. threshold 운영이나 calibration이 중요하면 별도 확률 보정이 필요하다.
풀려던 문제: 정답 레이블은 없지만 비슷한 데이터끼리 묶고 싶다. 고객군을 나누거나, 임베딩된 문서를 토픽별로 묶거나, 중복 후보를 찾는 상황이다.
k-means는 다음을 반복한다.
k를 정하고 중심점 k개를 둔다.작은 예시:
점: (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 같은 대안을 검토한다.
풀려던 문제: feature가 너무 많아 시각화·저장·학습이 어렵다. 모든 차원을 다 쓰면 비용이 커지고 noise까지 학습할 수 있다. PCA(Principal Component Analysis)는 데이터 분산이 큰 방향을 새 축으로 잡고, 앞쪽 몇 개 축만 남긴다.
PCA는 축을 회전한다. 원래 feature가 x1, x2, x3라면, PCA의 첫 번째 축은 이 feature들의 선형 결합일 수 있다.
PC1 = 0.7*x1 + 0.6*x2 + 0.1*x3PC2 = -0.2*x1 + 0.3*x2 + 0.9*x3L11-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로 줄이는 과정에서 정보가 사라졌을 수 있다.
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도 높음 -> 현재 기준에서는 적정Regularization은 손실 함수에 penalty를 더한다.
total_loss = data_loss + lambda * penaltylambda가 크면 모델은 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의 차이:
| Regularization | Penalty | 모델에 주는 압력 | 자주 쓰는 이유 |
|---|---|---|---|
| L1 / Lasso | sum(abs(w_i)) | 일부 가중치를 정확히 0으로 만든다 | feature selection, sparse 모델 |
| L2 / Ridge | sum(w_i^2) | 모든 가중치를 작게 만들지만 보통 정확히 0은 아니다 | multicollinearity 완화, smooth 모델 |
| Elastic Net | L1 + L2 | sparse와 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를 줄이려는 조치다.
weight decay, dropout, data augmentation, early stopping으로 이어진다.
모델 크기, fine-tuning step 수, LoRA rank, 데이터 양을 고를 때 쓰는 기본 언어다. LoRA는 다음 문서에서 정의하므로, 여기서는 rank를 adapter의 표현력 크기 정도로만 먼저 읽는다.
LLM 분류기를 쓰기 전에 embedding + logistic regression 같은 싼 기준선을 먼저 세운다.
train loss가 계속 내려가도 validation metric이 꺾이면 overfitting으로 읽는다.
Feature engineering은 원본 데이터를 모델이 잘 학습할 수 있는 feature로 바꾸는 작업이다. 고전 ML에서는 모델보다 feature가 성능을 더 많이 좌우하는 경우가 많았다.
예를 들어 거래 데이터의 원본 컬럼이 user_id, amount, created_at, merchant_id뿐이라면 다음 feature를 만들 수 있다.
last_7d_purchase_countlast_7d_total_amounthour_of_dayis_new_merchant_for_useramount_vs_user_median_ratio이 feature들은 모델에게 “이 거래가 평소 행동에서 얼마나 벗어났는가”를 직접 보여준다. Logistic regression이나 GBM은 이런 feature 위에서 강해진다.
대가와 경계:
chargeback_created_at처럼 label 이후에 생기는 값을 feature로 넣으면 validation 점수가 비현실적으로 좋아진다.Feature engineering과 embedding은 대립이 아니다. 현재 실무에서는 tabular feature와 embedding feature를 같이 쓰는 hybrid가 흔하다. 예를 들어 사용자 행동 통계 feature와 상품 설명 embedding을 합쳐 추천 모델의 입력으로 쓸 수 있다.
새 알고리즘을 만났을 때는 이름보다 다음 질문을 먼저 던진다.
alpha, tree depth, number of estimators, kernel, k, PCA component 수 등.| 상황 | 먼저 시도할 모델 | 이유와 trade-off |
|---|---|---|
| 연속값 예측 + 해석 중요 | Linear Regression, Ridge | 빠르고 계수 해석이 쉽다. 비선형 관계는 놓칠 수 있다. |
| 이진/다중 분류 + baseline 필요 | Logistic Regression | 확률 점수와 threshold 운영이 쉽다. 경계는 기본적으로 선형. |
| tabular + 비선형 feature interaction | Random Forest, Gradient Boosting | 상호작용과 결측에 강하다. 튜닝·설명 비용은 커진다. |
| 작은 데이터 + 고차원 sparse feature | Logistic 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의 비용 장점이 커진다.
min_samples_leaf를 키우고, Random Forest/GBM의 early stopping을 본다.k가 틀렸거나 군집 모양 가정이 맞지 않을 수 있다.긴 복구 절차보다 먼저 알아야 할 것은 “어떤 현상이 어떤 개념 실패를 뜻하는가”다.
| 신호 | 의미 | 먼저 의심할 것 |
|---|---|---|
| train score 상승, validation score 하락 | overfitting | 모델 capacity, regularization, 데이터 중복 |
| train과 validation이 모두 낮음 | underfitting | feature 부족, 모델 단순, 학습 부족 |
| validation 점수가 비현실적으로 높음 | data leakage 가능성 | split 전 preprocessing, target 파생 feature |
| accuracy는 높은데 minority recall이 낮음 | label imbalance silent pass | confusion matrix, precision/recall, threshold |
| 같은 모델이 split마다 점수 편차가 큼 | variance 큼 | 데이터 수 부족, k-fold std, stratified split |
| 운영 투입 후 성능만 하락 | train/serve skew 또는 distribution shift | feature 분포, null rate, cardinality, time split |
| LR/Lasso 계수가 split마다 부호까지 바뀜 | multicollinearity | 상관 feature, VIF, Ridge/PCA |
| 확률 0.9 예측이 실제로 90% 맞지 않음 | calibration 실패 | calibration curve, Platt scaling, isotonic 후보 |
| k-means 군집이 도메인 의미와 맞지 않음 | 구형 군집 가정 위반 또는 잘못된 k | HDBSCAN, 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도 필요하다.
| 개념 A | 개념 B | 차이점 |
|---|---|---|
| Linear regression | Logistic regression | 연속값 예측 vs 클래스 확률 예측. 손실은 MSE vs cross-entropy |
| Decision tree | Linear model | 계단형 if-else 경계 vs 직선/평면 경계 |
| Random Forest | Gradient Boosting | 독립 트리 평균으로 variance 감소 vs 잔차를 순차 보완해 bias 감소 |
| L1 regularization | L2 regularization | sparse feature 선택 효과 vs 전체 가중치 smooth 축소 |
| Bias | Variance | 모델이 단순해 생기는 일관된 오차 vs 데이터에 민감한 흔들림 |
| k-means | PCA | 군집 label을 만든다 vs 축을 바꿔 차원을 줄인다 |
| Feature engineering | Embedding | 사람이 만든 feature vs 모델이 학습한 dense representation |
k, 거리 척도, embedding 품질, 군집 모양 가정을 의심한다.최종 수정: 2026-07-09