Scikit-learn 면접 질문 및 답변

scikit-learnBeginner
지금 연습하기

소개

Sklearn 면접 질문 및 답변에 대한 종합 가이드에 오신 것을 환영합니다! 이 문서는 Sklearn 중심의 모든 면접에서 뛰어난 성과를 거두는 데 필요한 지식과 자신감을 갖추도록 세심하게 설계되었습니다. 기초 개념과 고급 알고리즘부터 실제 시나리오 기반 문제 해결, 최적화 및 배포를 위한 모범 사례에 이르기까지 광범위한 주제를 다룹니다. 신진 데이터 과학자이든 숙련된 머신러닝 엔지니어이든 이 자료는 핵심 기능부터 MLOps 고려 사항 및 실습 코딩 과제에 이르기까지 모든 것을 다루는 궁극적인 준비 도구가 될 것입니다. Sklearn 에 대한 이해를 공고히 하고 전문성을 선보일 준비를 하십시오!

SKLEARN

Sklearn 기초 및 핵심 개념

Scikit-learn (Sklearn) 의 주요 목적은 무엇인가요?

답변:

Sklearn 은 Python 프로그래밍 언어를 위한 무료 오픈 소스 머신러닝 라이브러리입니다. 광범위한 지도 및 비지도 학습 알고리즘과 함께 모델 선택, 전처리 및 평가를 위한 도구를 제공하며, 사용 편의성과 다른 Python 라이브러리와의 통합을 위해 설계되었습니다.


Sklearn 의 'Estimator' API 에 대해 설명해주세요. 주요 메서드는 무엇인가요?

답변:

'Estimator'는 Sklearn 의 핵심 객체로, 머신러닝 모델 또는 데이터 변환을 나타냅니다. 주요 메서드로는 모델 학습을 위한 fit(X, y), 예측을 위한 predict(X) (지도 모델의 경우), 데이터 변환을 위한 transform(X) (변환기의 경우) 가 있습니다.


fit(), transform(), fit_transform() 메서드의 차이점을 설명해주세요.

답변:

fit()은 데이터로부터 매개변수를 학습합니다 (예: 스케일링을 위한 평균/표준편차). transform()은 학습된 매개변수를 새로운 데이터에 적용합니다. fit_transform()은 동일한 입력 데이터에 대해 먼저 fit()을 호출한 다음 transform()을 호출하는 편리한 메서드로, 종종 훈련 데이터 전처리에 사용됩니다.


Sklearn 에서 preprocessing의 역할은 무엇이며, 일반적인 전처리 기법 하나를 언급해주세요.

답변:

전처리는 많은 알고리즘이 스케일링되거나 변환된 데이터에서 더 나은 성능을 보이므로, 머신러닝 알고리즘을 위해 원시 데이터를 준비하는 과정입니다. 일반적인 기법으로는 평균을 제거하고 단위 분산으로 스케일링하여 특성을 표준화하는 StandardScaler가 있습니다.


Sklearn 에서 범주형 특성 (categorical features) 을 어떻게 처리하나요?

답변:

범주형 특성은 One-Hot Encoding (OneHotEncoder) 또는 Label Encoding (LabelEncoder) 과 같은 기법을 사용하여 처리할 수 있습니다. One-Hot Encoding 은 각 범주에 대해 새로운 이진 열을 생성하는 반면, Label Encoding 은 각 범주에 고유한 정수를 할당합니다.


Sklearn 의 'Pipelines' 개념과 그 유용성에 대해 설명해주세요.

답변:

Sklearn Pipelines 는 여러 Estimator 를 단일 객체로 연결합니다. 이는 워크플로우 자동화, 데이터 누수 방지 (특히 교차 검증 중), 다양한 데이터셋에 걸쳐 일관된 변환 및 모델 적용을 보장하는 데 유용합니다.


교차 검증 (cross-validation) 이란 무엇이며, Sklearn 에서는 어떻게 구현되나요?

답변:

교차 검증은 데이터를 여러 폴드 (fold) 로 분할하여 모델의 성능과 일반화 능력을 평가하는 기법입니다. Sklearn 은 model_selection.KFold 또는 model_selection.StratifiedKFold와 같은 모듈을 통해 이를 구현하며, 종종 cross_val_score 또는 GridSearchCV와 함께 사용됩니다.


Sklearn 에서 분류 모델 평가에 사용되는 두 가지 일반적인 지표를 언급해주세요.

답변:

분류 모델에 대한 두 가지 일반적인 지표는 accuracy_score (정확하게 분류된 인스턴스의 비율) 와 f1_score (정밀도와 재현율의 조화 평균) 입니다. f1_score는 특히 불균형 데이터셋에 유용합니다.


Sklearn 에서 GridSearchCV의 목적은 무엇인가요?

답변:

GridSearchCV는 하이퍼파라미터 튜닝에 사용됩니다. 지정된 매개변수 그리드에 대해 Estimator 를 철저히 탐색하며, 교차 검증을 사용하여 각 조합을 평가하고 최적의 성능을 내는 하이퍼파라미터 집합을 찾습니다.


