원시 행에서 예측까지 길은 하나여야 해
scikit-learn의 Pipeline은 전처리 단계와 추정기를 맞추기, 예측하기, 저장하기가 가능한 하나의 객체로 묶어. 핵심은 편리한 문법이 아니라 경로의 단일성이야. 학습에서는 노트북 셀로 결측을 채우고 서비스에서는 다른 함수로 처리하면 두 구현이 언젠가 갈라져. 원시 DataFrame을 넣어 예측을 받는 유일한 길이 파이프라인이어야 해.
파이프라인은 누출을 구조적으로 막아
교차검증에 파이프라인 전체를 넘기면 각 폴드의 학습 부분에서 대치기, 스케일러, 인코더, 특성 선택기와 모델이 차례로 맞춰져. 검증 부분은 이미 맞춰진 변환만 통과하므로 전체 자료 통계가 새어 들어갈 틈이 줄어. GridSearchCV로 전처리 선택과 모델 초매개변수를 함께 비교해도 같은 경계가 유지돼.
열별 경로를 명시해
ColumnTransformer를 파이프라인 첫 단계에 두고 수치 열, 범주 열, 통과 열을 이름으로 지정해. 열 선택을 위치 번호에 기대면 원천 표의 순서가 바뀌었을 때 조용히 다른 값을 처리할 수 있어. 필요한 열, 허용 자료형, 처음 보는 열과 빠진 열의 동작도 입력 스키마 검사로 분리해 두는 게 좋아.
직렬화는 코드와 환경까지 묶는 계약이야
joblib으로 저장한 파이프라인은 같은 변환과 모델을 한 파일로 옮길 수 있지만 영구히 호환되는 형식은 아니야. 학습 코드 버전, Python과 라이브러리 버전, 입력 스키마, 자료 버전, 평가 결과를 결과물 옆에 기록해. 신뢰하지 못하는 pickle이나 joblib 파일은 코드를 실행할 수 있으므로 외부에서 받은 파일을 그대로 열어서도 안 돼.
새 프로세스에서 왕복 시험해
학습이 끝나면 파이프라인을 저장하고 현재 메모리를 비운 새 프로세스에서 다시 불러. 실제 제공 요청과 같은 원시 행을 넣어 predict와 필요하면 predict_proba가 동작하는지 확인해. 저장 전후 출력이 허용 오차 안에서 같은지, 열 순서가 바뀌거나 선택 열이 빠졌을 때 분명한 오류를 내는지도 시험해.
학습과 제공 사이 경계를 닫아
파이프라인만으로 해결되지 않는 검증, 문턱 적용, 결과 형식 변환은 별도 제공 계약에 명시해. 그래도 특성 계산을 파이프라인 밖의 숨은 노트북 셀에 남겨서는 안 돼. pipeline.predict(raw_row)로 결과를 재현하지 못한다면 배포할 결과물이 아직 완성되지 않은 거야. 단일 경로는 복붙을 줄이는 규칙이 아니라 같은 입력이 같은 의미를 갖게 하는 안전장치야.