-
평가 - 4Python Machine Learning/평가 2020. 7. 30. 18:43
지금까지 설명한 평가지표를 이용하여 피마 인디언 당뇨병 데이터 세트를 이용해 당뇨병 여부를 판단하는 머신러닝 예측 모델을 수립해보겠습니다.
피마 인디언 당뇨병 데이터 세트는 다음 피처로 구성되어 있습니다.
- Pregnancies: 임신 횟수
- Glucose: 포도당 부하 검사 수치
- BloodPressure: 혈압(mm Hg)
- SkinThickness: 팔 삼두근 뒤쪽의 피하지방 측정값(mm)
- Insulin: 혈청 인슐린(mu U/ml)
- BMI: 체질량지수(체중(kg)/(키(m))^2)
- DiabetesPedigreeFunction: 당뇨 내력 가중치 값
- Age: 나이
- Outcome: 클래스 결정 값(0또는 1)
--> 전체 768개의 데이터 중에서 Negative 값 0이 500개, Positive 값 1이 268개
--> Null값은 없으며 피처의 타입은 모두 숫자형. 별도의 인코딩은 필요하지 않음.
--> 이전에 사용했던 함수인 get_clf_eval( ), get_eval_by_threshold( ), precision_recall_curve_plot( )을 이용해 성능 평가 지표 출력하고 재현율 곡선을 시각화.
==> 예측 정확도, 재현율이 측정되었으며, 전체 데이터 중 65%가 Negative이므로 정확도보다는 재현율 성능에 초점을 맞추겠습니다. 먼저 정밀도 재현율 곡선을 보고 임계값별 변화를 확인하기 위해 precision_recall_curve_plot( ) 함수를 이용하겠습니다.
==> 임계값이 0.42정도일 때 재현율 정밀도가 균형을 맞추지만 두 값 모두 0.7이 안되는 낮은 수치입니다.
--> 원본 데이터의 피처 값의 분포도를 살펴보면 min( )값이 0으로 되어있는 피처가 상당히 많습니다. glucose 피처는 포도당 수치인데 min 값이 0인 것은 잘못된 것으로 보입니다.
--> min( ) 값이 9으로 되어있는 피처에 대해 0값의 건수 및 전체 데이터 건수 대비 몇 퍼센트의 비율로 존재하는지 확인
--> skinthickness와 insulin의 0값은 많은 퍼센트를 차지하고 있으며 이들을 평균값으로 대체.
--> 0값을 평균값으로 대체한 데이터 세트에 피처 스케일링을 적용하고 이후에 다시 학습/테스트 데이터세트로 나누고 로지스틱 회귀를 적용해 성능 평가 지표를 확인
--> 여전히 개선이 필요해 보이는 재현율의 성능을 높이기 위해서 분류 결정 임계값을 변화시켜 성능 수치 확인
--> 0.3 ~ 0.5 까지의 분류 결정 임계값을 이용하여 성능 수치를 확인했으며, 0.48일 때 가장 좋은 성능이 나타남.
--> 임계값을 0.48로 설정한 Binarizer를 생성
--> lr_clf의 predict_proba( ) 예측 확률 array에서 1에 해당하는 칼럼값을 Binarizer 변환