SMOTE

이 문서에서는 Azure Machine Learning 디자이너의 SMOTE 구성 요소를 사용하여 기계 학습에 사용되는 데이터 세트에서 불충분한 사례 수를 늘리는 방법을 설명합니다. 기존 사례를 단순히 복제하는 것보다 SMOTE를 사용하는 것이 드문 사례의 수를 늘리는 더 좋은 방법입니다.

SMOTE 구성 요소를 불균형 데이터 세트에 연결합니다. 데이터 세트가 불균형해지는 이유는 여러 가지가 있습니다. 예를 들어 대상으로 하는 범주가 채우기에서 드물거나 데이터를 수집하기가 어렵기 때문일 수 있습니다. 일반적으로 분석할 클래스의 대표값이 부족할 때 SMOTE를 사용합니다.

구성 요소는 원래 샘플을 포함하는 데이터 세트를 반환합니다. 또한 지정한 백분율에 따라 여러 가상 소수 샘플을 반환합니다.

SMOTE에 대한 자세한 정보

SMOTE(Synthetic Minority Oversampling Technique)는 데이터 세트의 사례 수를 균형 있게 늘릴 수 있는 통계 기법입니다. 구성 요소는 입력으로 제공하는 기존 소수 사례에서 새 인스턴스를 생성하는 방식으로 작동합니다. 이 SMOTE 구현은 다수 사례 수를 변경하지 않습니다.

새 인스턴스는 기존 소수 사례의 복사본일 뿐입니다. 대신 알고리즘이 각 대상 클래스와 가장 인접 한 항목에 대한 기능 공간의 샘플을 사용합니다. 그런 다음, 알고리즘이 대상 사례의 기능을 인접 한 항목의 기능과 결합하는 새 예제를 생성합니다. 이 방법을 사용하면 각 클래스에 사용할 수 있는 기능이 증가하고 샘플이 더 일반적이게 됩니다.

SMOTE는 전체 데이터 세트를 입력으로 사용하지만, 소수 사례의 백분율만 늘립니다. 예를 들어 사례의 1%만 대상 값 A(소수 클래스)를 가지며, 사례의 99%는 값 B를 갖는 불균형 데이터 세트가 있다고 가정하겠습니다. 소수 사례의 백분율을 이전 백분율의 두 배로 늘리려면 구성 요소의 속성에서 SMOTE 백분율200을 입력합니다.

예제

적은 수의 데이터 집합에서 SMOTE를 사용하여 작동 방식을 확인하는 것이 좋습니다. 다음 예제에서는 Azure Machine Learning 디자이너에서 사용할 수 있는 헌혈 데이터 세트를 사용합니다.

파이프라인에 데이터 세트를 추가하고 데이터 세트의 출력에서 시각화를 선택하는 경우, 데이터 세트의 748개 행 또는 사례 중 570개 사례(76%)가 클래스 0이고, 178개 사례(24%)는 클래스 1임을 알 수 있습니다. 이 결과는 심각하게 불균형하지만 클래스 1은 헌혈한 사람을 나타내므로 이러한 행에는 모델링할 기능 공간이 포함됩니다.

사례 수를 늘리려면 SMOTE 백분율 값을 다음과 같이 100의 배수로 설정하면 됩니다.

클래스 0 클래스 1 total
원래 데이터 집합

(SMOTE 백분율 = 0에 해당)
570

76%
178

24%
748
SMOTE 백분율 = 100 570

62%
356

38%
926
SMOTE 백분율 = 200 570

52%
534

48%
1,104
SMOTE 백분율 = 300 570

44%
712

56%
1,282

경고

SMOTE를 사용하여 사례 수를 늘리더라도 더 정확한 모델이 생성되는 것은 아닙니다. 사례 추가가 모델에 미치는 영향을 보려면 다른 백분율, 다른 기능 집합 및 다른 수의 가장 인접한 사항을 사용하여 파이프라이닝해 보아야 합니다.

