Vertex AI: AutoML로 사기 감지 모델 빌드

1. 개요

이 실습에서는 Vertex AI를 사용하여 테이블 형식 데이터로 모델을 학습시키고 제공합니다. Google Cloud의 최신 AI 제품으로, 현재 미리보기 버전으로 제공됩니다.

학습 내용

다음 작업을 수행하는 방법을 배우게 됩니다.

  • Vertex AI에 관리형 데이터 세트 업로드
  • AutoML을 사용해 모델 학습시키기
  • 엔드포인트에 학습된 AutoML 모델을 배포하고 해당 엔드포인트를 사용하여 예측 가져오기

Google Cloud에서 이 실습을 진행하는 데 드는 총 비용은 약 $22입니다.

2. Vertex AI 소개

이 실습에서는 Google Cloud에서 제공되는 최신 AI 제품을 사용합니다. Vertex AI는 Google Cloud 전반의 ML 제품을 원활한 개발 환경으로 통합합니다. 예전에는 AutoML로 학습된 모델과 커스텀 모델은 별도의 서비스를 통해 액세스할 수 있었습니다. 새 서비스는 다른 새로운 제품과 함께 두 가지 모두를 단일 API로 결합합니다. 기존 프로젝트를 Vertex AI로 이전할 수도 있습니다. 의견이 있는 경우 지원 페이지를 참고하세요.

Vertex AI에는 엔드 투 엔드 ML 워크플로를 지원하는 다양한 제품이 포함되어 있습니다. 이 실습에서는 아래에 강조 표시된 테이블 형식 데이터용 AutoML, 예측, Workbench 제품에 중점을 둡니다.

Vertex 제품 개요

3. 환경 설정

이 Codelab을 실행하려면 결제가 사용 설정된 Google Cloud Platform 프로젝트가 필요합니다. 프로젝트를 만들려면 여기의 안내를 따르세요.

1단계: Compute Engine API 사용 설정

아직 사용 설정되지 않은 경우 Compute Engine으로 이동하고 사용 설정을 선택합니다. 이것은 노트북 인스턴스를 생성하는 데 필요합니다.

2단계: Vertex AI API 사용 설정

Cloud Console의 Vertex AI 섹션으로 이동하고 Vertex AI API 사용 설정을 클릭합니다.

Vertex 대시보드

3단계: Vertex AI Workbench 인스턴스 만들기

Cloud 콘솔의 Vertex AI 섹션에서 'Workbench'를 클릭합니다.

Vertex AI 메뉴

여기에서 사용자 관리형 노트북 내에서 새 노트북을 클릭합니다.

새 노트북 만들기

그런 다음 GPU 없는 최신 버전의 TensorFlow Enterprise (LTS 포함) 인스턴스 유형을 선택합니다.

TFE 인스턴스

기본 옵션을 사용한 다음 만들기를 클릭합니다.

5단계: Google 노트 열기

인스턴스가 생성되면 JupyterLab 열기를 선택합니다.

노트북 열기

모델 학습에 사용할 데이터는 이 신용카드 사기 감지 데이터 세트에서 가져옵니다. Google은 BigQuery에서 공개적으로 제공되는 이 데이터 세트의 버전을 사용합니다.

4. 관리형 데이터 세트 만들기

Vertex AI에서는 다양한 데이터 유형에 대한 관리형 데이터 세트를 생성할 수 있습니다. 그런 다음 이 데이터 세트에 대한 통계를 생성하고 이를 사용하여 AutoML 또는 자체 커스텀 모델 코드로 모델을 학습시킬 수 있습니다.

1단계: 데이터 세트 생성

콘솔의 Vertex 메뉴에서 데이터 세트를 선택합니다.

데이터 세트 선택

이 실습에서는 특정 신용카드 거래가 사기로 분류되어야 하는지 판단하기 위한 사기 감지 모델을 만들어 보겠습니다.

데이터 세트 페이지에서 데이터 세트의 이름을 지정한 다음 테이블 형식회귀/분류를 선택합니다. 그런 다음 데이터 세트를 만듭니다.

데이터 세트 만들기

Vertex의 관리형 데이터 세트로 데이터를 가져오는 몇 가지 옵션은 다음과 같습니다.

  • 컴퓨터에서 로컬 파일 업로드
  • Cloud Storage에서 파일 선택
  • BigQuery에서 데이터 선택

