k-최근접 이웃(k-Nearest Neighbors; kNN)

  • 모델 구조
분류를 위한 kNN

위에 ? 샘플은 이웃 세 개(k=3)로 설정되어 있고 초록색이 더 많으니까 초록색으로 판단을 할 것이고, 밑에 ? 샘플은 세 개의 이웃(k=3) 가운데 파란색이 더 많으니까 파란색이라고 판단할 것이다.

예측을 위한 kNN

왼쪽 ? 샘플은 이웃 세 개(k=3)로 설정되어 있고 이웃의 클래스 값들이 1, 2, 3 이니까 이들의 평균인 2로 클래스 값을 예측 할 것이고, 오른쪽 ? 샘플은 세 개의 이웃(k=3) 가운데 클래스 값들이 8, 8, 9 이니까 이들의 평균으로 클래스 값을 예측 할 것이다.

  • 주요 파라미터와 설정 방법

▶이웃 수(k):홀수로 설정하며, 특징 수 대비 샘플 수가 적은 경우에는 k를 작게 설정하는 것이 바람직하다.
->홀수로 설정한 이유는 동점이 나오는 것을 방지하기 위해서이다. 예를들어 분류의 경우 이웃이 4개일때 클래스1이 2개, 클래스2가 2개일때 동점이 발생함으로써 분류를 할 수가 없다.
▶거리 및 유사도 척도
모든 변수가 서열형 혹은 정수인 경우:맨하탄 거리
방향성이 중요한 경우(예:상품 추천 시스템):코사인 유사도
모든 변수가 이진형이면서 희소하지 않은 경우:매칭 유사도
모든 변수가 이진형이면서 희소한 경우:자카드 유사도
그외:유클리디안 거리

  • 특징 추출이 어려우나 유사도 및 거리 계산만 가능한 경우(예:시퀀스 데이터)에 주로 활용한다.
  • 모든 특징이 연속형이고 샘플 수가 많지 않은 경우에 좋은 성능을 보인다고 알려져 있다.
  • (거리 기반으로)특징 간 스케일 차이에 크게 영향을 받아, 스케일링이 반드시 필요하다(코사인 유사도는 방향성을 보는 것이기 때문에 코사인 유사도를 사용할 경우 스케일링을 할 필요가 없다.)
  • 거리 및 유사도 계산에 문제가 없다면, 별다른 특징 변환이 필요하지 않다.

의사결정나무(Decision tree)

  • 예측 과정을 잘 설명할 수 있다는 장점(설명력이 높기 때문에)덕분에 많은 프로젝트에서 활용한다.

예시1) A 보험사: 고객의 이탈 여부를 예측하고, 그 원인을 파악해라
->이탈 여부를 잘 맞추는 것 보다 그 고객이 왜 이탈하는지 설명이 필요하기 때문에 즉, 설명이 필요한 과제에서는 가장 먼저 생각할수 있는 모델이 Decision tree이다.

  • 의사결정나무의 가장 큰 단점은 선형 분류기라는 한계로 예측력이 좋은 편에 속하지 못한다. 하지만 최근 각광받고 있는 앙상블 모델(예:XGBoost, LightGBM, RandomForest 등)의 기본 모형으로 사용됨으로써 좋은 예측력을 보인다. 이런 앙상블 모델은 예측력은 좋을지 모르지만 설명력이 떨어진다는 문제가 있다.

  • 주요 파라미터

▶max_depth: 최대 깊이로 그 크기가 클수록 모델이 복잡해진다.
▶min_samples_leaf:잎 노드(끝마디)에 있어야 하는 최소 샘플 수로, 그 크기가 작을수록 모델이 복잡해진다.
->복잡도에 영향을 주는 파라미터가 2개 이상인 경우에는 반드시 조정을 할 때 둘을 같이 고려해야한다.


나이브 베이즈(Naive Bayes)

  • 모델 구조

베이즈 정리를 사용하고 특징 간 독립을 가정하여 사후 확률 Pr(ylx)을 계산한다.

