728x90
반응형

1. LogisticRegression() 활용 최적의 하이퍼파라미터 찾고 학습하기

%%time
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression

# 로지스틱 회귀 모델 생성
logistic_model = LogisticRegression()

# 하이퍼파라미터 값 목록
lr_params = {
    'penalty': ['l1', 'l2'],                      # 규제 유형 ('l1': L1 규제, 'l2': L2 규제)
    'C': [0.1, 1.0, 10.0],                        # 규제 강도의 역수 (값이 작을수록 강한 규제)
    'solver': ['lbfgs', 'newton-cg', 'saga'],      # 최적화에 사용할 알고리즘
    'max_iter': [50,100,150],                 # 최대 반복 횟수
    'class_weight': [None, 'balanced'],            # 클래스 가중치 (None: 균등한 가중치, 'balanced': 불균등한 가중치)
    'dual': [True, False],                         # 이중 문제 유형 (True: 이중 문제 사용, False: 원 문제 사용)
    # 'fit_intercept': [True, False],                # 절편(intercept) 학습 여부
    # 'intercept_scaling': [1, 2, 3],                # 절편의 스케일링 비율
    # 'l1_ratio': [None, 0.2, 0.5],                  # L1 규제와 L2 규제 사이의 혼합 비율
    # 'multi_class': ['auto', 'ovr', 'multinomial'], # 다중 클래스 처리 방법 ('auto': 자동 선택, 'ovr': 일대다, 'multinomial': 다항 분류)
    'n_jobs': [None, -1],                          # 병렬 처리에 사용할 CPU 코어 수 (None: 1개, -1: 모든 코어)
    'random_state': [42],                          # 난수 발생 시드 값
    'tol': [0.0001, 0.001, 0.01],                  # 수렴 기준 (작을수록 더 정밀한 계산)
    # 'verbose': [0, 1, 2],                          # 출력 메시지 레벨 (0: 출력 없음, 1: 진행 상황 메시지, 2: 모든 메시지)
    # 'warm_start': [True, False]                    # 이전 학습 결과를 재사용하여 학습 계속 여부
}

# 그리드서치 객체 생성
gridsearch_logistic_model = GridSearchCV(estimator=logistic_model,
                                         param_grid=lr_params,
                                         scoring='roc_auc',
                                         cv=5)

# 그리드서치 수행
gridsearch_logistic_model.fit(X_train, y_train)
print('최적 하이퍼파라미터:', gridsearch_logistic_model.best_params_)

 

1. penalty : 규제 유형 ( L1 , L2 규제 )

  1. L1 규제: L1 규제는 가중치(w)의 절댓값의 합을 손실 함수에 추가하여 사용합니다. 이는 가중치 벡터의 일부 요소들을 0으로 만들어 특정 특성들을 선택하고 다른 특성들은 제외하는 효과를 가집니다. L1 규제를 사용하면 희소한(sparse) 모델을 얻을 수 있습니다. 희소한 모델은 많은 가중치 값이 0이 되어 불필요한 특성들을 제거하고 모델의 해석력을 향상시킵니다. 이러한 특성으로 인해 L1 규제는 특성 선택(feature selection)에 유용하게 사용됩니다.
  2. L2 규제: L2 규제는 가중치(w)의 제곱의 합을 손실 함수에 추가하여 사용합니다. 이는 가중치 벡터의 모든 요소들이 손실 함수에 기여하게 하여, 모든 특성들이 유지되면서 가중치 값들이 전반적으로 작아지도록 유도합니다. L2 규제는 가중치 값을 균일하게 분산시키는 효과가 있으며, 모델의 일반화 성능을 향상시킬 수 있습니다. L2 규제는 가중치 감소(weight decay)라고도 불리며, 오버피팅을 방지하고 모델의 안정성을 높일 수 있습니다.

 

2. C : 규제 강도의 수 (값이 작을수록 강한 규제)

 