여기서는 공개 BigQuery 테이블의 데이터를 업로드합니다.

2단계: BigQuery에서 데이터 가져오기

'BigQuery에서 테이블 또는 뷰 선택'을 선택합니다. 를 가져온 다음 BigQuery 테이블 상자에 bigquery-public-data.ml_datasets.ulb_fraud_detection를 복사합니다. 그런 다음 계속을 선택합니다.

BQ 데이터 가져오기

데이터 세트를 가져오면 다음과 같이 표시됩니다.

가져온 데이터

원하는 경우 통계 생성을 클릭하여 이 데이터 세트에 대한 추가 정보를 볼 수 있지만 다음 단계로 진행하기 전에 필수사항은 아닙니다. 이 데이터 세트에는 실제 신용카드 거래가 포함되어 있습니다. 대부분의 열 이름이 가려져서 V1, V2 등으로 불립니다.

5. AutoML을 사용해 모델 학습시키기

관리형 데이터 세트가 업로드되면 이 데이터로 모델을 학습시킬 준비가 된 것입니다. 특정 거래가 사기인지 여부를 예측하기 위해 분류 모델을 학습시킬 예정입니다. Vertex AI는 학습 모델을 위한 두 가지 옵션을 제공합니다.

  • AutoML: 최소한의 수고와 ML 전문 지식으로 고품질 모델을 학습시킵니다.
  • 커스텀 학습: Google Cloud의 사전 빌드된 컨테이너 중 하나를 사용하거나 자체 컨테이너를 사용하여 클라우드에서 커스텀 학습 애플리케이션을 실행합니다.

이 실습에서는 AutoML을 학습에 사용합니다.

1단계: 학습 작업 시작

이전 단계에서 중단한 데이터 세트 세부정보 페이지의 오른쪽 상단에 있는 새 모델 학습을 선택합니다. 목표로 분류를 선택하고 모델 학습을 위해 AutoML을 선택한 상태로 두고 계속을 클릭합니다.

모델 학습 1단계

모델에 이름을 지정하거나 기본값을 사용할 수 있습니다. 타겟 열에서 클래스를 선택합니다. 특정 거래의 사기 여부를 나타내는 정수입니다 (사기가 아닌 경우 0, 사기인 경우 1).

그런 다음 계속을 선택합니다.

모델 학습 2단계

이 단계에서는 아래로 스크롤하여 고급 옵션을 클릭하여 펼칩니다. 이 데이터 세트는 균형이 잡히지 않기 때문에 (데이터의 1% 미만에 허위 거래가 포함됨) 덜 일반적인 클래스의 정밀도-재현율을 극대화하는 AUC PRC 옵션을 선택합니다.

고급 교육 옵션

계속을 선택하고 마지막 단계 (컴퓨팅 및 가격 책정)로 진행합니다. 여기에 예산의 노드 시간으로 1을 입력하고 조기 중단을 사용 설정한 상태로 둡니다. 처음에는 컴퓨팅 1시간 동안 AutoML 모델을 학습시키면 선택한 특성과 라벨 사이에 관계가 있는지 여부를 파악하는 데 도움이 됩니다. 이후 특성을 수정하고 학습 시간을 늘려 모델 성능을 개선하면 됩니다. 그런 다음 학습 시작을 선택합니다.

학습 작업이 완료되면 이메일이 전송됩니다. 리소스를 가동하고 해체하는 시간을 감안하여 학습에는 1시간보다 약간 더 오래 걸립니다.

6. 모델 평가 측정항목 살펴보기

이 단계에서는 모델의 성능을 살펴보겠습니다.

모델 학습 작업이 완료되면 Vertex의 모델 탭으로 이동합니다. 방금 학습시킨 모델을 클릭하고 평가 탭을 살펴봅니다. 여기에는 많은 평가 측정항목이 있습니다. 여기서는 혼동 행렬특성 중요도라는 두 가지 측정항목을 집중적으로 살펴볼 것입니다.

1단계: 혼동 행렬 이해

혼동 행렬은 테스트 세트에 있는 각 클래스에서 모델이 올바르게 예측한 예시의 비율을 알려줍니다. 우리가 다루고 있는 것과 같은 불균형 데이터 세트의 경우 전체 정확성보다 모델의 성능을 더 잘 측정합니다.

