흡연 예측 프로젝트 _개인

곽숭아·2026년 1월 4일

기록일기장📗

목록 보기
1/10
post-thumbnail



오늘은 부트캠프에서 밤낮으로 머리 싸매고 고민했던 '건강검진 데이터 기반 흡연 여부 예측프로그램'을 포스팅하려고한다. 예전 미니프로젝트로 팀원들과 한번 해보기했지만, 사실 처음에는 "데이터로 담배 피우는지 안 피우는지 맞힐수 있다고?" 하며 반신반의했는데, 하면 할수록 데이터의 세계는 신기한 그자체!!
원래 1/2일 부터였는데 스케줄이 변경되어서 12/31~1/4까지 미니 프로젝트를 하기로 했다.
방금 막 ppt를 만들고 제출 후에 정리도 할겸 벨로그작성!

1. 이번 프로젝트의 목표는?

내 목표는 단순했다. 단순히 정답만 잘 맞히는 AI가 아니라, '왜 이사람이 흡연자라고 생각해?' 라는 질문에 당당하게 답할 수 있는 똑똑한 프로그램을 만들어 보는것!


2. 데이터랑 친해지기(EDA)

우선 데이터부터 꼼꼼히 뜯어봄. 혈압,콜레스테롤,간 수치까지 데이터가 정말 방대했닿...ㅎ

  • 의외의 발견 : 분석해 보니 '헤모글로빈'수치랑 '간 수치'가 흡연 여부랑 연관이 깊어보였음. 역시우리 몸은 거짓말을 안함..
  • 불균형의 늪 : 비흡연자가 훨씬 많아서, 단순히 정확도만 높이다간 큰일 나겠다싶었음. 그래서 이번엔 F1-socre 로 확인하기로 함.

3. 전처리하기

  • 파생 변수 만들기
df['콜레스테롤'] = df['콜레스테롤'].clip(upper=400)
df['중성 지방'] = df['중성 지방'].clip(upper=500)
df['공복 혈당'] = df['공복 혈당'].clip(upper=300)
  • 이상치 처리 : 삭제 대신 / 클리핑 사용.
    • 극단값 제거 대신 정보 손실 최소화
    • 실제 의료 데이터 특성고려

4. 데이터 분리 ,스케일링

  • Stratify 적용
train_test_split(..., stratify=y)

-> 클래스 불균형 유지

  • RobustScaler 사용
    • 이상치에 강함
    • 트리 모델 + 앙상블에 안정적

5. 모델링 : 앙상블, 튜닝

하나의 모델만 쓰기엔 성능을 또 다다를수있어서 3모델을 써봄.

  • XGBoost, LightGBM, CatBoost 3모델을 Soft Voting으로 묶음.
  • 예측이 탄탄하고 안정적인느낌.
  • XGBoost + Optuna
study.optimize(objective, n_trials=20)
  • F1-socre 기준 최적화
  • learnin_rate 낮게 -> 과적합 방지

*혼자서도 충분히 강한기준 모델확보하기

  • 앙상블(Soft Voting)
VotingClassifier(
  estimators=[XGB, LGBM, CAT],
  voting='soft',
  weights=[1, 1, 2]
)
  • 서로 다른 트리 계열 모델의 장점 결합
  • CatBoost 가중치 ↑
    • 범주/비선형 패턴에 강함

* 예측이 안정적이고 흔들림 적음


6. 임계값,🔥🔥0.378 !!!

제일 공을 들인 작업이기도함. 바로 임계값(Threshold)찾기 .
보통 기준 0.5지만, 0.001 단위로 조정해가면서 테스트할 결과 0.378이라는 포인트 찾음 리더보드는 0.744 나옴 . 근데 아직 만족못해서 벨로그 작성후에도 계속 코드 만져볼 예정임.

* 나의 프로젝트 하이라이트 뽀인또


7. 모델 평가 및 시각화

혼동 행렬 과 모델별 성능 비교를함.
혼동행렬은 어떤 유형에서 실수하는지 분석하고 FN/FP확인함
모델별 성능 비교는 단일 모델 vs 앙상블로함. 앙상블이 가장 균형잡힌 F1, Recall을 줌

8.SHAP

shap.TreeExplainer(best_xgb)

결과만 내놓기보다는 SHAP 분석을 통해 모델들을 들여다봄. 확인해 보니 헤모글로빈과 신장이 예측에 엄청난 영향을주고있었음. 의학적으로도 일리가 있는 결과라 모델에 대한 신뢰도가 올라감.


프로젝트 마무리

처음에는 코딩하고 점수 올리기 바빳는데, 이번 프로젝트하면서 단순 알고리즘만 돌리는게 아니라 이유 있는 결과를 찾아가는 방식으로 조금 바뀐것같음. 해석 가능한 예측모델로 만들어가는듯함. EDA → 전처리 → 앙상블 → Threshold → SHAP 단계를 거쳐보면서 전체 파이프라인 경험을 해봄. 이 미니 프로젝트 외에 이제 팀 프로젝트가 남았지만 , 그 또한 개인으로한 프로젝트를 바탕으로 조금 더 발전 해보려고함! 마지막 완성한 ppt 자료도 기록해놔야지 ㅎㅎ !

📎 발표자료(PDF)

profile
곽숭아_놀이터

0개의 댓글