강의

멘토링

로드맵

Inflearn brand logo image

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

김지수님의 프로필 이미지
김지수

작성한 질문수

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

작업형2 모의문제3

과적합질문

해결된 질문

작성

·

41

0

import pandas as pd

train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/heart/2files/train.csv")
test =  pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/heart/2files/test.csv")
# train = pd.read_csv("train.csv")
# test =  pd.read_csv("test.csv")

train.info()
train.describe()
test.info()
train.isnull().sum()
y_train = train.pop('output') 
#원-핫 인코딩
train_oh = pd.get_dummies(train)
test_oh = pd.get_dummies(test)

data = pd.concat([train,test],axis=0)
data_oh = pd.get_dummies(data)

train_oh=data_oh.iloc[:len(train)]
test_oh=data_oh.iloc[len(train):]

#데이터 분리

from sklearn.model_selection import train_test_split

X_tr,X_val,y_tr,y_val=train_test_split(train_oh,y_train,test_size=0.15,random_state=0)

print(X_tr.shape,X_val.shape,y_tr.shape,y_val.shape)

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score, f1_score, accuracy_score

rf = RandomForestClassifier(random_state=2022, max_depth=5, n_estimators=400)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
pred_proba = rf.predict_proba(X_val)

print(roc_auc_score(y_val, pred_proba[:,1]))
print(f1_score(y_val, pred))
print(accuracy_score(y_val, pred))
image.png

이 코드를 여기까지 실행했을때 위의 사진처럼 과적합이 발생한거 같은데 무엇을 조정하면 좋을지잘 모르겠습니다. 그리고 id컬럼은 삭제를 안하고 진행을 해왔는데요! 이 영향때문에 과적합이 나오는 것인지 궁금합니다

답변 3

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

이 문제는 데이터가 단순해서 생긴 결과일 가능성이 큽니다 :)
지수님이 잘못한 부분은 전혀 없습니다!

ID 컬럼이 과적합에 크게 영향을 주지는 않아요.
랜덤포레스트는 해당 변수의 중요도를 낮게 평가하는 경향이 있습니다.

0

김지수님의 프로필 이미지
김지수
질문자

from sklearn.ensemble import RandomForestClassifier

rf=RandomForestClassifier(random_state=0)
rf.fit(X_tr,y_tr)

pred=rf.predict_proba(test_oh)[:,1]
print(pred)

submit = pd.DataFrame({
    'id':test['id'],
    'output':pred
})

submit.to_csv("20250614.csv",index=False)
print(pd.read_csv("20250614.csv"))

0

안녕하세요, 인프런 AI 인턴입니다. 김지수님.

과적합 문제와 관련하여 질문을 주셨네요. 과적합은 주로 모델이 훈련 데이터에 너무 잘 맞추어서 검증 데이터에 대한 예측 성능이 떨어지는 현상입니다. 이를 방지하기 위해 몇 가지 조치를 고려할 수 있습니다.

  1. 특성 선택 및 중요도 분석:

    • id와 같은 비관련 변수를 포함하고 있다면, 이것이 과적합을 유발할 가능성이 있습니다. 일반적으로 id는 예측과 무관한 변수이므로 모델에 영향을 주지 않게 제거하는 것이 좋습니다.
  2. 모델 복잡도 감소:

    • RandomForest 모델의 max_depth를 줄여 모델의 복잡도를 낮추거나, n_estimators 값을 줄여 모델의 복잡성을 줄일 수 있습니다. 현재 max_depth=5n_estimators=400을 사용하고 있는데, 이미 상당히 낮은 깊이라서 다른 하이퍼파라미터를 조정할 수 있습니다.
  3. 더 많은 데이터 사용:

    • 가능하다면 더 많은 데이터를 수집하여 모델이 좀 더 일반화된 패턴을 학습할 수 있게 합니다.
  4. Cross-validation 사용:

    • train_test_split 대신 교차 검증(cross_val_score)을 사용하여 모델의 성능을 검증할 수 있습니다.
  5. 정규화 및 데이터 스케일링:

    • 표준화 또는 정규화를 통해 특성 범위를 조정해 보세요. 이는 과적합을 줄이는 데 도움이 될 수 있습니다.

관련된 문제와 해결 방법을 다루고 있는 유사한 질문 링크를 아래에 첨부드립니다:

위의 방법들을 통해 모델의 과적합을 줄여보시기 바랍니다. 데이터 전처리와 모델 구축에서 중앙 특성의 사용을 줄임으로써 모델 일반화를 향상시킬 수 있습니다.

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

김지수님의 프로필 이미지
김지수

작성한 질문수

질문하기