데이터 세트의 예 중 사기 거래는 1% 미만이므로 모델의 정확성이 99% 라면 99% 확률로 사기가 아닌 클래스를 무작위로 추측할 가능성이 높습니다. 따라서 여기에서 각 클래스에 대한 모델의 정확성을 확인하는 것이 더 나은 측정항목입니다.

평가 탭에서 아래로 스크롤하면 다음과 같은 혼동 행렬이 표시됩니다 (정확한 비율은 다를 수 있음).

혼동 행렬

혼동 행렬은 초기 모델이 테스트 세트에 있는 허위 예시의 85% 를 올바르게 분류할 수 있음을 보여줍니다. 이는 특히 상당한 데이터 세트 불균형을 고려하면 꽤 좋은 현상입니다. 다음으로, 모델을 더 많은 컴퓨팅 시간으로 학습시켜 85%에서 개선할 수 있는지 확인합니다.

2단계: 특성 중요도 확인하기

혼동 행렬 아래에 다음과 같은 특성 중요도 차트가 표시됩니다.

특성 중요도

이를 통해 예측을 할 때 모델에 가장 큰 신호를 제공한 특성을 알 수 있습니다. 특성 중요도는 Explainable AI의 한 유형입니다. ML 모델에 대한 더 많은 유용한 정보를 얻기 위한 다양한 방법을 포함하는 필드가 예측을 수행하는 것입니다. 여기에 표시된 특성 중요도 차트는 테스트 세트에 대한 모든 모델의 예측을 바탕으로 집계하여 계산됩니다. 이를 통해 일련의 예시에서 가장 중요한 특성을 확인할 수 있습니다.

이 차트는 데이터 세트의 대부분의 특성이 가려지지 않았다면 더욱 흥미로울 것입니다. 예를 들어 거래 유형 (송금, 입금 등)이 사기의 가장 큰 지표였음을 알 수 있습니다.

실제 시나리오에서는 이러한 특성 중요도 값을 사용하여 모델을 개선하고 예측 신뢰도를 높일 수 있습니다. 다음에 모델을 학습시킬 때 중요도가 가장 낮은 특성을 삭제하거나 더 중요한 특성 두 개를 특성 교차로 결합하여 모델 성능이 개선되는지 확인할 수 있습니다.

여기서는 배치 전체의 특성 중요도를 살펴보고 있지만 Vertex AI의 개별 예측에 대한 특성 중요도도 구할 수 있습니다. 모델을 배포한 후 이를 수행하는 방법을 알아보겠습니다.

7. 엔드포인트에 모델 배포하기

학습된 모델이 있으므로 다음 단계는 Vertex에서 엔드포인트를 만드는 것입니다. Vertex의 모델 리소스에는 여러 엔드포인트가 연결되어 있을 수 있으며 엔드포인트 간에 트래픽을 분할할 수 있습니다.

1단계: 엔드포인트 만들기

모델 페이지에서 배포 및 테스트 탭으로 이동하여 엔드포인트에 배포를 클릭합니다.

배포 및 테스트

엔드포인트에 이름(예: fraud_v1)을 지정하고 액세스 권한을 표준으로 그대로 두고 계속을 클릭합니다.

트래픽 분할과 머신 유형은 기본 설정으로 두고 완료를 클릭한 다음 계속을 클릭합니다.

이 엔드포인트에는 모델 모니터링을 사용하지 않으므로 선택하지 않은 상태로 두고 배포를 클릭하면 됩니다. 엔드포인트를 배포하는 데 몇 분 정도 걸립니다. 완료되면 작업 옆에 녹색 체크표시가 나타납니다.

배포된 엔드포인트

거의 다 되었습니다. 이제 배포된 모델에 대한 예측을 가져올 준비가 되었습니다.

8. 배포된 모델을 기반으로 예측 얻기

모델 예측을 수행하기 위한 몇 가지 옵션이 있습니다.

  • Vertex AI UI
  • Vertex AI API

여기에 둘 다 표시하겠습니다.

1단계: UI에서 모델 예측 가져오기

엔드포인트가 표시된 모델 페이지 (이전 단계에서 중단한 위치)에서 모델 테스트 섹션까지 아래로 스크롤합니다.

모델 테스트

여기서 Vertex AI는 테스트 예측을 얻는 데 사용할 수 있는 모델의 각 특성에 대해 임의의 값을 선택했습니다. 원하는 경우 이 값을 변경할 수 있습니다. 페이지 하단으로 스크롤하여 예측을 선택합니다.