가능도 Pr(xj l y)은 조건부 분포를 가정하여 추정한다.
-이진형 변수 : 베르누이 분포
-범주형 변수 : 다항 분포
-연속형 변수 : 가우시안 분포

  • 모델 특성

1. 특징 간 독립이라는 것 자체가 통계학에서 많이 쓰이는 가정임에도 불구하고 굉장히 비현실적이므로 일반적으로 높은 성능을 기대하기 어렵다.
2. 연속형 변수에 대해서 베르누이 분포를 가정 혹은 이진형 변수에 대해서 가우시안 분포를 가정했다 라고 하면 당연히 좋은 결과를 기대하기 어렵다. 즉, 설정한 분포에 따라 성능 차이가 크므로 특징의 타입이 서로 같은 경우에 사용하기 바람직하다. 예를 들어 이진형 변수와 연속형 변수가 섞여있는 경우에는 어떤 분포를 가정하더라도 좋은 결과를 내기 어렵다.
->나이브 베이즈는 특징의 타입이 전부 같은 경우에 사용하는게 바람직하다.
3. 특징이 매우 많고 그 타입이 같은 문제(예:이진형 텍스트 분류)에 주로 사용된다.


서포트 벡터 머신(Support Vector Machine; SVM)

  • 모델 구조

서포트 벡터 머신의 구조는 일반 선형 분류기랑 완벽히 같다.

  • 최적화 모델

목적식에서 왼쪽에 있는 llwll(가중치 벡터의 2차 norm)이 모델의 마진, 크사이i 부분이 모델의 오차를 나타낸다.
# norm은 벡터의 길이나 크기를 측정하는 방법이다.
제약식은 모든 샘플들을 잘 분류하는데 그 때 오차로 크사이i까지 봐주겠다라고 해석한다.
(목적식과 제약식 부분 이해가 잘안가네...)

  • 오차를 최소화하면서 동시에 마진을 최대화하는 분류, 예측 모델로 커널 트릭을 활용하여 저차원 공간을 고차원 공간으로 매핑한다. 이 때 매핑시키는 이유는 선형 분류가 불가능한 경우가 훨씬 많기 때문에 선형분류가 가능하게 하기 위해서이다.
  • 마진의 개념을 회귀에 활용한 모델을 서포트 벡터 회귀(Support Vector Regression)이라 한다.

  • 주요 파라미터

▶kernel: 통상적으로 이진 변수가 많으면 linear 커널이, 연속 변수가 많으면 rbf 커널이 잘 맞는다고 알려져 있다.
->linear 커널은 기본적으로 두 특징간 곱을 커널에 반영시키고 rbf 커널은 두 특징간 차이를 커널에 반영시킨다. 그러면 이진 변수 같은 경우 두 변수의 곱이 의미있는 경우가 많지만 차이는 유의한 경우가 별로 없다.(연속 변수는 이진 변수와 반대)
▶C: 오차 패널티에 대한 계수로, 이 값이 작을수록 마진 최대화에 클수록 학습 오차 최소화에 신경을 쓰며, 보통 10ⁿ, 2ⁿ 형태로 튜닝한다.
->목적식에서 C가 작으면 작을수록 모델의 마진(llwll)을 신경쓰고 C가 크면 클수록 모델의 오차(크사이i 부분)에 신경을 쓴다.(오차 패널티가 작으면 오차에 대해서 관대하게 생각하니 모델의 마진에 신경을 쓴다고 생각하고 오차 패널티가 크면 오차에 대해 관대하게 생각 안하니 오차에 신경을 쓴다라고 생각, 하드마진/소프트마진을 설정할 때 씀)
▶γ(감마): rbf 커널의 파라미터로, 크면 클수록 데이터의 모양을 잘 잡아내지만 오차가 커질 위험이 있으며, C가 증가하면 γ도 증가하게 튜닝하는 것이 일반적이다.

  • 파라미터 튜닝이 까다로운 모델이지만, 튜닝만 잘하면 좋은 성능을 보장하는 모델이다.

신경망

  • 모델 구조

