TIL(Today I Learned)
1️⃣실전 자동화 프로젝트 (5)
피처 선택 파이프라인
전처리.ipynb에서 생성한 A_31_preprocessed.csv, TO_31_preprocessed.csv를 입력으로 받아,
타깃(Y_Class) 기준으로 Cross Validation 안에서 피처 중요도를 계산하고 불필요한 피처를 추가로 제거.
전처리 단계(결측/분산/상관)는 타깃을 보지 않는 구조적 정리라 전체 데이터에 한 번 적용해도 무방하지만,
데이터 누수 방지를 위해 반드시 CV 폴드 안에서 수행.
STEP 1. 전처리 결과 불러오기 및 분리
load_preprocessed()
Y_Quality,Y_Class,PRODUCT_ID,PRODUCT_CODE,TIMESTAMP를 X에서 다시 분리- CSV에는 저장을 위해 다 합쳐져 있으므로, 모델링 전에
전처리.ipynb의drop_leakage()와 동일한 기준으로 재분리
- CSV에는 저장을 위해 다 합쳐져 있으므로, 모델링 전에
X,y(Y_Quality),y_class(Y_Class),temp(id/time) 반환
STEP 2. CV 기반 Feature Importance 계산
compute_cv_importance()
Y_Class기준StratifiedKFold(기본 5-fold)- fold마다 학습 데이터에만
LGBMClassifier학습 (class_weight='balanced'로 클래스 불균형 보정) - 검증 fold에 대해
permutation_importance계산 (기본 importance보다 편향이 적음) - fold별 importance를 모아 평균(
mean_importance) 산출
모델을 LightGBM으로 선택한 이유

- 베이스라인 모델링 결과 반영
- NaN을 네이티브로 처리 — 전처리 단계에서 결측값을 임퓨테이션하지 않기로 한 정책과 일치
- 비선형/상호작용 관계까지 반영 가능
STEP 3. 중요도 기준 컬럼 선택
select_features()
mean_importance > threshold(기본 0)인 컬럼만 선택
적용 결과
| 제품군 | 원본 피처 수 | 선택된 피처 수 | 출력 파일 |
|---|---|---|---|
| A_31 | 551 | 93 | A_31_selected.csv (316×98) |
| T/O_31 | 334 | 43 | TO_31_selected.csv (592×48) |
2️⃣추후 과제 정리
- 컬럼 축소 — 과적합 위험 및 노이즈 데이터 제거
- 하이퍼파라미터 튜닝(Optuna)
- 앙상블 고도화 — 현재는 단순 평균/2모델 앙상블뿐
- 베이스라인 vs 피처선택 성능 비교 — 개선된 데이터 점수 비교
- 검증 안정화 — 반복 교차검증(Repeated Stratified K-Fold)으로 fold 변동 줄이기
- 제품코드별 임계값(threshold) 재추정 — Y_Quality 회귀 결과를 등급으로 나누는 경계값을 제품코드별로 따로 잡기
- SHAP 분석
- 멘토링 질문 정리
💡 느낀점
데이터의 라벨이 가려져있는 데이터를 면밀히 볼 수록 갈피를 잡기가 어려웠다. 통계적으로 단계를 추가해 전처리를 진행했지만, 전체 컬럼이 너무 많아 전처리 후에도 과적합이 우려될 정도로 다수의 컬럼이 존재했다. 기존의 전처리 데이터와 CV기반으로 전처리를 진행한 데이터의 성적과 지표를 비교하고 과정을 추가할 예정이다. 또한 Quality의 회귀를 통해 품질 지표를 예측하고 예측 기반의 Class 분류를 제품별이나 라인별로 진행해야할지 더욱 고민해봐야겠다.
'최종 프로젝트' 카테고리의 다른 글
| Chapter.9 최종 실전 자동화 프로젝트 (8) (0) | 2026.07.07 |
|---|---|
| Chapter.9 최종 실전 자동화 프로젝트 (7) (0) | 2026.07.02 |
| Chapter.9 최종 실전 자동화 프로젝트 (5) (0) | 2026.06.30 |
| Chapter.9 최종 실전 자동화 프로젝트 (4) (0) | 2026.06.29 |
| Chapter.9 최종 실전 자동화 프로젝트 (3) (0) | 2026.06.26 |