[SK] 머신러닝 모델링 - 머신러닝 개요

2025. 7. 21. 19:52·Activity/SK AI Dream Camp
728x90

분류 (Classification)

  • 어떤 대상을 정해진 범주에 구분해 넣는 작업
  • 주어진 특성에 따라 어떤 대상을 범주(target)로 구분하는 방법
    • 레이블 또는 타겟이 범주형일때 사용
  • 범주가 2개인 경우 이진 분류 (Binary Classification)
  • 범주가 세개 이상인 경우 다중 분류 (MultiClass Classification)

혼동 행렬(Confusion Matrix)

  • sklearn.metrics.confusion_matrix
  • 예측 값이 실제 값과 일치하는지 분류하는 분류표
  • 표의 한쪽 열에는 예측한 범주, 다른 한쪽은 실제 범주를 나타냄
  • 이진 분류의 경우 예측한 범주와 실제 범주에 따라 4가지 지표로 볼 수 있음
    • True Positive : Positive로 예측된 결과가 맞음
    • False Negative : Negative로 예측된 결과가 틀림
    • False Positive : Positive로 예측된 결과가 틀림
    • True Negative : Negative로 예측된 결과가 맞음

(1) 혼동 행렬 계산

from sklearn.metrics import confusion_matrix
confusion_matrix(df['실제값'], df['예측값'])

(2) 혼동 행렬 계산 결과 저장

tn, fp, fn, tp = confusion_matrix(df['실제값'], df['예측값']).ravel()
print('True Negative :', tn)
print('False Positive :', fp)
print('False Negative :', fn)
print('True Positive :', tp)

정확도(Accuracy)

  • sklearn.metrics.accuracy_score
  • (𝑇𝑃+𝑇𝑁)/(𝑇𝑃+𝐹𝑁+𝐹𝑃+𝑇𝑁)
  • 전체 데이터 중 올바르게 분류 한 비율
(tp + tn) / (tp + fn + fp + tn)
from sklearn.metrics import accuracy_score
accuracy_score(df['실제값'], df['예측값'])

재현률(Recall)

  • sklearn.metrics.recall_score
  • 𝑇𝑃/(𝑇𝑃+𝐹𝑁)
  • 실제 전체 긍정 수에서 참 긍정의 비율
tp / (tp + fn)
from sklearn.metrics import recall_score
recall_score(df['실제값'], df['예측값'])

정밀도(Precision)

  • sklearn.metrics.precision_score
  • 𝑇𝑃/(𝑇𝑃+𝐹𝑃)
  • 예측한 전체 긍정 중 참 긍정의 비율
tp / (tp + fp)
from sklearn.metrics import precision_score
precision_score(df['실제값'], df['예측값'])

F1 Score

  • sklearn.metrics.f1_score
  • 2𝑇𝑃/(2𝑇𝑃+𝐹𝑃+𝐹𝑁)
  • 정밀도와 재현율의 조화 평균
  • 정밀도과 재현율이 0에 가까울수록 F1 score도 동일하게 낮은 값을 갖도록 하기 위함
2 * tp / (2 * tp + fp + fn)
from sklearn.metrics import f1_score
f1_score(df['실제값'], df['예측값'])

RoC(Receiver operating characteristic) Curve

  • sklearn.metrics.roc_curve
  • 거짓 긍정 비율(FPR)과 참 긍정 비율(TPR) 간의 관계
from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(df['실제값'], df['예측값'])

# 처음과 마지막 값은 그래프를 그리기 위해 사용되는 값
print('FPR', fpr[1:-1]) 
print('TPR', tpr[1:-1])
print('thresholds', thresholds[1:-1])

AUC(Area Under the Curve)

  • sklearn.metrics.roc_auc_score
  • Curve 영역의 면적
    • 1에 가까울수록 성능이 좋음
from sklearn.metrics import roc_auc_score
roc_auc_score(df['실제값'], df['예측값'])
from sklearn.metrics import auc
auc(fpr, tpr) # X축, Y축

RoC Cruve 시각화

import matplotlib.pyplot as plt
plt.figure(figsize=(6, 6))
plt.plot(fpr, tpr, label=f'Roc Curve (AUC : {auc(fpr, tpr)} )')
plt.plot([0, 1], [0, 1], color="gray", linestyle="--")
plt.legend()

from sklearn.metrics import classification_report
print(classification_report(df['실제값'], df['예측값']))

회귀 (Regression)

  • 독립변수(특성)과 종속변수(레이블)간 관계를 모델링하는 방법
  • 레이블 또는 타겟이 연속형일때 사용
  • 독립변수와 종속변수의 관계를 기반으로 최적의 회귀 계수를 찾음

R Squared

  • sklearn.metrics.r2_score
  • 실제 값의 분산 대비 예측 값의 분산 비율(최고 : 1, 최악 : 음수)
  • 모델 예측 성능(설명력)을 평가하는 목적
import numpy as np
1 - (np.sum(np.square(df['실제값'] - df['예측값'])) /  np.sum(np.square(df['실제값'] - df['실제값'].mean())))
from sklearn.metrics import r2_score
r2_score(df['실제값'], df['예측값'])