입력 노드는 입력층에 있는 노드들로 입력 값을 받는 역할을 수행한다.
은닉 노드는 은닉층에 있는 노드, 출력 노드는 출력층에 있는 노드이다.
H1을 보면 I0와 I0에 부여된 가중치가 곱해서 값이 들어온다. (마찬가지로 I1, ..., Id+1)
이렇게 전달 받은 값들이 합해진다. 그 후 활성 함수를 통해서 출력을 낸다.

  • 초기 가중치에 크게 영향을 받는 모델로, random_state와 max_iter 값을 잘 조정해야한다.
  • 은닉 노드가 하나 추가되면 그에 따라 하나 이상의 가중치가 추가되어, 복잡도가 크게 증가할 수 있다.
  • 모든 특징 타입이 연속형인 경우에 성능이 잘 나오는 것으로 알려져 있으며, 은닉층 구조에 따른 복잡도 조절이 파라미터 튜닝에서 고려해야 할 가장 중요한 요소이다.
  • 최근 딥러닝의 발전으로 크게 주목받는 모델이지만, 특정 주제(예:시계열 예측, 이미지 분류, 객체 탐지 등)를 제외하고는 깊은 층의 신경망은 과적합으로 인한 성능 이슈가 자주 발생한다. 즉, 특정 도메인(시계열 예측, 이미지 분류, 객체 탐지 등)의 문제를 제외하면은 깊은 층의 신경망은 좋은 모델이라고 보기 어렵다.


트리 기반의 앙상블 모델
최근 의사결정나무를 기본 모형으로 하는 앙상블 모형이 캐글 등에서 자주 사용되며, 좋은 성능을 보인다.

  • 랜덤 포레스트: 배깅(bagging) 방식으로 여러 트리를 학습하여 결합한 모델
  • XGboost & LightGBM: 부스팅 방식으로 여러 트리를 순차적으로 학습하여 결합한 모델
  • 랜덤 포레스트를 사용할 때는 트리의 개수와 나무의 최대 깊이를 조정해야 하며, XGboost와 LightGBM을 사용할 때는 트리의 개수, 나무의 최대 깊이, 학습률을 조정해야 한다.

▶트리의 개수: 통상적으로 트리의 개수가 많으면 많을수록 좋은 성능을 내지만, 어느 수준 이상에서는 거의 큰 차이를 보이지 않는다.(계산 시간 측면에서 조정해야하는 파라미터)
▶나무의 최대 깊이: 4이하로 설정해주는 것이 과적합을 피할 수 있어 바람직하다.
▶학습률: 이 값은 작으면 작을수록 과소적합 위험이 있으며, 크면 클수록 과적합 위험이 있다. 통상적으로 0.1, 0.05로 주로 설정을 한다.


오늘은 각 모델들을 간단하게 알아보았다. 각 모델들을 학술적으로 공부하게되면 수학적으로 난이도가 있기 때문에 너무 어렵게 느껴진다. 각 모델들을 교재와 함께 리마인드를 해야겠다.

선형 결합이란? 선형 결합은 선의 관계, 다시 말해 직선 관계이다. y=x, y=2x, y=3x와 같은 꼴로 그래프를 그려보면 직선 관계이다.

선형 회귀 모델과 정규화 회귀 모델

  • 모델 구조

->각 특징에 대해서 가중치가 붙은 형태로 되어있고 각각들이 선형 형태로 결합되어 있다.(각각, 특징 벡터와 가중치 벡터의 선형 결합(선의 형태)으로 표현)

  • 비용 함수:오차제곱합

->선형 회귀 모델의 경우 비용 함수로 오차제곱합을 사용하고 정규화 회귀 모델의 경우 오차제곱합에 계수들의 패널티를 추가시킨다.
->오차제곱합을 쓰는 이유는 양의 오차와 음의 오차가 손실되는 것을 방지하기 위해서 쓴다.
->정규화 회귀 모델에서 패널티를 추가시킨 이유는 모델이 너무 복잡해지는 것을 방지하기 위해서이다. 즉, 계수들의 절대값이 너무 커지는 것을 방지하기 위해서이다. 람다의 경우 사용자가 설정하는 하이퍼 파라미터이고 람다가 크면 클수록 계수들의 패널티에 집중하고 단순한 모델이 만들어지고, 람다가 작으면 작을수록 오차제곱합에 집중하고 복잡한 모델이 만들어 진다.

  • 특징과 라벨 간 비선형 관계가 무시될 수 있으므로, 특징 변환이 필요