3. solver : lbfgs , newton-cg , saga

  1. 'liblinear': 'liblinear' 알고리즘은 작은 규모의 데이터셋에 적합한 최적화 알고리즘입니다. 이 알고리즘은 L1 규제와 L2 규제를 지원하며, 이진 분류와 다중 클래스 분류에 모두 사용할 수 있습니다. 작은 데이터셋에서 잘 동작하며, 선형적인 학습 시간을 가지고 있습니다.
  2. 'newton-cg': 'newton-cg' 알고리즘은 작은 규모의 데이터셋에서 사용되는 뉴턴-케스트로브(Newton-CG) 방법을 기반으로 합니다. 이 알고리즘은 L2 규제만 지원하며, 이진 분류와 다중 클래스 분류에 모두 사용할 수 있습니다. 뉴턴-케스트로브 방법은 미분 가능한 목적 함수를 최적화하는데 사용되는 반복적인 방법으로, 수렴 속도가 빠르지만 큰 데이터셋에는 적합하지 않을 수 있습니다.
  3. 'lbfgs': 'lbfgs' 알고리즘은 L2 규제를 사용하는 Broyden-Fletcher-Goldfarb-Shanno(BFGS) 최적화 알고리즘을 기반으로 합니다. 이진 분류와 다중 클래스 분류에 모두 사용할 수 있습니다. BFGS 알고리즘은 경사 하강법의 한 종류로, 손실 함수를 최소화하는데 사용됩니다. 일반적으로 'lbfgs' 알고리즘은 수렴이 잘되고 빠른 속도로 최적화를 수행하지만, 큰 데이터셋에는 적합하지 않을 수 있습니다.
  4. 'sag': 'sag' 알고리즘은 큰 데이터셋에 적합한 확률적 평균 경사 하강(Stochastic Average Gradient descent, SAG) 알고리즘을 기반으로 합니다. 이진 분류와 다중 클래스 분류에 모두 사용할 수 있으며, 대용량 데이터셋에서 빠른 수렴을 제공합니다. 'sag' 알고리즘은 각 반복에서 전체 훈련 데이터셋의 일부 샘플만 사용하여 경사 하강을 수행하므로, 메모리 효율성이 뛰어납니다.
  5. 'saga': 'saga' 알고리즘은 'sag' 알고리즘의 개선 버전입니다. 이 알고리즘은 L1 규제와 L2 규제를 모두 지원하며, 이진 분류와 다중 클래스 분류에 모두 사용할 수 있습니다. 'saga' 알고리즘은 'sag' 알고리즘과 유사한 특징을 가지면서도 일부 데이터셋에서 더 빠른 수렴을 제공할 수 있습니다.

 

4. max_iter : 최대반복 횟수

==>  알고리즘의 반복 횟수를 제한하는 역할을 합니다. 즉, 지정된 최대 반복 횟수 동안에만 모델이 학습

 

==> max_iter 값을 너무 작게 설정하면 모델이 충분히 수렴하지 않을 수 있고, 그 결과로 학습된 모델의 성능이 좋지 않을 수 있습니다. 반대로 max_iter 값을 너무 크게 설정하면 학습 시간이 길어지거나, 모델이 과적합

 

==> 크거나 복잡한 데이터셋의 경우 더 많은 반복이 필요할 수 있으며, 작은 데이터셋의 경우 상대적으로 적은 반복으로도 수렴

 

5. class_weight : 최대반복 횟수

==> 클래스 가중치를 지정하면 모델이 각 클래스를 다루는 중요성을 조정할 수 있습니다. 일반적으로 소수 클래스에 더 큰 가중치를 부여하여 소수 클래스에 대한 오분류 비용을 더 크게 여기게 됩니다. 이를 통해 모델은 소수 클래스에 더 많은 관심을 기울이고 적절하게 예측을 수행할 수 있습니다.

 

 

==> 'balanced' 옵션을 사용하는 것이 있습니다. 'balanced' 옵션은 자동으로 클래스 빈도에 반비례하는 가중치를 할당하여 클래스 간의 균형을 유지하려는 목적으로 사용됩니다.

예를 들어, 이진 분류 문제에서 클래스 A의 샘플이 100개이고 클래스 B의 샘플이 1000개라면, 'balanced' 옵션을 사용하면 클래스 A에는 10배 더 큰 가중치가 부여됩니다.

