[BDA 11기] 데이터 분석 모델링(ML1) - 10주차 모델링 실습

2026. 1. 6. 01:49·BDA-11th

(모델링 실습 코드만 정리한 글임..!)

🌀 데이터 준비

(1) 데이터 불러오기

path = 'https://---.csv'
data = pd.read_csv(path)
data = data.sample(5000, random_state = 2022)
  • csv 파일을 pandas DataFrame 형태로 불러옴
  • 전체 데이터 중 5000개 샘플만 랜덤 추출

(2) 데이터 정리

drop_cols = ['id']
data.drop(drop_cols, axis = 1, inplace = True )
  • 단순 식별자인 'id'를 제거

(3) 데이터 분할 1: x,y 나누기

target = 'CHURN'
x = data.drop(target, axis = 1)
y = data.loc[:, target]
  • 타켓 변수와 설명 변수 분리
    (NA는 없어서 전처리 과정에서 생략)

(4) 가변수화

dumm_cols = ['REPORTED_SATISFACTION','REPORTED_USAGE_LEVEL','CONSIDERING_CHANGE_OF_PLAN']
x = pd.get_dummies(x, columns = dumm_cols, drop_first = True)
  • get_dummies 함수를 사용해 0/1 형태의 더미 변수로 변환
  • drop_first=True : 기준 범주 하나를 제거하여 다중공선성 문제 방지

(5) 데이터 분할2: Train, Validation 나누기

x_train, x_val, y_train, y_val = train_test_split(x, y, test_size=.3, random_state=2022)

(6) Scaling

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_val = scaler.transform(x_val)
  • SVM은 거리 기반 알고리즘이기 때문에 Scaling 필수!
  • MinMaxScaler : 모든 feature 값을 0~1 범위로 정규화




🌀 모델링

(1) 필요한 함수 불러오기

# 모델링을 위해
from sklearn.svm import SVC

# 평가를 위해.
from sklearn.metrics import *
  • SVC: 분류
  • SVR: 회귀

(2) 선언

model = SVC()  # default: kernel = 'rbf'

(3) 모델링

model.fit(x_train, y_train)
  • train 데이터를 이용해 결정 경계 학습
  • 서포트 벡터를 기반으로 최적의 마진 결정 경계 생성

(4) 검증: 예측

pred = model.predict(x_val)
  • 학습된 모델을 이용해 Validation 데이터에 대한 예측 수행
  • pred : 예측된 이탈 여부 (0 또는 1)

(5) 검증: 평가

  • confusion matrix
confusion_matrix(y_val, pred)
  • classification report
print(classification_report(y_val, pred))
              precision    recall  f1-score   support

       LEAVE       0.68      0.60      0.64       731
        STAY       0.66      0.73      0.69       769

    accuracy                           0.67      1500
   macro avg       0.67      0.67      0.66      1500
weighted avg       0.67      0.67      0.67      1500
  • precision : 해당 클래스로 예측한 것 중 실제로 맞은 비율
  • recall : 실제 해당 클래스 중 맞게 예측한 비율
  • f1-score : precision과 recall의 조화 평균
  • accuracy : 전체 예측 정확

즉, 현제 모델은 67% 수준의 성능을 보임




🌀 C와 Gamma를 조절한 모델 생성

모델 1. C ↓, gamma ↓ (단순한 모델)

(1) 모델 선언

# 모델 1: 마진을 넓게, 결정경계를 단순하게
model_1 = SVC(
    C = 0.1,
    gamma = 0.01,
    kernel = 'rbf'
)

(2) 학습 및 예측

# 학습
model_1.fit(x_train, y_train)

# 예측
pred_1 = model_1.predict(x_val)

(3) 평가

print(confusion_matrix(y_val, pred_1))
print(classification_report(y_val, pred_1))


모델 2. C ↑, gamma ↑ (복잡한 모델)

(1) 모델 선언

model_2 = SVC(
    C = 10,
    gamma = 1,
    kernel = 'rbf'
)

(2) 학습 및 예측

# 학습
model_2.fit(x_train, y_train)