->특징벡터와 가중치 벡터의 선형 결합으로 표현이 되어있는데 만약, 가중치 벡터와 특징벡터의 관계가 선형이 아니라 비선형 관계가 있으면 그 관계가 완벽하게 무시될수 있으므로 특징 변환이 필요하다.

데이터(파란색 선)의 분포를 보면, x와 y는 2차식 관계라는 것을 대략적으로 추정할 수 있다. x를 x^2으로 변환한다면 과소적합된 주황색 모델이 아닌 적절하게 적합된 초록색 모델을 학습할 수 있다.
이 과정을 코드를 통해서 확인해볼 것이다.

import numpy as np
from sklearn.linear_model import LinearRegression as LR
from matplotlib import pyplot as plt

## 가상 데이터 생성
X = np.linspace(-5,10,500) # -5부터 10까지 등간격으로 500개의 요소를 갖는 벡터
X_2 = X**2 # X의 모든 요소에 제곱이 된 형태

Y = 3*X**2 + np.random.normal(0,4,size=len(X)) # X와 Y는 2차식 관계
# np.random.normal:정규분포로부터 무작위 표본 추출
# 평균 0, 표준편차 4인 정규분포로 부터 난수 len(X)개를 생성

plt.scatter(X,Y)
# X는 1차원으로 sklearn의 인풋 구조와 맞지 않음->reshape 사용
# .fit(X,Y) => X = [[record1], [record2], ..., [record n]]
# 1차원: X = [record1, record2, ..., record n]
# reshape() 메소드는 차원을 변경할 때 사용
# reshape(-1,1)에서 -1은 원래 배열의 길이와 남은 차원으로부터 추정해서 알아서 지정하라는 의미

## 모델 학습
model_1 = LR().fit(X.reshape(-1,1), Y) # 인자가 2개이므로 2차원 변경
model_2 = LR().fit(X_2.reshape(-1,1), Y)

## 모델 적용
model_1_predict = model_1.predict(X.reshape(-1,1))
model_2_predict = model_2.predict(X_2.reshape(-1,1))
## 결과 시각화
%matplotlib inline
plt.xlabel("X")
plt.ylabel("Y")

plt.plot(X,Y,label="data", color='y')
plt.plot(X, model_1_predict, label="Y=f(x)")
plt.plot(X, model_2_predict, label="Y=f(x**2)", color='g')

plt.legend(loc='upper left')

데이터랑 초록색 모델은 거의 일치하는 것을 볼수있으나 파란색 모델은 실제 데이터의 분포를 거의 반영하지 못한다.
모델1은 X를 그대로 사용하고 모델2는 X^2을 사용한 것 밖에 차이가 없지만 단순한 변환임에도 불구하고 데이터의 X와 Y간 비선형 관계가 있는 경우에는 특징 변환을 해줬을 때 엄청난 퍼포먼스를 얻을 수 있다.
->MAE나 RMSE는 구하지 않아도 당연히 초록색 모델의 성능이 훨씬 우수할 것으로 예상한다.

  • (선형 결합이기 때문에)특징 간 스케일 차이에 크게 영향을 받아, 예측 모델링을 할 때 스케일링이 필요함
  • λ와 max_iter에 따라 과적합 정도가 직접 결정됨

로지스틱 회귀 모델

  • 모델 구조

로지스틱 회귀 모델은 분류에 쓰는 회귀 모델로 라벨이 1일 확률을 출력해주는 모델이다.
라벨이 1일 확률이 cut-off-value 이상이면 1, 아니면 0으로 본다.

  • 비용 함수:크로스 엔트로피