6. dual 

  • dual=True: 이 옵션은 수보다 샘플 수가 많은 경우에 사용됩니다. 대부분의 경우, 즉 특성 수(n_features)가 샘플 수(n_samples)보다 큰 경우에는 dual=True를 사용하는 것이 효율적입니다. 이 경우에는 듀얼 문제를 푸는 것이 원래의 원시(primal) 문제보다 더 빠르고 메모리 효율적입니다.
  • dual=False: 이 옵션은 특성 수보다 샘플 수가 적은 경우에 사용됩니다. 즉, 특성 수(n_features)가 샘플 수(n_samples)보다 작은 경우에는 dual=False를 사용하는 것이 효율적입니다. 이 경우에는 원래의 원시(primal) 문제를 푸는 것이 더 빠르고 메모리 효율적입니다.

==> 그냥 Default 값으로 False 사용! 그냥 Pass 하는편이 좋다!

 

7.fit_intercept

  • fit_intercept=True: 이 옵션은 상수항(절편)을 모델에 포함시킵니다. 즉, 로지스틱 회귀 모델이 입력 특성들에 상수항을 추가하여 예측을 수행합니다. 대부분의 경우, 이 옵션을 사용하는 것이 일반적입니다.
  • fit_intercept=False: 이 옵션은 상수항(절편)을 모델에 포함시키지 않습니다. 즉, 로지스틱 회귀 모델은 입력 특성들만을 사용하여 예측을 수행합니다. 일부 특수한 경우에 상수항을 제외하는 것이 필요한 경우가 있을 수 있으나, 보통은 fit_intercept=True를 사용하는 것이 일반적입니다.

 

8. intercept_scaling

intercept_scaling은 로지스틱 회귀(Logistic Regression) 모델에서 사용되는 하이퍼파라미터 중 하나입니다. 이 매개변수는 상수항(절편)에 대한 스케일링을 조정하는 역할을 합니다.

로지스틱 회귀 모델에서 상수항은 입력 특성에 곱해지는 계수(weight)와 함께 예측에 기여하는 중요한 요소입니다. intercept_scaling 매개변수는 이 상수항에 대한 스케일링 비율을 조정하여 모델의 학습과 예측에 영향을 줍니다.

intercept_scaling 매개변수의 값에 따라 다음과 같은 동작이 결정됩니다:

  • intercept_scaling=1.0: 이 옵션은 상수항(절편)에 대한 스케일링을 적용하지 않습니다. 상수항의 영향력이 입력 특성과 동일하게 적용됩니다.
  • intercept_scaling=0.0: 이 옵션은 상수항(절편)을 고려하지 않습니다. 상수항의 영향력을 제거하고, 입력 특성들에만 의존하여 예측을 수행합니다.
  • intercept_scaling>1.0: 이 옵션은 상수항(절편)의 영향력을 강화합니다. 상수항의 값이 크게 반영되어 모델의 예측에 더 큰 영향을 줍니다.

intercept_scaling 매개변수는 주로 데이터셋의 특성과 관련하여 상수항의 영향력을 조절하는 데 사용됩니다. 특히, 상수항이 다른 특성들과 크기 차이가 크거나 스케일링이 필요한 경우에 유용합니다. 그러나 보통은 기본 값인 intercept_scaling=1.0을 그대로 사용하는 것이 일반적입니다.

 

9. l1_ratio

l1_ratio는 일부 선형 모델에서 사용되는 하이퍼파라미터로, L1 규제(L1 regularization)와 L2 규제(L2 regularization) 사이의 균형을 조절하는 역할을 합니다.

L1 규제와 L2 규제는 모델의 복잡성을 조절하여 과적합을 방지하고 일반화 성능을 향상시키는데 사용됩니다. l1_ratio는 L1 규제와 L2 규제 사이의 상대적인 비율을 조정하는 매개변수입니다.

l1_ratio 값은 0과 1 사이의 범위에서 설정되며, 다음과 같은 동작이 결정됩니다:

  • l1_ratio=0.0: 이 옵션은 모델에 L2 규제만 적용합니다. L2 규제는 가중치(w)의 제곱의 합을 손실 함수에 추가하여 모델의 복잡성을 제어합니다. 이 경우, L1 규제는 사용되지 않습니다.
  • l1_ratio=1.0: 이 옵션은 모델에 L1 규제만 적용합니다. L1 규제는 가중치(w)의 절댓값의 합을 손실 함수에 추가하여 특성 선택과 희소성(sparisty)을 유도합니다. 이 경우, L2 규제는 사용되지 않습니다.
  • l1_ratio=0.5: 이 옵션은 L1 규제와 L2 규제를 동일한 비중으로 적용합니다. 즉, L1 규제와 L2 규제가 모두 모델에 고려됩니다.

