Amazon Redshift ML 시작하기
Amazon Redshift 기계 학습을 사용하면 SQL 사용자가 익숙한 SQL 명령으로 기계 학습 모델을 쉽게 생성, 훈련 및 배포할 수 있습니다. Amazon Redshift ML을 사용하면 Redshift 클러스터의 데이터와 Amazon SageMaker로 모델을 훈련할 수 있습니다. 그 후 모델이 현지화되고 Amazon Redshift 데이터베이스 내에서 예측이 가능합니다. 현재 Amazon Redshift ML은 기계 학습 알고리즘인 XGBoost(AUTO ON 및 OFF)와 다계층 퍼셉트론(AUTO ON), K-평균(AUTO OFF) 및 선형 학습기를 지원합니다.
Amazon Redshift 기계 학습 관리를 위한 클러스터 및 구성 설정
Amazon Redshift 기계 학습을 사용하기 전에 클러스터 설정을 완료하고 Amazon Redshift 기계 학습 사용 권한을 구성합니다.
Amazon Redshift 기계 학습 사용을 위한 클러스터 설정
Amazon Redshift 기계 학습을 사용하기 전에 다음 사전 조건을 충족합니다.
Amazon Redshift 관리자는 Amazon Redshift 프로비저닝 클러스터를 사용하기 위해 다음의 일회성 설정을 수행합니다. Amazon Redshift Serverless에서 Amazon Redshift ML을 사용하려면 Amazon Redshift Serverless 시작하기를 참조하시기 바랍니다.
Amazon Redshift 기계 학습에 대해 일회성 클러스터 설정을 수행하려면
-
AWS Management Console 또는 AWS Command Line Interface(AWS CLI)를 사용하여 Redshift 클러스터를 생성합니다. 클러스터를 생성하는 동안 AWS Identity and Access Management(IAM) 정책을 연결해야 합니다. Amazon SageMaker에서 Amazon Redshift ML을 사용하는 데 필요한 권한에 대한 자세한 내용은 Amazon Redshift 기계 학습(ML)을 사용하는 데 필요한 권한을 참조하시기 바랍니다.
-
다음 방법 중 하나로 Amazon Redshift 기계 학습을 사용하는 데 필요한 IAM 역할을 생성합니다.
-
Amazon Redshift ML로 SageMaker를 사용하려면
AmazonS3FullAccess
및AmazonSageMakerFullAccess
정책을 포함해 IAM 역할을 만듭니다. 예측 모델도 만들 계획이라면AmazonForecastFullAccess
정책도 역할에 연결하세요. -
Amazon Redshift ML로 Amazon Bedrock을 사용하려면
AmazonS3FullAccess
및AmazonBedrockFullAccess
정책을 포함해 IAM 역할을 만듭니다. -
CREATE MODEL과 같은 SQL 명령을 실행할 수 있는 권한을 가진
AmazonRedshiftAllCommandsFullAccess
정책이 있는 Amazon Redshift 콘솔을 통해 IAM 역할을 생성하는 것이 좋습니다. Amazon Redshift는 원활한 API 기반 메커니즘을 사용하여 사용자를 대신하여 AWS 계정에서 프로그래밍 방식으로 IAM 역할을 생성합니다. Amazon Redshift는 기존 AWS 관리형 정책을 IAM 역할에 자동으로 연결합니다. 이 접근 방식을 사용하면 Amazon Redshift 콘솔 내에 머물 수 있고 역할 생성을 위해 IAM 콘솔로 전환할 필요가 없습니다. 자세한 내용은 Amazon Redshift의 기본값으로 IAM 역할 생성을 참조하세요.IAM 역할이 클러스터의 기본값으로 생성되면 리소스 이름의 일부로
redshift
를 포함하거나 Redshift 관련 태그를 사용하여 해당 리소스에 태그를 지정합니다.클러스터에 Enhanced Amazon VPC Routing이 설정된 경우 Amazon Redshift 콘솔을 통해 생성된 IAM 역할을 사용할 수 있습니다. 이 IAM 역할에는
AmazonRedshiftAllCommandsFullAccess
정책이 연결되어 있으며 정책에 다음 권한을 추가합니다. 이러한 추가 권한을 통해 Amazon Redshift는 계정에서 탄력적 네트워크 인터페이스(ENI)를 생성 및 삭제하고 Amazon EC2 또는 Amazon ECS에서 실행되는 컴파일 태스크에 연결할 수 있습니다. 이렇게 하면 인터넷 액세스가 차단된 Virtual Private Cloud(VPC) 내에서만 Amazon S3 버킷의 객체에 액세스할 수 있습니다.{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcEndpoints", "ec2:DescribeDhcpOptions", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:CreateNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "*" }
Amazon Bedrock 파운데이션 모델을 사용하려면 다음 섹션을 추가합니다.
// Required section if you use Bedrock models. { "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": [ "arn:aws:bedrock:
<region>
::foundation-model/*" ] } -
보다 제한적인 정책으로 IAM 역할을 생성하려는 경우 다음 정책을 사용합니다. 필요에 맞게 이 정책을 수정할 수도 있습니다.
Amazon S3 버킷
redshift-downloads/redshift-ml/
은 다른 단계 및 예제에 사용되는 샘플 데이터가 저장되는 위치입니다. Amazon S3에서 데이터를 로드할 필요가 없으면 이 버킷을 제거할 수 있습니다. 또는 Amazon Redshift로 데이터를 로드하는 데 사용하는 다른 Amazon S3 버킷으로 바꿉니다.
,your-account-id
및your-role
amzn-s3-demo-bucket
값은 CREATE MODEL 명령의 일부로 지정합니다.(옵션) Amazon Redshift 기계 학습을 사용하는 동안 AWS KMS 키를 지정하는 경우 샘플 정책의 AWS KMS 키 섹션을 사용합니다.
값은 CREATE MODEL 명령의 일부로 사용하는 키입니다.your-kms-key
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents", "sagemaker:*Job*", "sagemaker:AddTags", "sagemaker:CreateModel", "sagemaker:CreateEndpoint", "sagemaker:CreateEndpointConfig", "sagemaker:DeleteEndpoint", "sagemaker:DeleteEndpointConfig, "sagemaker:DeleteModel" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole", "s3:AbortMultipartUpload", "s3:GetObject", "s3:DeleteObject", "s3:PutObject" ], "Resource": [ "arn:aws:iam::
<your-account-id>
:role/<your-role>
", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:s3:::redshift-downloads/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket, "arn:aws:s3:::redshift-downloads" ] } // Optional section needed if you use AWS KMS keys. ,{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:<your-region>
:<your-account-id>
:key/<your-kms-key>
" ] } ] }
-
-
Amazon Redshift와 SageMaker가 다른 서비스와 상호 작용하는 역할을 맡도록 허용하려면 IAM 역할에 다음 신뢰 정책을 추가합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "sagemaker.amazonaws.com", "forecast.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
(선택 사항) Amazon S3 버킷과 AWS KMS 키를 생성합니다. 이들은 Amazon Redshift가 Amazon SageMaker로 전송된 훈련 데이터를 저장하고 Amazon SageMaker에서 훈련된 모델을 수신하는 데 사용됩니다.
-
(옵션) 여러 사용자 그룹에 대한 액세스를 제어하기 위해 IAM 역할과 Amazon S3 버킷의 다양한 조합을 생성합니다.
-
(옵션) Redshift 클러스터에 대해 VPC 라우팅을 설정하면 Redshift 클러스터가 있는 VPC에 대해 Amazon S3 엔드포인트와 SageMaker 엔드포인트를 생성합니다. 이렇게 하면 CREATE MODEL을 수행하는 동안 서비스 간에 VPC를 통해 트래픽을 실행할 수 있습니다. VPC 라우팅에 대한 자세한 내용은 Amazon Redshift의 Enhanced VPC Routing 섹션을 참조하세요.
하이퍼파라미터 튜닝 작업에 대해 프라이빗 VPC를 지정하는 데 필요한 권한에 대한 자세한 내용은 Amazon SageMaker에서 Amazon Redshift 기계 학습을 사용하는 데 필요한 권한을 참조하세요.
CREATE MODEL 문을 사용하여 다양한 사용 사례에 대한 모델 생성을 시작하는 방법에 대한 자세한 내용은 CREATE MODEL 섹션을 참조하세요.
권한 및 소유권 관리
테이블 또는 함수 등의 다른 데이터베이스 객체와 마찬가지로 Amazon Redshift는 기계 학습 모델 생성 및 사용을 액세스 제어 메커니즘에 바인딩합니다. 예측 함수를 실행하는 모델을 생성하기 위한 별도의 권한이 있습니다.
다음 예에서는 2개의 사용자 그룹인 retention_analyst_grp
(모델 생성자)와 marketing_analyst_grp
(모델 사용자)를 사용하여 Amazon Redshift의 액세스 제어 관리 방법을 보여줍니다. 보존 분석가는 획득한 권한을 통해 다른 사용자 집합이 사용할 수 있는 기계 학습 모델을 생성합니다.
슈퍼 사용자는 다음 문을 사용하여 기계 학습 모델 생성을 위한 GRANT USER 또는 GROUP 권한을 가질 수 있습니다.
GRANT CREATE MODEL TO GROUP retention_analyst_grp;
이 권한이 있는 사용자 또는 그룹은 사용자에게 SCHEMA에 대한 일반적인 CREATE 권한이 있는 경우 클러스터의 모든 스키마에서 모델을 생성할 수 있습니다. 기계 학습 모델은 테이블, 뷰, 프로시저 및 사용자 정의 함수와 유사한 방식으로 스키마 계층의 일부입니다.
demo_ml
스키마가 이미 있다고 가정하고 두 사용자 그룹에 다음과 같이 스키마에 대한 권한을 부여합니다.
GRANT CREATE, USAGE ON SCHEMA demo_ml TO GROUP retention_analyst_grp;
GRANT USAGE ON SCHEMA demo_ml TO GROUP marketing_analyst_grp;
다른 사용자가 기계 학습 추론 함수를 사용하도록 하려면 EXECUTE 권한을 부여합니다. 다음 예에서는 EXECUTE 권한을 사용하여 marketing_analyst_grp GROUP에 모델을 사용할 수 있는 권한을 부여합니다.
GRANT EXECUTE ON MODEL demo_ml.customer_churn_auto_model TO GROUP marketing_analyst_grp;
REVOKE 문을 CREATE MODEL 및 EXECUTE와 함께 사용하여 사용자 또는 그룹에서 해당 권한을 취소합니다. 권한 제어 명령에 대한 자세한 내용은 GRANT 및 REVOKE 섹션을 참조하세요.
Amazon Redshift 기계 학습에서 모델 설명 사용
Amazon Redshift 기계 학습의 모델 설명으로 기능 중요도 값을 사용하여 훈련 데이터의 각 속성이 예측 결과에 어떻게 기여하는지 파악할 수 있습니다.
모델 설명은 모델의 예측을 설명하여 기계 학습모델을 개선하는 데 도움이 됩니다. 모델 설명은 이러한 모델이 특성 속성 접근 방식을 사용하여 예측하는 방법을 설명하는 데 도움이 됩니다.
Amazon Redshift 기계 학습은 모델 설명을 통합하여 Amazon Redshift 기계 학습 사용자에게 모델 설명 기능을 제공합니다. 모델 설명에 대한 자세한 내용은 Amazon SageMaker 개발자 안내서의 Machine Learning 예측의 공정성 및 모델 설명 가능성이란 무엇입니까?를 참조하세요.
모델 설명은 또한 특성 속성 드리프트를 위해 프로덕션에서 모델이 만드는 추론을 모니터링합니다. 또한 위험 및 규정 준수 팀과 외부 규제 기관에 알리는 데 사용할 수 있는 모델 거버넌스 보고서를 생성하는 데 도움이 되는 도구를 제공합니다.
CREATE MODEL 문을 사용할 때 AUTO ON 또는 AUTO OFF 옵션을 지정하면 모델 훈련 작업이 완료된 후 SageMaker가 설명 출력을 생성합니다. EXPLAIN_MODEL 함수를 사용하여 설명 보고서를 JSON 형식으로 쿼리할 수 있습니다. 자세한 내용은 기계 학습 함수 단원을 참조하십시오.
Amazon Redshift ML 확률 지표
지도 학습 문제에서 클래스 레이블은 입력 데이터를 사용하는 예측의 결과입니다. 예를 들어 고객이 스트리밍 서비스에 다시 가입할지를 예측하기 위해 모델을 사용하는 경우 가능한 레이블은 가능성이 있고 가능성이 낮습니다. Redshift ML은 가능성을 나타내기 위해 각 레이블에 확률을 할당하는 확률 지표 기능을 제공합니다. 이를 통해 예측된 결과를 기반으로 정보에 입각한 결정을 더 많이 내릴 수 있습니다. Amazon Redshift ML에서는 문제 유형이 이진 분류 또는 다중 클래스 분류인 AUTO ON 모델을 생성할 때 확률 지표를 사용할 수 있습니다. AUTO ON 파라미터를 생략하면 Redshift ML은 모델이 AUTO ON이어야 한다고 가정합니다.
모델 생성
모델을 생성할 때 Amazon Redshift는 모델 유형과 문제 유형을 자동으로 감지합니다. 분류 문제인 경우 Redshift는 각 레이블과 관련된 확률을 출력하는 데 사용할 수 있는 두 번째 추론 함수를 자동으로 생성합니다. 이 두 번째 추론 함수의 이름은 지정된 추론 함수 이름 뒤에 오는 _probabilities
문자열입니다. 예를 들어 추론 함수의 이름을 customer_churn_predict
로 지정하면 두 번째 추론 함수의 이름은 customer_churn_predict_probabilities
입니다. 그런 다음 이 함수를 쿼리하여 각 레이블의 확률을 가져올 수 있습니다.
CREATE MODEL customer_churn_model FROM customer_activity PROBLEM_TYPE BINARY_CLASSIFICATION TARGET churn FUNCTION customer_churn_predict IAM_ROLE {default} AUTO ON SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket'
확률 가져오기
확률 함수가 준비되면 명령을 실행하면 반환된 확률 및 관련 레이블의 배열이 포함된 SUPER 형식이 반환됩니다. 예를 들어 "probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]
결과는 False 레이블의 확률이 0.7이고 True 레이블의 확률이 0.3임을 의미합니다.
SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) FROM customer_activity; customer_churn_predict_probabilities -------------------- {"probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]} {"probabilities" : [0.8, 0.2], "labels" : ["False.", "True."]} {"probabilities" : [0.75, 0.25], "labels" : ["True.", "False"]}
확률 및 레이블 배열은 항상 확률에 따라 내림차순으로 정렬됩니다. 확률 함수의 SUPER 반환 결과를 중첩 해제하여 확률이 가장 높은 예측 레이블만 반환하는 쿼리를 작성할 수 있습니다.
SELECT prediction.labels[0], prediction.probabilities[0] FROM (SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) AS prediction FROM customer_activity); labels | probabilities -----------+-------------- "False." | 0.7 "False." | 0.8 "True." | 0.75
쿼리를 더 간단하게 만들기 위해 예측 함수의 결과를 테이블에 저장할 수 있습니다.
CREATE TABLE churn_auto_predict_probabilities AS (SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) AS prediction FROM customer_activity);
결과가 포함된 테이블을 쿼리하여 확률이 0.7보다 높은 예측만 반환할 수 있습니다.
SELECT prediction.labels[0], prediction.probabilities[0] FROM churn_auto_predict_probabilities WHERE prediction.probabilities[0] > 0.7; labels | probabilities -----------+-------------- "False." | 0.8 "True." | 0.75
색인 표기를 사용하면 특정 레이블의 확률을 얻을 수 있습니다. 다음 예제에서는 모든 True.
레이블의 확률을 반환합니다.
SELECT label, index, p.prediction.probabilities[index] FROM churn_auto_predict_probabilities p, p.prediction.labels AS label AT index WHERE label='True.'; label | index | probabilities ---------+-------+--------------- "True." | 0 | 0.3 "True." | 0 | 0.2 "True." | 0 | 0.75
다음 예에서는 True
가 있는 모든 행을 반환합니다. 0.7보다 큰 확률로 레이블을 지정하여 고객이 이탈할 가능성이 있음을 나타냅니다.
SELECT prediction.labels[0], prediction.probabilities[0] FROM churn_auto_predict_probabilities WHERE prediction.probabilities[0] > 0.7 AND prediction.labels[0] = "True."; labels | probabilities -----------+-------------- "True." | 0.75