scikit-learn를 실무 흐름으로 이해하기
scikit-learn으로 데이터 분리, 전처리, 모델 학습, Pipeline, 교차 검증, 평가, 과적합 진단까지 익힙니다. 전통 머신러닝의 표준 워크플로를 빠르게 배울 수 있습니다. 이 가이드는 개념을 나열하기보다, 실제 프로젝트에서 판단해야 하는 순서대로 내용을 따라갈 수 있게 구성했습니다.
scikit-learn으로 데이터 분리, 전처리, 모델 학습, Pipeline, 교차 검증, 평가, 과적합 진단까지 익힙니다. 전통 머신러닝의 표준 워크플로를 빠르게 배울 수 있습니다.
scikit-learn으로 데이터 분리, 전처리, 모델 학습, Pipeline, 교차 검증, 평가, 과적합 진단까지 익힙니다. 전통 머신러닝의 표준 워크플로를 빠르게 배울 수 있습니다. 이 가이드는 개념을 나열하기보다, 실제 프로젝트에서 판단해야 하는 순서대로 내용을 따라갈 수 있게 구성했습니다.
문법보다 요청이 들어와 검증, 처리, 저장, 응답으로 이어지는 경계를 먼저 잡습니다.
글로 읽은 내용을 머릿속에 오래 남기려면 먼저 흐름을 그림으로 잡는 편이 좋습니다. 아래 두 그림은 scikit-learn를 학습할 때 계속 되돌아볼 수 있는 기준 지도입니다.
scikit-learn를 처음 펼칠 때는 세부 명령보다 큰 그림이 먼저입니다. 이 섹션에서는 앞으로 배울 개념들이 어떤 문제를 풀기 위해 등장했는지부터 잡아봅니다.
| 작업 | 도구 |
|---|---|
| 전처리 | StandardScaler, OneHotEncoder |
| 모델 | LogisticRegression, RandomForest, SVM |
| 평가 | accuracy, f1, roc_auc, cross_validate |
| 구성 | Pipeline, ColumnTransformer |
여기서는 데이터 분리을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
x, y = load_iris(return_X_y=True)
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, random_state=42, stratify=y
)여기서는 Pipeline을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
model = Pipeline([
("scale", StandardScaler()),
("clf", LogisticRegression(max_iter=1000)),
])
model.fit(x_train, y_train)여기서는 교차 검증을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.
from sklearn.model_selection import cross_validate
scores = cross_validate(
model, x, y, cv=5, # 5-Fold 교차 검증
scoring=["accuracy", "f1_macro"],
)
print("평균 accuracy:", scores["test_accuracy"].mean())
print("평균 f1:", scores["test_f1_macro"].mean())
print("fold별 편차:", scores["test_accuracy"].std()) # 편차가 크면 데이터가 불안정하다는 신호여기서는 평가을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.
from sklearn.metrics import accuracy_score, classification_report
pred = model.predict(x_test)
print(accuracy_score(y_test, pred))
print(classification_report(y_test, pred))| 지표 | 의미 | 언제 중요한가 |
|---|---|---|
| Accuracy | 전체 중 맞춘 비율 | 클래스 비율이 균형잡힌 문제 |
| Precision | 양성이라 예측한 것 중 실제 양성 비율 | 오탐(false positive) 비용이 클 때 (예: 스팸 필터) |
| Recall | 실제 양성 중 잡아낸 비율 | 누락(false negative) 비용이 클 때 (예: 질병 진단) |
| F1-score | Precision과 Recall의 조화평균 | 둘 다 중요할 때의 균형 지표 |
과적합 진단은 선택지가 갈리는 지점입니다. 표를 기준으로 각 방법의 쓰임새와 운영상의 차이를 비교해두면 이후 판단이 훨씬 쉬워집니다.
| 상황 | 학습 점수 | 테스트 점수 | 원인 | 대응 |
|---|---|---|---|---|
| 과적합 | 매우 높음 | 낮음 | 모델이 학습 데이터의 노이즈까지 암기 | 정규화 강화, 데이터 추가, 모델 단순화 |
| 과소적합 | 낮음 | 낮음 | 모델이 너무 단순하거나 학습 부족 | 모델 복잡도 증가, 피처 추가, 반복 횟수 증가 |
| 적정 | 적당히 높음 | 학습과 비슷하게 높음 | - | - |
scikit-learn 실무 설계은 선택지가 갈리는 지점입니다. 표를 기준으로 각 방법의 쓰임새와 운영상의 차이를 비교해두면 이후 판단이 훨씬 쉬워집니다.
| 결정 지점 | 확인 질문 | 실무 기준 |
|---|---|---|
| 경계 | scikit-learn 코드에서 바뀌기 쉬운 부분은 어디인가? | 입출력, 설정, 외부 연동, 핵심 규칙을 분리합니다. |
| 상태 | 상태가 어디서 생성되고 어디서 사라지는가? | 상태 소유자와 수명 주기를 코드로 드러냅니다. |
| 장애 | 실패했을 때 호출자는 무엇을 받는가? | timeout, fallback, error contract를 먼저 정합니다. |
이 섹션은 scikit-learn 운영 기준을 실무 관점에서 정리합니다. 개념을 외우기보다, 어떤 상황에서 이 기준을 꺼내 쓸지에 초점을 맞춰보세요.
scikit-learn 검증 전략은 선택지가 갈리는 지점입니다. 표를 기준으로 각 방법의 쓰임새와 운영상의 차이를 비교해두면 이후 판단이 훨씬 쉬워집니다.
| 품질 축 | 검증 방법 | 완료 기준 |
|---|---|---|
| 정확성 | 정상/실패 케이스를 자동화합니다. | 핵심 시나리오가 재현 가능하게 통과합니다. |
| 회귀 방지 | 버그 수정 시 동일 케이스를 테스트로 남깁니다. | 같은 장애가 다시 배포되지 않습니다. |
| 운영성 | 로그, 메트릭, 알림을 확인합니다. | 문제가 생겼을 때 원인 추적 경로가 있습니다. |