l1_ratio 값을 조정하여 L1 규제와 L2 규제의 상대적인 영향을 조절할 수 있습니다. 값이 0에 가까울수록 L2 규제가 강조되고, 값이 1에 가까울수록 L1 규제가 강조됩니다. 이를 통해 모델의 특성 선택과 과적합 방지에 영향을 줄 수 있습니다.

일반적으로 기본 값인 l1_ratio=1.0 또는 l1_ratio=0.5를 사용하는 것이 일반적입니다. 그러나 데이터셋의 특성과 문제의 복잡성에 따라 최적의 l1_ratio 값을 실험적으로 조정해야 할 수 있습니다.

==> penalty가 l1 이면 자동적으로 l1_ratio는 1.0 이다!!

 

10. multi_class

multi_class는 로지스틱 회귀(Logistic Regression)와 같은 분류 알고리즘에서 다중 클래스(multi-class) 분류 문제를 다루는 방법을 지정하는 매개변수입니다.

로지스틱 회귀는 기본적으로 이진 분류(binary classification) 문제에 사용되지만, multi_class 매개변수를 사용하여 다중 클래스 분류 문제를 처리할 수 있습니다.

multi_class 매개변수의 값에 따라 다음과 같은 동작이 결정됩니다:

  • multi_class='ovr' (기본값): 이진 분류를 다중 클래스 문제로 확장하는 방법으로 일대다(one-vs-rest) 전략을 사용합니다. 각 클래스에 대해 하나의 이진 분류 모델을 학습시키고, 예측 시에는 가장 높은 확률을 가진 클래스를 선택합니다. 이는 다중 클래스 문제를 여러 개의 이진 분류 문제로 변환하여 해결하는 방식입니다.
  • multi_class='multinomial': 다중 클래스 분류 문제를 직접 처리하는 방법으로, 소프트맥스 함수를 사용하여 클래스 간의 확률 분포를 모델링합니다. 소프트맥스 함수를 통해 각 클래스에 대한 확률 값을 얻으며, 예측 시에는 확률이 가장 높은 클래스를 선택합니다.
  • multi_class='auto': 자동으로 다중 클래스 처리 방법을 선택합니다. 이 값은 입력 데이터의 속성에 따라 'ovr' 또는 'multinomial' 중 하나를 선택합니다.

multi_class 매개변수는 다중 클래스 분류 문제에 대한 알고리즘의 작동 방식을 결정하는 중요한 요소입니다. 어떤 값으로 설정해야 하는지는 데이터셋의 특성과 문제의 복잡성에 따라 달라집니다. 기본적으로 'ovr' 방식이 많이 사용되지만, 데이터셋과 목적에 맞는 적절한 방법을 선택하는 것이 중요합니다.

 

11. n_jobs

병렬 처리에 사용할 CPU 코어 수 (None: 1개, -1: 모든 코어)

 

12. random_state

random_state는 머신러닝 모델에서 난수 생성에 사용되는 시드(seed) 값입니다. 시드 값은 랜덤한 요소들을 생성하는 알고리즘에 대한 초기화 값으로, 동일한 시드 값을 사용하면 동일한 난수 시퀀스가 생성됩니다.

random_state 매개변수의 값에 따라 다음과 같은 동작이 결정됩니다:

  1. random_state=None 또는 기본값: 이 경우, 모델은 내부적으로 시스템 시간 또는 다른 무작위 요소를 기반으로 난수를 생성합니다. 따라서 동일한 모델을 여러 번 실행할 때마다 다른 결과가 생성됩니다.
  2. random_state=정수값: 이 경우, 동일한 정수값을 사용하여 난수 생성을 초기화합니다. 동일한 random_state 값을 사용하면 항상 동일한 결과를 얻을 수 있습니다. 이는 모델을 재현하고 결과를 일관성 있게 유지하는 데 유용합니다.

random_state를 고정하는 것은 모델을 재현하고 실험의 일관성을 유지하는 데 도움이 됩니다. 예를 들어, 동일한 random_state 값을 사용하면 데이터를 동일한 방식으로 분할하거나 초기화하여 모델의 학습과 예측 결과를 일관성 있게 유지할 수 있습니다. 또한, 모델을 비교하거나 튜닝할 때 다른 하이퍼파라미터만 변경하고 random_state를 동일하게 유지하여 공정한 비교를 수행할 수 있습니다.

