끄적끄적
2025.07.01 머신러닝 세션 2 본문
| 튜터 | 임정 튜터님 |
| 학습목표 | 1. 분류 모델링을 알아보는 것을 목적으로 합니다. 2. Decision Tree과 Random Forest 모델을 익혀봅니다. 3. 평가지표 Accuracy, F1-score에 대해서 알아봅니다. |
1️⃣ 의사결정나무와 랜덤포레스트
숫자를 맞추는 것은 어렵습니다. 하지만 up-down 게임처럼 범주가 2개라면 맞추기 더 쉬워집니다. 회귀가 숫자를 맞추는 예측 모델링이라면 분류는 속한 카테고리를 맞주는 방법입니다. 예를 들면, 타이타닉과 같은 유명한 데이터가 있습니다. 승객들의 정보를 가지고 생존에 대한 유무를 맞추는 고전적인 데이터입니다.
📌 의사결정나무

의사결정나무는 트리 구조로 전체 자료를 몇개의 소집단으로 분류하거나 예측을 수행하는 분석 방법이다.
- 장점
- 쉽고 해석하기 용이
- 다중분류와 회귀에 모두 적용이 가능
- 이상치에 견고하며 데이터 스케일링이 불필요(데이터의 상대적인 순서를 고려해서)
데이터 *스케일링: 데이터를 0,1 사이와 같이 숫자의 범위를 제한하여 단위 차를 극복하는 방법
- 단점
- 나무가 성장을 너무 많이하면 과대 적합의 오류에 빠질 수 있다.
- 훈련 데이터에 민감하게 반응하여 작은 변화가 노이즈에도 나무의 구조가 크게 달라짐(불안정성)
- Python 라이브러리
sklearn.tree.DecisionTreeClassifiersklearn.tree.DecisionTreeRegressor
그러나, 의사결정나무는 과적합과 불안정하다는 문제가 있다.
이를 해결하기 위해 나온 방법이 랜덤포레스트이다.
📌 랜덤포레스트

랜덤포레스트는 쉽게 말하면 나무를 여러개 만들어 숲을 만드는 방법이다.
랜덤포레스트는 의사결정나무에 배깅이라는 앙상블 학습을 적용한 모델이다.
- 앙상블 학습: 여러 개의 모델을 만들어 결과를 합치는 것
- 배깅: Bootstrap Aggregation의 약자. 샘플을 여러 번 뽑아(Bootstrap) 각 모델을 학습시켜 결과물을 집계(Aggregration)하는 방법
랜덤포레스트는 여러 개의 데이터 샘플에서 각자 의사결정트리를 만들어서 다수결 법칙에 따라 결론을 낸다.
이로써 의사결정모델이 훈련 데이터에 민감한 점을 극복했다.
- 장점
- Bagging 과정을 통해 과적합을 피할 수 있다.
- 이상치에 견고하며 데이터 스케일링이 불필요
- 변수 중요도를 추출하여 모델 해석에 중요한 특징을 파악 할 수 있다.
- 단점
- 컴퓨터 리소스 비용이 크다.
- 앙상블 적용으로 해석이 어렵다.
- Python 패키지
sklearn.ensemble.RandomForestClassifersklearn.ensemble.RandomForestRegressor
대부분의 정형데이터 모델링은 랜덤포레스트를 돌려보고 시작한다. 대부분의 빅데이터 관련 실기시험에서 랜덤포레스트만 적용해도 준수한 결과를 얻을 수 있다.
2️⃣ 분류 평가 지표
분류 모델이 수립되면 해당 모델이 좋은지 평가하는 평가 지표가 필요하다.
📌 정확도와 F1 - Score
분류 모델은 맞춘 정답/ 전체 개수로 정확도를 구할 수 있다.
그러나, 정확도가 높다고 좋은 모델이라고 확신할 수는 없다.
ex) 암 예측 모델을 만들었을 때, 모든 환자가 무조건 음성이라고 판정해보자.
-> 100명의 환자 중 95명이 음성, 5명이 양성이라면, 95%의 정확도를 기록하지만, 실제 암에 걸린 환자는 한 명도 맞추지 못 했다.
이러한 결과를 거르기 위해 다른 지표가 필요하다.
혼돈 행렬

