데이터 분석

[250411] ⭐️ 분석 흐름 정리 ⭐️, 트리기반모델

경 민 2025. 4. 11. 20:57
👩🏻‍💻  Point of Today I LEARNED 
📌 SQL
● 코드카타
● QCC 4회차 복습

📌 Python 
● 분석 흐름 정리
● standard 라이브세션 5회차

● 실무에 쓰는 머신러닝 기초 4강, 5강

 

 

할 말 없을 무

내 자신에게 화 많이 남

문제 풀 때 붕 떠있지 말고 차분해지자.

문제 똒빠로 읽짜 ... ㅈㅔ 발 !


1. SQL 

1-1. 코드카타 제한시간 두고 풀기

1) 코드카타 145번

https://www.hackerrank.com/challenges/more-than-75-marks/problem?isFullScreen=true

select name
from students
where marks > 75
order by right(name,3), id
  • 처음에 substr(name,-1,3) 으로 풀었다가 틀렸다.
    • 이유 : 제대로 하려면 substr(name,-3,3) 으로 해줘야 함
    • right() 은 마지막 글자 n개를 가져와주므로 이거 써주는 게 안전.

 

1-2. QCC 4회차 복습

 

QCC 4회차

1번제출한 쿼리with filtered as ( select region_name from stores group by region_name having count(1) >= 2)select REGION_NAME, SALESfrom (select REGION_NAME, SALES, rank() over(partition by region_name order by sales desc) rnk from stores) awhere rnk

rosenps3.tistory.com


2. Python

2-1. 분석 흐름 및 사고 알고리즘 정리

데이터 분석 프로세스
데이터 수집 ▶ EDA 및 전처리 ▶ 가설설정 ▶ 변수검증 및 관계 분석 ▶ 피처 엔지니어링 ▶ 머신러닝 ▶ 인사이트 도출 및 결론

 

⓪ 문제 정의 ⭐️

  • 이 데이터 분석을 왜 하는가. 어떤 문제를 해결하려고 데이터 분석을 시작하는가.
  • 즉, 데이터 분석의 목적을 가장 먼저 정의하기
    • 예시) 목적 : 고객 이탈률 줄이기 -> 그럼 '어떤 요인'이 고객 이탈률에 영향을 미치는지 알아보자.
  • 성공 기준 설정 
    • 예시) 실제 이탈 고객의 80% 이상을 정확히 예측 (재현율 기준)

① EDA 및 전처리

  • 데이터 프레임 구조 파악 (.info() / .T)  이렇게 생겼군. 이런 컬럼들이 있군.
  • 기초 통계 분석(평균, 분포, 범주별 특성 등) ☞ (.describe()) 평균&중위값 비교해서 이상치 탐지
  • 시각화를 통한 데이터 이해 
    • 정규분포 여부 (히스토) ☞ 정규분포 아닌 거 같은데.. 정규성 검사해보자
    • 이상치 탐지 (박스플롯) ☞ 이상치 확실히 있네. 정규성에 따라 Z-score/ IQR 확인하고 처리 방법 결정하자
    • 변수 간 상관관계 파악 (히트맵/산점도) ☞ 가볍게 확인하는 정도로 보고, 너무 확연하게 상관관계 높으면 미리 제거
  • 결측치/이상치 처리 ☞ 결측치가 대부분인 컬럼이거나 너무 명백하게 이상치인 경우만 제거
  • 가설 설정을 하기 위한 패턴 및 관계 파악 (EDA 인사이트 정리 ⭐️)

가설설정

  • EDA를 통해서 발견한 몇 가지 패턴/관계 중 유의미해보이는 것을 바탕으로 가설 설정
  • 예시) 고객 만족도가 낮으면 이탈률이 높을 것이다.

③ 변수 검증 및 관계 분석

  • 통계 검증
    • 가설을 통계적으로 증명하기 (변수 간의 관계가 '있는지 없는지'와 그 값이 '통계적으로 유의미한지' 확인)
    • 일단 독립성 가정하고 시작
    • 데이터 타입과 데이터 분포의 정규성/등분산성 등을 파악한 후 가장 적합한 검증기법 적용
      • 정규성 검정 : Shapiro-Wilk scipy.stats.shapiro() / QQ-plot statsmodels.graphics.qqplot()
      • 등분산성 검정 : Levene's test levene()
    • 정규성은 중심극한정리에 따라 반드시 충족해야 하는 건 아님
    • z-test, t-test, ANOVA, 카이제곱 등
  • 상관관계 확인
    • 상관도를 정량적으로 측정 (변수 간 얼마나,어떻게 관련있는지 '관계의 크기 및 방향' 확인)
    • 데이터 유형에 따라 다양한 방법이 있음
    • pearson, spearman, Phi, Cramer's V 등

