사진과 음악을 좋아하는 개발자 지망생의 블로그

[데이터 웨어하우스 - 중급] 2. Redshift - ⑦ Redshift ML 사용하기 본문

개발/데이터 웨어하우스 - 중급

[데이터 웨어하우스 - 중급] 2. Redshift - ⑦ Redshift ML 사용하기

devculture309 2023. 5. 25. 12:56
반응형

1. 머신러닝의 정의

머신러닝은 학습 가능한 기계 또는 알고리즘을 개발하는 분야입니다. 머신러닝은 데이터의 패턴을 인식하고 이를 토대로 학습하는 방식으로 작동합니다. 이러한 학습은 트레이닝셋이라고 불리는 데이터를 사용하여 이루어집니다.

 

머신러닝은 컴퓨터가 스스로 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야입니다. 딥러닝은 머신러닝의 한 분야로, 신경망을 기반으로 한 기술입니다. 딥러닝은 비전(영상 인식), 자연어 처리(텍스트 및 음성 인식) 등 다양한 영역에서 활용되고 있습니다.

 

인공지능은 머신러닝을 포괄하는 개념으로, 기계 또는 시스템이 인간의 지능적인 작업을 수행하는 것을 의미합니다. 머신러닝은 인공지능의 일부분으로서, 데이터를 기반으로 스스로 학습하는 알고리즘과 기술을 개발하는 분야입니다.

 

 

 

2. 머신러닝 모델이란?

머신러닝 모델은 머신러닝의 최종 산물입니다. 이 모델은 학습된 패턴에 따라 예측을 수행하는 블랙박스입니다. 선택한 머신러닝 학습 알고리즘에 따라 모델의 내부 구조가 달라지며, 디버깅이 어렵고 동작 원리를 설명하기도 어려울 수 있습니다. 머신러닝 모델의 품질은 사용된 트레이닝셋의 품질에 크게 의존합니다.

 

머신러닝 모델은 입력 데이터를 기반으로 예측을 수행합니다. 주로 지도 머신러닝(Supervised Machine Learning) 방식으로 작동하며, 입력 데이터와 해당 데이터에 대한 정답(레이블)이 함께 제공됩니다. 그러나 비지도 머신러닝(Unsupervised Machine Learning)과 강화 학습(Reinforcement Learning)과 같은 다른 두 가지 머신러닝 방식도 존재합니다.

 

머신러닝 모델 트레이닝 또는 빌딩은 이러한 머신러닝 모델을 만드는 과정을 의미합니다. 입력으로 사용되는 데이터는 트레이닝셋이며, 이를 활용하여 모델을 학습시킵니다.

머신러닝 모델 레이닝셋은 X와 Y로 구성됩니다. X는 입력 데이터 또는 피쳐(Feature)를 의미하고, Y는 해당 입력 데이터에 대한 예측값 또는 레이블(Label)을 의미합니다.

 

학습 알고리즘은 머신러닝 모델이 트레이닝셋을 기반으로 학습하는 방법을 정의합니다. 이 알고리즘은 모델이 X와 Y 사이의 관계를 파악하고 예측을 수행할 수 있도록 돕습니다.

 

머신러닝 모델은 학습된 패턴을 기반으로 입력 데이터에 대한 예측을 수행하는 블랙박스입니다. 이 모델은 학습 알고리즘에 따라 내부 구조와 동작 방식이 달라집니다. 딥러닝은 머신러닝의 한 분야로, 신경망을 기반으로 한 딥러닝 모델을 사용하는 방법입니다.

 

지도 머신러닝은 X와 Y의 관계를 학습하는 방식으로, 주어진 트레이닝셋에 정답(레이블)이 함께 제공됩니다. 다른 학습 방식에는 비지도 학습(Unsupervised Learning)이 있으며, 정답이 없는 상태에서 데이터의 패턴이나 구조를 학습합니다.

 

 

 

3. Amazon SageMaker란?

Amazon SageMaker는 AWS(Amazon Web Services)에서 제공하는 머신러닝 모델 개발 및 운영을 위한 서비스입니다. SageMaker는 MLOps(Machine Learning Operations) 프레임워크로, 머신러닝 개발의 전 과정을 지원합니다.

 

