머신러닝 분류 모델 : Decision Tree
1. Decision Tree란? 🌲
Decision Tree는 '이것인가, 저것인가?'를 반복해서 결정해 나가며 최종 답을 도출하는 알고리즘입니다. 나무 구조(Tree Structure)처럼 여러 개의 가지가 뻗어나가는 형태로 이루어져 있으며, 이를 통해 복잡한 문제도 단계적으로 해결할 수 있습니다.
📌 주요 개념
- 루트 노드(Root Node): 가장 첫 번째 결정이 이루어지는 노드
- 내부 노드(Internal Node): 중간 과정에서 분기되는 노드
- 단말 노드(Leaf Node): 최종적으로 분류된 결과
2. Decision Tree의 작동 원리 🔍
Decision Tree는 데이터를 분류(Classification)하거나 값을 예측(Regression)하는 데 활용됩니다. 주요 작동 방식은 다음과 같습니다.
- 데이터의 특징을 기준으로 나누기
- 예를 들어, 이메일이 스팸인지 아닌지를 판별할 때, '광고 문구 포함 여부', '발신자 이메일 주소', '링크 개수' 등의 특징을 기준으로 나눌 수 있습니다.
- 정보 이득(Information Gain) 계산하기
- 각 분기에서 데이터를 나눌 때 정보의 순도를 최대한 높이는 방향으로 결정됩니다. 대표적으로 엔트로피(Entropy)와 지니 계수(Gini Index)를 사용합니다.
- 가지 치기(Pruning)로 최적화
- 불필요한 가지를 잘라내어 과적합(Overfitting)을 방지합니다.
3. Decision Tree의 장점과 단점 ⚖️
✅ 장점
- 이해하기 쉬움: 사람이 직관적으로 이해할 수 있는 방식으로 데이터를 분류
- 빠른 계산 속도: 비교적 적은 연산량으로도 결과를 도출 가능
- 전처리 과정이 간단함: 데이터 정규화 등의 복잡한 과정이 필요하지 않음
❌ 단점
- 과적합 위험: 학습 데이터에 너무 맞춰져 일반화가 어려울 수 있음
- 데이터 균형 문제: 일부 데이터가 많거나 적으면 잘못된 판단을 할 가능성이 높음
- 연속형 변수 처리 어려움: 수치형 데이터를 다룰 때 적절한 변환이 필요
4. Decision Tree와 Random Forest의 관계 🌲
Decision Tree는 개별적으로 강력한 모델이지만, 단독으로 사용할 경우 과적합의 위험이 큽니다. 이를 해결하기 위해 Random Forest가 등장하였습니다.
📌 Random Forest란?
- 여러 개의 Decision Tree를 조합하여 예측 성능을 향상시키는 앙상블 학습 방법입니다.
- Random Forest Classification: 여러 개의 Decision Tree를 조합하여 분류 문제 해결
- Random Forest Regression: 여러 개의 Decision Tree를 조합하여 연속적인 값 예측
- 각 Decision Tree는 데이터의 일부를 학습하며, 최종 결과는 여러 개의 트리 예측을 평균내거나 다수결 투표 방식으로 도출합니다.
- 이를 통해 과적합을 방지하고 일반화 성능을 향상시킬 수 있습니다.
✅ Random Forest의 장점
- 과적합 문제를 줄임
- 데이터의 노이즈 영향을 줄여 안정적인 예측 가능
- 다양한 피처를 고려하여 예측 성능을 향상시킴
이러한 특징 덕분에 Random Forest는 Decision Tree의 단점을 보완하는 강력한 모델로 사용됩니다. 🎯
5. Decision Tree 활용 사례 🚀
Decision Tree는 다양한 분야에서 활용됩니다. 대표적인 사례를 살펴볼까요?
- 금융: 대출 승인 여부 판단
- 의료: 질병 진단 시스템
- 마케팅: 고객 타겟팅 및 추천 시스템
- 교통: 사고 위험 분석 및 예측
6. Decision Tree 실습 (Python 코드) 🐍
Python에서는 sklearn.tree 라이브러리를 활용하여 쉽게 Decision Tree를 구현할 수 있습니다.
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# 데이터 로드
df = pd.read_csv('../data/Social_Network_Ads.csv')
#nan 확인
df.isna().sum()
#Xy 나눔
y=df['Purchased']
X=df.loc[ : , 'Age':'EstimatedSalary']
#문자열체크
X.info()
#피쳐스케일링
scaler_X=StandardScaler()
X=scaler_X.fit_transform(X)
#학습용 테스트용 준비
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test=train_test_split(X,y,test_size=0.2, random_state=27)
# 모델 생성
classifier=DecisionTreeClassifier(random_state=27)
classifier.fit(X_train,y_train)
y_pred=classifier.predict(X_test)
# 예측 및 정확도 평가
from sklearn.metrics import confusion_matrix, accuracy_score
confusion_matrix(y_test, y_pred)
accuracy_score(y_test, y_pred)
위 코드를 실행하면 간단한 Decision Tree 모델을 만들고 평가할 수 있습니다! 💻
7. RandomForestClassifier(실습)
from sklearn.ensemble import RandomForestClassifier
classifier2=RandomForestClassifier()
classifier2.fit(X_train,y_train)
y_pred2=classifier2.predict(X_test)
#성능평가
cm=confusion_matrix(y_test,y_pred2)
accuracy_score(y_test, y_pred2)
8.XgboostClassifier(실습)
#scikit-learn과는 다른 라이브러리로 별도의 설치 필요함
pip install xgboost
from xgboost import XGBClassifier
classifier3=XGBClassifier()
classifier3.fit(X_train,y_train)
y_pred3=classifier3.predict(X_test)
#성능평가
confusion_matrix(y_test, y_pred3)
accuracy_score(y_test, y_pred3)
마무리 🎯
이번 글에서는 Decision Tree의 개념과 원리를 알아보았습니다. 또한, Decision Tree의 한계를 보완하는 Random Forest Classification과 Random Forest Regression에 대해서도 간단히 살펴보았습니다. 실제 프로젝트에서 활용하려면 데이터 전처리, 과적합 방지 등의 추가적인 작업이 필요하지만, 기본 원리를 이해하는 것만으로도 데이터 분석의 기초를 다지는 데 큰 도움이 될 것입니다! 🚀
더 궁금한 점이 있다면 댓글로 남겨주세요! 😊