라벨이 실제로 1인 샘플에 대해서는 1일 확률을 높게 잡아야 비용이 작아지고 실제로 0인 샘플에 대해서는 0일 확률을 높게 잡아야(1일 확률을 적게잡아야) 비용이 적게 받도록 설계된 함수이다.

  • 특징의 구간 별로 라벨의 분포가 달라지는 경우, 적절한 구간을 나타낼 수 있도록 특징 변환이 필요함

이 과정을 코드를 통해서 확인해볼 것이다.

import numpy as np
from sklearn.linear_model import LogisticRegression as LR
from matplotlib import pyplot as plt

# np.random.random(size=10):개수가 10개인 0~1 사이의 난수 생성
# tolist():ndarray를 리스트로 변환

## 가상 데이터 생성
X = np.random.random(size=10).tolist() + (np.random.random(size=10)+1).tolist() + (np.random.random(size=10)+2).tolist()
Y = [0]*9 + [1]*1 + [0]*2 + [1]*8 + [0]*9 + [1]*1

plt.scatter(X,Y) # 명확하지는 않지만 2이상, 1이하에서는 0이 많고, 1~2 중간에서는 1이 많은 것을 확인
X = np.array(X) # array로 변환
Y = np.array(Y)

#조건 생성
cond = np.logical_and(X>1, X<=2) # np.logical_and(bool1, bool2):모든 조건을 충족할 경우 True, 아닐 경우 False
# 부울리스트가 둘 다 True이면 True 반환, 하나라도 False이면 False 반환

X_tilda = X.copy()

X_tilda[cond]=1 # X_tilda에 cond 조건을 만족시키면 1을 가지게 함
X_tilda[~cond]=0 # 아니면 0
## 모델 학습

model_1 = LR().fit(X.reshape(-1,1), Y) # X를 특징으로 그대로 사용한 모델
model_2 = LR().fit(X_tilda.reshape(-1,1), Y) # 변환한 특징을 사용한 모델(0과 1사이의 실수를 0과 1의 정수로 변환한 ndarray)
# decision boundary 유도
# Pr(y = 1 | x) >= 0.5
# <=> 1 / (1 + exp(-coef * x - intercept)) >= 0.5
# <=> (1 + exp(-coef * x - intercept)) <= 2
# <=> exp(-coef * x - intercept) <= 1
# <=> -coef * x - intercept <= 0
# <=> x >= - intercept(bias) / coef(계수)
# 위 식을 통해 decision boundary는 "- intercept / coef" 정의됨(참고)

## 결과 시각화(X를 특징으로 그대로 사용한 모델 시각화)
decision_boundary = -(model_1.intercept_[0] / model_1.coef_[0])
plt.plot([decision_boundary, decision_boundary], [-0.1, 1.1], color='r')
plt.scatter(X[Y==0], Y[Y==0]) # 실제로 Y가 0인 부분 시각화
plt.scatter(X[Y==1], Y[Y==1]) # 실제로 Y가 1인 부분 시각화
# 모든 샘플들이 decision_boundary를 기준으로 같은 공간에 있음->구분이 어려움
## 결과 시각화(변환한 특징을 사용한 모델 시각화)
decision_boundary = -(model_2.intercept_[0] / model_2.coef_[0])
plt.plot([decision_boundary, decision_boundary], [-0.1, 1.1], color='r')
plt.scatter(X[Y==0], Y[Y==0])
plt.scatter(X[Y==1], Y[Y==1])
# 오른쪽에는 주황색, 왼쪽에는 파란색으로 잘 분리된걸 확인
# 오차가 존재하긴 하지만 변환한 특징이 X를 특징으로 그대로 사용한 것 보다 확연히 좋아진 것을 확인

오늘은 예측 모델인 선형회귀모델, 정규화 회귀모델 / 분류 모델인 로지스틱 회귀모델을 알아보았다. 이 모델들은 선형성을 기반으로 한 모델이다. 학교를 다닐 때 회귀분석을 배운적이 있지만 지금 다시 복습을 해보니 그때보다는 조금 더 알 것 같다. 아직까지는 이 지식이 어렵게 와닿지만 후에 다시 머신러닝을 공부할 때 이 자료와 교재를 기반으로 한 번 더 리마인드를 할 것이다.

