코랩으로 데이터 불러오기, 데이터 확인

전체 768개 데이터 중 negative(0)값이 500개, positive(1)값이 268개로 negative 값이 많은 것을 확인할 수 있다.

전체 768개 데이터 중 negative(0)값이 500개, positive(1)값이 268개로 negative 값이 많은 것을 확인할 수 있다.

Null 값은 없으며 피처의 타입은 모두 숫자형이다.

Null 값은 없으며 피처의 타입은 모두 숫자형이다.

예측 모델 생성

로지스틱 회귀를 이용하여 예측 모델을 생성하였을 때, 정확도는 77.27%, 재현율은 57.41%이다.

재현율 성능을 개선시키기 위해서, 정밀도 재현율 곡선을 보고 임곗값 별 정밀도와 재현율 값의 변화를 확인해보겠다.

pred_proba_c1 = lr_clf.predict_proba(X_test)[:,1]

def precision_recall_curve_plot(y_test , pred_proba_c1):
    # threshold ndarray와 이 threshold에 따른 정밀도, 재현율 ndarray 추출. 
    precisions, recalls, thresholds = precision_recall_curve( y_test, pred_proba_c1)
    
    # X축을 threshold값으로, Y축은 정밀도, 재현율 값으로 각각 Plot 수행. 정밀도는 점선으로 표시
    plt.figure(figsize=(8,6))
    threshold_boundary = thresholds.shape[0]
    plt.plot(thresholds, precisions[0:threshold_boundary], linestyle='--', label='precision')
    plt.plot(thresholds, recalls[0:threshold_boundary],label='recall')
    
    # threshold 값 X 축의 Scale을 0.1 단위로 변경
    start, end = plt.xlim()
    plt.xticks(np.round(np.arange(start, end, 0.1),2))
    
    # x축, y축 label과 legend, 그리고 grid 설정
    plt.xlabel('Threshold value'); plt.ylabel('Precision and Recall value')
    plt.legend(); plt.grid()
    plt.show()

precision_recall_curve_plot(y_test, pred_proba_c1)

곡선을 확인했을 때, 임곗값을 0.42정도로 맞추면 정밀도와 재현율이 균형을 맞출 것 같다.

그러나 임곗값을 조정해도 두 지표 모두 0.7이 안되는 수치를 보이므로 데이터 전처리를 먼저 하도록 한다

데이터 전처리

min 값이 0으로 된 피쳐가 상당히 많다.

min 값이 0으로 된 피쳐가 상당히 많다.

min()값이 0으로 되어있는 피처에 대해 0값의 건수 및 전체 데이터 건수 대비 및 몇 퍼센트의 비율로 존재하는지 확인

min()값이 0으로 되어있는 피처에 대해 0값의 건수 및 전체 데이터 건수 대비 및 몇 퍼센트의 비율로 존재하는지 확인

학습을 효과적으로 수행하기 위하여 피처의 0값들을 평균값으로 대체하겠다.