인프런 커뮤니티 질문&답변
라벨인코딩을 했더니 F1 Score가 1.0이 나옵니다..
작성
·
34
0
실제 시험에서 너무 정확한 점수(높은)가 나오면 과적합을 의심해야 할까요?
import pandas as pd # 다중분류 문제 train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p2/drug_train.csv") test = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p2/drug_test.csv") target = train.pop('Drug') # train, test 둘다 결측치 없고, 종류수 같음 cols = train.select_dtypes(include='object').columns # baseline # train = train.drop(cols, axis=1) # test = test.drop(cols, axis=1) # one-hot # train = pd.get_dummies(train, columns = cols) # test = pd.get_dummies(test, columns = cols) # Label from sklearn.preprocessing import LabelEncoder for col in cols: le = LabelEncoder() train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col]) # 학습 데이터 분리 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=0 ) # 모델 학습 from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(random_state=0) model.fit(X_tr, y_tr) pred = model.predict(X_val) # 모델 성능평가 from sklearn.metrics import f1_score score = f1_score(y_val, pred, average='macro') print("F1 Score: ", score) # baseline F1 Score: 0.5535714285714286 # one-hot F1 Score: 0.8809523809523809 # Label F1 Score: 1.0 # 모델 예측 pred = model.predict(test) pd.DataFrame({ 'pred': pred }).to_csv('result.csv', index=False) pd.read_csv('result.csv')
답변 2
0
데이터가 쉬울 경우 이럴 수 있습니다.
코드에 문제가 없다면 제출하면 됩니다.
의심이 간다면 편법으로 아래와 같이 검증 사이즈를 수정해서 확인해볼 수 있습니다.
스코어가 내려간다면 코드에는 문제가 없습니다.
test_size=0.2 -> 수정해보기
단, 주의할 점!! 확인용입니다.
만약 0.6으로 해서 내려갔다고 그걸 그대로 제출하면 모델이 언더(과소적합)피팅 됩니다.
검증(test_size) 크기는 0.2 이하로 반드시 수정해 주세요
참고: 정식으로 확인하는 방법은 크로스 밸리데이션이라는 것이 있어요!
0
안녕하세요, 인프런 AI 인턴입니다. LJM님.
질문해주신 내용을 바탕으로, 모델의 과적합에 관한 문제와 해결 방법을 요약해드리겠습니다.
과적합을 의심해야 하는 경우
정확도/성능 지표가 지나치게 높은 경우: 특히 F1 Score와 같이 양호한 성능 지표가 1.0에 근접하게 나오면, 이는 과적합(overfitting)을 의심해볼 징후가 됩니다. 일반적으로 분리 없이 테스트 셋에 대한 성능을 평가하는 것이 아닌, 검증 셋(validation set)에서의 결과이므로 더욱 주의해야 합니다.
데이터 샘플의 과도한 연관성: 학습 데이터와 검증 데이터 사이에 고유한 정보를 공유하고 있거나, 학습 데이터에 테스트 레이블이 포함된 경우일 수 있습니다.
실제로, 과적합(overfitting)은 모델이 훈련 데이터에 너무 집중하여, 일반화 성능이 저하되는 상황을 말합니다.
해결 방법
데이터 처리 확인:
LabelEncoder나One-hot encoding시 오히려 클래스의 고유한 레이블이 과적합을 유발할 수 있습니다.LabelEncoder는 데이터에 값의 순서를 부여해 의도치 않은 영향을 줄 수 있으니 실제로 순서가 의미 없는 데이터를 다룰 경우One-hot encoding을 권장드립니다.
모델 복잡도 감소: RandomForest와 같은 앙상블 기법은 과적합에 비교적 강하지만, 여전히 학습 데이터에 과도하게 최적화되지 않도록 하이퍼파라미터 (max_depth, min_samples_split 등)를 조정하는 것이 유용할 수 있습니다.
데이터셋 재검토: 학습 및 검증 데이터셋 분리 시에는 문제가 없는지 꼼꼼히 체크해야 합니다. 데이터 분리가 독립적이고 공정한지 다시 한번 확인해보세요.
관련된 토픽이 있는 곳:
- 작업형2 모의문제1 오류 해결: 이 관련 게시물에서 유사한 과적합 문제와 해결 방안을 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





