강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

이지웡님의 프로필 이미지
이지웡

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

작업형2 모의문제1

작업형_2모의문제1번_피드백

작성

·

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 모의 문제의 코드 구현을 해보셨군요. 전반적으로 매우 잘 구성되어 있습니다. 피드백 드릴 몇 가지 포인트와 추가적으로 고려해볼 사항들을 안내해드리겠습니다.

피드백 및 개선 제안

  1. 레이블 인코딩 대신 원-핫 인코딩

    • 레이블 인코딩은 범주형 변수에 숫자를 부여하므로, 이 숫자가 모델에 무언가 순서가 있다고 오해될 여지가 있습니다. 이진 또는 명목형 데이터를 원-핫 인코딩으로 처리하는 것이 일반적으로 더 안전합니다.
    • 위 코드에서, pd.get_dummies(train)pd.get_dummies(test) 라인으로 교체하여 원-핫 인코딩을 사용해 보세요.
  2. 데이터프레임 컬럼 일치

    • traintest 데이터프레임이 동일한 컬럼을 가지고 있는지 확인하여야 합니다. pd.get_dummies로 인코딩 후, 컬럼 일치 여부를 재확인하고 필요하다면, 누락된 컬럼을 추가하여 0으로 채워줄 수 있습니다.
    • 예를 들어, train에서만 존재하는 컬럼들은 test에 추가해야 할 수 있습니다.
  3. 모델 평가 지표의 선택

    • 특정 시점에서는 모델 성능 확인 시 F1, Accuracy, Precision 등 다양한 지표를 함께 확인할 수 있습니다. 하지만 주어진 문제나 주어진 평가 기준(예: ROC-AUC)에 집중하셔야 합니다.
    • average='binary' 정정: f1_score, precision_score 같은 평가 지표에서 average에 대한 기본값은 이진 분류의 경우로 맞으므로, 따로 설정할 필요는 없습니다.
  4. 결과 제출 파일

    • 제출용 CSV 파일의 이름을 설정할 때, 실제 시험에서는 지정된 이름 형식을 따라야 할 수 있으니 그에 맞게 준비하세요.
    • submit.to_csv("result.csv", index=False)와 같이 제출명에 주의하세요.
  5. 랜덤 시드 값 설정

    • 재현 가능성을 위해 다양한 곳에 random_state를 설정하는 것은 좋은 습관입니다.

제가 기존에 제공된 작업형 2 모의 문제에 대한 해결 사례를 포함하는 유사 예제 링크를 제공해드리겠습니다:
- 작업형2 예시 문제 해결 방법

위 링크에서 다양한 문제 해결 방법을 탐색하며 학습할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이지웡님의 프로필 이미지
이지웡

작성한 질문수

질문하기