페이지의 예측 결과 섹션에 각 클래스에 대한 모델의 예측 비율이 표시됩니다. 예를 들어 0 클래스의 신뢰도 점수가 0.99이면 모델이 이 예의 99% 가 사기가 아니라고 판단한다는 의미입니다.

2단계: Vertex AI API를 사용하여 모델 예측 수행하기

배포된 엔드포인트가 예상대로 작동하는지 확인하는 데는 UI가 유용하지만, REST API 호출을 통해 동적으로 예측을 가져오고자 할 수도 있습니다. 여기서 모델 예측을 수행하는 방법을 보여주기 위해 이 실습의 시작 부분에서 생성한 Vertex Workbench 인스턴스를 사용합니다.

다음으로, 만든 노트북 인스턴스를 열고 런처에서 Python 3 노트북을 엽니다.

노트북 열기

노트북의 셀에서 다음을 실행하여 Vertex SDK를 설치합니다.

!pip3 install google-cloud-aiplatform --upgrade --user

그런 다음 노트북에 셀을 추가하여 SDK를 가져오고 방금 배포한 엔드포인트에 대한 참조를 만듭니다.

from google.cloud import aiplatform

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/YOUR-PROJECT-NUMBER/locations/us-central1/endpoints/YOUR-ENDPOINT-ID"
)

endpoint_name 문자열의 두 값을 프로젝트 번호 및 엔드포인트로 바꿔야 합니다. 프로젝트 대시보드로 이동하여 프로젝트 번호 값을 가져오면 프로젝트 번호를 찾을 수 있습니다.

엔드포인트 ID는 콘솔의 엔드포인트 섹션에서 찾을 수 있습니다.

엔드포인트 ID 찾기

마지막으로 아래 코드를 복사하고 새 셀에서 실행하여 엔드포인트에 예측을 수행합니다.

test_instance={
    'Time': 80422,
    'Amount': 17.99,
    'V1': -0.24,
    'V2': -0.027,
    'V3': 0.064,
    'V4': -0.16,
    'V5': -0.152,
    'V6': -0.3,
    'V7': -0.03,
    'V8': -0.01,
    'V9': -0.13,
    'V10': -0.18,
    'V11': -0.16,
    'V12': 0.06,
    'V13': -0.11,
    'V14': 2.1,
    'V15': -0.07,
    'V16': -0.033,
    'V17': -0.14,
    'V18': -0.08,
    'V19': -0.062,
    'V20': -0.08,
    'V21': -0.06,
    'V22': -0.088,
    'V23': -0.03,
    'V24': 0.01,
    'V25': -0.04,
    'V26': -0.99,
    'V27': -0.13,
    'V28': 0.003
}

response = endpoint.predict([test_instance])

print('API response: ', response)

0 클래스에 대해 .67에 대한 예측이 표시됩니다. 즉, 모델에서 이 거래가 사기가 아닐 확률이 67% 라고 판단한다는 의미입니다.

🎉 수고하셨습니다. 🎉

Vertex AI를 사용하여 다음을 수행하는 방법을 배웠습니다.

  • 관리형 데이터 세트 업로드
  • AutoML을 사용하여 테이블 형식 데이터에서 모델 학습 및 평가
  • 엔드포인트에 모델 배포
  • Vertex용 SDK를 사용하여 모델 엔드포인트에서 예측 수행하기

Vertex AI의 다른 부분에 대해 자세히 알아보려면 문서를 확인하세요.

9. 삭제

이 실습에서 만든 노트북을 계속 사용하려면 사용하지 않을 때 노트북을 끄는 것이 좋습니다. Cloud 콘솔의 Workbench UI에서 노트북을 선택한 다음 중지를 선택합니다.

노트북을 완전히 삭제하려면 오른쪽 상단의 삭제 버튼을 클릭하면 됩니다.

배포한 엔드포인트를 삭제하려면 Vertex AI 콘솔의 엔드포인트 섹션으로 이동하여 엔드포인트에서 모델 배포를 취소합니다.

엔드포인트 삭제

스토리지 버킷을 삭제하려면 Cloud 콘솔의 탐색 메뉴를 사용하여 스토리지로 이동하고 버킷을 선택하고 '삭제'를 클릭합니다.

스토리지 삭제