1편에 결측치 처리를 조금 더 보면서 시작~
3. 결측치 처리
# null 값을 최빈값(mode)으로 변경하세요. 데이터 처리 후 데이터프레임을 df5에 저장하세요.
df4.replace({'cont_sttus_itg_cd' : {np.nan : df4['cont_sttus_itg_cd'].mode()}}, inplace = True)
df5 = df4.copy()
#최빈값 확인 직접해서 변경하는 방법
df5['cust_dtl_ctg_itg_cd'].value_counts()
df5['cust_dtl_ctg_itg_cd'].replace(np.nan,'위 코드로 확인한 최빈값', inplace=True)
#컬럼 여러개 삭제
df5.drop(columns=['new_date', 'opn_nfl_chg_date', 'cont_fns_pam_date'], inplace=True)
4. 라벨 인코딩, 원핫 인코딩
#df5에 대해 object 타입 컬럼을 cat_cols에 저장하세요. 그 중 cat_cols의 cust_clas_itg_cd 컬럼에 대해 LabelEncoder를 적용해보세요. (적용 후 df5에 저장)
cat_cols = df5.select_dtypes(include='object')
from sklearn.preprocessing import LabelEncoder
# LabelEncoder
le = LabelEncoder()
df5['cust_clas_itg_cd'] = le.fit_transform(cat_cols['cust_clas_itg_cd'])
#타입 확인후 원하는 컬럼에 대해 원핫인코딩 될수있도록 겟 더미즈 적용하기, 적용후 저장
df5.dtypes
df6 = pd.get_dummies(data=df5, columns=['컬럼1', '컬럼2',], drop_first=True)
df6.info()
#참고로 이걸 한번에 실행하면 결국 info 결과만 나오기때문에 dtype으로 확인후 나머지 코드 작성해야함
5. 데이터 분리
#df6을 X,y 값을 가지고 8:2 비율로 train, test 데이터셋으로 나누기. 타겟은 trm_yn_Y
from sklearn.model_selection import train_test_split
target = 'trm_yn_Y'
X = df6.drop(target, axis = 1)
y = df6.loc[:, target]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
6. 데이터 정규분포화, 표준화
#StandardScaler로 스케일링
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
#MinMaxScaler로 스케일링
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
7. 머신러닝 모델링
#LogisticRegression 모델 정의하고 학습
from sklearn.linear_model import LogisticRegression
lg = LogisticRegression()
lg.fit(X_train, y_train)
#KNN으로 모델을 정의하고 학습 (n_neighbors=5)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
#Decision Tree로 모델을 정의하고 학습(max_depth=10, random_state=42)
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(max_depth=10, random_state=42)
dt.fit(X_train, y_train)
#RandomForest로 모델을 정의하고 학습(n_estimators=3, random_state=42)
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=3, random_state=42)
rfc.fit(X_train, y_train)
#XGBoost로 모델을 정의하고 학습(n_estimators=3, random_state=42)
#!pip install xgboost
from xgboost import XGBClassifier
xgb = XGBClassifier(n_estimators=3, random_state=42)
xgb.fit(X_train, y_train)
#Light GBM으로 모델을 정의하고 학습(n_estimators=3, random_state=42)
#!pip install lightgbm
from lightgbm import LGBMClassifier
lgbm = LGBMClassifier(n_estimators=3, random_state=42)
lgbm.fit(X_train, y_train)
8. 성능평가 그래프
#Light GBM 모델평가
#y값을 예측하여 confusion matrix를 구하고 heatmap 그래프로 시각화하세요.
#그리고 Scikit-learn의 classification_report를 활용하여 성능을 출력하세요.
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
y_pred = lgbm.predict(X_valid)
cm = confusion_matrix(y_valid, y_pred)
sns.heatmap(cm, annot=True)
print(classification_report(y_valid, y_pred, zero_division=1))
9. 딥러닝 모델링
import tensorflow as tf
from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense, Activation, Dropout, BatchNormalization
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras.utils import to_categorical
tf.random.set_seed(1)
#Tensoflow framework를 사용
#히든레이어(hidden layer) 2개이상으로 모델을 구성하세요.
#dropout 비율 0.2로 Dropout 레이어 1개를 추가해 주세요.
#하이퍼파라미터 epochs: 30, batch_size: 16으로 설정해주세요.
#각 에포크마다 loss와 metrics 평가하기 위한 데이터로 X_valid, y_valid 사용하세요.
#학습정보는 history 변수에 저장해주세요
model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
es = EarlyStopping(monitor='val_loss', patience=5)
checkpoint_path = 'best_model.keras'
mc = ModelCheckpoint(checkpoint_path, monitor='val_loss', verbose=1, save_best_only=True)
history = model.fit(X_train, y_train, epochs=30, batch_size=16,
validation_data = (X_valid, y_valid),
callbacks=[es, mc]
)
10. 딥러닝 성능평가
#Matplotlib 라이브러리 활용
#1개의 그래프에 학습 accuracy와 검증 accuracy 2가지를 모두 표시하세요.
#위 2가지 각각의 범례를 'acc', 'val_acc'로 표시하세요.
#그래프의 타이틀은 'Accuracy'로 표시하세요.
#X축에는 'Epochs'라고 표시하고 Y축에는 'Acc'라고 표시하세요.
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Acc')
plt.legend(['acc', 'val_acc'])
plt.show()
하하 끝~~