- 실제 값과 예측 값에 대한 모든 경우의 수를 표현하기 위한 2x2 행렬이다.
- 표기법
- 실제와 예측이 같으면 True, 다르면 False
- 예측이 양성이면 Positive, 음성이면 Negative
- 해석
- TP: 실제로 양성(암 환자)이면서 양성(암 환자) 올바르게 분류된 수
- FP: 실제로 음성(정상인)이지만 양성(암 환자)로 잘못 분류된 수
- FN: 실제로 양성(암 환자)이지만 음성(정상인)로 잘못 분류된 수
- TN: 실제로 음성(정상인)이면서 음성(정상인)로 올바르게 분류된 수
- 지표
- 정밀도(Precision): 모델이 양성 1로 예측한 결과 중 실제 양성의 비율(모델의 관점)
\(
정밀도(precision) = \frac{TP}{TP+FP}
\) - 재현율(Recall): 실제 값이 양성인 데이터 중 모델이 양성으로 예측한 비율(데이터의 관점)
\(
재현율(Recall) = \frac{TP}{TP+FN}
\) - f1-Score: 정밀도와 재현율의 조화 평균
\(
f1-score = 2*\frac{정밀도_재현율}{정밀도+재현율}
\) - 정확도(Accuracy)
\(
정확도(Accuracy) = \frac{TP+TN}{TP+TN+FP+FN}
\)
- 정밀도(Precision): 모델이 양성 1로 예측한 결과 중 실제 양성의 비율(모델의 관점)
- 실제 적용
- TP: 실제로 양성(암 환자)이면서 양성(암 환자) 올바르게 분류된 수 → 0명
- FP: 실제로 음성(정상인)이지만 양성(암 환자)로 잘못 분류된 수 → 0명
- FN: 실제로 양성(암 환자)이지만 음성(정상인)이라고 분류된 수 → 5명
- TN: 실제로 음성(정상인)이면서 음성(정상인)이라고 분류된 수 → 95명
- 정밀도는 정의되지 않음(divsion by zero), 재현율은 0
- 결과적으로 f1-score는 0
위처럼 정확도가 제 기능을 못하는 때는 분류에서 특히 Y값이 unbalance하지 못할 때 일어난다. 따라서 이를 위해서 Y 범주의 비율을 맞춰주거나 평가 지표를 f1 score을 사용함으로써 이를 보완한다.
3️⃣ 번외
📌 범주형 데이터 전처리 - 인코딩(Encoding)
- 레이블 인코딩(Label Encoding)
- 정의: 문자열 범주형 값을 고유한 숫자로 할당
- 1등급 → 0
- 2등급 → 1
- 3등급 → 2
- 특징
- 장점: 모델이 처리하기 쉬운 수치형으로 데이터 변환
- 단점: 실제로는 그렇지 않은데, 순서 간 크기에 의미가 부여되어 모델이 잘못 해석 할 수 있음
- 사용 함수
sklearn.preprocessing.LabelEncoder- 메소드
fit: 데이터 학습transform: 정수형 데이터로 변환fit_transform: fit과 transform을 연결하여 한번에 실행inverse_transform: 인코딩된 데이터를 원래 문자열로 변환
- 속성
classes_: 인코더가 학습한 클래스(범주)
- 정의: 문자열 범주형 값을 고유한 숫자로 할당
- 원-핫 인코딩(One-Hot Encoding)
- 정의: 각 범주를 이진 형식으로 변환하는 기법
- 빨강 → [1,0,0]
- 파랑 → [0,1,0]
- 초록 → [0,0,1]
- 특징
- 장점: 각 범주가 독립적으로 표현되어, 순서가 중요도를 잘못 학습하는 것을 방지, 명목형 데이터에 권장
- 단점: 범주 개수가 많을 경우 차원이 크게 증가(차원의 저주) , 모델의 복잡도를 증가, 과적합 유발
- 사용 함수
pd.get_dummiessklearn.preprocessing.OneHotEncoder- 메소드(LabelEncoder와 동일)
categories_: 인코더가 학습한 클래스(범주)get_feature_names_out(): 학습한 클래스 이름(리스트)
- 정의: 각 범주를 이진 형식으로 변환하는 기법
# CSR 데이터 데이터프레임으로 만들기
csr_df = pd.DataFrame(csr_data.toarray(), columns = oe.get_feature_names_out())
# 기존 데이터프레임에 붙이기(옆으로)
pd.DataFrame([titaninc_df,csr_df], axis = 1)
4️⃣ 실습
2025.07.02 - [[스파르타]내일배움캠프 데이터 분석 트랙] - 36일차 - 머신러닝 세션 1
36일차 - 머신러닝 세션 1
튜터임정 튜터님1️⃣ 선형 회귀의 사례갓 1차 방적식을 배운 학생이라 가정하고, 선형회귀를 적용해보자. 📌 몸무게와 키 상관관계방정식을 배운 머신이는 몸무게와 키의 데이터를 획득했다.
kminx.tistory.com
'[스파르타]내일배움캠프 데이터 분석 트랙 > Session' 카테고리의 다른 글
| 2025.07.02 데이터 크롤링 세션 1 (2) | 2025.07.09 |
|---|---|
| 2025.07.02 Pandas 실무 기초 세션 1 (1) | 2025.07.09 |
| 2025.07.01 통계 세션 4 (3) | 2025.07.09 |
| 2025.06.30 머신러닝 세션 1 (0) | 2025.07.02 |
| 2025.06.30 통계 세션 3 (0) | 2025.07.01 |