Mean Absolute Error

  • sklearn.metrics.mean_absolute_error
  • 실제 값과 예측 값의 차이를 절대값으로 변환해 평균 계산
  • 오차의 크기를 그래도 반영하여 오차 평균 크기를 확인
  • 작을수록 좋지만 너무 작으면 과적합일 수 있음
np.mean(np.abs(df['실제값'] - df['예측값']))
from sklearn.metrics import mean_absolute_error
mean_absolute_error(df['실제값'], df['예측값'])

Mean Squared Error

  • sklearn.metrics.mean_squared_error(squared=True)
  • 실제 값과 예측 값의 차이를 제곱해서 평균 계산
  • 작을수록 좋지만 너무 작으면 과적합일 수 있음
  • 큰 오차를 더 크게, 작은 오차는 더 작게 평가하여 이상치에 민감
np.mean(np.square(df['실제값'] - df['예측값']))
from sklearn.metrics import mean_squared_error
mean_squared_error(df['실제값'], df['예측값'])

Root Mean Squared Error

  • sklearn.metrics.mean_squared_error(squared=False)
  • 오차의 평균 크기를 확인하는 목적, 모델 간 잔차 비교 가능
    • 이상치에 덜 민감함
  • 큰 오류값 차이에 대해 크게 패널티를 주기 때문
  • MSE의 크기를 줄이기 위한 목적으로 사용
np.sqrt(np.mean(np.square(df['실제값'] - df['예측값'])))
from sklearn.metrics import mean_squared_error
mean_squared_error(df['실제값'], df['예측값'], squared=False)

MSLE

  • MSE방식에 로그를 적용한 것
  • 결정 값이 클수록 오류값도 커지기 때문에 일부 큰 오류값들로 인해 전체 오류값이 커지는 것을 막아줌
from sklearn.metrics import mean_squared_log_error
mean_squared_log_error(df['실제값'], df['예측값'])

RMSLE

  • 아웃라이어에 덜 민감함 (robust)
    • 값의 변동폭이 크지 않음
  • 상대적 Error를 측정함
    • 예측값 = 100, 실제값 = 90일 때, RMSLE = 0.1053, RMSE = 10
    • 예측값 = 10,000, 실제값 = 9,000일 때, RMSLE = 0.1053, RMSE = 1,000
  • Under Estimation에 큰 패널티를 부여
from sklearn.metrics import mean_squared_log_error
mean_squared_log_error(df['실제값'], df['예측값'], squared=False)

데이터 분할

  • 모델을 올바르게 학습시키기 위해서는 데이터를 분할
    • 모든 데이터를 학습에 사용한 경우 일반화 성능 확인 불가
    • 데이터의 일부를 학습에서 제외해서 학습이 완료된 모델을 통해 평가를 진행
      • 현재 모델이 학습하지 않은 데이터에 대해 잘 예측할 수 있는지 확인
  • 전체 데이터의 75%를 학습 데이터로 25%를 평가 데이터로 분할
    • 학습 데이터만 머신 러닝 모델의 학습에 사용
    • 평가 데이터를 이용하여 머신 러닝 모델의 성능을 평가
from sklearn.model_selection import train_test_split 
train_test_split(
	*arrays,             # 분리하고자하는 데이터
	test_size=0.25,      # 테스트 데이터 비율
	shuffle=True,        # 데이터 셔플 적용 유무
	stratify=False,      # 층화 분리 적용 유무
	random_state=None    # 시드값 
)
728x90

'Activity > SK AI Dream Camp' 카테고리의 다른 글

[SK] SK 데이터 분석을 활용한 파이썬 기초  (0) 2025.06.30
'Activity/SK AI Dream Camp' 카테고리의 다른 글
  • [SK] SK 데이터 분석을 활용한 파이썬 기초
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (443)
      • App·Android (1)
      • BE (50)
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (11)
        • 스프링부트 시큐리티 & JWT (0)
        • 실전 자바 기본, 중급 (1)
        • PHP (11)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (28)
        • AI (7)
        • Bigdata (6)
        • Database (1)
        • Python (0)
        • 빅데이터분석기사 (13)
      • Infra (1)
      • Activity (9)
        • Intern (0)
        • SK AI Dream Camp (2)
        • 구름톤 유니브 4기 (1)
        • 리모트 인턴십 6기 (3)
        • 봉사활동 (0)
        • 부스트캠프 AI Tech 8기 (3)
      • CS (8)
      • 취준 (12)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (2)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그래프탐색
    티스토리챌린지
    누적합
    구현
    자료구조
    브루트포스 알고리즘
    최단경로
    백준
    이분탐색
    투포인터
    수학
    너비우선탐색
    정렬
    그래프이론
    그리디알고리즘
    시뮬레이션
    오블완
    문자열
    다이나믹프로그래밍
    매개변수탐색
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[SK] 머신러닝 모델링 - 머신러닝 개요
상단으로

티스토리툴바