# 예측
pred_2 = model_2.predict(x_val)

(3) 평가

print(confusion_matrix(y_val, pred_2))
print(classification_report(y_val, pred_2))



🌀 GridSearchCV로 SVM 최적의 C, gamma 찾기

GridSearchCV : 여러 개의 하이퍼파라미터 조합을 교차검증(Cross Validation) 으로 하나씩 전부 실험해서 가장 성능이 좋은 조합을 자동으로 찾아주는 방법

(1) GridSearchCV 불러오기

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

(2) 탐색할 파라미터 범위 설정

param_grid = {
    'C': [0.1, 1, 10],
    'gamma': [0.01, 0.1, 1],
    'kernel': ['rbf']
}

(3) GridSearchCV 객체 생성

grid = GridSearchCV(
    estimator = SVC(),
    param_grid = param_grid,
    scoring = 'f1',   # 이탈/분류 문제에서 자주 사용
    cv = 5            # 5-fold 교차검증
)

(4) 학습

grid.fit(x_train, y_train)

(5) 결과 확인

grid.best_params_  # 최적의 파라미터 
{'C': 10, 'gamma': 0.1, 'kernel': 'rbf'}
grid.best_score_  # 최고 성능 점수 
np.float64(0.6602850055583237)

(6) 최적 모델 자체

best_model = grid.best_estimator_

(7) Validation 데이터로 최종 검증

pred_best = best_model.predict(x_val)

print(confusion_matrix(y_val, pred_best))
print(classification_report(y_val, pred_best))

추가: 수동 Grid Search + 시각화 코드

C_list = [0.1, 1, 10]
gamma_list = [0.01, 0.1, 1]

for C in C_list:
    for g in gamma_list:
        model = SVC(
            kernel='rbf',
            C=C,
            gamma=g
        )
        model.fit(x, y)

        print(f"C={C}, gamma={g}")
        svm_visualize(x, y, model, f"C={C}, gamma={g}")


'BDA-11th' 카테고리의 다른 글

[BDA 11기] 데이터 분석 모델링(ML1) - 12주차  (1) 2026.01.27
[BDA 11기] 데이터 분석 모델링(ML1) - 11주차  (0) 2026.01.15
[BDA 11기] 데이터 분석 모델링(ML1) - 10주차  (0) 2026.01.05
[BDA 11기] 데이터 분석 모델링(ML1) - 9주차  (0) 2026.01.04
[BDA 11기] 데이터 분석 모델링(ML1) - 8주차  (0) 2026.01.04
'BDA-11th' 카테고리의 다른 글
  • [BDA 11기] 데이터 분석 모델링(ML1) - 12주차
  • [BDA 11기] 데이터 분석 모델링(ML1) - 11주차
  • [BDA 11기] 데이터 분석 모델링(ML1) - 10주차
  • [BDA 11기] 데이터 분석 모델링(ML1) - 9주차
choisio2
choisio2
sio2-dev 님의 블로그 입니다.
  • choisio2
    SiO2 for Developer
    choisio2
  • 전체
    오늘
    어제
    • 분류 전체보기 (46) N
      • TAVE-16th (14)
      • BDA-11th (16)
      • C++ (5)
      • 개인 프로젝트 (4)
      • 백준 (4) N
      • 컴퓨터 그래픽스 (1)
      • 잡담 (1)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 링크

    • github.com/choisio2
  • 공지사항

  • 인기 글

  • 태그

    BDAI
    SpotifyAPI
    BDA
    spotify
    코딩테스트
    calculator
    Tave
    KakaoOauth
    개발자
    frontend
    프론트엔드
    개발자미래
    코테
    데이터분석모델링
    kotlin
    알고리즘스터디
    kotin
    polling
    geminicli
    알고리즘
    데시벨측정
    playconsole
    바이브코딩
    백준1463
    AI시대
    BDA #데이터분석모델링
    androidstudio
    viewpager2
    백준
    C++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
choisio2
[BDA 11기] 데이터 분석 모델링(ML1) - 10주차 모델링 실습
상단으로

티스토리툴바