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

박준영님의 프로필 이미지
박준영

작성한 질문수

빅데이터 분석기사 시험 실기(Python)

질문입니다 RandomForestClassifier

작성

·

76

0

RandomForestClassifier만 적용하여 앙상블 학습하였을때

 

ROC_AUC_SCORE가 1.0이 나오는데,, 연습문제 동영상과 같이 0.84.... 가 나오지 않고 1.0이 나오는 이유가 뭘까요 혹시 과적합이라면 오답이라고 할 수 있을까요?

 

전체 소스 공유합니다.

import seaborn as sns
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import RandomForestClassifier

df = sns.load_dataset('titanic')

# 결측치 제거
df['age'] = df['age'].fillna(df.age.mean())
df['deck'] = df.deck.fillna(method='bfill')
df['deck'] = df.deck.fillna(method='ffill')
df['embarked'] = df.embarked.fillna('S')
df['embark_town'] = df.embark_town.fillna('Southampton')

df.isna().sum()

from sklearn.preprocessing import LabelEncoder
obj = ['sex', 'embarked', 'class', 'who', 'adult_male', 'deck', 'embark_town', 'alone']

encoder = LabelEncoder()

for i in obj:
  df[i] = encoder.fit_transform(df[i])

category = ['pclass', 'sex', 'class', 'who', 'adult_male', 'alone']

for i in category:
  df[i] = df[i].astype('category')

df = pd.get_dummies(df)

scaler = MinMaxScaler()
lst = ['age', 'fare']
scaler.fit(df[lst])
df[lst] = scaler.fit_transform(df[lst])

y = df['survived']

X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.3, stratify=y, random_state=23)

ml = RandomForestClassifier()

ml.fit(X_train, y_train)
pred = pd.DataFrame(ml.predict_proba(X_test))

from sklearn.metrics import accuracy_score, roc_auc_score

print(roc_auc_score(y_test, pred.iloc[:, 1]))

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 대한 답변입니다. RandomForestClassifier를 사용하여 앙상블 학습을 했을 때 ROC_AUC_SCORE가 1.0이 나오는 것은 매우 높은 성능을 의미합니다. 하지만, 이 경우 모델이 훈련 데이터에 과적합되었을 가능성을 고려해볼 수 있습니다. 과적합은 모델이 훈련 데이터에 너무 잘 맞게 학습되어 실제 상황이나 새로운 데이터에는 잘 일반화되지 않는 상태를 말합니다.

ROC_AUC_SCORE가 1.0이라고 바로 오답이라고 할 수는 없습니다. 단, 실제 환경에서는 이러한 완벽한 성능을 기대하기 어렵기 때문에 모델의 과적합 여부를 추가적으로 분석해 볼 필요가 있습니다. 예를 들어, 다른 검증 방법을 사용해 보거나, 교차 검증을 진행하여 모델의 일반화 성능을 평가해 볼 수 있습니다.

과적합을 줄이기 위한 몇 가지 방법은 다음과 같습니다.
- 데이터의 양을 늘리기
- 모델의 복잡도를 줄이기
- 정규화 기법 사용하기
- 피처의 수를 줄이기
- 앙상블 학습의 파라미터 조정하기(예: max_depth, min_samples_split 등)

프로젝트의 목적과 데이터에 맞는 최적의 모델 성능을 찾기 위해 여러 실험을 해보시길 권장합니다.

박준영님의 프로필 이미지
박준영

작성한 질문수

질문하기