Amazon SageMaker는 크게 네 가지 기능을 제공합니다. 첫째로, 트레이닝 셋 준비를 위한 도구를 제공하여 데이터 전처리 및 준비를 쉽게 할 수 있습니다. 둘째로, 모델 훈련을 위한 환경과 알고리즘을 제공하여 머신러닝 모델의 훈련을 수행할 수 있습니다. 셋째로, 모델 검증을 위한 기능을 제공하여 훈련된 모델을 평가하고 성능을 확인할 수 있습니다. 넷째로, 모델 배포와 관리를 위한 기능을 제공하여 API 엔드포인트를 통해 모델을 서빙하거나 배치 서빙을 수행할 수 있습니다.

 

Amazon SageMaker는 다양한 머신러닝 프레임워크를 지원합니다. TensorFlow/Keras, PyTorch, MXNet 등과 같은 프레임워크를 사용할 수 있으며, 자체 SageMaker 모듈을 통해 머신러닝 모델의 훈련도 가능합니다. 또한, SageMaker Studio라는 웹 기반 환경을 제공하여 노트북 형식으로 개발 및 모델 훈련을 수행할 수 있습니다.

 

Amazon SageMaker는 다양한 개발 방식을 지원합니다. 기본적으로 Python Notebook을 통해 모델 훈련을 수행할 수 있으며, 스칼라/자바 SDK도 제공됩니다. 또한, AutoPilot이라는 기능을 통해 코딩 없이 모델 훈련이 가능하며, 해당 기능에서도 코드를 자동으로 생성해줍니다.

 

다른 클라우드 업체들도 비슷한 머신러닝 프레임워크를 제공하고 있으며, 각자의 서비스로 머신러닝 모델 개발과 운영을 지원합니다.

 

 

 

4. SageMaker의 AutoPilot 소개

SageMaker의 AutoPilot은 SageMaker에서 제공되는 AutoML(자동 머신러닝) 기능입니다. AutoML은 모델 빌딩을 위한 훈련용 데이터셋을 제공하면 자동으로 모델을 생성해주는 기능을 의미합니다.

 

AutoPilot은 훈련용 데이터셋을 입력으로 받아 다음과 같은 작업들을 자동으로 수행합니다. 먼저, 데이터 분석(EDA: Exploratory Data Analysis)을 수행하고 이를 파이썬 노트북 형태로 제공합니다. 그 다음, 다양한 머신 러닝 알고리즘과 하이퍼파라미터 조합에 대해 아래 작업을 수행합니다.

  1. 머신 러닝 모델을 만들고 훈련합니다.
  2. 훈련된 모델을 테스트하고 테스트 결과를 기록합니다.

AutoPilot은 선택 옵션에 따라 모델 테스트까지 수행할 수도 있지만, 코드를 생성하는 단계(노트북)로 마무리할 수도 있습니다. 즉, AutoPilot 기능을 통해 모델 개발 속도를 단축할 수 있습니다.

 

AutoPilot을 사용하면 최종적으로 사용자는 생성된 모델 중에서 선택할 수 있으며, 선택한 모델을 API로 만들어 사용할 수도 있습니다. 또한, 로그 설정을 통해 전체 로깅이나 샘플 로깅을 설정할 수도 있습니다.

 

 

 

5. Redshift ML 예제 실습

5 - 1. Orange Telecom Customer Churn 데이터 다운로드

Orange Telecom Customer Churn 데이터셋은 고객 이탈 예측을 위한 데이터셋으로, 일반적으로 기계 학습과 데이터 분석 작업에 활용됩니다. 아래는 데이터셋에 대한 상세 설명입니다.

  • 파일 이름: train.csv
  • 컬럼 수: 21개
  • 레코드(행) 수: 3,333개