SMOTE 구성 방법

  1. 파이프라인에 SMOTE 구성 요소를 추가합니다. 조작 범주의 데이터 변환 구성 요소에서 구성 요소를 찾을 수 있습니다.

  2. 보강하려는 데이터 세트를 연결합니다. 특정 열만 사용하거나 일부를 제외하여 새 사례를 구축하기 위한 기능 공간을 지정하려면 데이터 세트에서 열 선택 구성 요소를 사용합니다. 그런 다음, SMOTE를 사용하기 전에 사용하려는 열을 격리할 수 있습니다.

    그렇지 않으면 SMOTE를 통해 새 사례를 만들 때 사용자가 입력으로 제공한 모든 열이 기반으로 사용됩니다. 기능 열 중 하나 이상의 열이 숫자입니다.

  3. 레이블 또는 대상 클래스를 포함하는 열이 선택되어 있는지 확인합니다. SMOTE는 이진 레이블만 허용합니다.

  4. SMOTE 구성 요소는 레이블 열에서 소수 클래스를 자동으로 식별한 다음, 해당 클래스에 대한 모든 예제를 가져옵니다. 모든 열에는 NaN 값이 있을 수 없습니다.

  5. SMOTE 백분율 옵션에서 출력 데이터 세트에 있는 소수 사례의 대상 백분율을 나타내는 정수를 입력합니다. 예:

    • 0을 입력합니다. SMOTE 구성 요소는 입력으로 제공한 것과 정확히 동일한 데이터 세트를 반환합니다. 새로운 소수 사례를 추가하지 않습니다. 이 데이터 세트에서 클래스 비율은 변경되지 않았습니다.

    • 100을 입력합니다. SMOTE 구성 요소는 새로운 소수 사례를 생성합니다. 원래 데이터 세트에 있던 동일한 수의 소수 사례를 추가합니다. SMOTE는 다수 사례 수를 늘리지 않으므로 각 클래스의 사례 비율이 변경되었습니다.

    • 200을 입력합니다. 구성 요소는 원래 데이터 세트에 비해 소수 사례의 백분율을 두 배로 만듭니다. 이로 인해 소수 사례 수가 전보다 두 배로 늘어나지는 않습니다. 대신, 다수 사례 수가 동일하게 유지되는 방식으로 데이터 세트의 크기가 증가합니다. 소수 사례 수는 원하는 백분율 값과 일치할 때까지 증가합니다.

    참고

    SMOTE 백분율에는 100의 배수만 사용합니다.

  6. 가장 인접한 항목 수 옵션을 사용하여 새 사례를 구축할 때 SMOTE 알고리즘에서 사용하는 기능 공간의 크기를 결정합니다. 가장 인접한 항목은 대상 사례와 비슷한 데이터 행(사례)입니다. 두 사례 사이의 거리는 가중치가 적용된 모든 기능의 벡터를 결합하여 측정됩니다.

    • 가장 인접한 항목 수를 늘리면 더 많은 사례에서 기능을 얻을 수 있습니다.
    • 가장 인접한 항목 수를 낮게 유지하면 원래 샘플의 기능과 매우 유사한 기능을 사용할 수 있습니다.
  7. 동일한 데이터를 사용하는 동일한 파이프라인의 실행에서 동일한 결과를 보장하려면 임의 시드 상자에 값을 입력합니다. 그러지 않으면 파이프라인을 배포할 때 구성 요소가 프로세서 클록 값을 기준으로 임의 시드를 생성합니다. 임의 시드가 생성되면 실행에서 약간 다른 결과가 발생할 수 있습니다.

  8. 파이프라인을 제출합니다.

    구성 요소의 출력은 원래 행을 포함하는 데이터 세트와 소수 사례가 포함된 많은 수의 추가된 행을 포함합니다.

기술 정보

  • SMOTE 구성 요소를 사용하는 모델을 게시하는 경우 예측 파이프라인에서 SMOTE를 제거한 후 웹 서비스로 게시합니다. 왜냐하면 SMOTE는 학습 중에 모델을 개선하기 위한 것이고, 채점용이 아니기 때문입니다. 게시된 예측 파이프라인이 SMOTE 구성 요소를 포함하는 경우 오류가 발생할 수 있습니다.

  • SMOTE를 적용하기 전에 누락된 값을 정리하거나 다른 변환을 적용하여 데이터를 수정하면 더 나은 결과를 얻는 경우가 많습니다.

  • 일부 연구원은 SMOTE가 텍스트 분류 또는 유전체학 데이터 세트에서 사용되는 데이터와 같은 고차원 또는 스파스 데이터에 적용되는지 조사했습니다. 이 문서에는 Blagus 및 Lusa: 고차원 클래스 불균형 데이터를 위한 SMOTE 같은 사례에서 SMOTE를 적용할 경우의 효과와 이론적 유효성이 잘 요약되어 있습니다.

  • SMOTE가 데이터 세트에서 유효하지 않을 경우 고려할 수 있는 다른 방법은 다음과 같습니다.

    • 소수 사례를 오버샘플링하거나 다수 사례를 언더샘플링하는 방법
    • 클러스터링, 모음 만들기 또는 적응형 부스트를 사용하여 학습자를 직접적으로 도와주는 앙상블 기법

다음 단계

Azure Machine Learning에서 사용 가능한 구성 요소 집합을 참조하세요.