- 데이터의 불균형
yes: 500, no: 268
심하지는 않지만 불균형 존재.
- 시각화
단순히 yes/no 클래스에 대한 특징별 데이터 분포를 나타낸 것이 아니라, 의학적 지식을 이용해 특징별로 적절한 cutoff를 정한 뒤 cutoff 이하에서의 yes/no 클래스 비율, cutoff 이상에서의 yes/no 클래스 비율을 시각화함으로써 특징별로 어떻게 Outcome에 영향을 미치는 지 확인하고자 함.
- Pregnancies (3): 3번 이상 임신했을 경우 yes 클래스의 비율이 더 높게 나옴. 임신 중 인슐린이 정상적으로 분비되지 않음 + 인슐린 저항성이 생김 등의 문제로 인해 여러 차례 임신을 한 경우 당뇨병에 걸릴 확률이 높다고 해석할 수 있음.
- Glucose (126): 혈당이 높을수록 yes 클래스의 비율이 2배 가까이 높음. 혈당의 농도가 Outcome 결과에 큰 영향을 끼친다고 볼 수 있음.
- BloodPressure (85): 이완기 혈압이 높을수록 당뇨병에 걸릴 확률이 높음. 통상적으로 비만이면 당뇨병에 걸릴 확률이 높은데, 비만이면 고혈압이므로 연결고리가 형성되는 것 같음.
- SkinThickness (32): 당뇨에 걸리면 피부가 두꺼워짐.
- Insulin (35): 인슐린 농도가 낮을수록 당뇨에 걸릴 확률이 낮음. 그러나 이것은 1형 당뇨병의 경우고, 2형 당뇨병은 인슐린 분비는 정상적이나 인슐린의 표적 세포가 인슐린에 제대로 반응하지 못하여 발생한다. 해당 데이터셋은 인슐린 농도 차이에 의해 yes/no 클래스의 비율이 비슷한 것으로 보아 2형 당뇨병의 빈도가 높은 것으로 추정됨.
- BMI (25): 비만일수록 당뇨에 걸릴 확률이 높아짐.
- 전처리
nan값, duplicate 없음.
그러나, [Glucose, BloodPressure, SkinThickness, Insulin, BMI]에 존재하는 0은 의미 없는 값으로 판단해 np.nan으로 대체한 후 데이터의 분포에 따라 mean, median을 이용해 적절하게 채워줌. (knn 사용해보기)
중요한 feature (Glucose, BMI에 2를 곱하여 가중치 주기)
존재하는 outlier를 nan값으로 대체한 뒤 knn imputer를 이용해 채워줌. (mean, median 이용해보기)
- 모델
oversampling해서 yes/no 클래스의 비율을 맞춘 뒤, f1 score를 최대화하도록 bayesian optimization으로 최적의 하이퍼파라미터와 f1 score 찾기
model = LGBMClassifier(
learning_rate=0.02885,
max_depth=int(34.71),
n_estimators=int(15.62),
num_leaves=int(71.1),
reg_alpha= 0.02116,
reg_lambda=0.02655)

'머신러닝' 카테고리의 다른 글
| [선형 대수] SVD (Singular Value Decomposition) (0) | 2025.01.20 |
|---|---|
| [선형 대수] 기저 (basis), 랭크 (rank) (0) | 2025.01.18 |
| [패턴 인식 코드 개선] 개선 (0) | 2025.01.06 |
| [패턴 인식 코드 개선] Bayesian Optimization (0) | 2025.01.06 |
| [머신 러닝] PCA (Principal Component Analysis) (0) | 2024.12.26 |