④ Feature Engineering

  • 데이터 전처리의 연장선 (머신러닝 성능을 위한 재정교화)
  • 머신러닝 모델 적용 전 변수 재구성
    1. 스케일링 (정규화/표준화) ☞ 반드시 이상치 처리한 후 스케일링하기 특히, 정규화!
    2. 로그 변환 긴꼬리분포처럼 정규성 없을 경우, X값 커질수록 기울기 작아지는 특성 활용해서 큰 값을 작은 값으로 만들어주자.
    3. 범주형 인코딩 (One-Hot Encoding / Label Encoding) 범주형이야? → One-Hot Encoding, 순서형이야? Label Encoding
    4. 불균형 데이터 처리 (SMOTE, ...) 
    5. 유의미한 변수 활용해서 필요한 파생 변수 생성
    6. 다중공선성 재확인을 통해 최종 모델 학습 변수 선택 ☞ 앞에서 원핫인코딩 했거나 파생변수가 새로 생겨나면 다중공선성이 새로 생겼을 확률 높으니까 정확하게 변수 간 관계 확인해보자. (by 상관계수/VIF계산/모델기반 중요도 등)
  • 모델 성능에 큰 영향을 줌
  • 스케일링 관련 참고사항
    • 거리기반 연산(KNN, PCA)과 경사하강법(로지스틱회귀, 선형 회귀, 신경망 등) 사용할 경우 스케일링 필수
    • 트리 기반 모델(랜덤 포레스트, XGBoost, CatBoost 등)은 상대적인 크기가 중요하기 때문에 스케일링 불필요

⑤ 머신러닝 모델 적용

  • 통계검증과 상관계수 확인을 통해 검증된 변수 및 feature engineering으로 새로 구성된 변수를 가지고 머신러닝 실행
  • 지도학습- 분류/회귀 , 비지도학습- 군집/차원축소, 강화학습
  • 결과 확인 (성능 평가⭐️) 
    1. 회귀
      • 선형회귀모델의 경우 ols.summary() 확인
      • 잔차 플롯 그려서 패턴 랜덤한지 확인
      • R2, MSE, MAE 등 손실함수 확인
    2. 분류
      • accuracy, precision, recall, f1-score
      • 혼동행렬
      • rou-auc score 등 
    3. 군집
    4. 차원축소
  • 최적화 (모델 개선)
    1. 과적합/과소적합 확인
    2. 하이퍼파라미터 튜닝 (교차검증)
    3. 앙상블 적용
    4. feature importance 분석 및 시각화
    5. 가중치 조절 (규제)
    6. 변수 선택 및 추가 피처 엔지니어링 진행

⑥ 최종 모델 선택 및 결과 정리

  • 가장 최적화된 모델 선택
  • 최종 성능 지표 정리

⑦ 인사이트 도출 및 결론

  • 통계적 추론을 통해 가설 검증을 하고, 머신러닝을 통해 값을 예측 및 분류하는 단계까지 가보면서 얻은 결과/인사이트를 토대로 앞서 정의한 문제를 해결하기 위해 어떤 전략을 취하면 좋을지 연결시키기

2-2. standard 라이브세션 5회차

1) 트리기반 모델이란?

  • 의사결정나무 (Decision Tree)
    • 질문을 던지면서 데이터를 나누는 구조
    • 스무고개 느낌
    • 해석력은 좋지만 예측 정확도가 좋지 않아서 잘 사용하지 않음
  • 의사결정나무에 앙상블 기법 많이 사용
    • 여러 나무를 합쳐서 더 강한 모델을 만드는 방법 (평균 - 회귀 / 다수결 - 분류)
    • 기본 의사결정 나무의 예측 정확도를 개선
    • 랜덤 포레스트, XGBoost, CatBoost 등
    • 아래 고려사항들이 대부분 충족된다.
✅ 머신러닝 모델 고를 때 고려하는 것들
1. 예측 정확도
2. 학습 속도 / 예측 속도
3. 과적합 방지 능력 (앙상블)
4. 결측치 처리 가능 여부
5. 범주형 데이터 처리 능력 (CatBoost)

 

2) XGBoost (eXtreme Gradient Boosting)

  •  특징
    1. 빠르고 정확 !
    2. 정형 데이터(표)에 강력
    3. 과적합 방지 기능 (앙상블인 것 자체만으로 과적합 방지되지만 추가적으로 reg_alpha, reg_lambda 사용해서 규제 적용도 가능)
    4. 결측치 자동 처리해줌
    5. feature importance 확인 가능

3) CatBoost

  • 특징
    1. 범주형 데이터 인코딩 없이 바로 사용 가능
    2. 하이퍼파라미터 튜닝 없이도 성능 좋음
    3. 결측치 자동 처리해줌
    4. feature importance 확인 가능

4) 주요 하이퍼 파라미터

  • 공통 ⭐️
파라미터 의미 추천 범위 비고
n_estimators 트리개수 100~1000 - 과적합 방지를 위해 트리 개수를 너무 높게 잡으면 안됨
- train data만 많은 건 아무 의미 없음
- 랜덤포레스트에도 있음
learning_rate 학습률 0.01 ~ 0.3 - 클수록 빠르게 수렴
- 적정수준이어야 함 (그리드서치 이용)
max_depth 트리의 최대 깊이 3 ~ 10 -깊어질수록 관점이 다양해지고 성능 올라가지만, 너무 깊어지면 과적합 문제 발생
- 랜덤포레스트에도 있음
  • XGBoost
파라미터 의미 추천 범위 비고
subsample 각 트리마다 사용할 샘플 비율 0.5~1.0  
colsample_bytree 각 트리마다 사용할 컬럼 비율 0.5~1.0  
gamma 정보 획득이 얼마 이상일 때 split 0~5  
reg_alpha L1 규제 0~1 - 1에 가까울수록 강력한 규제
- 과적합 방지
reg_lambda L2 규제 0~1 - 1에 가까울수록 강력한 규제
- 과적합 방지
  • CatBoost
파라미터 의미 추천 범위 비고
bagging_temperature 랜덤성 조절 0~1  
random_strength 컬럼 선택 랜덤성 (비율) 0~10