단, 주의할 점은 random_state 값이 다른 경우에도 모델의 결과는 일반적으로 유사하고 안정적일 수 있으며, 모델의 성능에 큰 영향을 미치지 않을 수 있습니다. 따라서 random_state 값을 변경하면서 모델의 성능과 일관성을 확인하는 것이 좋습니다.

 

13. tol

tol은 로지스틱 회귀(Logistic Regression)와 같은 일부 최적화 알고리즘에서 사용되는 수렴 기준을 나타내는 매개변수입니다.

 

tol은 "tolerance"의 약어로, 모델이 수렴되었다고 판단하는 기준으로 사용됩니다. 모델은 손실 함수의 최적화를 통해 학습되며, tol 값은 최적화 알고리즘이 수렴했다고 간주하는 손실 함수의 변화의 최소 허용값을 나타냅니다.

일반적으로 tol 값은 양수이며, 작은 값일수록 수렴 기준이 엄격해집니다. tol 값을 충분히 작게 설정하면 최적화 알고리즘이 더 많은 반복을 수행하여 더 정확한 최적해에 수렴할 수 있습니다. 그러나 너무 작은 tol 값을 사용하면 최적화 알고리즘이 무한히 수렴하는 경우가 발생할 수 있으므로 적절한 값 설정이 필요합니다.

일반적으로는 기본값으로 설정된 tol=1e-4를 사용하는 것이 권장됩니다. 그러나 데이터셋의 특성과 최적화 알고리즘의 동작에 따라 적절한 tol 값을 조정할 필요가 있을 수 있습니다. 또한, 모델의 학습 속도와 성능에 영향을 줄 수 있으므로 실험과 검증을 통해 최적의 tol 값을 찾는 것이 좋습니다.

즉, tol은 모델이 학습을 중단하고 최적화가 수렴되었다고 판단하는 기준을 제공하는 매개변수입니다. 작은 tol 값은 더 정확한 최적해를 추구할 수 있지만, 알고리즘이 수렴하는 시간이 더 오래 걸릴 수 있습니다.

 

14.verbose

verbose는 로지스틱 회귀(Logistic Regression)와 같은 머신러닝 모델의 학습과정 중에 출력되는 메시지의 상세도를 조절하는 매개변수입니다.

verbose 매개변수의 값에 따라 다음과 같은 동작이 결정됩니다:

  • verbose=0: 출력 메시지가 비활성화됩니다. 학습과정에 대한 어떠한 정보도 출력되지 않습니다.
  • verbose=1: 기본 설정 값입니다. 학습과정에서 중간 결과나 진행 상황에 대한 간단한 정보를 출력합니다. 예를 들어, 반복 횟수, 손실 값 등이 출력될 수 있습니다.
  • verbose>1: 상세한 정보가 출력됩니다. 학습 과정의 각 단계마다 자세한 내용이 출력되며, 모델의 학습 진행 상황을 자세히 추적할 수 있습니다. 출력되는 메시지의 양은 verbose 값이 증가함에 따라 늘어날 수 있습니다.

verbose 매개변수를 사용하여 학습과정에서 출력되는 메시지의 상세도를 조정할 수 있습니다. 이는 모델의 학습 과정을 모니터링하고 디버깅하는 데 유용합니다. 작은 데이터셋의 경우 상세한 출력을 사용하여 모델이 제대로 동작하는지 확인할 수 있습니다. 그러나 큰 데이터셋이나 대규모 학습 작업에서는 출력 메시지의 양이 많아질 수 있으므로 주의가 필요합니다.

기본적으로 verbose=0 또는 verbose=1을 사용하는 것이 일반적입니다. 필요에 따라 verbose 값을 조정하여 적절한 메시지 출력 수준을 선택할 수 있습니다.

 

15.warm_start

warm_start는 일부 머신러닝 모델에서 사용되는 하이퍼파라미터 중 하나입니다. 이 매개변수는 모델을 이전 학습 결과로 초기화할지 여부를 결정합니다.

