이전글에 이어서 AWS Personalize로 추천 시스템을 만들어보자.
3. 레시피를 선택하여 솔루션 생성
AWS Personalize에는 여러 가지 알고리즘이 미리 정의되어 있기 때문에, 필요에 맞게 적절한 알고리즘을 선택하면 된다. 이것을 레시피라고 부르며, 해당 레시피와 데이터를 이용하여 학습된 모델 결과물이 솔루션이다.
AWS에서 제공하는 레시피는 다음과 같다.(글 작성일 기준), 공식문서에서 지원되는 레시피를 확인할 수 있다.(링크)
- USER_PERSONALIZATION 레시피
- 사용자가 상호 작용할 항목을 예측합니다.
- User-Personalization : 모든 맞춤형 추천 시나리오에 최적화되어 있습니다. 상호작용, 항목 및 사용자 데이터세트를 기반으로 사용자가 상호작용할 항목을 예측한다. 아이템을 추천할 때는 자동 아이템 탐색을 사용합니다.
- Popularity-Count : 사용자-항목 상호 작용 데이터 세트에서 해당 항목에 대한 이벤트 수를 기반으로 항목의 인기도를 계산합니다. 다른 사용자-개인화 레시피를 비교할 때 기준으로 사용합니다.
- PERSONALIZED_RANKING 레시피
- PERSONALIZED_RANKING 레시피는 userId에 대해 개인화된 item 추천 순위를 생성합니다.
- RELATED_ITEMS 레시피
- 주어진 항목과 유사한 항목들을 예측합니다.
- similar-items : 지정한 item과 유사한 항목에 대한 추천을 생성합니다. Similar-Items는 사용자가 제공한 interaction 데이터 및 items 메타데이터를 기반으로 유사성을 계산합니다. 여기에는 Interaction 데이터의 사용자 기록에 있는 항목이 동시에 나타나는 현상과 모든 항목 메타데이터 유사성이 고려됩니다.
- 주어진 항목과 유사한 항목들을 예측합니다.
- USER_SEGMENTATION 레시피
- USER_SEGENTATION 레시피는 항목 입력 데이터를 기반으로 사용자 세그먼트를 생성합니다
- Item-Affinity recipe
- 모델을 학습할 때 Item-Affinity recipe는 interactions데이터 셋과 items 데이터셋을 사용합니다. user segments를 만들려면 Item-Affinity를 사용하여 모델을 훈련시킨 다음 batch segment job을 만들면 됩니다.
- 지정한 각 item에 대한 사용자 세그먼트 (사용자 그룹)를 만드는 USER_SEGMENTATION 레시피입니다. 개별 항목에 대한 관심을 기반으로 사용자 segmentation을 생성합니다.
- Item-Attribute-Affinity recipe
- 장르 또는 가격대와 같이 관심 있는 속성을 기반으로 사용자를 식별 user segments를 만들려면 Item-Attribute-Affinity recipe를 사용하여 모델을 훈련시킨 다음 batch segment job을 만들어야 합니다.
- 모델을 학습할 때 Item-Attribute-Affinity recipe는 interactions데이터 셋과 items 데이터셋을 사용해야 합니다.
- 사용자가 지정한 각 품목 속성에 대해 사용자 세그먼트를 생성하는 레시피입니다.
- Item-Affinity recipe
- USER_SEGENTATION 레시피는 항목 입력 데이터를 기반으로 사용자 세그먼트를 생성합니다
본격적으로 솔루션을 만들어 보자.
- Solution name (필수) : 솔루션을 구별하기 위한 이름입니다.
- Event type (선택) : 다양한 이벤트 유형(ex. Click, Search)이 있는 경우 필요한 이벤트를 선택합니다.
- Event value threshold (선택) : 이벤트값의 임계 값을 지정합니다. 이것을 설정해 두면 임계 값보다 크거나 같은 이벤트만 학습합니다.
- Recpe selection (필수) : AWS에서 제공하는 레시피를 선택합니다.
사용할 레시피를 선택한 이후 Next를 누르면 하이퍼 파라미터 최적화 화면이 나오게 된다. 하이퍼 파라미터는 모델을 학습할 때 조금 더 데이터에 최적화시키기 위해 활용하는 기능이며, 필수로 사용해야 되는 기능은 아니다. 만약 사용하고 싶지 않다면 경우에는 해당 화면에서 perform HPO 기능을 비활성화시켜주면 된다.
이렇게 하면 솔루션 생성까지 완료되었다. 솔루션 생성을 끝냈다고 해서 바로 활용 가능한 것은 아니고 데이터의 크기에 따라 학습하는데 꽤 많은 시간이 소요된다.(학습 시 비용 발생)
4. 캠페인 생성
생성된 솔루션을 활용하려면 배포를 해야 하는데 배포된 솔루션을 캠페인이라고 부른다. 캠페인은 학습 데이터를 변경할 경우 재배포해야 한다.
- Campaign name : 캠페인을 구별하기 위한 이름입니다.
- Solution : 캠페인에 제공되는 권장사항을 생성하는 데 사용합니다.
- Minimum provisioned transactions per second : 해당 캠페인에 프로비저닝 된 초당 트랜잭션(TPS)의 최소 처리량을 의미합니다.
solution을 선택하면 solution version을 선택할 수 있다. 그리고 하단의 Campaign configuration은 선택하는 솔루션에 따라 다르게 구성된다.
5. 생성된 캠페인으로 추천받기
생성된 캠페인을 이용하여 실시간으로 inference를 진행할 수 있다.
- 상품을 추천받고자 하는 UserID를 입력해 줍니다. 만약 Users.csv에 존재하지 않는 userId를 입력한다면 popular item이 추천됩니다. → 해당 내용은 공식문서에 나와 있지만 조금 애매하게 설명된 부분이 있어 실험을 통해 검증이 필요합니다.
- 적용할 filter를 선택합니다. filter에 대한 내용은 해당 문서의 마지막 문단에서 자세히 살펴볼 수 있습니다.
- 특정 Item들에 대해 filter를 적용하여 우선순위가 높게 상품을 추천하고 싶을 때 사용하는 기능입니다.
아래 결과물은 USER_PERSONALIZATION 레시피를 활용하여 나온 결과물이다.
만약 Personalized Rangking 레시피를 활용하여 캠페인을 생성한다면 아래와 같은 결과가 나오게 된다.
결과는 입력된 User Id에 대해 Item의 추천 순위가 매겨져 출력된다.
promotion 기능을 이용하면 추천 결과는 아래와 같이 변동된다.
promotion 기능은 원하는 조건의 상품을 우선적으로 추천할 수 있게 도와주며, 만약 원하는 비율만큼 상품 추천이 이뤄지기 힘든 상황(ex. 개수 부족)이라면 promotion 비율이 임의로 조정되어 상품이 추천된다.
위의 예시를 그대로 따라 하면 손쉽게 추천 시스템을 구축할 수 있다. 물론 데이터의 품질이나 양에 따라 추천 결과는 크게 차이가 나게 된다. 실제 AWS-Personalize를 이용해 추천 시스템을 구축하기 위해서는 추가적인 option과 파라미터 튜닝, 학습 데이터 최적화등 다양한 작업이 동반되어야 한다.
이상으로 AWS-Personalize를 이용한 추천 시스템 구축을 마무리하겠습니다. 감사합니다.
'기타 > AWS' 카테고리의 다른 글
AWS-Personalize(1) (1) | 2023.05.19 |
---|---|
AWS-comprehend (0) | 2023.05.19 |
AWS-RDS (1) | 2023.05.19 |
AWS-Lambda (1) | 2023.05.19 |
AWS-ECS (0) | 2023.05.18 |