StandardScalerMinMaxScaler를 언제 사용해야 하나요?

답변:

StandardScaler는 특성이 가우시안과 유사한 분포를 가지거나 알고리즘이 평균 0 과 단위 분산을 가정하는 경우 (예: SVM, Logistic Regression) 에 선호됩니다. MinMaxScaler는 특성을 고정된 범위 (예: 0 에서 1) 로 스케일링하며, 신경망 또는 k-NN 과 같이 특성의 스케일에 민감한 알고리즘에 유용합니다.


고급 Sklearn 주제 및 알고리즘

scikit-learn 에서 Pipeline 사용의 목적과 이점을 설명해주세요.

답변:

Scikit-learn 의 Pipeline은 전처리, 특성 추출, 모델 학습과 같은 여러 처리 단계를 순차적으로 연결합니다. 이는 워크플로우를 단순화하고, 교차 검증 중 데이터 누수를 방지하며, 훈련 및 테스트 데이터 모두에 변환을 일관되게 적용하도록 보장합니다.


하이퍼파라미터 튜닝을 위한 GridSearchCVRandomizedSearchCV의 차이점은 무엇인가요?

답변:

GridSearchCV는 그리드에 정의된 모든 가능한 하이퍼파라미터 조합을 철저히 탐색하여 해당 그리드 내에서 최적의 조합을 보장합니다. RandomizedSearchCV는 지정된 분포에서 고정된 수의 하이퍼파라미터 조합을 샘플링하며, 이는 큰 탐색 공간에 대해 더 효율적이고 종종 더 빠르게 좋은 솔루션을 찾습니다.


ColumnTransformer는 언제 사용하며 어떤 문제를 해결하나요?

답변:

ColumnTransformer는 데이터셋의 다른 열에 대해 다른 변환을 적용하는 데 사용됩니다. 이는 혼합된 데이터 유형 (예: 숫자형 및 범주형) 을 처리하는 문제를 해결하며, 관련 열에 대해 개별적으로 특정 전처리 단계 (예: 숫자형 특성 스케일링 및 범주형 특성 원 - 핫 인코딩) 를 적용할 수 있도록 합니다.


scikit-learn 맥락에서 '데이터 누수 (data leakage)' 개념을 설명하고 이를 방지하는 방법을 알려주세요.

답변:

데이터 누수는 테스트 세트의 정보가 의도치 않게 훈련 프로세스에 '누수'되어 지나치게 낙관적인 모델 성능을 초래할 때 발생합니다. 이는 모든 데이터 전처리 단계 (예: 스케일링 또는 대체) 가 훈련 데이터에만 맞춰지고 Pipeline을 사용하여 훈련 및 테스트 세트에 적용될 때 방지됩니다.


make_pipeline이란 무엇이며 Pipeline과 어떻게 다른가요?

답변:

make_pipeline은 클래스 이름을 기반으로 단계를 자동으로 명명하여 파이프라인 생성을 단순화하는 편리한 함수입니다. 이는 각 단계에 대해 명시적으로 이름을 제공할 필요가 없는 Pipeline의 약어로, 간단한 파이프라인의 경우 코드를 더 간결하게 만듭니다.


VotingClassifier 또는 VotingRegressor의 사용 사례를 설명해주세요.

답변:

VotingClassifier (또는 VotingRegressor) 는 여러 다양한 기본 Estimator 의 예측을 결합하는 앙상블 기법입니다. 이는 개별 예측을 집계하여 (예: 분류의 경우 다수결 투표, 회귀의 경우 평균) '군중의 지혜'를 활용하여 더 강력하고 종종 더 정확한 최종 예측을 생성합니다.


StackingClassifier (또는 StackingRegressor) 는 어떻게 작동하나요?

답변:

StackingClassifier는 여러 기본 Estimator 의 예측을 최종 메타 모델 (또는 블렌더) 의 입력 특성으로 사용하는 앙상블 기법입니다. 메타 모델은 기본 예측을 결합하는 방법을 학습하며, 종종 기본 모델이나 단순 투표보다 높은 성능을 달성합니다. 이는 기본 모델의 오류를 수정함으로써 이루어집니다.


CalibratedClassifierCV는 언제 사용하며 왜 사용하나요?

답변:

CalibratedClassifierCV는 분류기의 예측 확률을 보정하여 샘플이 클래스에 속할 실제 가능성을 정확하게 반영하도록 하는 데 사용됩니다. 이는 위험 평가 또는 신뢰도 점수를 기반으로 한 의사 결정과 같이 신뢰할 수 있는 확률 추정치가 필요한 애플리케이션에 중요합니다.


FeatureUnion을 언제 사용하는 것을 고려해야 하나요?

답변:

FeatureUnion은 여러 변환기 객체의 출력을 단일 특성 세트로 결합하는 데 사용됩니다. 이는 동일한 데이터에 대해 다른 특성 추출 또는 변환 기법을 적용하고 그 결과를 수평으로 연결하여 모델에 대한 더 풍부한 특성 표현을 생성하고자 할 때 유용합니다.


