logo

배깅

배깅

  • 배깅(bagging): bootstrap aggregation의 약자
  • 원래 데이터에서 복원추출해 같은 크기의 학습 데이터 여러 개 생성
  • 복원추출: 뽑은 사례를 다시 넣고 추출하므로 같은 사례가 여러 번 포함 가능
  • 각 학습 데이터로 여러 모델을 독립적으로 학습
  • 각 모델은 조금씩 다른 데이터를 보고 학습
  • 최종 예측은 여러 모델의 평균 또는 다수결
  • 대표 모델: 랜덤 포레스트(random forest)

배깅에서 여러 부분집합과 모델을 결합하는 구조

실습 준비

  • 앙상블 문서에서 데이터를 불러오고 분할한 노트북에서 이어서 실행
  • 앞에서 준비한 X, X_train, X_test, y_train, y_test를 그대로 사용

실습 프롬프트

🤖 AI 프롬프트
앙상블 문서에서 준비한 데이터센터 장애 예측 데이터로 단일 결정트리와 랜덤 포레스트를 비교하는 코드를 작성해줘.
X, X_train, X_test, y_train, y_test는 앞에서 준비한 변수를 그대로 사용해.
타깃 incident_next_hour에서 0은 정상, 1은 1시간 이내 장애 발생이야.
단일 결정트리는 max_depth=4, random_state=42로 설정해줘.
랜덤 포레스트는 n_estimators=200, random_state=42로 설정해줘.
학습 데이터로 두 모델을 학습하고 테스트 정확도를 비교해줘.
랜덤 포레스트의 변수 중요도를 내림차순 표와 막대그래프로 보여줘.
필요한 라이브러리를 불러오고 각 단계에 초보자를 위한 한글 주석을 달아줘.

비교 기준: 단일 결정트리

  • 깊이 4인 결정트리 하나를 학습해 랜덤 포레스트와 비교
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier

tree_clf = DecisionTreeClassifier(max_depth=4, random_state=42)
tree_clf.fit(X_train, y_train)
y_pred_tree = tree_clf.predict(X_test)
accuracy_score(y_test, y_pred_tree)
실행 결과
0.715
  • 단일 결정트리의 테스트 정확도: 71.5%

랜덤 포레스트 분류 실습

  • 복원추출한 데이터로 여러 결정트리를 학습해 예측 결합
  • 각 분할에서 무작위로 선택한 특성 후보를 사용해 나무 사이의 다양성 확보
  • 단일 결정트리보다 과대적합에 강한 편
from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(
    n_estimators=200,  # 결합할 결정트리 수
    random_state=42,
)
rf_clf.fit(X_train, y_train)

y_pred_rf = rf_clf.predict(X_test)
accuracy_score(y_test, y_pred_rf)
실행 결과
0.73
  • 랜덤 포레스트의 테스트 정확도: 73.0%. 이 분할에서는 단일 결정트리보다 1.5%p 높은 결과

랜덤 포레스트 변수 중요도

  • 변수 중요도는 모델이 어떤 변수를 많이 활용했는지 확인하는 값
  • 높은 중요도는 나무의 분할에서 불순도 감소에 많이 기여했다는 의미
  • 인과관계를 바로 의미하지는 않음
import seaborn as sns
import matplotlib.pyplot as plt

importance = pd.DataFrame({
    "feature": X.columns,
    "importance": rf_clf.feature_importances_,
}).sort_values("importance", ascending=False).head(10)

importance
실행 결과
                 feature  importance
3   request_rate_per_sec    0.164793
0           cpu_util_pct    0.137354
4         p95_latency_ms    0.131172
2           disk_io_mb_s    0.124332
1        memory_util_pct    0.108523
5        packet_loss_pct    0.100653
8            room_temp_c    0.096613
7            uptime_days    0.089891
6  recent_deployments_7d    0.046669
  • 이 모델에서 중요도가 가장 높은 변수: request_rate_per_sec
sns.barplot(data=importance, x="importance", y="feature")
plt.show()

퀴즈

문제 1 / 5맞음: 0힌트: 0틀림: 0채점중: 0남음: 5

배깅(bagging)에 대한 설명으로 가장 적절한 것은?

  • ○여러 데이터 부분집합으로 모델들을 학습하고 예측을 평균이나 다수결로 결합한다
  • ○앞 모델이 틀린 관측치의 가중치를 높여 다음 모델을 순서대로 학습한다
  • ○기본 모델의 예측을 새로운 입력으로 삼아 메타 모델을 학습한다
  • ○하나의 결정트리를 이전보다 더 깊게 확장한다

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
앙상블