하이퍼파라미터 튜닝을 단순히 점수만 보는 게 아니라 best_params와 best_score 그리고 실제
accuracy를 함께 비교하면서 교차검증 기준 vs 테스트셋 기준이 다를 수 있음을 인지했다.
→ 모델이 교차검증에선 안정적으로 보이지만 테스트셋에서는 성능이 다를 수 있다는 점까지 연결된 점이 좋았다.
라벨 인코딩(LabelEncoder)과 원-핫 인코딩(get_dummies)의 차이를 실제 성능으로 비교해보고
모델이 어느 정도 영향을 받는지 탐색했다는 점이 좋았다.
→ 인코딩 방식이 의미하는 바까지 고민
단순히 모델 학습에 그치지 않고 Precision-Recall Curve를 활용한 threshold 튜닝까지 진행했다는 점이 가장 만족스러웠다.
XGBoost와 LightGBM 등의 앙상블 모델 비교를 통해 모델 간 성능 차이를 분석할 수 있었다.
SMOTE를 통해 불균형 클래스 문제를 실제로 해결해보며 모델 성능이 어떻게 변하는지 알 수 있었다.
피처 중요도 시각화를 통해 모델이 어떤 변수에 더 많이 의존하는지를 파악할 수 있었고 데이터 인사이트까지 연결해볼 수 있었다.
실습 흐름이 구조화되어 있어 실전 데이터 분석 프로젝트처럼 느껴졌다.
X (입력 피처)와 y (타겟 값)를 명확하게 구분해야 한다.GridSearchCV 를 사용하여 best_params를 찾아보았다.max_depth, min_samples_split, min_samples_leaf를 튜닝했을 때 실제 성능이 어떻게 달라지는지를 직접 확인해보았다.pd.get_dummies()와 LabelEncoder가 모델 성능에 직접 어떤 영향을 주는지 직접 보았다.StratifiedKFold는 클래스 불균형이 있는 분류 문제에서 클래스 비율 유지라는 큰 장점이 있음.
lr.coef_을 pd.Series로 바꿔서 .sort_values()로 정렬하면, 각 피처가 생존 예측에 얼마나 영향 미치는지 확인할 수 있다는 걸 배웠다.predict_proba()로 확률을 얻은 뒤 threshold를 바꿔가며 예측 결과를 바꾸는 방식 custom_proba 가 모델의 재현율이나 F1-score을 컨트롤할 수 있다는 걸 직접 확인했다.[0, 1, 2, ...])(), , , 같은 JSON 특수문자가 있으면 에러를 발생시킨다는 것!classification_report를 통해 Accuracy보다 정밀도(Precision), 재현율(Recall), F1-score가 얼마나 중요한지 다시 한번 느꼈다.random_state=42를 습관적으로 쓰고 있었지만 정확한 의미나 이유 없이 외우고 있었던 것을 돌아보게 됐다.
스케일링(LogisticRegression) 유무가 성능에 영향을 주지 않았던 것에 대해선
모델 구조에 따라 전처리 영향력이 다르다는 인사이트로 남기기로……
하이퍼파라미터 튜닝은 일부만 수행되었고 GridSearch나 CrossValidation 등을 적용해 모델 성능을 더 체계적으로 높여볼 여지가 있었다.
성별이라는 특성을 예측하는 문제이니만큼 편향성에 대해 더 깊게 접근할 필요가 있다는 점도 떠올랐지만 깊이 다루진 못했다.
SMOTE를 적용했을 때 학습 데이터와 실제 평가 데이터 간의 분포 차이를 좀 더 정밀하게 비교하지 못한 점이 아쉬웠다. 실제 데이터에선 오히려 과적합이 될 수도 있다는 생각이 들긴했는데… 오버샘플링 후 리스크 분석이 부족했다.
너무 많은 개념과 용어를 한꺼번에 접하다 보니, 어느 순간부터 정신이 멍해졌다.
특히 어려웠던 건:
binom.cdf()로 계산한 값이 실제로 뭘 의미하는지확률분포 그래프를 그렸지만 그게 내 머릿속에 정리되는 건 아니었다.
그냥 그래프가 생기긴 했는데… 그랬구나…"하는 느낌이었다.
앙상블 모델을 단순 Voting이 아닌 Stacking 기법으로 구성해보고, 복수 모델 조합의 시너지를 확인해보고 싶다.
파생변수 생성을 더 적극적으로 해보고 싶다.
총구매금액 대비 환불 비율, 방문당 평균 구매액, 주구매상품의 전체 내 비중 같은 변수들을 새로 만들면 모델이 고객의 구매 패턴을 더 잘 학습할 수 있을 것 같다.
이번에는 잘 몰라서 시도하지 못했지만 다음 분석에서는 필요하다면 도전해봐야겠다.
확률분포 그래프도 그냥 그리는 게 아니라
이 막대 하나가 무슨 의미인지 직접 말로 설명할 수 있을 정도의 감각을 갖고 싶다.
그리고... 아직 포아송, 정규, 베르누이 같은 말들도 내 언어가 된 건 아닌 것 같다.
너무 많은 걸 한 번에 보지 말고 내일은 천천히 다시 보는 걸 목표로 해보고 싶다.