AI/이론

134. [Python] [Machine Learning] : 의사결정나무(Decision Tree)

천재단미 2025. 1. 31. 14:22
728x90
반응형

반응형

 

 

 

 

🎯 1. Decision Tree란?

  • *Decision Tree(의사결정 나무)**는 데이터의 특성을 기반으로 분류(Classification) 또는 회귀(Regression) 문제를 해결하는 지도 학습(Supervised Learning) 알고리즘입니다.
  • 데이터의 속성을 기준으로 질문을 던지고, 답변에 따라 데이터를 분류하는 방식으로 작동합니다.
  • 사람이 의사 결정을 내리는 방식과 유사하기 때문에 직관적이고 이해하기 쉬운 모델입니다.


 

🎯 2. Decision Tree의 구조

  • Root Node (루트 노드) : 트리의 시작점 (전체 데이터)
  • Internal Node (내부 노드) : 데이터를 분기하는 기준
  • Leaf Node (리프 노드) : 최종 분류된 결과

✅ 예제 (트리 구조 예시)

아래 예시는 날씨 정보를 기반으로 운동을 할지 말지를 결정하는 Decision Tree입니다.

날씨?
   ├── 맑음 → 운동 O
   ├── 흐림 → 운동 X
   ├── 비  → 기온?
       ├── 따뜻함 → 운동 O
       ├── 추움 → 운동 X

 

📌 이처럼 Decision Tree는 데이터를 나누면서 점점 구체적인 결론을 도출합니다.

 

 


 

🎯 3. Decision Tree의 작동 원리

  1. 데이터를 분석하여 가장 좋은 질문(특성)을 찾음
    • Entropy(엔트로피) 또는 **Gini Index(지니 계수)**를 사용하여 데이터를 가장 잘 구분하는 기준을 찾음
  2. 데이터를 분할(Split)하여 하위 노드를 생성
  3. 최적의 분류 기준을 반복적으로 적용
  4. 리프 노드(더 이상 분할할 수 없는 상태)에서 최종 분류 완료

📌 즉, Decision Tree는 가장 효과적인 분류 기준을 찾아 점진적으로 데이터를 분리하는 방식으로 학습합니다.

 

 


 

🎯 4. Decision Tree 모델 생성하기 (Python 실습)

✅ 데이터 불러오기 및 전처리

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics

# 샘플 데이터 생성
df = pd.read_csv('../data/Social_Network_Ads.csv')
df


# 결측치확인 
df.isna().sum()


# 데이터 분할
X = df.loc[ : ,'Age' : 'EstimatedSalary']
y = df['Purchased']


#형태 변환
scaler_X = StandardScaler()
X = scaler_X.fit_transform( X )



X_train, X_test, y_train, y_test = train_test_split(X, y ,test_size = 0.2, random_state = 27)


 

✅ Decision Tree 모델 학습 및 예측

# Decision Tree 모델 생성
classifier = DecisionTreeClassifier(random_state = 27)
classifier.fit(X_train, y_train)

# 예측
y_pred = classifier.predict(X_test)

# 정확도 평가
confusion_matrix(y_test,y_pred)


accuracy_score(y_test,y_pred)

 


 

✅ Decision Tree 시각화


import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

plt.figure(figsize=(10, 6))
plot_tree(classifier, feature_names=['Age', 'EstimatedSalary'], class_names=['PurchasedX', 'PurchasedO'], filled=True)
plt.show()

 

 

 

📌 위 코드를 실행하면, Decision Tree 구조가 시각적으로 표현됩니다!

 

 

 


 

🎯 5. Decision Tree의 장점과 단점

🔹 장점

이해하기 쉽고 직관적

데이터 전처리(Scaling, 정규화)가 거의 필요 없음

데이터의 패턴을 설명하는 데 용이 (화이트 박스 모델)

중요한 변수를 자동으로 선택 가능

 

🔹 단점

과적합(Overfitting)이 발생하기 쉬움

데이터의 작은 변화에도 모델이 민감하게 반응

회전에 민감 (데이터가 기울어진 형태일 경우 성능 저하)

📌 랜덤 포레스트(Random Forest)는 이러한 단점을 보완하기 위해 개발됨!

 

 

(아래에서 Random Forest와의 차이를 살펴보겠습니다.)


 

🎯 6. Decision Tree vs. Random Forest

구 분 Decision Tree  Random Forest
모델 구조 단일 트리 다수의 트리(앙상블)
복잡성 단순 복잡하지만 높은 성능
과적합 과적합 위험 높음 과적합 방지 가능
데이터 변화 민감 비교적 안정적
예측 방식 하나의 트리 결과 여러 트리의 다수결 투표

 

 

📌 Random Forest는 여러 개의 Decision Tree를 조합하여 더 강력하고 안정적인 성능을 제공합니다!

 


 

🎯 7. Decision Tree 실전 응용 사례

  • 스팸 메일 분류 (이메일이 스팸인지 아닌지 판별)
  • 대출 승인 여부 예측 (고객의 신용 정보를 기반으로 대출 승인 여부 결정)
  • 질병 진단 (환자의 증상 데이터를 분석하여 질병 예측)
  • 온라인 쇼핑 추천 시스템 (사용자의 구매 이력을 기반으로 상품 추천)

728x90
반응형
home top bottom
}