작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
84
0
이진분류 모의고사 제 방식대로 한번 풀어봤는데 이정도 점수면 괜찮은 건가요?
################## 시험 안내 문구 및 코드 ##################
# 출력을 원하실 경우 print() 함수 활용
# 예시) print(df.head())
# getcwd(), chdir() 등 작업 폴더 설정 불필요
# 파일 경로 상 내부 드라이브 경로(C: 등) 접근 불가
# 데이터 파일 읽기 예제
import pandas as pd
X_test = pd.read_csv("../input/hr-data/X_test.csv")
X_train = pd.read_csv("../input/hr-data/X_train.csv")
y_train = pd.read_csv("../input/hr-data/y_train.csv")
# 사용자 코딩
# 답안 제출 참고
# 아래 코드 예측변수와 수험번호를 개인별로 변경하여 활용
# pd.DataFrame({'enrollee_id': X_test.enrollee_id, 'target': pred}).to_csv('003000000.csv', index=False)
X_train.shape, X_test.shape
((19158, 13), (2126, 13))
df = pd.concat([X_train, X_test])
df = pd.get_dummies(df)
df.shape
(21284, 188)
X_train = df.iloc[:len(X_train)]
X_test = df.iloc[len(X_train):]
X_train.shape, X_test.shape
((19158, 188), (2126, 188))
X_train = X_train.drop('enrollee_id', axis=1)
X_test_id = X_test.pop('enrollee_id')
target = y_train.pop('target')
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(X_train, target, test_size=0.2, random_state=2022)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape
((15326, 187), (3832, 187), (15326,), (3832,))
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=2022)
rf.fit(X_tr, y_tr)
pred = rf.predict_proba(X_val)
from sklearn.metrics import roc_auc_score
print(roc_auc_score(y_val, pred[:,1]))
0.7745962769563425
pred = rf.predict_proba(X_test)[:,1]
pd.DataFrame({'enrollee_id': X_test_id, 'target': pred}).to_csv('003000000.csv', index=False)
채점
# 체점(아래 주석 풀로 체점)
import pickle
import numpy as np
from sklearn.metrics import roc_auc_score
with open( "../input/hr-data/answer.pickle", "rb" ) as file:
ans = pickle.load(file)
ans = pd.DataFrame(ans)
print(roc_auc_score(ans['target'], pred))
0.7640350582437277
이 코드에서 조금 더 보완해야할 사항같은 게 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
chandnd37님, 이진분류 모의고사 점수로 0.7640의 ROC-AUC 값을 얻으셨군요! 이 수치는 모델의 분류 성능을 나타내며, 1에 가까울수록 좋은 성능을 의미합니다. 일반적으로 0.7 이상은 양호한 성능으로 보이기 때문에 괜찮은 결과를 얻으신 것으로 보입니다.
모델을 보완하기 위해 다음과 같은 점들을 고려해볼 수 있습니다:
1. 특성 엔지니어링: 현재는 데이터에 대한 추가적인 특성 처리 없이 원핫 인코딩만 실시하셨는데, 도메인 지식을 활용한 새로운 특성을 만들어보거나 불필요한 특성을 제거하는 작업을 시도해 볼 수 있습니다.
2. 모델 하이퍼파라미터 튜닝: 사용하신 RandomForestClassifier의 default 하이퍼파라미터 대신 다양한 하이퍼파라미터를 실험하여 최적화를 진행해보실 수 있습니다.
3. 교차 검증: 모델의 일반화 능력을 평가하기 위해 k-fold 교차 검증을 활용하여 모델의 안정성을 확인할 수 있습니다.
4. 다양한 모델 실험: 랜덤 포레스트 외에 다른 알고리즘(예: XGBoost, LightGBM, 로지스틱 회귀 등)을 사용하여 성능을 비교해보세요.
5. 과적합 방지: 과적합을 해소하기 위해 정규화(L1, L2 규제)를 적용하거나 dropout이 있는 앙상블 모델을 사용할 수 있습니다.
최종 평가 지표인 ROC-AUC 외에 다른 평가 지표(예: F1-score, 정밀도, 재현율)을 고려하는 것도 중요합니다. 이를 통해 분류 성능의 다른 측면을 이해하고, 비즈니스 요구에 맞춰 성능을 조정할 수 있습니다.
추가적인 질문이나 도움이 필요하시면 언제든 문의해주세요!