{
"cells": [
{
"cell_type": "code",
"execution_count": 7,
"id": "13e4d934-6f3c-44e7-8388-859611a69859",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Outcome\n",
"0 500\n",
"1 268\n",
"Name: count, dtype: int64\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 6 | \n",
" 148 | \n",
" 72 | \n",
" 35 | \n",
" 0 | \n",
" 33.6 | \n",
" 0.627 | \n",
" 50 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 85 | \n",
" 66 | \n",
" 29 | \n",
" 0 | \n",
" 26.6 | \n",
" 0.351 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 8 | \n",
" 183 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 23.3 | \n",
" 0.672 | \n",
" 32 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 89 | \n",
" 66 | \n",
" 23 | \n",
" 94 | \n",
" 28.1 | \n",
" 0.167 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" 137 | \n",
" 40 | \n",
" 35 | \n",
" 168 | \n",
" 43.1 | \n",
" 2.288 | \n",
" 33 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"0 6 148 72 35 0 33.6 \n",
"1 1 85 66 29 0 26.6 \n",
"2 8 183 64 0 0 23.3 \n",
"3 1 89 66 23 94 28.1 \n",
"4 0 137 40 35 168 43.1 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"0 0.627 50 1 \n",
"1 0.351 31 0 \n",
"2 0.672 32 1 \n",
"3 0.167 21 0 \n",
"4 2.288 33 1 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 필요한 모듈 임포드 및 파일 로딩\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_auc_score\n",
"from sklearn.metrics import f1_score, confusion_matrix, precision_recall_curve, roc_curve\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.linear_model import LogisticRegression\n",
"\n",
"diabetes_data = pd.read_csv('C:/Users/niceq/Documents/DataScience/Python ML Guide/Data/03. diabetes.csv')\n",
"print(diabetes_data['Outcome'].value_counts())\n",
"diabetes_data.head(5)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "6a54a72d-37de-49bc-a3e6-7773422c3b88",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 768 entries, 0 to 767\n",
"Data columns (total 9 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Pregnancies 768 non-null int64 \n",
" 1 Glucose 768 non-null int64 \n",
" 2 BloodPressure 768 non-null int64 \n",
" 3 SkinThickness 768 non-null int64 \n",
" 4 Insulin 768 non-null int64 \n",
" 5 BMI 768 non-null float64\n",
" 6 DiabetesPedigreeFunction 768 non-null float64\n",
" 7 Age 768 non-null int64 \n",
" 8 Outcome 768 non-null int64 \n",
"dtypes: float64(2), int64(7)\n",
"memory usage: 54.1 KB\n"
]
}
],
"source": [
"# 데이터의 feature 타입 및 Null 개수 파악\n",
"diabetes_data.info()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "81a1e54b-93c9-48af-a2cb-f1d8ffd41b94",
"metadata": {},
"outputs": [],
"source": [
"# 성능 평가 지표 함수 적용\n",
"def get_clf_eval(y_test, pred=None, pred_proba=None):\n",
" confusion = confusion_matrix(y_test, pred)\n",
" accuracy = accuracy_score(y_test, pred)\n",
" precision = precision_score(y_test, pred)\n",
" recall = recall_score(y_test, pred)\n",
" f1 = f1_score(y_test, pred)\n",
" # ROC-AUC 추가\n",
" roc_auc = roc_auc_score(y_test, pred)\n",
" print('오차 행렬')\n",
" print(confusion)\n",
" # ROC-AUC print 추가\n",
" print('정확도: {0:.4f}, 정밀도: {1:.4f}, 재현율: {2:.4f},\\\n",
" F1: {3:.4f}, AUC: {4:.4f}'.format(accuracy, precision, recall, f1, roc_auc))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "83451386-944c-4ca6-8cc6-af74e60057ed",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"오차 행렬\n",
"[[87 13]\n",
" [22 32]]\n",
"정확도: 0.7727, 정밀도: 0.7111, 재현율: 0.5926, F1: 0.6465, AUC: 0.7313\n"
]
}
],
"source": [
"# 로지스틱 회귀를 이용해 예측 모델 생성\n",
"# 피처 데이터 세트 X, 레이블 데이터 세트 y 추출\n",
"# 맨 끝이 Outcome 칼럼으로 레이블 값. 칼럼 위치 -1을 이용해 추출\n",
"X = diabetes_data.iloc[:, :-1]\n",
"y = diabetes_data.iloc[:, -1]\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=156, stratify=y)\n",
"\n",
"# 로지스틱 회귀로 학습, 예측 및 평가 수행\n",
"lr_clf = LogisticRegression(solver='liblinear')\n",
"lr_clf.fit(X_train, y_train)\n",
"pred = lr_clf.predict(X_test)\n",
"pred_proba = lr_clf.predict_proba(X_test)[:, 1]\n",
"\n",
"get_clf_eval(y_test, pred, pred_proba)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "f70f8ffd-8742-4f1f-8a71-7a3443ad8d70",
"metadata": {},
"outputs": [],
"source": [
"# 정밀도와 재현율 곡선 시각화 함수\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.ticker as ticker\n",
"%matplotlib inline\n",
"\n",
"def precision_recall_curve_plot(y_test, pred_proba_c1):\n",
" # threshold ndarray와 이 threshold에 따른 정밀도, 재현율 ndarray 추출\n",
" precisions, recalls, thresholds = precision_recall_curve(y_test, pred_proba_c1)\n",
"\n",
" # X축을 threshold 값으로, Y축은 정밀도, 재현율 값으로 각각 Plot 수행. 정밀도는 점선으로 표시\n",
" plt.figure(figsize=(8, 6))\n",
" threshold_boundary = thresholds.shape[0]\n",
" plt.plot(thresholds, precisions[0:threshold_boundary], linestyle='--', label='precision')\n",
" plt.plot(thresholds, recalls[0:threshold_boundary], label='recall')\n",
"\n",
" # threshold 값 X축의 Scale을 0.1 단위로 변경\n",
" start, end = plt.xlim()\n",
" plt.xticks(np.round(np.arange(start, end, 0.1), 2))\n",
"\n",
" # X축, y축 label과 legend, 그리고 grid 설정\n",
" plt.xlabel('Threshold value'); plt.ylabel('Precision and Recall value')\n",
" plt.legend(); plt.grid()\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "7681be49-ea2b-47cd-b5c1-59d2f6d680c4",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 정밀도와 재현율 값의 변화 확인 - 시각화\n",
"pred_proba_c1 = lr_clf.predict_proba(X_test)[:, 1]\n",
"precision_recall_curve_plot(y_test, pred_proba_c1)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "93e3d45a-d25e-4dfd-804b-ed2344c7430c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 768.000000 | \n",
" 768.000000 | \n",
" 768.000000 | \n",
" 768.000000 | \n",
" 768.000000 | \n",
" 768.000000 | \n",
" 768.000000 | \n",
" 768.000000 | \n",
" 768.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 3.845052 | \n",
" 120.894531 | \n",
" 69.105469 | \n",
" 20.536458 | \n",
" 79.799479 | \n",
" 31.992578 | \n",
" 0.471876 | \n",
" 33.240885 | \n",
" 0.348958 | \n",
"
\n",
" \n",
" std | \n",
" 3.369578 | \n",
" 31.972618 | \n",
" 19.355807 | \n",
" 15.952218 | \n",
" 115.244002 | \n",
" 7.884160 | \n",
" 0.331329 | \n",
" 11.760232 | \n",
" 0.476951 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.078000 | \n",
" 21.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 25% | \n",
" 1.000000 | \n",
" 99.000000 | \n",
" 62.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 27.300000 | \n",
" 0.243750 | \n",
" 24.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 50% | \n",
" 3.000000 | \n",
" 117.000000 | \n",
" 72.000000 | \n",
" 23.000000 | \n",
" 30.500000 | \n",
" 32.000000 | \n",
" 0.372500 | \n",
" 29.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 75% | \n",
" 6.000000 | \n",
" 140.250000 | \n",
" 80.000000 | \n",
" 32.000000 | \n",
" 127.250000 | \n",
" 36.600000 | \n",
" 0.626250 | \n",
" 41.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" max | \n",
" 17.000000 | \n",
" 199.000000 | \n",
" 122.000000 | \n",
" 99.000000 | \n",
" 846.000000 | \n",
" 67.100000 | \n",
" 2.420000 | \n",
" 81.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin \\\n",
"count 768.000000 768.000000 768.000000 768.000000 768.000000 \n",
"mean 3.845052 120.894531 69.105469 20.536458 79.799479 \n",
"std 3.369578 31.972618 19.355807 15.952218 115.244002 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 1.000000 99.000000 62.000000 0.000000 0.000000 \n",
"50% 3.000000 117.000000 72.000000 23.000000 30.500000 \n",
"75% 6.000000 140.250000 80.000000 32.000000 127.250000 \n",
"max 17.000000 199.000000 122.000000 99.000000 846.000000 \n",
"\n",
" BMI DiabetesPedigreeFunction Age Outcome \n",
"count 768.000000 768.000000 768.000000 768.000000 \n",
"mean 31.992578 0.471876 33.240885 0.348958 \n",
"std 7.884160 0.331329 11.760232 0.476951 \n",
"min 0.000000 0.078000 21.000000 0.000000 \n",
"25% 27.300000 0.243750 24.000000 0.000000 \n",
"50% 32.000000 0.372500 29.000000 0.000000 \n",
"75% 36.600000 0.626250 41.000000 1.000000 \n",
"max 67.100000 2.420000 81.000000 1.000000 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 데이터 값 점검\n",
"diabetes_data.describe()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "788b472c-fb9c-4a9b-9a62-f8ed9fb32932",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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NTWqqKhQQkKCEhISVFhYqJkzZ8rn86m6ulrPPPOMrrnmGmVnZwe1cAAAEJ66HD727Nmju+66y3///PUac+bM0cqVK7Vv3z69+eabamhoUGpqqqZMmaLf//738nq9wasaAACErS6Hj0mTJsk5d9H9n3zyyWUVBAAAIhu9XQAAgCnCBwAAMEX4AAAApggfAADAFOEDAACYInwAAABThA8AAGAq6I3lAAA/oFsw0D7OfAAAAFOEDwAAYIrwAQAATBE+AACAKcIHAAAwRfgAAACmCB8AAMAU4QMAAJgifAAAAFOEDwAAYIrwAQAATBE+AACAKRrLAUAEaK+J3cHlU0NQCdAxznwAAABThA8AAGCK8AEAAEwRPgAAgCnCBwAAMEX4AAAApggfAADAFOEDAACYInwAAABThA8AAGCK8AEAAEwRPgAAgCnCBwAAMEVXWyCM0ck0/F24htbr196/IaCnceYDAACYInwAAABThA8AAGCK8AEAAEwRPgAAgCnCBwAAMEX4AAAApggfAADAFOEDAACYInwAAABThA8AAGCK8AEAAEzRWA4ArhCWTeRoeohL4cwHAAAwRfgAAACmCB8AAMAU4QMAAJgifAAAAFOEDwAAYIrwAQAATBE+AACAKcIHAAAw1eXwsX37dt1zzz1KTU2Vx+PRunXrAvY757RkyRKlpKQoOjpaWVlZOnDgQLDqBQAAYa7L4aO5uVnjx49XcXFxu/tXrFihV199Va+99pp2796tq666StnZ2Tp16tRlFwsAAMJfl3u75ObmKjc3t919zjm98soreu655zRt2jRJ0l//+lclJydr3bp1euCBBy6vWgAAEPaCes1HTU2N6urqlJWV5d8WFxenjIwMlZWVtfs7LS0tampqCrgBAIDIFdSutnV1dZKk5OTkgO3Jycn+fRcqKipSYWFhMMsA0AHL7qbommCuTW9f50jpfHvhPMJxDtZC/tcuBQUFamxs9N8OHz4c6pIAAEAPCmr48Pl8kqT6+vqA7fX19f59F/J6vYqNjQ24AQCAyBXU8JGeni6fz6ctW7b4tzU1NWn37t3KzMwM5qEAAECY6vI1HydOnFBVVZX/fk1NjSoqKpSQkKChQ4dq0aJF+sMf/qBrr71W6enpev7555Wamqrp06cHs24AABCmuhw+9uzZo7vuust/Pz8/X5I0Z84crV69Ws8884ya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Am6PPPJIiCrumhdeeKFN7aNHj/bvP3XqlPLy8jRo0CBdffXVmjlzZpsvtevthg8f3maOHo9HeXl5ksJz/bZv36577rlHqamp8ng8WrduXcB+55yWLFmilJQURUdHKysrSwcOHAgY891332n27NmKjY1VfHy85s2bpxMnThjO4tIuNcczZ85o8eLFGjt2rK666iqlpqbqoYce0pEjRwIeo721X758ufFM2tfRGs6dO7dN7Tk5OQFjwnkNJbX7vPR4PHrxxRf9Y3rzGnbm/aEzr6GHDh3S1KlTNXDgQCUlJenpp5/W2bNng1bnFRE+3nvvPeXn52vp0qXau3evxo8fr+zsbB09ejTUpXVLaWmp8vLytGvXLm3atElnzpzRlClT1NzcHDBu/vz5qq2t9d9WrFgRooq77sYbbwyofceOHf59TzzxhD766CN98MEHKi0t1ZEjRzRjxowQVtt1n332WcD8Nm3aJEn6+c9/7h8TbuvX3Nys8ePHq7i4uN39K1as0KuvvqrXXntNu3fv1lVXXaXs7GydOnXKP2b27Nn64osvtGnTJm3YsEHbt2/XggULrKbQoUvN8eTJk9q7d6+ef/557d27Vx9++KEqKyt17733thm7bNmygLV97LHHLMrvUEdrKEk5OTkBtb/zzjsB+8N5DSUFzK22tlZvvPGGPB6PZs6cGTCut65hZ94fOnoNPXfunKZOnarTp09r586devPNN7V69WotWbIkeIW6K8Btt93m8vLy/PfPnTvnUlNTXVFRUQirCp6jR486Sa60tNS/7X/+53/c448/HrqiLsPSpUvd+PHj293X0NDg+vfv7z744AP/tn//+99OkisrKzOqMPgef/xxN3LkSNfa2uqcC+/1c845SW7t2rX++62trc7n87kXX3zRv62hocF5vV73zjvvOOec+/LLL50k99lnn/nH/P3vf3cej8f95z//Mau9sy6cY3s+/fRTJ8l9/fXX/m3Dhg1zL7/8cs8WFwTtzW/OnDlu2rRpF/2dSFzDadOmubvvvjtgW7isoXNt3x868xr6t7/9zfXp08fV1dX5x6xcudLFxsa6lpaWoNQV8Wc+Tp8+rfLycmVlZfm39enTR1lZWSorKwthZcHT2NgoSUpISAjY/vbbbysxMVFjxoxRQUGBTp4Mn5bxBw4cUGpqqkaMGKHZs2fr0KFDkqTy8nKd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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 포도당 수치(Glucose) 히스토그램\n",
"plt.hist(diabetes_data['Glucose'], bins=100)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "01aaddb4-7262-4501-9df8-65b1dd65b86a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Glucose 0 건수는 5, 퍼센트는 0.65 %\n",
"BloodPressure 0 건수는 35, 퍼센트는 4.56 %\n",
"SkinThickness 0 건수는 227, 퍼센트는 29.56 %\n",
"Insulin 0 건수는 374, 퍼센트는 48.70 %\n",
"BMI 0 건수는 11, 퍼센트는 1.43 %\n"
]
}
],
"source": [
"# 0값을 검사할 피처명 리스트\n",
"zero_features = ['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']\n",
"\n",
"# 전체 데이터 건수\n",
"total_count = diabetes_data['Glucose'].count()\n",
"\n",
"# 피처별로 반복하면서 데이터 값이 0인 데이터 건수를 추출하고, 퍼센트 계산\n",
"for feature in zero_features:\n",
" zero_count = diabetes_data[diabetes_data[feature] == 0][feature].count()\n",
" print('{0} 0 건수는 {1}, 퍼센트는 {2:.2f} %'.format(feature, zero_count, 100*zero_count/total_count))"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "36941ac0-4dbe-4fcd-8585-e5186e397094",
"metadata": {},
"outputs": [],
"source": [
"# zero_features 리스트 내부에 저장된 개별 피처들에 대해서 0값을 평균값으로 대체\n",
"mean_zero_features = diabetes_data[zero_features].mean()\n",
"diabetes_data[zero_features] = diabetes_data[zero_features].replace(0, mean_zero_features)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "5076ddad-c467-4d91-a6c0-98cc8619901d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"오차 행렬\n",
"[[90 10]\n",
" [19 35]]\n",
"정확도: 0.8117, 정밀도: 0.7778, 재현율: 0.6481, F1: 0.7071, AUC: 0.7741\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\niceq\\anaconda3\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:469: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
"\n",
"Increase the number of iterations (max_iter) or scale the data as shown in:\n",
" https://scikit-learn.org/stable/modules/preprocessing.html\n",
"Please also refer to the documentation for alternative solver options:\n",
" https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
" n_iter_i = _check_optimize_result(\n"
]
}
],
"source": [
"# 평균값으로 대체한 데이터 세트에 피처 스케일링 적용\n",
"X = diabetes_data.iloc[:, :-1]\n",
"y = diabetes_data.iloc[:, -1]\n",
"\n",
"# StandardScaler 클래스를 이용해 피처 데이터 세트에 일괄적으로 스케일링 적용\n",
"scaler = StandardScaler()\n",
"X_scaled = scaler.fit_transform(X)\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=156, stratify=y)\n",
"\n",
"# 로지스틱 회귀로 학습, 예측 및 평가 수행\n",
"lr_clf = LogisticRegression()\n",
"lr_clf.fit(X_train, y_train)\n",
"pred = lr_clf.predict(X_test)\n",
"pred_proba = lr_clf.predict_proba(X_test)[:, 1]\n",
"\n",
"get_clf_eval(y_test, pred, pred_proba)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "8f659f1f-4f01-4b35-bf25-8c05a5778eb2",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import Binarizer\n",
"# 임곗값 평가 수치 출력 함수\n",
"def get_eval_by_threshold(y_test, pred_proba_c1, threshold):\n",
" # thresholds list 객체 내의 값을 차례로 iteration 하면서 Evaluation 수행\n",
" for custom_threshold in thresholds:\n",
" binarizer = Binarizer(threshold=custom_threshold).fit(pred_proba_c1)\n",
" custom_predict = binarizer.transform(pred_proba_c1)\n",
" print('임곗값:', custom_threshold)\n",
" get_clf_eval(y_test, custom_predict)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "b5c51868-7ac0-49cf-ae95-23d6309f7ddc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"임곗값: 0.3\n",
"오차 행렬\n",
"[[68 32]\n",
" [11 43]]\n",
"정확도: 0.7208, 정밀도: 0.5733, 재현율: 0.7963, F1: 0.6667, AUC: 0.7381\n",
"임곗값: 0.33\n",
"오차 행렬\n",
"[[73 27]\n",
" [13 41]]\n",
"정확도: 0.7403, 정밀도: 0.6029, 재현율: 0.7593, F1: 0.6721, AUC: 0.7446\n",
"임곗값: 0.36\n",
"오차 행렬\n",
"[[75 25]\n",
" [15 39]]\n",
"정확도: 0.7403, 정밀도: 0.6094, 재현율: 0.7222, F1: 0.6610, AUC: 0.7361\n",
"임곗값: 0.39\n",
"오차 행렬\n",
"[[77 23]\n",
" [16 38]]\n",
"정확도: 0.7468, 정밀도: 0.6230, 재현율: 0.7037, F1: 0.6609, AUC: 0.7369\n",
"임곗값: 0.42\n",
"오차 행렬\n",
"[[82 18]\n",
" [17 37]]\n",
"정확도: 0.7727, 정밀도: 0.6727, 재현율: 0.6852, F1: 0.6789, AUC: 0.7526\n",
"임곗값: 0.45\n",
"오차 행렬\n",
"[[84 16]\n",
" [19 35]]\n",
"정확도: 0.7727, 정밀도: 0.6863, 재현율: 0.6481, F1: 0.6667, AUC: 0.7441\n",
"임곗값: 0.48\n",
"오차 행렬\n",
"[[88 12]\n",
" [19 35]]\n",
"정확도: 0.7987, 정밀도: 0.7447, 재현율: 0.6481, F1: 0.6931, AUC: 0.7641\n",
"임곗값: 0.5\n",
"오차 행렬\n",
"[[90 10]\n",
" [19 35]]\n",
"정확도: 0.8117, 정밀도: 0.7778, 재현율: 0.6481, F1: 0.7071, AUC: 0.7741\n"
]
}
],
"source": [
"# 임곗값을 0.3부터 0.5까지 0.03씩 증가시키며 평가 지표 조사\n",
"# 테스트를 수행할 모든 임곗값을 리스트 객체로 저장\n",
"thresholds = [0.3, 0.33, 0.36, 0.39, 0.42, 0.45, 0.48, 0.50]\n",
"pred_proba = lr_clf.predict_proba(X_test)\n",
"get_eval_by_threshold(y_test, pred_proba[:, 1].reshape(-1, 1), thresholds)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "ada010a5-515d-4e4b-97f4-482d18e4b908",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"오차 행렬\n",
"[[88 12]\n",
" [19 35]]\n",
"정확도: 0.7987, 정밀도: 0.7447, 재현율: 0.6481, F1: 0.6931, AUC: 0.7641\n"
]
}
],
"source": [
"# 임곗값을 0.48로 설정한 Binarizer 생성\n",
"binarizer = Binarizer(threshold=0.48)\n",
"\n",
"# 위에서 구한 lr_clf의 predict_proba() 예측 확률 array 에서 1에 해당하는 칼럼값을 Binarizer 변환\n",
"pred_th_048 = binarizer.fit_transform(pred_proba[:, 1].reshape(-1, 1))\n",
"\n",
"get_clf_eval(y_test, pred_th_048, pred_proba[:, 1])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}