일반적으로 모델을 학습시킬 때, 매번 처음부터 시작하여 초기화된 상태에서 학습을 진행합니다. 하지만 warm_start를 활성화하면 이전 학습 결과를 유지하고 새로운 학습을 이어나갈 수 있습니다.

warm_start 매개변수의 값에 따라 다음과 같은 동작이 결정됩니다:

  • warm_start=False (기본값): 새로운 학습을 시작할 때마다 모델을 처음부터 초기화합니다. 이전 학습 결과는 무시되고 새로운 학습이 진행됩니다.
  • warm_start=True: 이전 학습 결과를 유지한 채로 모델을 초기화하고, 새로운 학습을 이어서 진행합니다. 이전 학습에서 얻은 가중치와 모델 상태를 기반으로 학습을 시작하며, 추가적인 학습이 진행됩니다.

warm_start 매개변수를 활성화하면 이전 학습 결과를 이어서 사용할 수 있으므로, 모델을 반복적으로 학습할 때 유용합니다. 예를 들어, 데이터셋이 점진적으로 변하거나 일련의 학습 단계를 거쳐 최종 모델을 구축해야 할 때, warm_start=True를 사용하여 이전 학습 결과를 초기화로 활용할 수 있습니다.

주의할 점은 warm_start를 사용할 때, 모델의 하이퍼파라미터나 데이터셋이 변경되는 경우에는 적절한 설정 및 초기화를 진행해야 합니다. 또한, warm_start를 사용하는 모든 알고리즘이 이 기능을 지원하는 것은 아니므로 해당 모델의 문서나 사용자 가이드에서 확인하는 것이 좋습니다.

==> 웬만하면 [' penalty ' , 'C ' , 'solver' , 'max_iter' , 'fit_intercept' ] 

 

2. SCORING

gridsearch_logistic_model = GridSearchCV(estimator=logistic_model,
                                         param_grid=lr_params,
                                         scoring='roc_auc',
                                         cv=5)

scoring 매개변수는 모델의 성능을 평가하기 위한 지표(metric)를 지정하는 매개변수입니다. GridSearchCV와 같은 교차 검증 기반의 하이퍼파라미터 튜닝 방법에서 사용됩니다.

주어진 매개변수 그리드(param_grid)에 대해 각 조합을 평가하고 최적의 조합을 찾는 과정에서, scoring 매개변수는 어떤 성능 지표를 사용하여 모델을 평가할지 지정합니다. 성능 지표는 모델의 예측 결과를 기반으로 실제값과 비교하여 모델의 예측 능력을 측정하는 데 사용됩니다.

scoring 매개변수의 값에는 다양한 성능 지표를 지정할 수 있으며, 일반적으로는 다음과 같은 값들이 사용됩니다:

  • 분류(Classification) 문제:
    • 'accuracy': 정확도(accuracy)로 모델의 예측 정확도를 평가합니다.
    • 'precision': 정밀도(precision)로 모델의 양성 예측의 정확도를 평가합니다.
    • 'recall': 재현율(recall)로 모델이 실제 양성 샘플을 얼마나 잘 찾아내는지를 평가합니다.
    • 'f1': F1 점수(F1 score)로 정밀도와 재현율의 조화 평균을 평가합니다.
    • 'roc_auc': ROC 곡선 아래 면적(AUC, Area Under the ROC Curve)으로 분류 모델의 예측 성능을 평가합니다.
  • 회귀(Regression) 문제:
    • 'neg_mean_squared_error': 평균 제곱 오차(Mean Squared Error)의 음수로, 모델의 예측 값과 실제값 사이의 제곱 오차를 평가합니다. (음수로 지정하여 검색 과정에서 값이 작은 모델이 우선적으로 선택되도록 합니다.)
    • 'r2': R^2 점수(R-squared score)로 모델의 예측 성능을 평가합니다. 예측값이 실제값을 얼마나 잘 설명하는지를 나타냅니다.

위에서는 'roc_auc'를 사용하여 모델의 성능을 평가하도록 지정하였습니다. ROC AUC는 이진 분류 문제에서 모델의 민감도와 특이도의 트레이드오프를 평가하는 지표로, 모델이 양성과 음성 클래스를 구분하는 능력을 측정합니다. 'roc_auc'는 이진 분류 모델의 평가에 흔히 사용되는 지표 중 하나입니다.

 

