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

1. 개요

이 실습에서는 Vertex AI를 사용하여 테이블 형식 데이터로 모델을 학습시키고 서빙합니다. 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단계: 노트북 열기

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

노트북 열기

모델을 학습하는 데 사용할 데이터는 이 신용카드 사기 감지 데이터 세트에서 가져옵니다. 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 콘솔의 탐색 메뉴를 사용하여 스토리지로 이동하고 버킷을 선택하고 '삭제'를 클릭합니다.

스토리지 삭제