scikit-learn 의 'partial_fit' 개념과 일반적인 사용 사례를 설명해주세요.

답변:

partial_fit은 Estimator 가 전체 데이터셋을 메모리에 로드할 필요 없이 데이터의 미니 배치에 대해 점진적으로 학습할 수 있도록 합니다. 이는 온라인 학습 시나리오나 RAM 에 맞지 않는 매우 큰 데이터셋을 다룰 때 필수적이며, 지속적인 모델 업데이트를 가능하게 합니다.


Sklearn 을 활용한 시나리오 기반 문제 해결

스팸 분류기를 구축 중입니다. 초기 학습 후 정확도는 높지만, 정상 메일이 스팸으로 많이 표시되는 (높은 거짓 양성) 문제가 발생했습니다. Sklearn 을 사용하여 이 문제를 어떻게 해결하시겠습니까?

답변:

이는 재현율 (recall) 보다 정밀도 (precision) 를 최적화해야 함을 나타냅니다. sklearn.metrics.classification_report를 사용하여 정밀도와 재현율을 분석하고, 분류 임계값 (threshold) 을 조정하거나 (예: model.predict_proba 사용), 비용 민감 학습 (cost-sensitive learning) 또는 클래스 가중치 재조정 (re-weighting of classes) 을 허용하여 거짓 양성을 더 크게 페널티하는 모델을 선택할 것입니다.


1 백만 행과 1000 개의 특성을 가진 데이터셋이 있습니다. 표준 LogisticRegression 모델 학습에 시간이 너무 오래 걸립니다. 학습 속도를 높이기 위해 어떤 Sklearn 전략을 사용할 수 있나요?

답변:

대규모 데이터셋의 경우, 더 확장 가능한 확률적 경사 하강법 (stochastic gradient descent) 을 위해 loss='log_loss'를 사용하는 SGDClassifier를 고려할 것입니다. 또는 대규모 데이터셋에 대해 solver='saga' 또는 solver='liblinear'를 사용하는 LogisticRegression을 사용하거나, sklearn.decomposition.PCA 또는 특성 선택 기법을 사용하여 특성 수를 줄일 수 있습니다.


모델이 훈련 세트에서는 잘 작동하지만 보지 못한 데이터에서는 성능이 떨어집니다. Sklearn 도구를 사용하여 이러한 과적합 (overfitting) 을 어떻게 진단하고 완화하시겠습니까?

답변:

이는 과적합의 전형적인 징후입니다. 교차 검증과 함께 sklearn.model_selection.GridSearchCV 또는 RandomizedSearchCV를 사용하여 최적의 하이퍼파라미터를 찾을 것입니다. 정규화 (선형 모델의 L1/L2 페널티, Ridge/Lasso의 alpha, SVM 의 C) 와 모델 복잡성 감소가 주요 완화 전략입니다.


데이터셋에 'City'라는 특성이 있으며 고유한 값이 500 개 있습니다. Sklearn 모델에 맞게 이 특성을 어떻게 전처리하시겠습니까?

답변:

Sklearn 모델에 적합한 숫자 형식으로 범주형 'City' 특성을 변환하기 위해 sklearn.preprocessing.OneHotEncoder를 사용할 것입니다. 고유 값이 매우 많은 경우, 원 - 핫 인코딩 후 타겟 인코딩 (target encoding) 또는 임베딩 레이어 (embedding layers) (딥러닝 사용 시) 또는 차원 축소 (dimensionality reduction) 를 고려할 수 있습니다.


데이터셋에서 RandomForestClassifierGradientBoostingClassifier의 성능을 비교해야 합니다. Sklearn 을 사용하여 공정한 비교를 어떻게 보장하시겠습니까?

답변:

교차 검증을 위해 sklearn.model_selection.StratifiedKFold를 사용하여 모델 간 일관된 분할을 보장하고 클래스 비율을 유지할 것입니다. 그런 다음 테스트 폴드에서 동일한 지표 (예: F1-score, ROC AUC) 를 사용하여 두 모델을 평가하고, 잠재적으로 GridSearchCV를 사용하여 각 모델에 대한 하이퍼파라미터를 최적화할 것입니다.


데이터셋의 여러 열에 결측값 (missing values) 이 있습니다. Sklearn 을 사용하여 어떻게 처리할 것인지 설명해주세요.

답변:

sklearn.impute.SimpleImputer를 사용하여 결측값을 채울 것입니다. 일반적으로 특성 분포에 따라 평균, 중앙값 또는 최빈값으로 채웁니다. 더 복잡한 대체 (imputation) 의 경우, 특히 Pipeline 내에서 IterativeImputer (MICE) 또는 KNNImputer를 고려할 수 있습니다.


추천 시스템을 구축 중이며 항목 특성을 기반으로 유사한 항목을 찾아야 합니다. 어떤 Sklearn 모듈을 사용하고 그 이유는 무엇인가요?

답변:

sklearn.metrics.pairwise를 사용하여 항목 특성 벡터 간의 유사도 점수 (예: cosine_similarity 또는 euclidean_distances) 를 계산할 것입니다. 이를 통해 콘텐츠 기반 추천 시스템의 기본이 되는 유사도 행렬을 효율적으로 계산할 수 있습니다.