데이터셋의 특이한 점은 레코드의 20%가 "Purpose" 컬럼의 값이 "Test"이고, 나머지 80%는 "Train"이라는 값을 갖는다는 것입니다. "Purpose" 컬럼은 데이터셋을 훈련 데이터와 테스트 데이터로 분할하기 위해 사용되는 레이블 또는 목적 값을 나타냅니다. 이러한 분할은 일반적으로 모델의 성능을 평가하고 검증하기 위해 데이터를 훈련 세트와 테스트 세트로 나누는 데 사용됩니다.

 

 

5 - 2. train.csv를 S3 버킷 아래 redshift_ml 폴더 아래 업로드

  1. AWS S3 웹콘솔에 로그인하고, 작업을 수행할 버킷으로 이동합니다.
  2. 버킷 아래에 "redshift_ml"이라는 폴더를 생성합니다.
  3. "redshift_ml" 폴더 안으로 이동합니다.
  4. "Upload" 또는 "업로드" 버튼을 클릭하여 앞서 다운로드한 "train.csv" 파일을 선택합니다.
  5. 업로드가 완료되면 파일의 S3 경로를 확인합니다. 예를 들어, "s3://user-test-bucket/redshift_ml/train.csv"와 같은 형식이 될 수 있습니다.

이제 "train.csv" 파일이 S3 버킷의 "redshift_ml" 폴더에 업로드되었습니다. 이 파일은 AWS Redshift ML과 같은 서비스에서 활용할 수 있습니다.

 

 

5 - 3. S3 train.csv를 raw_data.orange_telecom_customers로 로딩

아래 SQL문은 "raw_data.orange_telecom_customers"라는 Redshift 테이블을 생성하고, S3 버킷에 위치한 "train.csv" 파일의 데이터를 해당 테이블로 로딩하는 작업을 수행합니다.

CREATE TABLE raw_data.orange_telecom_customers (
 state varchar,
 account_length integer,
 area_code integer, 
 international_plan varchar,
 …
 customer_service_calls integer, 
 churn varchar,
 purpose varchar
);

COPY raw_data.orange_telecom_customers
FROM 's3://user-test-bucket/redshift_ml/train.csv'
credentials 'aws_iam_role=arn:aws:iam::1234567800:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 
removequotes;

① 먼저, "raw_data.orange_telecom_customers"라는 테이블을 생성합니다. 테이블의 구조는 주어진 컬럼 목록에 따라 정의되어 있습니다. 여기에는 예시로 주어진 컬럼 외에도 필요한 모든 컬럼이 포함되어야 합니다.

 

COPY 문을 사용하여 "train.csv" 파일의 데이터를 "raw_data.orange_telecom_customers" 테이블로 로딩합니다. COPY 문은 S3 경로, 인증 정보, 구분자, 날짜 및 시간 형식 등의 옵션을 설정합니다.

  • FROM 's3://user-test-bucket/redshift_ml/train.csv': 로드할 파일의 S3 경로를 지정합니다.
  • credentials 'aws_iam_role=arn:aws:iam::1234567800:role/redshift.read.s3': S3에 액세스하기 위한 IAM 역할 ARN을 설정합니다.
  • delimiter ',': 데이터의 구분자로 쉼표를 사용합니다
  • dateformat 'auto' timeformat 'auto': 날짜와 시간 형식을 자동으로 인식합니다.
  • IGNOREHEADER 1: 첫 번째 행을 헤더로 처리하지 않습니다.
  • removequotes: 따옴표를 제거하는 옵션입니다.

위의 SQL 문을 실행하면 "train.csv" 파일의 데이터가 "raw_data.orange_telecom_customers" 테이블로 로드됩니다. 필요에 따라 컬럼 구조나 옵션을 조정하여 SQL 문을 수정할 수 있습니다.

 

 

5 - 4. SageMaker 사용권한을 Redshift cluster에 지정

아래는 SageMaker 사용권한을 Redshift 클러스터에 지정하는 단계입니다.

 

AWS Management Console에서 새로운 IAM Role을 생성합니다.

  1. 권한 추가 단계에서 "AWS 서비스"를 선택하고, SageMaker 및 S3와 관련된 필요한 권한을 선택합니다.