모델 개발 프로세스

위의 그림을 통해 모델 개발 프로세스의 전반적인 흐름을 알 수 있다. 지금부터는 세부적으로 각각의 단계를 알아 보려고 한다.


문제 정의 단계는 전체 프로세스 가운데 가장 중요한 단계로, 명확한 목적 의식을 가지고 프로세스를 시작해야 한다.
이 단계에서 수행하는 활동은 다음과 같다.

  • 과업 종류 결정(분류, 예측 등)
  • 클래스 정의
  • 도메인 지식 기반의 특징 정의
  • 사용 데이터 정의

데이터 수집 단계는 문제 정의 단계에서 정의한 데이터를 수집하는 단계로, 크롤링, 센서 활용, 로그 활용 등으로 데이터를 수집한다. 기업의 경우 기업 내 구축된 DB에서 SQL을 통해 추출하는 경우가 가장 많으며, 이때는 클래스를 중심으로 수집한다.

데이터 탐색 단계는 데이터가 어떻게 생겼는지를 확인하여 프로세스를 구체화하는 단계이다. 데이터 탐색 단계에서 변수별 분포, 변수 간 상관성, 이상치와 결측치, 변수 개수, 클래스 변수 분포 등을 확인하며, 이 탐색 결과는 데이터 전처리 및 모델 선택에 크게 영향을 미친다.

데이터 전처리 단계는 원할한 모델링을 위해 데이터를 가공하는 단계로, 여기서 수행하는 대표적인 작업은 결측값 처리, 데이터 통합, 이상치 제거, 재샘플링, 특징 선택, 더미 변수 생성이 있다.

모델링 단계는 모델 선택->하이퍼 파라미터 설정->모델 학습 순으로 진행되며
모델 선택에서는 데이터 특성, 성능, 설명력 등을 기준으로 모델을 선택한다. 첫 번째 예시로 설명력이 중요한 경우 의사결정나무 혹은 베이지안 네트워크를 사용하고, 두 번째 예시로 이진 텍스트 분류를 하는 경우 나이브베이즈 혹은 서포트 벡터 머신을 사용한다.
하이퍼 파라미터 설정에서는 모델의 성능을 결정짓는 하이퍼 파라미터를 설정한다. 하지만 최적의 하이퍼 파라미터 설정은 굉장히 어려운 작업이다.
모델 학습에서는 모델에 포함된 파라미터를 추정하고 이 모델 학습에서는 이미 잘 개발되어 있는 모듈/패키지가 있기에 전혀 어렵지 않은 작업이다.

모델 평가 단계의 경우 분류 모델일 경우와 예측 모델일 경우로 나뉜다.
분류 모델의 대표적인 지표로는 정확도(accuracy), 정밀도(precision), 재현율(recall), F1 점수(F1-score)가 있다.
예측 모델의 대표적인 지표로는 평균 제곱 오차(MSE), 평균 절대 오차(MAE) 등이 있다.
->모델 평가 단계에서 잘못된 평가를 피하기 위해, 둘 이상의 평가 지표를 사용하는 것이 바람직하다.


결과보고서 작성 단계는 지금까지의 분석 결과를 바탕으로 보고서를 작성하는 단계로 결과보고서의 통일된 구성은 없지만, 일반적으로 다음과 같이 구성된다.

  1. 분석 목적
  2. 데이터 탐색 및 전처리
  3. 분석 방법
  4. 분석 결과 및 활용 방안

지도학습이란?

  • 컴퓨터에게 입력과 출력을 주고, 입력과 출력 간 관계를 학습하여 새로운 입력에 대해 적절한 출력을 내도록 하는 기계학습의 한 분야이다
  • 입력을 특징(feature) 혹은 특징 벡터(feature vector)라고 하며, 출력을 라벨(label)이라고 한다
  • 라벨이 범주형 변수면 분류라고 하며, 연속형 변수면 예측이라고 한다