2-1) ROC AUC 이란?

ROC AUC (Receiver Operating Characteristic Area Under the Curve)는 이진 분류 모델의 성능을 평가하는 지표입니다. 이 지표는 모델의 민감도(Sensitivity, True Positive Rate)와 1에서 모델의 특이도(Specificity, True Negative Rate)를 뺀 값인 1 - 특이도(False Positive Rate)를 x축과 y축으로 하는 ROC 곡선의 아래 면적을 나타냅니다.

 

ROC AUC는 분류 모델의 능력을 평가하는 데 사용되며, 모델이 양성과 음성 클래스를 얼마나 잘 구분하는지를 측정합니다. ROC 곡선은 분류 모델의 예측 임계값(threshold)을 조정하여 민감도와 특이도의 트레이드오프 관계를 시각적으로 나타냅니다. ROC AUC는 이 곡선 아래의 면적으로써, 0에서 1 사이의 값을 가지며, 면적이 클수록 모델의 분류 성능이 좋다는 의미입니다.

일반적으로 ROC AUC가 0.5 이상이면 모델의 분류 성능이 어느 정도 있다고 판단할 수 있습니다. 1에 가까울수록 모델이 양성과 음성을 완벽하게 구분하는 것이며, 0.5에 가까울수록 모델의 성능은 무작위 수준에 가깝습니다.

ROC AUC는 불균형한 클래스 분포를 가진 데이터셋에서도 신뢰할 수 있는 성능 평가 지표로 사용될 수 있습니다. 클래스 불균형 문제에서 정확도 등 다른 평가 지표가 오용될 수 있는 경우에는 ROC AUC를 활용하여 모델의 성능을 정확하게 평가할 수 있습니다.

 

2-2) 민감도 & 특이도란?

민감도(Sensitivity)와 특이도(Specificity)는 이진 분류 모델의 성능을 평가하는 지표로, 모델이 양성과 음성 클래스를 얼마나 잘 구분하는지를 나타냅니다.

  • 민감도(Sensitivity, True Positive Rate, TPR): 양성 클래스로 실제로 정답인 샘플 중에서 모델이 정확하게 양성으로 예측한 비율을 의미합니다. 즉, 실제 양성을 얼마나 잘 감지하는지를 나타냅니다. 민감도는 다음과 같이 계산됩니다:여기서 TP는 True Positive(진양성)으로, 양성 클래스를 정확하게 양성으로 예측한 샘플의 수를 나타내며, FN은 False Negative(가음성)으로, 실제 양성인데 모델이 음성으로 예측한 샘플의 수를 나타냅니다.
  • 민감도 = TP / (TP + FN)
  • 특이도(Specificity, True Negative Rate, TNR): 음성 클래스로 실제로 정답인 샘플 중에서 모델이 정확하게 음성으로 예측한 비율을 의미합니다. 즉, 실제 음성을 얼마나 잘 감지하는지를 나타냅니다. 특이도는 다음과 같이 계산됩니다:여기서 TN은 True Negative(진음성)으로, 음성 클래스를 정확하게 음성으로 예측한 샘플의 수를 나타내며, FP는 False Positive(가양성)으로, 실제 음성인데 모델이 양성으로 예측한 샘플의 수를 나타냅니다.
  • 특이도 = TN / (TN + FP)

민감도와 특이도는 서로 상충 관계에 있습니다. 모델이 민감도를 높게 유지하면 실제 양성을 잘 감지하지만, 이에 따라 특이도는 낮아지는 경향이 있습니다. 반대로, 모델이 특이도를 높게 유지하면 실제 음성을 잘 감지하지만, 이에 따라 민감도는 낮아집니다.

민감도와 특이도는 이진 분류 모델의 성능을 평가하는 중요한 지표로 사용됩니다. 민감도는 실제 양성을 놓치지 않고 잘 감지하는 더 좋은 모델을 나타내며, 특이도는 실제 음성을 놓치지 않고 잘 감지하는 더 좋은 모델을 나타냅니다. 이 두 지표를 적절히 조합하여 모델의 분류 능력을 평가하고, 모델의 성능을 개선하는 방향으로 모델을 조정하거나 비교할 수 있습니다.

==> CHAT GPT로 부터 얻은 INSIGHT~

728x90
반응형

+ Recent posts