② 생성한 IAM Role을 Redshift에서 사용할 수 있도록 지정해야 합니다.

  1. Redshift 관리 콘솔로 이동하고, 클러스터를 선택한 뒤 "속성" 탭으로 이동합니다.
  2. "연합 IAM 역할" 섹션에서 "IAM 역할 추가"를 클릭합니다.
  3. "IAM 역할 추가" 창에서 "Redshift"를 "Principal"로 선택한 후, 위에서 생성한 IAM Role을 선택합니다.

마지막으로, 이 권한의 ARN(Amazon Resource Name)을 클립보드에 복사합니다.

     이 ARN은 SageMaker에서 Redshift 클러스터에 접근할 때 사용됩니다.

 

 

5 - 4. CREATE MODEL 명령을 사용하여 ML 모델 생성

CREATE MODEL 명령을 사용하여 ML 모델을 생성하고 SQL 함수를 지정하는 단계는 다음과 같습니다.

CREATE MODEL orange_telecom_customers_model 
FROM (
  SELECT
    state, account_length, ..., customer_service_calls, churn
  FROM raw_data.orange_telecom_customers
  WHERE purpose = 'Train'
)
TARGET churn
FUNCTION ml_fn_orange_telecom_customers
IAM_ROLE 'arn:aws:iam::1234567800:role/Redshift-ML'
SETTINGS (
  S3_BUCKET 'usesr-test-bucket'
);

위 명령은 'raw_data.orange_telecom_customers' 테이블에서 'purpose' 컬럼 값이 'Train'인 데이터를 사용하여 SageMaker를 통해 ML 모델을 생성합니다. 모델의 타겟은 churn 컬럼으로 지정되며, ML 모델을 호출할 수 있는 SQL 함수로 'ml_fn_orange_telecom_customers'가 지정됩니다. IAM 역할은 'arn:aws:iam::1234567800:role/Redshift-ML'로 설정되며, S3 버킷으로 'user-test-bucket'이 사용됩니다.

 

 

5 - 5. MODEL이 만들어질 때까지 대기

HOW MODEL 명령을 실행하여 모델이 준비되었는지 체크할 수 있습니다. 아래와 같이 명령을 실행하면 모델의 상태와 관련된 정보를 확인할 수 있습니다.

SHOW MODEL orange_telecom_customers_model;

위 명령을 실행하면 모델의 상태, 알고리즘, 파라미터 등의 정보를 확인할 수 있습니다. 대기하는 동안 약 $21의 비용이 발생할 수 있습니다.

 

 

5 - 6. Model SQL 함수로 테이블의 Test 레코드들을 대상으로 예측 수행

모델의 SQL 함수를 사용하여 테이블의 Test 레코드들에 대한 예측을 수행할 수 있습니다. 아래의 쿼리를 사용하면 ml_fn_orange_telecom_customers 함수를 호출하여 churn 필드와 비교한 예측 값을 얻을 수 있습니다.

SELECT churn,
 ml_fn_orange_telecom_customers(
 state, account_length, area_code, international_plan, voice_mail_plan, 
 number_vmail_messages, total_day_minutes, total_day_calls, 
 total_day_charge, total_eve_minutes, total_eve_calls, total_eve_charge, 
 total_night_minutes, total_night_calls, total_night_charge, 
 total_intl_minutes, total_intl_calls, total_intl_charge, 
 customer_service_calls
 ) AS "prediction"
FROM raw_data.orange_telecom_customers
WHERE purpose = 'Test';

위의 쿼리를 실행하면 Test 레코드들에 대한 churn 필드와 예측 값을 조회할 수 있습니다.

 

 

5 - 7. Model을 제거하고 기타 청소 작업 수행

Model을 제거하기 위해 DROP MODEL 명령을 실행할 수 있습니다. 또한, SageMaker 서비스 웹 콘솔을 통해 남은 잔재들을 확인하고 삭제할 수 있습니다.

DROP MODEL orange_telecom_customers_model;

위의 명령을 실행하여 Model을 제거할 수 있습니다. 이후 SageMaker 서비스 웹 콘솔을 방문하여 남은 잔재들이 있는지 확인하고 필요한 경우 삭제 작업을 수행하시면 됩니다.

반응형