과적합이란?

  • 지도학습 모델은 학습 데이터를 분류하고 예측하는 수준으로, 학습에 사용되지 않은 데이터도 정확히 분류하고 예측하리라 기대하며, 이러한 기대가 충족되는 경우 일반화되었다고 한다
  • 모델이 너무 복잡해서 학습 데이터에 대해서만 정확히 분류하고 예측하는 모델을 과적합되었다고 하며, 반대로 너무 단순해서 어떠한 데이터에 대해서도 부적합한 모델을 과소적합되었다고 한다
  • 과적합과 과소적합에 영향을 끼치는 주요 인자로는 모델의 복잡도, 샘플 수, 차원의 크기 등이 있다

차원의 크기가 클수록(특징이 많을수록) 가지고 있는 학습 데이터를 잘 설명하기에 좋기 때문에 학습 오차는 계속해서 줄어든다. 그러나 평가 오차는 어느정도 잘 설명하다가 새로운 데이터를 설명하는 과정에서 과적합이 일어날 위험이 크다.
정리하면 특징이 너무 적으면 과소적합이 일어나기 좋고 특징이 너무 많으면 과적합이 일어나기 좋다.

샘플 수는 많으면 많을수록 과적합에서 벗어난다. 샘플 수가 너무 많아서 생기는 문제는 계산량 문제를 제외하고는 없다.
샘플 수가 적으면은 가지고 있는 데이터로만 설명하기 때문에 학습 오차는 작고 평가 오차는 크다. 하지만 샘플 수가 많을수록 적정 적합이 되어서 평가 오차와 학습 오차가 거의 같아지는 지점이 오고, 어느 지점부터는 샘플 수가 더 늘어나도 평가 오차와 학습 오차가 크게 감소하지 않는 그런 패턴을 볼 수 있다.


데이터 분할

  • 과적합된 모델을 좋게 평가하는 것을 방지하기 위해서, 데이터를 학습 데이터와 평가 데이터로 분할한다

  • 학습 데이터와 평가 데이터가 지나치게 유사하거나 특정 패턴을 갖지 않도록 분할해야 한다

파라미터와 하이퍼 파라미터
하이퍼 파라미터(hyper parameter)는 일종의 사용자 옵션으로, 모델 성능에 직접적으로 영향을 끼치므로 자세한 데이터 탐색 결과를 바탕으로 선택해야 한다


이진 분류 모델 평가 : 혼동 행렬

  • 이진 분류:클래스 변수의 상태 공간이 크기가 2인 분류
  • 혼동 행렬:분류 모델을 평가하는데 사용하는 표

▶Positive class:분석의 관심 대상(보통 1로 설정)
▶Negative class:분석 관심 대상 외(보통 0이나 -1로 설정)
->학습 데이터인 x_train, y_train으로 모델을 학습한 후 평가 데이터인 x_test를 사용해서 예측 값을 구하고 실제 값인 y_test와 비교를 한 것

  • 각 지표의 한계 때문에, 가능한 여러 지표를 사용하여 모델을 평가해야 한다
이진 분류 모델 평가:대표적인 지표

다중 분류 모델 평가

  • 다중 분류:클래스 변수의 상태 공간이 크기가 3이상인 분류
  • 각 클래스를 긍정으로 간주하여 평가 지표를 계산한 뒤, 이들의 산술 평균(macro average), 가중 평균(micro average, weighted average)으로 평가한다


예측 모델 평가

  • 대표적인 예측 모델 평가 지표로 루트 평균 제곱 오차(root mean squared error; RMSE)와 평균 절대 오차(mean absolute error; MAE)가 있으며, 두 지표 모두 값이 작을수록 좋다

RMSE와 MAE를 정확히 평가하려면, 해당 분야의 도메인 지식이나 클래스 변수의 스케일을 고려해야 한다고 한다. 예를 들어, 코스피 지수를 예측하는 모델의 MAE가 1010이라면 무의미한 수준의 모델이지만, 전세계 인구 수를 예측하는 모델의 MAE가 1010이라면 매우 우수한 모델이라고 나타나있는데 이게 정확히 무슨 의미인지는 잘 모르겠다...

+ Recent posts