관심 있는 소수 클래스가 있는 불균형 데이터셋이 있습니다. Sklearn 을 사용하여 모델을 어떻게 학습시키고 성능을 평가하시겠습니까?

답변:

소수 클래스를 오버샘플링하거나 다수 클래스를 언더샘플링하기 위해 sklearn.utils.resample을 사용하거나 imblearn.over_sampling.SMOTE를 사용할 것입니다. 평가를 위해서는 정확도만 보는 대신, 불균형 데이터셋에 더 유익한 sklearn.metricsrecall, precision, f1_score, 또는 roc_auc_score와 같은 지표에 집중할 것입니다.


SVC 모델을 학습시켰지만 실시간 예측에는 너무 느립니다. 어떤 Sklearn 대안 또는 전략을 고려할 수 있나요?

답변:

더 빠른 예측을 위해, 데이터가 선형적으로 분리 가능하다면 LinearSVC를 사용하거나, 대규모 데이터셋에 더 효율적인 힌지 손실 (hinge loss) 을 사용하는 SGDClassifier를 고려할 것입니다. 또는 C를 조정하거나 다른 커널을 사용하여 서포트 벡터 수를 줄이거나, LightGBM 또는 XGBoost와 같은 트리 기반 모델을 탐색할 수 있습니다.


전처리, 특성 선택 및 모델 학습을 포함하는 강력한 머신러닝 파이프라인을 생성해야 합니다. Sklearn 을 사용하여 이 파이프라인을 어떻게 구성하시겠습니까?

답변:

sklearn.pipeline.Pipeline을 사용하여 이러한 단계를 연결할 것입니다. 이를 통해 훈련 및 테스트 데이터에 전처리 및 특성 선택이 일관되게 적용되고 교차 검증 중 데이터 누수를 방지할 수 있습니다. 예를 들어: Pipeline([('scaler', StandardScaler()), ('selector', SelectKBest()), ('model', LogisticRegression())])와 같이 구성할 수 있습니다.


Sklearn 모범 사례 및 최적화

scikit-learn 에서 StandardScalerMinMaxScaler를 언제 사용해야 하며, 주요 차이점은 무엇인가요?

답변:

데이터가 가우시안 분포를 따르거나 알고리즘이 정규 분포된 입력을 가정하는 경우 (예: 선형 모델, SVM) StandardScaler를 사용합니다. 이는 특성을 평균 0, 단위 분산으로 스케일링합니다. MinMaxScaler는 특성을 고정된 범위 (일반적으로 0 에서 1) 로 스케일링하며, 이는 신경망 또는 k-NN 과 같이 특성 스케일에 민감한 알고리즘에 유용하며, 특히 이상치 (outliers) 가 주요 문제가 되지 않을 때 유용합니다.


scikit-learn 에서 'pipeline'의 개념과 그 이점을 설명해주세요.

답변:

Scikit-learn 의 Pipeline은 변환기 (transformer) 목록과 최종 추정기 (estimator) 를 순차적으로 적용합니다. 이점으로는 워크플로우 간소화, 데이터 누수 방지 (예: 교차 검증 중 변환기를 훈련 데이터에만 맞춰 (fit) 서), 그리고 모든 전처리 및 모델링 단계를 캡슐화하여 코드를 더 읽기 쉽고 재현 가능하게 만드는 것이 있습니다.


scikit-learn 에서 범주형 특성을 효과적으로 처리하는 방법은 무엇인가요?

답변:

범주형 특성은 명목 범주 (nominal categories) 의 경우 OneHotEncoder (각 범주에 대한 이진 열 생성) 를 사용하거나, 순서 범주 (ordinal categories) 의 경우 OrdinalEncoder (정수 순위 할당) 를 사용하여 처리할 수 있습니다. 고유 값이 많은 경우, 타겟 인코딩 (target encoding) 또는 특성 해싱 (feature hashing) 과 같은 기법을 고려할 수 있지만, 이는 scikit-learn 의 핵심 preprocessing 모듈에 직접 포함되어 있지는 않습니다.


GridSearchCVRandomizedSearchCV는 무엇이며, 언제 하나를 다른 하나보다 선호해야 하나요?

답변:

GridSearchCV는 지정된 파라미터 그리드에 대해 모든 조합을 철저히 탐색하여 해당 그리드 내에서 최적의 조합을 보장합니다. RandomizedSearchCV는 지정된 분포에서 고정된 수의 파라미터 설정을 샘플링합니다. 검색 공간이 작거나 그리드 내에서 전역 최적값을 찾는 것을 확실히 해야 할 때는 GridSearchCV를 선호합니다. 검색 공간이 크거나 계산 리소스가 제한적일 때는 RandomizedSearchCV를 사용하며, 이는 종종 좋은 솔루션을 찾는 데 더 효율적입니다.


교차 검증을 사용하여 하이퍼파라미터 튜닝을 수행할 때 데이터 누수를 방지하는 방법을 설명해주세요.

답변:

모든 전처리 단계 (예: 스케일링 또는 대체) 가 교차 검증 루프의 각 폴드 내부에서 수행되도록 함으로써 데이터 누수를 방지합니다. 이는 Pipeline 객체를 사용하여 가장 잘 달성할 수 있으며, 전체 파이프라인 (전처리 + 모델) 이 훈련 폴드에 맞춰지고 (fit) 교차 검증의 각 반복에 대해 검증 폴드에서 평가됩니다.


모델 지속성 (model persistence) 을 위해 Python 의 내장 pickle 대신 joblib을 사용하는 것을 고려해야 하는 경우는 언제인가요?

답변:

joblib은 특히 대규모 NumPy 배열의 경우, scikit-learn 모델에 대해 pickle보다 일반적으로 선호됩니다. 이는 머신러닝 모델에서 흔히 볼 수 있는 대규모 배열을 포함하는 객체에 대해 더 효율적이며, 데이터를 복사하지 않기 위해 메모리 매핑 배열 (memory-mapped arrays) 을 처리할 수 있습니다. 이는 복잡한 모델의 저장 및 로딩 시간을 단축시킵니다.


scikit-learn 모델의 훈련 시간 최적화를 위한 일반적인 전략은 무엇인가요?

답변:

전략에는 다음이 포함됩니다: 지원되는 경우 병렬 처리를 위해 n_jobs=-1 사용, 데이터셋 크기 축소 (샘플링 또는 차원 축소), 더 간단한 모델 선택, 하이퍼파라미터 효율적 최적화 (예: RandomizedSearchCV 또는 조기 종료 (early stopping)), 그리고 데이터 유형 효율성 보장 (예: 정밀도가 허용하는 경우 float64 대신 float32).


scikit-learn 모델에서 class_weight='balanced'는 어떻게 작동하며 언제 유용한가요?

답변:

class_weight='balanced'는 입력 데이터의 클래스 빈도에 반비례하는 가중치를 자동으로 조정합니다. 이는 소수 클래스의 샘플에 더 높은 가중치를 부여하고 다수 클래스의 샘플에는 더 낮은 가중치를 부여합니다. 이는 불균형 데이터셋을 처리하는 데 매우 유용하며, 모델이 과소 표현된 클래스에 더 많은 주의를 기울이도록 돕고 다수 클래스에 편향되는 것을 방지합니다.


scikit-learn 에서 ColumnTransformer의 목적을 설명해주세요.

답변:

ColumnTransformer는 입력 데이터의 다른 열에 대해 서로 다른 변환기를 동시에 적용할 수 있도록 합니다. 예를 들어, 범주형 열에는 OneHotEncoder를, 숫자형 열에는 StandardScaler를 동일한 전처리 단계 내에서 적용할 수 있습니다. 이는 복잡한 전처리 파이프라인을 단순화하고 이질적인 데이터 유형의 적절한 변환을 보장합니다.


scikit-learn 에서 random_state의 중요성은 무엇인가요?

답변:

random_state는 많은 scikit-learn 추정기 및 유틸리티 (예: train_test_split, KFold, RandomForestClassifier) 에서 작업의 무작위성을 제어하는 데 사용되는 매개변수입니다. 고정된 random_state를 설정하면 결과의 재현성이 보장되어, 동일한 코드를 여러 번 실행해도 동일한 결과가 나오므로 디버깅 및 실험 공유에 중요합니다.


Sklearn 모델 문제 해결 및 디버깅

Sklearn 모델이 과적합 (overfitting) 되는 일반적인 징후는 무엇이며, 어떻게 진단하시겠습니까?

답변:

과적합의 일반적인 징후는 훈련 정확도는 높지만 검증/테스트 정확도는 현저히 낮은 것입니다. 훈련 세트와 검증 세트 모두에 대한 성능 지표 (예: R-squared, F1-score) 를 비교하여 진단할 것입니다. 큰 차이는 과적합을 나타냅니다.


Sklearn 모델이 과소적합 (underfitting) 되는지 어떻게 식별하며, 일반적인 해결책은 무엇인가요?

답변:

과소적합은 훈련 및 검증 세트 모두에서 낮은 정확도로 나타납니다. 이는 모델이 내재된 패턴을 포착하기에 너무 단순하다는 것을 시사합니다. 해결책으로는 더 복잡한 모델 사용, 더 관련성 있는 특성 추가, 또는 정규화 (regularization) 감소가 있습니다.


Sklearn 모델에서 성능이 좋지 않습니다. 데이터와 관련하여 가장 먼저 확인해야 할 사항은 무엇인가요?

답변:

가장 먼저 확인하는 것은 데이터 품질입니다. 여기에는 결측값, 이상치, 잘못된 데이터 유형 확인 및 특성의 적절한 스케일링 또는 정규화 보장이 포함됩니다. 데이터 품질이 좋지 않으면 종종 모델 성능이 저하됩니다.


Sklearn 파이프라인 맥락에서 '데이터 누수 (data leakage)' 개념을 설명하고 이를 방지하는 방법을 알려주세요.

답변:

데이터 누수는 테스트 세트의 정보가 의도치 않게 훈련 과정에 영향을 미칠 때 발생합니다. Sklearn 에서는 데이터 분할 전에 전체 데이터셋에 대해 데이터 전처리 (예: 스케일링 또는 대체) 를 수행하는 경우 종종 발생합니다. 이를 방지하려면, train-test 분할 후 Pipeline 내에서 모든 전처리 단계를 적용하여 변환기가 훈련 데이터에만 맞춰지도록 (fitted) 해야 합니다.


학습 곡선 (learning curves) 을 사용하여 Sklearn 모델의 편향 (bias, 과소적합) 또는 분산 (variance, 과적합) 을 진단하는 방법은 무엇인가요?

답변:

학습 곡선은 훈련 예시 수에 대한 모델 성능을 그래프로 나타냅니다. 훈련 및 검증 점수가 모두 낮고 수렴하면 높은 편향 (과소적합) 을 나타냅니다. 훈련 점수는 높고 검증 점수는 낮으며 큰 차이가 있다면 높은 분산 (과적합) 을 나타냅니다.


분류 모델의 정확도는 높지만 F1-score 가 낮습니다. 이것이 무엇을 시사하며, 어떻게 조사하시겠습니까?

답변:

이는 모델이 다수 클래스에서는 잘 작동하지만 소수 클래스에서는 성능이 좋지 않은 불균형 데이터셋을 시사합니다. 각 클래스에 대한 참 양성 (true positives), 참 음성 (true negatives), 거짓 양성 (false positives), 거짓 음성 (false negatives) 을 확인하기 위해 혼동 행렬 (confusion matrix) 을 검토하고 클래스 분포를 확인하여 조사할 것입니다.


교차 검증이 Sklearn 모델 디버깅 및 평가에 어떻게 도움이 되는지 설명해주세요.

답변:

교차 검증은 여러 다른 train-test 분할에 대해 모델을 훈련하고 평가함으로써 모델 성능에 대한 더 강력한 추정치를 제공합니다. 이는 보지 못한 데이터에 대한 일관된 성능 저하를 보여줌으로써 과적합을 감지하는 데 도움이 되며, 모델의 일반화 능력에 대한 더 나은 이해를 제공합니다.


Sklearn 에서 GridSearchCV 또는 RandomizedSearchCV의 목적은 무엇이며, 디버깅에 어떻게 도움이 되나요?

답변:

GridSearchCVRandomizedSearchCV는 하이퍼파라미터 튜닝에 사용됩니다. 이들은 모델 성능을 최대화하는 최적의 세트를 찾기 위해 다양한 하이퍼파라미터 조합을 체계적으로 탐색함으로써 디버깅에 도움을 주며, 과소적합 또는 잘못된 하이퍼파라미터 선택으로 인한 최적이 아닌 성능과 같은 문제를 완화하는 데 도움이 됩니다.


선형 모델을 학습시켰는데, 계수 (coefficients) 가 예상보다 크거나 작습니다. 원인은 무엇일 수 있나요?

답변:

예상보다 크거나 작은 계수는 종종 특성 스케일링 또는 다중공선성 (multicollinearity) 문제로 인해 발생합니다. 특성들이 매우 다른 스케일에 있다면 계수가 불안정해질 수 있습니다. 다중공선성은 매우 상관관계가 높은 특성을 의미하며, 모델이 개별 영향력을 고유하게 결정하기 어렵게 만듭니다.


Sklearn 모델에 입력하기 전에 데이터셋의 NaN 값 또는 무한대 값을 어떻게 처리하나요?

답변:

NaN 값은 대체 (예: 평균, 중앙값 또는 최빈값 전략을 사용하는 SimpleImputer) 를 사용하거나, 결측이 광범위하거나 무작위가 아닌 경우 행/열을 삭제하여 처리합니다. 무한대 값은 이상치로 취급하거나 검사 후 큰 유한 숫자로 대체해야 합니다.


MLOps 및 배포를 위한 Sklearn

joblib 또는 pickle은 Sklearn 모델 배포를 어떻게 촉진하나요?

답변:

joblibpickle은 훈련된 Sklearn 모델을 디스크에 직렬화 (저장) 하는 데 사용됩니다. 이를 통해 모델 객체는 학습된 매개변수를 포함하여 나중에 프로덕션 환경에서 재훈련 없이 예측을 수행하기 위해 로드될 수 있으며, 이는 배포에 매우 중요합니다.


Sklearn 모델을 REST API 로 배포할 때 주요 고려 사항은 무엇인가요?

답변:

주요 고려 사항에는 웹 프레임워크 선택 (예: Flask, FastAPI), 예측 요청을 위한 API 엔드포인트 정의, 입력 데이터 유효성 검사 및 전처리 처리, 직렬화된 모델 로드, 그리고 API 가 확장 가능하고 안전한지 확인하는 것이 포함됩니다. 컨테이너화 (Docker) 는 종종 패키징에 사용됩니다.


MLOps 를 위한 Sklearn 의 Pipeline 역할을 설명해주세요.

답변:

Sklearn Pipeline은 여러 처리 단계 (예: 전처리, 특성 공학, 모델 훈련) 를 단일 객체로 연결합니다. 이는 훈련 및 추론 중 일관된 데이터 변환을 보장하고, 모델 직렬화를 단순화하며, MLOps 에서 데이터 누수 또는 훈련 - 서빙 불일치 (training-serving skew) 의 위험을 줄입니다.


배포된 Sklearn 모델의 성능 저하를 어떻게 모니터링하시겠습니까?

답변:

모니터링에는 예측 지연 시간, 오류율, 데이터 드리프트 (입력 특성 분포의 변화) 와 같은 주요 지표를 추적하는 것이 포함됩니다. Prometheus, Grafana 또는 전문 MLOps 플랫폼과 같은 도구를 사용하여 이러한 지표를 수집하고 시각화하여 상당한 편차에 대한 경고를 트리거할 수 있습니다.


모델 버전 관리 (model versioning) 란 무엇이며, MLOps 에서 Sklearn 모델에 왜 중요한가요?

답변:

모델 버전 관리는 코드, 데이터 및 하이퍼파라미터를 포함하여 훈련된 모델의 다양한 반복을 추적하는 것을 포함합니다. 이는 재현성, 롤백 기능, 다양한 모델 버전의 A/B 테스트, 그리고 배포된 모델의 감사 가능한 기록을 유지하는 데 중요합니다.


Docker 를 사용하여 Sklearn 모델을 배포하는 방법을 설명해주세요.

답변:

Docker 컨테이너는 Sklearn 모델, 해당 종속성 (예: Python, Sklearn 라이브러리) 및 서빙 코드 (예: Flask 앱) 를 이식 가능하고 격리된 단위로 패키징합니다. 이는 개발, 스테이징, 프로덕션 등 다양한 환경에서 일관된 실행을 보장하고 배포를 단순화합니다.


배포된 Sklearn 모델 맥락에서 '데이터 드리프트 (data drift)'란 무엇이며, 어떻게 감지할 수 있나요?

답변:

데이터 드리프트는 시간이 지남에 따라 입력 데이터의 통계적 속성이 변경되는 것을 의미하며, 이는 모델 성능을 저하시킬 수 있습니다. 입력 특성의 분포를 모니터링하고 훈련 데이터와 비교하며 KS-test 또는 Earth Mover's Distance 와 같은 통계 테스트를 사용하여 감지할 수 있습니다.


배포된 Sklearn 모델을 재훈련하고 업데이트하는 방법은 무엇인가요?

답변:

재훈련은 새로운 데이터로 모델을 주기적으로 업데이트하는 것을 포함합니다. 이는 종종 CI/CD 파이프라인을 따릅니다: 새로운 데이터가 재훈련을 트리거하고, 새로운 모델이 평가되고, 버전이 지정된 후 배포되며, 잠재적으로 다운타임과 위험을 최소화하기 위해 블루/그린 또는 카나리 배포 전략을 사용합니다.


Sklearn 모델에 특성 저장소 (feature store) 를 사용하면 어떤 이점이 있나요?

답변:

특성 저장소는 훈련 및 추론을 위한 특성을 중앙 집중화하고 관리합니다. 이는 일관성을 보장하고, 중복된 특성 공학을 줄이며, 데이터 품질을 향상시키고, 실시간 예측 시나리오에서 Sklearn 모델에 특성을 효율적으로 서빙할 수 있도록 하여 개발 및 배포를 가속화합니다.


사용자 지정 Sklearn 배포 대신 전문 MLOps 플랫폼 (예: MLflow, Kubeflow) 을 사용하는 것을 고려해야 하는 경우는 언제인가요?

답변:

전문 MLOps 플랫폼은 실험 추적, 모델 레지스트리, 버전 관리, 배포 및 모니터링을 위한 통합 솔루션을 제공합니다. 이는 더 큰 팀, 복잡한 프로젝트 또는 사용자 지정 스크립트가 쉽게 제공할 수 있는 것 이상의 강력한 자동화, 확장성 및 거버넌스가 필요한 경우에 유용합니다.


실제 구현 및 코딩 과제

1 백만 행과 100 개의 특성을 가진 데이터셋이 있습니다. scikit-learn 에서 RandomForestClassifier 를 훈련할 때 메모리 제약을 어떻게 처리하시겠습니까?

답변:

대규모 데이터셋의 경우, 병렬 처리를 위해 n_jobs=-1을 사용하거나, 트리 복잡성을 제한하기 위해 max_featuresmax_samples를 고려하십시오. 메모리 문제가 여전히 발생하면, 데이터의 서브샘플링 (subsampling) 또는 아웃 - 오브 - 코어 학습 알고리즘 (예: SGDClassifier 또는 MiniBatchKMeans) 사용이 필요할 수 있습니다.


GridSearchCV 를 사용하여 GradientBoostingClassifier 의 하이퍼파라미터 튜닝을 수행하는 방법을 설명해주세요. 튜닝할 주요 매개변수는 무엇인가요?

답변:

정의된 매개변수 그리드와 함께 GridSearchCV를 사용합니다. GradientBoostingClassifier의 주요 매개변수에는 n_estimators, learning_rate, max_depth, subsample, min_samples_leaf가 포함됩니다. 매개변수 그리드를 정의하고 GridSearchCV를 데이터에 맞춰 (fit) 실행합니다.


모델을 훈련했고 재훈련 없이 나중에 사용하기 위해 저장하고 싶습니다. scikit-learn 에서 어떻게 할 수 있나요?

답변:

Python 의 joblib 라이브러리 (대규모 NumPy 배열에 권장) 또는 pickle을 사용합니다. 예를 들어: 저장 시에는 import joblib; joblib.dump(model, 'model.pkl'), 로드 시에는 loaded_model = joblib.load('model.pkl')과 같이 사용합니다.


scikit-learn 에서 Pipeline의 목적을 설명하고 간단한 예시를 제공해주세요.

답변:

Pipeline은 변환기 (transformer) 목록과 최종 추정기 (estimator) 를 순차적으로 적용합니다. 이는 워크플로우를 단순화하고, 데이터 누수를 방지하며, 일관된 변환을 보장합니다. 예시: Pipeline([('scaler', StandardScaler()), ('svc', SVC())]).


scikit-learn 모델에 입력하기 전에 고유 값이 많은 범주형 특성 (높은 기수성, high cardinality) 을 어떻게 처리하시겠습니까?

답변:

높은 기수성의 경우, OneHotEncoder는 너무 많은 특성을 생성할 수 있습니다. 대안으로는 TargetEncoder (category_encoders 라이브러리), LeaveOneOutEncoder 또는 드문 범주를 그룹화하는 방법이 있습니다. 트리 기반 모델의 경우, 레이블 인코딩 (label encoding) 으로 충분할 수 있습니다.


이진 분류 문제에 대한 불균형 데이터셋이 있습니다. scikit-learn 도구를 사용하여 이를 어떻게 해결하시겠습니까?

답변:

기법으로는 추정기 내의 class_weight='balanced', 소수 클래스 오버샘플링 (예: imblearnSMOTE), 다수 클래스 언더샘플링, 또는 정확도 대신 F1-score 나 AUC-ROC 와 같은 평가 지표 사용이 있습니다.


StandardScalerMinMaxScaler를 언제 사용해야 하나요? 각각에 대한 시나리오를 제공해주세요.

답변:

StandardScaler (평균 0, 단위 분산) 는 특성들이 다른 스케일을 가지고 있고 모델이 정규 분포 데이터를 가정할 때 (예: SVM, 로지스틱 회귀) 좋습니다. MinMaxScaler (0-1 범위로 스케일링) 는 신경망과 같이 스케일에 민감하지만 분포에는 덜 민감한 알고리즘이나 양수 값이 필요할 때 유용합니다.


cross_val_score 사용 시 흔한 함정과 이를 피하는 방법을 설명해주세요.

답변:

흔한 함정은 교차 검증 전에 스케일링 또는 특성 공학이 수행될 경우 발생하는 데이터 누수입니다. 이를 피하려면, cross_val_score 또는 GridSearchCV에 전달하기 전에 항상 Pipeline 내에 전처리 단계를 포함해야 합니다.


회귀 모델을 평가해야 합니다. 어떤 scikit-learn 지표를 사용하고 왜 사용해야 하나요?

답변:

일반적인 지표로는 해석력을 위한 평균 절대 오차 (mean_absolute_error), 더 큰 오차에 페널티를 부여하는 평균 제곱 오차 (mean_squared_error), 그리고 분산을 설명하기 위한 R-squared (r2_score) 가 있습니다. 선택은 문제의 특정 요구 사항에 따라 달라집니다.


scikit-learn 에서 GradientBoostingClassifier에 대한 조기 종료 (early stopping) 를 어떻게 구현하나요?

답변:

GradientBoostingClassifiern_iter_no_change 매개변수를 validation_fractiontol과 함께 사용합니다. 이는 검증 점수가 n_iter_no_change 반복 동안 개선되지 않으면 훈련을 중지하여 과적합을 방지합니다.


요약

이 문서는 일반적인 scikit-learn 면접 질문과 그에 대한 상세한 답변을 포괄적으로 검토했습니다. 이러한 주제를 성실히 검토함으로써 핵심 머신러닝 개념에 대한 이해를 새로고침했을 뿐만 아니라, 압박감 속에서 이를 효과적으로 설명하는 방법에 대한 귀중한 통찰력을 얻었습니다. 이러한 준비는 기술 면접 중에 여러분의 숙련도와 자신감을 보여주는 데 매우 중요합니다.

데이터 과학 학습 여정은 끊임없다는 것을 기억하십시오. 이러한 면접 질문을 마스터하는 것은 중요한 단계이지만, 호기심을 유지하고, 새로운 알고리즘을 탐색하며, 지식을 실제 문제에 적용하는 것도 마찬가지로 중요합니다. 계속 연습하고, 계속 구축하며, 끊임없이 진화하는 머신러닝 분야에서 전문성을 계속 확장하십시오. 면접에서 행운을 빕니다!