WIDA/DACON 분류-회귀

[DACON/김경은] 분류 모델 뜯어보기, 분류 모델 평가방식

경은 2023. 3. 31. 01:06

서포트벡터머신 모델

#필요 패키지 불러오기
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
from sklearn import svm

#데이터 불러오기
train_data = pd.read_csv("C:/Users/twink/Documents/카카오톡 받은 파일/train.csv")

# type과 나머지 데이터들을 분리
X = train_data.iloc[:, 2:]
y = train_data.iloc[:, 1]

# training dataset과 test dataset으로 쪼개기
# training과 test의 비율은 0.3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=11)


#SVM 모델
clf = svm.SVC(kernel = 'linear', C=1, gamma=0.1)
#모델 학습
clf.fit(X_train, y_train)
# 정확도 출력
print("서포트벡터머신 정확도:", clf.score(X_test, y_test))
  • 임의로 kernel을 선형으로 linear 를 사용하였는데 이에 따라 설정하는 C와 gamma 설정 범위를 잘못 기재하였는지 정확도가 안나와서 더 공부 해봐야 될것같습니다 ...

 

 

 

 

하이퍼파라미터 분석

  • C : 오류를 얼마나 허용할 것이지 규제
  • kernal : 데이터 셋의 형태에 따라 다름(선형 데이터셋:'linear', 비선형 데이터셋:'poly' 등)
  • degree : 다항식 커널의 차수 결정
  • gamma : 결정경계를 얼마나 유연하게 그릴지 결정, 클수록 오버피팅 발생 가능성 높아짐
  • coef0 : 다항식 커널에 있는 상수항 r

 

 

 

평가방법

Log loss

모델 성능 평가 시 사용 가능한 지표

분류 모델 평가시에 사용한다.

 

Log loss 개념

1. 모델이 예측한 확률 값을 직접적으로 반영하여 평가

2. 확률 값을 음의 log 함수에 넣어서 변환을 시킨 값으로 평가 -> 잘못 예측할 수록, 패널티를 부여하기 위함

  • logloss는 음의 로그 함수를 사용하는데, log함수의 결과에 -1을 곱한 결과로 x축을 기준으로 대칭을 이룬다.
  • 음의 로그 함수는 1일때 0이고, 0에 가까워질 수록 숫자가 급격하게 커진다.
  • log loss 값이 작을수록 좋은 모델이다.

100%의 확률(확신)로 답을 구한 경우 -log(1.0) = 0 

80% 확률의 경우 -> -log(0.8) = 0.22314

60% 확률의 경우 -> -log(0.6) = 0.51082

 

확률이 낮아질수록 log loss 값이 기하급수적으로 증가

이런식으로 log loss 는 확률이 낮을 때 패널티를 더 많이 부여하기 위해 음의 로그 함수 사용

 

관측치 (row)가 여러 개일 경우

관측치별로 실제 답안에 해당하는 확률 값을 음의 로그를 취하고, 평균을 낸다.

 

log loss 평균

= 1번 문제 정답 확률에 대한 음의 로그 값 + ... + n번 문제 정답 확률에 대한 음의 로그 값 / n(문제의 개수)

 

왜 사용하는가?

최종적으로 맞춘 결과만 가지고 성능을 평가할 경우, 얼만큼의 확률로 해당 답을 얻은건지 평가가 불가능하다. 답은 맞췄지만 20%의 확률로 그저 찍은거라면 성능이 좋은 모델이라고 할 수 없을 것이다.

 

AUC - ROC Curve

다양한 임계값에서 모델의 분류 성능에 대한 측정 그래프를 말함

 - ROC(Receiver Operating Characteristic) = 모든 임계값에서 분류 모델의 성능을 보여주는 그래프

 - AUC(Area Under thr Curve) = ROC 곡선 아래 영역

AUC 가 높다는 것을 클래스를 구별하는 모델의 성능이 훌륭하다는 것을 의미

 

 

용어정리

1. TP : 맞는 것을 맞다고 예측한 것

2. TN : 아닌 것을 틀리다고 예측한 것

3. FP : 아닌 것을 맞다고 예측한 것

4. FN : 맞는 것을 틀리다고 예측한 것

 

정밀도 = TP/TP+FP

재현율 = TP/TP+FN

정확도 = TP+TN/TP+FP+TN+FN

 

  • FN,FP 구간은 판단이 불분명하기 때문에 구간이 작을수록 좋다.
  • 따라서 판단 불분명 구간을 최소화 한 것이 ROC 커브이다.
  • ROC 커브는 TP 와 FP 의 그래프이다.
  • TP 는 FP 는 작을수록 좋다. 
  • AUC 값의 최소값은 0.5으로 이 경우 모델의 클래스 분리 능력이 거의 없을 뜻한다.
  • 즉, AUC 가 1일때는 두개의 곡선이 전혀 겹치지 않고 클래스를 완벽하게 구분, 0.7 의 경우 클래스의 구별 확률이 70%라고 할 수 있다. 

 

ROC 커브

y축 : 민감도

x축 : 특이도

아래의 면적을 AUC 라고 하여 AUC 면적이 넓을수록 좋은 커브, 즉 좋은 모델이다. 

 

 

 

출처

https://for-my-wealthy-life.tistory.com/37

https://seoyoungh.github.io/machine-learning/ml-logloss/

https://velog.io/@skyepodium/logloss-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

https://bioinformaticsandme.tistory.com/328

log loss에 대해 알아보자 - [데이콘 평가산식] - YouTube