작성
·
48
·
수정됨
0
#1. 문제파악
# 분류모델 / ROC-AUC, 정확도(Accuracy), F1, 정밀도(Precision), 재현율(Recall)
#TARGET : Attrition_Flag
# CSV("CLIENTNUM,Attrition_Flag) , 수험번호.CSV
#2. 데이터불러오기
import pandas as pd
train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ceredit%20card/train.csv")
test = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ceredit%20card/test.csv")
# train = pd.read_csv("train.csv")
# test = pd.read_csv("test.csv")
#없을 경우 -> 원핫인코딩 / 있으면 레이블인코딩
#3. EDA
#print(train.shape, test.shape)
#print(train.info(), test.info())
#print(train.isnull().sum(), test.isnull().sum())
#print("test에만 있는 컬럼:", test_cols - train_cols)
#train_cols = set(train.columns)
#test_cols = set(test.columns)
#4. 데이터 전처리
#공통
print(train.shape, test.shape)
target = train.pop('Attrition_Flag')
train =train.drop('CLIENTNUM', axis=1)
id = test.pop('CLIENTNUM')
print(train.shape, test.shape)
#레이블 인코딩
cols = train.select_dtypes(include = 'object').columns
from sklearn.preprocessing import LabelEncoder
for col in cols :
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col]= le.transform(test[col])
#5. 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=2)
#6. 모델 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=2)
rf.fit(X_tr,y_tr)
pred = rf.predict(X_val)
pred1 = rf.predict_proba(X_val)
from sklearn.metrics import roc_auc_score, f1_score, recall_score, accuracy_score, precision_score
roc = roc_auc_score(y_val, pred1[:,1])
f1 = f1_score(y_val, pred)
recall = recall_score(y_val, pred)
acc = accuracy_score(y_val, pred)
pre = precision_score(y_val, pred)
#7 평가
pred_test = rf.predict(test)
pred1 = rf.predict_proba(test)
#print(pred1)
submit = pd.DataFrame({'CLIENTNUM' : id, 'Attrition_Flag' : pred1[:,1]})
submit.to_csv("0000.csv", index = False)
pd.read_csv("0000.csv")
안녕하세요~
이번엔 레이블인코딩으로 데이터전처리해서 풀어봤습니다 혹시 피드백해주실 부분이 있으실까요~?
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. 이지웡님.
레이블 인코딩을 사용하여 모델을 학습하는 방향으로 작업형 2 모의 문제의 코드 구현을 해보셨군요. 전반적으로 매우 잘 구성되어 있습니다. 피드백 드릴 몇 가지 포인트와 추가적으로 고려해볼 사항들을 안내해드리겠습니다.
레이블 인코딩 대신 원-핫 인코딩
pd.get_dummies(train)
및 pd.get_dummies(test)
라인으로 교체하여 원-핫 인코딩을 사용해 보세요.데이터프레임 컬럼 일치
train
과 test
데이터프레임이 동일한 컬럼을 가지고 있는지 확인하여야 합니다. pd.get_dummies
로 인코딩 후, 컬럼 일치 여부를 재확인하고 필요하다면, 누락된 컬럼을 추가하여 0
으로 채워줄 수 있습니다.train
에서만 존재하는 컬럼들은 test
에 추가해야 할 수 있습니다.모델 평가 지표의 선택
average='binary'
정정: f1_score
, precision_score
같은 평가 지표에서 average
에 대한 기본값은 이진 분류의 경우로 맞으므로, 따로 설정할 필요는 없습니다.결과 제출 파일
submit.to_csv("result.csv", index=False)
와 같이 제출명에 주의하세요.랜덤 시드 값 설정
random_state
를 설정하는 것은 좋은 습관입니다.제가 기존에 제공된 작업형 2 모의 문제에 대한 해결 사례를 포함하는 유사 예제 링크를 제공해드리겠습니다:
- 작업형2 예시 문제 해결 방법
위 링크에서 다양한 문제 해결 방법을 탐색하며 학습할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.