๐Ÿ–‹๏ธ
noviceforever
  • About me
  • Miscellaneous
    • Introduction
      • ์ปค๋ฆฌ์–ด ์š”์•ฝ
      • ๋ฐ์ดํ„ฐ ๊ณผํ•™์ด๋ž€?
  • Machine Learning
    • Tabular Data
      • XGBoost Algorithm Overview
      • TabNet Overview
      • Imbalanced Learning
        • Introduction
        • Oversampling Basic (SMOTE variants)
        • Undersampling Basic
        • Cost-sensitive Learning
        • RBF(Radial Basis Function)-based Approach
    • Computer Vision (CNN-based)
      • [Hands-on] Fast Training ImageNet on on-demand EC2 GPU instances with Horovod
      • R-CNN(Regions with Convolutional Neuron Networks)
      • Fast R-CNN
      • Faster R-CNN
      • Mask R-CNN
      • YOLO (You Only Look Once)
      • YOLO v2(YOLO 9000) Better, Faster, Stronger
      • YOLO v3
      • SSD (Single Shot Multibox Detector)
      • Data Augmentation Tips
    • Computer Vision (Transformer-based)
      • ViT for Image Classification
      • DeiT (Training Data-efficient Image Transformers & Distillation through Attention)
      • DETR for Object Detection
      • Zero-Shot Text-to-Image Generation (DALL-E) - Paper Review
    • Natural Language Processing
      • QRNN(Quasi-Recurrent Neural Network)
      • Transformer is All You Need
      • BERT(Bi-directional Encoder Representations from Transformers)
      • DistilBERT, a distilled version of BERT
      • [Hands-on] Fine Tuning Naver Movie Review Sentiment Classification with KoBERT using GluonNLP
      • OpenAI GPT-2
      • XLNet: Generalized Autoregressive Pretraining for Language Understanding
    • Recommendation System
      • Recommendation System Overview
      • Learning to Rank
      • T-REC(Towards Accurate Bug Triage for Technical Groups) ๋…ผ๋ฌธ ๋ฆฌ๋ทฐ
    • Reinforcement Learning
      • MAB(Multi-Armed Bandits) Overview
      • MAB Algorithm Benchmarking
      • MAB(Multi-Armed Bandits) Analysis
      • Policy Gradient Overview
    • IoT on AWS
      • MXNet Installation on NVIDIA Jetson Nano
      • Neo-DLR on NVIDIA Jetson Nano
    • Distributed Training
      • Data Parallelism Overview
      • SageMaker's Data Parallelism Library
      • SageMaker's Model Parallelism Library
    • Deployment
      • MobileNet V1/V2/V3 Overview
      • TensorRT Overview
      • Multi Model Server and SageMaker Multi-Model Endpoint Overview
  • AWS AIML
    • Amazon Personalize
      • Amazon Personalize - User Personalization Algorithm Deep Dive
      • Amazon Personalize Updates(~2021.04) ๋ฐ FAQ
Powered by GitBook
On this page
  • 1. Personalize ๊ธฐ๋Šฅ ์ฃผ์š” ์—…๋ฐ์ดํŠธ ๋งํฌ
  • 2. Simple Updates
  • Contextual Information
  • Recommendation Score
  • Recommendation Filters
  • Null type
  • Dynamic Filters
  • 3. Recipes
  • Popularity-count
  • User-personalization
  • SIMS
  • Personalized reranking
  • 4. Incremental User/Item/interaction
  • Adding New items and users
  • Recording Real-time interaction events
  • 5. FAQs
  • ์ถ”์ฒœ ๊ฒฐ๊ณผ๊ฐ€ ๋„ˆ๋ฌด ์ตœ๊ทผ์„ฑ๋งŒ ๋ฐ˜์˜๋˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์กฐ์ ˆํ• ๊นŒ์š”?
  • ํŠน์ • ์•„์ดํ…œ์„ ๋„ˆ๋ฌด ๋งŽ์ด ์ถ”์ฒœํ•ด ์ค˜์š”.
  • user dataset์˜ ์ปฌ๋Ÿผ์œผ๋กœ ํ•„ํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?
  • ํ”„๋กœ๋•์…˜ ๋ฐ˜์˜ ์ „ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์•Œ๋ ค ์ฃผ์„ธ์š”.
  • ์บ ํŽ˜์ธ ์ˆซ์ž์˜ ์ œํ•œ์ด 5๊ฐœ์ธ๋ฐ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‚˜์š”?
  • Latency๊ฐ€ ๋„ˆ๋ฌด ๋†’์Šต๋‹ˆ๋‹ค.
  • References

Was this helpful?

  1. AWS AIML
  2. Amazon Personalize

Amazon Personalize Updates(~2021.04) ๋ฐ FAQ

PreviousAmazon Personalize - User Personalization Algorithm Deep Dive

Last updated 4 years ago

Was this helpful?

1. Personalize ๊ธฐ๋Šฅ ์ฃผ์š” ์—…๋ฐ์ดํŠธ ๋งํฌ

  • Batch Recommendation (2019.11.18)

  • Context Recommendation (2019.12.20)

  • 10x more Item Metadata Fields (2020.02.07)

  • Recommendation Score (2020.04.06)

  • Recommendation Filters (2020.06.08)

  • Handling missing metadata (2020.07.02)

  • User personalization (2020.08.17)

  • Incrementally add items and users (2020.10.02)

  • Training time improvement (2020.10.09)

  • Dynamic Filters for applying Business Rules (2020.11.13)

2. Simple Updates

Contextual Information

User-Personalization ๋˜๋Š” Personalized-Ranking ๋ ˆ์‹œํ”ผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, user์˜ ํ˜„์žฌ ์œ„์น˜, ์‚ฌ์šฉ์ค‘์ธ ๊ธฐ๊ธฐ, ์‹œ๊ฐ„&์š”์ผ ๋“ฑ์˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”์ฒœ ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ ์ˆ˜์ง‘์ƒํ™ฉ๋ณ„ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฉด ๊ธฐ์กด user์—๊ฒŒ ๋ณด๋‹ค ๊ฐœ์ธํ™”๋œ ์ถ”์ฒœ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "name": "DEVICE",
  "type": [
      "string",
      "null"
  ],
  "categorical": true
},
{
  "name": "TIMESTAMP",
  "type": "long"
},
{
  "name": "IMPRESSION",
  "type": "string"
}

Recommendation Score

์ˆ˜์‹์— ์˜ํ•˜๋ฉด item ์…‹์˜ ๋ชจ๋“  item์„ ๋Œ€์ƒ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์ˆ˜๋ฅผ ์ƒ๋Œ€์ ์œผ๋กœ ํ•ด์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, item์ด 3๊ฐœ์ผ ๊ฒฝ์šฐ score๋Š” 0.6, 0.3, 0.1์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, 1๋งŒ๊ฐœ์ผ ๊ฒฝ์šฐ ํ‰๊ท  ์ ์ˆ˜๋Š” 1/10,000 ์ด๊ธฐ์—, ์ตœ๊ณ  score๋ฅผ ๋ฐ›์€ item๋„ score๊ฐ€ ์ž‘์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SIM์™€ Popularity-Count ๋ชจ๋ธ์€ ์ด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

get_recommendations_response = personalize_runtime.get_recommendations(
    campaignArn = '[YOUR ARN]',
    userId = str(user_id),
)
item_list = get_recommendations_response['itemList']
item_list[0:2]

-> 
[{'itemId': '5989', 'score': 0.0095232},
 {'itemId': '7147', 'score': 0.0056224}]

Recommendation Filters

  • interaction ์ •๋ณด์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ง๊ณผ metadata ์ •๋ณด์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ง์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • ํ•œ ๋ฒˆ ์ถ”์ฒœ์„ ๋ฐ›๊ณ  ์œ ์ €๊ฐ€ ์„ ํƒ(์˜ˆ: ํด๋ฆญ, ๋‹ค์šด๋กœ๋“œ)ํ•œ ๊ฒƒ์— ๋Œ€ํ•ด์„œ, ๋‹ค์‹œ ์ถ”์ฒœ์„ ์›ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • EXCLUDE itemId WHERE INTERACTIONS.event_type in ("Click","Download")

    • interaction ํ•„ํ„ฐ๋ง์˜ ๊ฒฝ์šฐ, ์ตœ๊ทผ 100๊ฐœ์˜ ์‹ค์‹œ๊ฐ„ interaction๊ณผ ์ตœ๊ทผ 200๊ฐœ์˜ historical interaction๋งŒ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

    • EXCLUDE ItemId WHERE item.genre in ("Comedy")

Null type

์Šคํ‚ค๋งˆ ๋ฐ์ดํ„ฐํƒ€์ž… ์ •์˜ ์‹œ null๋„ ํ—ˆ์šฉํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์œผ๋กœ์จ, ์•„๋ž˜์™€ ๊ฐ™์€ ํƒ€์ž…๋“ค์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • float / double / int / long / string / boolean / null

Dynamic Filters

  • IN, = operator์— dynamic filtering ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, NOT IN, <, >, <=, >= operator๋Š” ์—ฌ์ „ํžˆ static filter๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • dollar sign($)์„ ์‚ฌ์šฉํ•˜์—ฌ placehold ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ’์„ ์„ค์ •ํ•ด ์ค๋‹ˆ๋‹ค.

  • ์˜ˆ์‹œ: INCLUDE Item.ID WHERE items.GENRE IN ($GENRE) | EXCLUDE ItemID WHERE item.DESCRIPTION IN ("$DESCโ€)

3. Recipes

Popularity-count

  • ๋ชจ๋“  user์˜ ํ–‰๋™ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” item์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํ•˜์ดํผํŒŒ๋ผ๋ฉ”ํ„ฐ ์„ค์ •์ด ํ•„์š” ์—†์œผ๋ฉฐ, baseline ๋ชจ๋ธ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

User-personalization

  • MAB์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ•ด ์ฃผ์„ธ์š”.

  • ์ฃผ์š” ํ•˜์ดํผํŒŒ๋ผ๋ฉ”ํ„ฐ

    • recency_mask (Default = True): ์ด ๊ฐ’์„ False๋กœ ์ง€์ • ์‹œ, ์ตœ์‹  popularity ํŠธ๋žœ๋“œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ ์•„์ดํ…œ์˜ ์ถ”์ฒœ ๋น„์ค‘์„ ๋†’์ด๊ณ ์ž ํ•  ๋•Œ๋Š” False๋กœ ์„ค์ •ํ•ด ์ฃผ์„ธ์š”.

    • exploration_weight (Default = 0.3): ์ด ๊ฒฝ์šฐ 70%๋Š” interaction dataset์—์„œ, 30%๋Š” item dataset์—์„œ ์ถ”์ฒœ. ๋‹จ, exploration_weight = 1์ด๋ผ๊ณ  100% item dataset์—์„œ ์ถ”์ฒœํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ๊ทนํžˆ ์ ์€ ํ™•๋ฅ ๋กœ interaction dataset์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

    • exploration_item_age_cut_off (Default = 30). interaction dataset์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ interaction ๋‚ ์งœ(timestamp)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณผ๊ฑฐ 30์ผ ๋™์•ˆ์˜ item์„ item metaset์—์„œ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

    • min_user_history_length_percentile (Default = 0.0, range = [0, 1]): ์†”๋ฃจ์…˜ ํ•™์Šต ์‹œ ๋„ˆ๋ฌด ์ ์€ user history๋ฅผ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” HPO ํŠœ๋‹์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • max_user_history_length_percentile (Default = 0.99, range = [0, 1]): ์†”๋ฃจ์…˜ ํ•™์Šต ์‹œ ๋„ˆ๋ฌด ๋งŽ์€ user history๋ฅผ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” HPO ํŠœ๋‹์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

SIMS

  • Item-based ํ˜‘์—… ํ•„ํ„ฐ๋ง์œผ๋กœ cosine similiarity๋กœ ์œ ์‚ฌ ์•„์ดํ…œ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ง๊ด€์ ์œผ๋กœ user-item ์ƒํ˜ธ ์ž‘์šฉ ์ •๋ณด๋ฅผ ํ†ตํ•ด ๋น„์Šทํ•œ user๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ธฐ์—, ๋‚ด๊ฐ€ ๋ณด์ง€ ์•Š์•˜์ง€๋งŒ ๋‚˜์™€ ๋น„์Šทํ•œ user๊ฐ€ ๋ดค๋˜ item์„ ์ถ”์ฒœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • Cold-start problem / sparsity / popularity bias ์ด์Šˆ๊ฐ€ ์žˆ์ง€๋งŒ, ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™•๋ณด๋˜์—ˆ๋‹ค๋ฉด ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • ์ฃผ์š” ํ•˜์ดํผํŒŒ๋ผ๋ฉ”ํ„ฐ

    • popularity_discount_factor (Default = 0.5, range = [0, 1]): ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ popularity์™€ correlation ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. 0์œผ๋กœ ์„ค์ • ์‹œ, popularํ•œ item๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    • min_cointeraction_count (Default = 3, range = [0, 10]): item pair ๊ฐ„์˜ ์œ ์‚ฌ์„ฑ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ interaction ์ˆ˜์ž…๋‹ˆ๋‹ค.

    • min_user_history_length_percentile (Default = 0.005, range = [0, 1]): ์†”๋ฃจ์…˜ ํ•™์Šต ์‹œ ๋„ˆ๋ฌด ์ ์€ user history๋ฅผ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” HPO ํŠœ๋‹์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • max_user_history_length_percentile (Default = 0.995, range = [0, 1]): ์†”๋ฃจ์…˜ ํ•™์Šต ์‹œ ๋„ˆ๋ฌด ๋งŽ์€ user history๋ฅผ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” HPO ํŠœ๋‹์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • min_item_interaction_count_percentile (Default = 0.01, range = [0, 1]): ์†”๋ฃจ์…˜ ํ•™์Šต ์‹œ ํฌํ•จํ•  ์ตœ์†Œ item interaction์˜ ๋ฐฑ๋ถ„์œ„์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” HPO ํŠœ๋‹์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • max_item_interaction_count_percentile (Default = 0.9, range = [0, 1]): ์†”๋ฃจ์…˜ ํ•™์Šต ์‹œ ํฌํ•จํ•  ์ตœ๋Œ€ item interaction์˜ ๋ฐฑ๋ถ„์œ„์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” HPO ํŠœ๋‹์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Personalized reranking

  • user์˜ ๊ณผ๊ฑฐ ํžˆ์Šคํ† ๋ฆฌ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๊ฐœ์ธํ™”๋œ ๋žญํ‚น์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

  • ์ฃผ์š” ํ•˜์ดํผํŒŒ๋ผ๋ฉ”ํ„ฐ

    • recency_mask (Default = True): ์ด ๊ฐ’์„ False๋กœ ์ง€์ • ์‹œ, ์ตœ์‹  popularity ํŠธ๋žœ๋“œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ ์•„์ดํ…œ์˜ ์ถ”์ฒœ ๋น„์ค‘์„ ๋†’์ด๊ณ ์ž ํ•  ๋•Œ๋Š” False๋กœ ์„ค์ •ํ•ด ์ฃผ์„ธ์š”.

    • min_user_history_length_percentile (Default = 0.0, range = [0, 1]): ์†”๋ฃจ์…˜ ํ•™์Šต ์‹œ ๋„ˆ๋ฌด ์ ์€ user history๋ฅผ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” HPO ํŠœ๋‹์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    • max_user_history_length_percentile (Default = 0.99, range = [0, 1]): ์†”๋ฃจ์…˜ ํ•™์Šต ์‹œ ๋„ˆ๋ฌด ๋งŽ์€ user history๋ฅผ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” HPO ํŠœ๋‹์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

4. Incremental User/Item/interaction

Adding New items and users

item, user ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ User-personalization ๋ ˆ์‹œํ”ผ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. User-personalization ๋ ˆ์‹œํ”ผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์†”๋ฃจ์…˜ ์žฌํ•™์Šต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹ ๊ทœ ์•„์ดํ…œ (PutItems)

    • User-personalization ๋ ˆ์‹œํ”ผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์†”๋ฃจ์…˜์„ ์žฌํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์…‹์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ์— ๊ณง๋ฐ”๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์บ ํŽ˜์ธ ์—…๋ฐ์ดํŠธ ์ดํ›„ ์ถ”๊ฐ€๋œ ์•„์ดํ…œ์ด ๊ณง๋ฐ”๋กœ ์ถ”์ฒœ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

    • ํ•„ํ„ฐ๋ง์˜ ๊ฒฝ์šฐ 20๋ถ„ ๋‚ด์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

personalize_events.put_items(
    datasetArn = 'dataset arn',
    items = [{
        'itemId': 'item ID',
        'properties': "{\"propertyName\": \"item data\"}"   
        },
        {
        'itemId': 'item ID',
        'properties': "{\"propertyName\": \"item data\"}"   
        }]
)

์‹ ๊ทœ ์•„์ดํ…œ ์ถ”๊ฐ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ธฐ์กด ์•„์ดํ…œ์˜ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (์‚ฌ์šฉ ์˜ˆ์‹œ: ์•„์ดํ…œ์˜ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋‚˜, old ์•„์ดํ…œ์„ ๋” ์ด์ƒ ์ถ”์ฒœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ old item์—ฌ๋ถ€์— ๋Œ€ํ•œ property๋ฅผ ์ถ”๊ฐ€)

USER_ID = 81

# ์‹ ๊ทœ ์•„์ดํ…œ ์ถ”๊ฐ€
personalize_events.put_items(
    datasetArn = item_dataset_arn,
    items = [{
        'itemId': str(ITEM_ID_LAST+1),
        'properties': "{\"genre\": \"Animation|Fantasy\", \"year\": 2021}"   
        },
        {
        'itemId': str(ITEM_ID_LAST+2),
        'properties': "{\"genre\": \"Horror|Crime\", \"year\": 2021}"   
        }]
)

# ์•„์ดํ…œ ์ˆ˜์ •
personalize_events.put_items(
    datasetArn = item_dataset_arn,
    items = [{
        'itemId': str(ITEM_ID_LAST+1),
        'properties': "{\"genre\": \"IMAX|Animation|Fantasy\", \"year\": 2021}"   
        },
        {
        'itemId': str(ITEM_ID_LAST+2),
        'properties': "{\"genre\": \"Western|Horror|Crime\", \"year\": 2021}"   
        }]
)
  • ์‹ ๊ทœ ์œ ์ € (PutUsers)

    • ์‹ ๊ทœ ์œ ์ € (userId๊ฐ€ ์—†๋Š” ์œ ์ €)์˜ ๊ฒฝ์šฐ ์ธ๊ธฐ ์•„์ดํ…œ๋งŒ ์ถ”์ฒœ๋ฉ๋‹ˆ๋‹ค. PutEvents ์ž‘์—…์—์„œ ์ „๋‹ฌํ•œ sessionId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ์œ ์ €์™€ ์—ฐ๊ฒฐ๋˜๋ฉฐ, ์ด๋ฒคํŠธ ๊ธฐ๋ก๋“ค์ด ๊ณ„์† ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค.

    • ํ•„ํ„ฐ๋ง์˜ ๊ฒฝ์šฐ 20๋ถ„ ๋‚ด์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

personalize_events.put_users(
    datasetArn = 'dataset arn',
    users = [{
        'userId': 'user ID',
        'properties': "{\"propertyName\": \"user data\"}"   
        },
        {
        'userId': 'user ID',
        'properties': "{\"propertyName\": \"user data\"}"   
        }]
)

Recording Real-time interaction events

User-personalization ๋ ˆ์‹œํ”ผ ์‚ฌ์šฉ์‹œ ์†”๋ฃจ์…˜(๋ชจ๋ธ) ์žฌํ•™์Šต ํ•„์š” ์—†์ด, 2์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์†”๋ฃจ์…˜ ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜: ์ž๋™ ์—…๋ฐ์ดํŠธ๋Š” ๋ชจ๋ธ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ์ „๋ฉด์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‚ด๋ถ€ feature store์— PutEvent๋ฅผ ํ†ตํ•ด ์Œ“์ธ ๋ฐ์ดํ„ฐ๋ฅผ interaction dataset์— ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ผ์ • ์ฃผ๊ธฐ๋กœ ์ „์ฒด ์žฌํ•™์Šต์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: 1์ฃผ์ผ ๋‹จ์œ„๋กœ ์žฌํ•™์Šต) ์žฌํ•™์Šต ์ฃผ๊ธฐ๋ฅผ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, ์˜จ๋ผ์ธ ๋งคํŠธ๋ฆญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด์„œ ๋ชจ๋ธ ๋“œ๋ฆฌํ”„ํŠธ ์‹œ์ ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ณผ๊ธˆ์€ ์—†์œผ๋ฉฐ, ์ž๋™ ์—…๋ฐ์ดํŠธ ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • latest solution version์˜ trainingMode == FULL ์ด๊ณ , ์‹ ๊ทœ item ๋˜๋Š” ์‹ ๊ทœ interactions data๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ ์ดํ›„์— ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ์‹œ์ ์€ ์ฝ˜์†” ํ™”๋ฉด์˜ campaign detail์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹ค๋งŒ, ์ƒ์„ฑํ•œ ์†”๋ฃจ์…˜(๋ชจ๋ธ)์ด 2020๋…„ 11์›” 17์ผ ์ด์ „์ด๋ผ๋ฉด ์ƒˆ๋กœ ์†”๋ฃจ์…˜์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ณ , trainingMode = FULL๋กœ ์„ธํŒ…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ, 2์‹œ๊ฐ„ ์ž๋™ ์—…๋ฐ์ดํŠธ ๋นˆ๋„๊ฐ€ ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š”(์˜ˆ: 30๋ถ„ ๋‹จ์œ„๋กœ ์—…๋ฐ์ดํŠธ) trainingMode = UPDATE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ ๊ทœ ์†”๋ฃจ์…˜ ๋ฒ„์ „์„ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ˆ˜๋™ ์—…๋ฐ์ดํŠธ ์‹œ์—๋Š” ์ถ”๊ฐ€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • Event Tracker ์ƒ์„ฑ

response = personalize.create_event_tracker(
    name='MovieClickTracker',
    datasetGroupArn='arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieClickGroup'
)
  • PutEvents

    • eventId๋Š” unique event๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋ชจ๋ธ์—์„œ ํ™œ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ, eventId๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. eventType์€ ํ•„์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

personalize_events.put_events(
    trackingId = 'tracking_id',
    userId= 'USER_ID',
    sessionId = 'session_id',
    eventList = [{
        'sentAt': TIMESTAMP,
        'eventType': 'EVENT_TYPE',
        'properties': "{\"itemId\": \"ITEM_ID\"}"
        }]
)

# ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๋ฅผ ๋™์‹œ์— ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ
personalize_events.put_events(
    trackingId = 'tracking_id',
    userId= 'user555',
    sessionId = 'session1',
    eventList = [{
        'eventId': 'event1',
        'sentAt': '1553631760',
        'eventType': 'like', # like ์ด๋ฒคํŠธ
        'properties': json.dumps({
            'itemId': 'choc-panama',
            'eventValue': 4,
            'numRatings': 0    
            })
        }, {
        'eventId': 'event2',
        'sentAt': '1553631782',
        'eventType': 'rating', # rating ์ด๋ฒคํŠธ
        'properties': json.dumps({
            'itemId': 'movie_ten',
            'eventValue': 3,
            'numRatings': 13
            })
        }]
)

# User-personalization ๋ ˆ์‹œํ”ผ์—์„œ impression ๋ฐ์ดํ„ฐ๋„ ์‚ฝ์ž… ๊ฐ€๋Šฅ
# (itemId2&itemId3๋Š” ์ดํ›„ ์ถ”์ฒœ ๊ฐ€๋Šฅ์„ฑ ์ ์–ด์ง) 
personalize_events.put_events(
    trackingId = 'tracking_id',
    userId= 'userId',
    sessionId = 'sessionId',
    eventList = [{
        'eventId': 'event1',
        'eventType': 'rating',
        'sentAt': 1553631760,
        'itemId': 'item id',
        'recommendationId': 'recommendation id',
        'impression': ['itemId1', 'itemId2', 'itemId3']
        }]
)

5. FAQs

์ถ”์ฒœ ๊ฒฐ๊ณผ๊ฐ€ ๋„ˆ๋ฌด ์ตœ๊ทผ์„ฑ๋งŒ ๋ฐ˜์˜๋˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์กฐ์ ˆํ• ๊นŒ์š”?

  • User-personalization ๋ ˆ์‹œํ”ผ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  hyperparameter์˜ recency_mask = False(Default=True)๋กœ ๋ถ€์—ฌํ•ด ์ฃผ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ํ•„์š”์— ๋”ฐ๋ผ exploration_weight, exploration_item_age_cut_off ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋„ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

    • recency_mask: ๋ชจ๋ธ์ด interaction ๋ฐ์ดํ„ฐ์…‹์˜ ์ตœ์‹  ์ธ๊ธฐ ํŠธ๋ Œ๋“œ๋ฅผ ๊ณ ๋ คํ•  ์ง€์˜ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ณผ๊ฑฐ ๋ชจ๋“  interaction์— ๋™์ผํ•œ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด recency_mask๋ฅผ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    • exploration_weight = 0.3 (Default) ์ด ๊ฒฝ์šฐ 70%๋Š” interaction dataset์—์„œ, 30%๋Š” item dataset์—์„œ ์ถ”์ฒœ. ๋‹จ, exploration_weight = 1์ด๋ผ๊ณ  100% item dataset์—์„œ ์ถ”์ฒœํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ๊ทนํžˆ ์ ์€ ํ™•๋ฅ ๋กœ interaction dataset์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

    • exploration_item_age_cut_off = 30 (Default). interaction dataset์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ interaction ๋‚ ์งœ(timestamp)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณผ๊ฑฐ 30์ผ ๋™์•ˆ์˜ item์„ item metaset์—์„œ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

    • ๋˜ํ•œ, item dataset์˜ ๋ฐ์ดํ„ฐ์…‹ ํ•„๋“œ์—์„œ ๊ฐ ์•„์ดํ…œ์— ๋Œ€ํ•œ CREATION_TIMESTAMP๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋”์šฑ ์ •ํ™•ํ•œ cold item์˜ ์ถ”์ฒœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

      • ์˜ˆ: A์ƒํ’ˆ์˜ CREATION_TIMESTAMP: 2021/04/01, B์ƒํ’ˆ์˜ CREATION_TIMESTAMP: 2021/03/01์ผ ๋•Œ ๋งŒ์•ฝ exploration_item_age_cut_off = 20์ด๊ณ  ์ „์ฒด interaction dataset์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ timestamp๊ฐ€ 2021/04/16์ด๋ฉด, 3/28 ์ดํ›„์— ์žˆ๋Š” ์ƒํ’ˆ๋งŒ ์ถ”์ฒœํ•˜๊ฒŒ ๋˜๊ธฐ์— B ์ƒํ’ˆ์€ ์ถ”์ฒœ์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ์ฆ‰, exploration_weight, exploration_item_age_cut_off ๋‘ ํŒŒ๋ผ๋ฉ”ํ„ฐ์˜ ๊ฐ’์„ ์˜ฌ๋ฆฌ๋ฉด ์กฐ๊ธˆ๋” old ์•„์ดํ…œ์ด ์ถ”์ฒœ์ด ๋˜๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋˜ํ•œ, exploration_weight, exploration_item_age_cut_off๋Š” ํ•™์Šต๊ณผ๋Š” ์ƒ๊ด€์ด ์—†๊ธฐ์— ์žฌํ•™์Šต ํ•„์š” ์—†์ด ์บ ํŽ˜์ธ์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•ด์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์•„์ดํ…œ์„ ๋„ˆ๋ฌด ๋งŽ์ด ์ถ”์ฒœํ•ด ์ค˜์š”.

  • Interaction ๋ฐ์ดํ„ฐ๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด popularity(์ธ๊ธฐ๋„)์— ๋Œ€ํ•œ ๊ฐ€์ค‘์น˜๋ฅผ ๋†’์ด๊ธฐ์— popularity bias ๋นˆ๋„๊ฐ€ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. interaction ๋ฐ์ดํ„ฐ๋ฅผ ์ถฉ๋ถ„ํžˆ ํ™•๋ณดํ•˜๊ณ  user-personalization ๋ ˆ์‹œํ”ผ์˜ ํ•˜์ดํผํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ์กฐ์ ˆํ•˜์„ธ์š”.

  • SIMS recipe์˜ ๊ฒฝ์šฐ, ์ธ๊ธฐ ์œ„์ฃผ์˜ ์œ ์‚ฌ ์ƒํ’ˆ์„ ์ถ”์ฒœํ•˜๊ณ  item&user metadata๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ธฐ์— ํŠน์ • ์•„์ดํ…œ๋“ค ์œ„์ฃผ๋กœ ์ถ”์ฒœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

user dataset์˜ ์ปฌ๋Ÿผ์œผ๋กœ ํ•„ํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

  • item, interaction ์ปฌ๋Ÿผ๋งŒ ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅํ•˜๋ฉฐ, user์˜ ๊ฒฝ์šฐ๋Š” CURRENTUSER๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (user ์ปฌ๋Ÿผ ๋ถˆ๊ฐ€๋Šฅ)

  • ์„ฑ๊ณต ์˜ˆ์‹œ

    • INCLUDE ItemID WHERE Items.GENRE IN ("Comedy") IF CURRENTUSER.AGE > 20

    • INCLUDE ItemID WHERE Items.GENRE IN ("Comedy") IF CURRENTUSER.GENDER = "F"

  • ์‹คํŒจ ์˜ˆ์‹œ

    • EXCLUDE ItemID WHERE Items.GENRE IN (โ€œComedyโ€) IF users.AGE > 20 # CURRENTUSER๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, user ์ปฌ๋Ÿผ์œผ๋กœ ํ•„ํ„ฐ๋ง ๋ถˆ๊ฐ€๋Šฅ

    • INCLUDE ItemID WHERE Items.GENRE IN ("Comedy") IF CURRENTUSER.DIV > 20 # User Meta์— ์ •์˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

    • INCLUDE ItemID WHERE Items.GENRE IN ("Comedy") IF CURRENTUSER.GENDER > 20 # ์ž˜๋ชป๋œ ์กฐ๊ฑด์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ

ํ”„๋กœ๋•์…˜ ๋ฐ˜์˜ ์ „ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์•Œ๋ ค ์ฃผ์„ธ์š”.

์บ ํŽ˜์ธ ์ˆซ์ž์˜ ์ œํ•œ์ด 5๊ฐœ์ธ๋ฐ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‚˜์š”?

  • Soft Limit์ด๊ธฐ์— ์ฆ๊ฐ€ ์š”์ฒญ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•ด ์ฃผ์„ธ์š”.

  • Limit ์ฐธ

Latency๊ฐ€ ๋„ˆ๋ฌด ๋†’์Šต๋‹ˆ๋‹ค.

  • item ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์„ ๊ฒฝ์šฐ(์˜ˆ: 2๋ฐฑ๋งŒ ๊ฐœ) ์ฃผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•™์Šต ์‹œ item ๊ฐœ์ˆ˜๋Š” 75๋งŒ๊ฐœ๊ฐ€ limit์ด๋ฉฐ, ์บ ํŽ˜์ธ ๋ฐฐํฌ ์‹œ์— item ๊ฐœ์ˆ˜์— ๋”ฐ๋ฅธ ์ œํ•œ์„ ๊ฑธ์–ด ๋†“์ง€๋Š” ์•Š์•˜์ง€๋งŒ, item ๊ฐœ์ˆ˜๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์€ ๊ฒฝ์šฐ ๋ชจ๋ธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ€๊ธ‰์  75๋งŒ๊ฐœ ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ € ์ ์€ TPS๋กœ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์›ํ•˜๋Š” TPS๋กœ ๋ถ€ํ•˜๋ฅผ ๋Š˜๋ ค์„œ ํ…Œ์ŠคํŠธํ•ด ๋ณด์„ธ์š”. ์•„๋ž˜ limit์„ ๊ฐ™์ด ์ฐธ์กฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    • Maximum number of items that are considered by a model during training. 750 thousand

    • Maximum number of interactions that are considered by a model during training. 500 million

    • Maximum number of GetRecommendations requests per second per campaign. 500/sec

References

๊ฐ user-item pair(u,i)(u, i)(u,i)์— ๋Œ€ํ•œ score๋Š” ํŠน์ • user์™€ item ๊ฐ„์˜ ์œ ์‚ฌ๋„ ์ˆ˜์ค€์„ ์•„๋ž˜ ์ˆ˜์‹๊ณผ ๊ฐ™์ด ๋‚ด์ ์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. (wห‰u,wi\bar{w}_u, w_iwห‰uโ€‹,wiโ€‹๋Š” ๊ฐ๊ฐ ํ•™์Šต๋œ user ๋ฐ item ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ)

score(u,i)=expโก(wห‰uTwi)expโก(โˆ‘jwห‰uTwj)\text{score}(u,i) = \dfrac{\exp(\bar{w}_u^Tw_i)}{\exp(\sum_j\bar{w}_u^Tw_j)}score(u,i)=exp(โˆ‘jโ€‹wห‰uTโ€‹wjโ€‹)exp(wห‰uTโ€‹wiโ€‹)โ€‹

interaction:

metadata:

์ฐธ์กฐ:

์ข…๋ž˜์˜ HRNN, HRNN-Meta, HRNN-Coldstart๋ฅผ ๋ชจ๋‘ ํฌ๊ด„ํ•˜๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ MAB(Multi-Armed Bndits)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ ๊ทœ ์•„์ดํ…œ์ด ์ž์ฃผ ์—…๋ฐ์ดํŠธ๋  ๋•Œ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค;

์ฐธ์กฐ:

์ฐธ์กฐ:

์„ ๋จผ์ € ํ™•์ธํ•ด ์ฃผ์„ธ์š”.

Using A/B testing to measure the efficacy of recommendations generated by Amazon Personalize:

Amazon Personalize Deep Dive Series:

https://aws.amazon.com/ko/about-aws/whats-new/2019/11/amazon-personalize-now-supports-batch-recommendations/
https://aws.amazon.com/ko/about-aws/whats-new/2019/12/amazon-personalize-supports-contextual-recommendations/
https://aws.amazon.com/blogs/machine-learning/increasing-the-relevance-of-your-amazon-personalize-recommendations-by-leveraging-contextual-information/
https://aws.amazon.com/ko/about-aws/whats-new/2020/02/amazon-personalize-use-10x-more-item-attributes-improve-relevance-recommendations/
https://aws.amazon.com/ko/blogs/machine-learning/amazon-personalize-can-now-use-10x-more-item-attributes-to-improve-relevance-of-recommendations/
https://aws.amazon.com/ko/about-aws/whats-new/2020/04/amazon-personalize-now-provides-scores-for-recommended-items/
https://aws.amazon.com/ko/blogs/machine-learning/introducing-recommendation-scores-in-amazon-personalize/
https://aws.amazon.com/ko/about-aws/whats-new/2020/06/introducing-recommendation-filters-in-amazon-personalize/
https://aws.amazon.com/ko/blogs/machine-learning/introducing-recommendation-filters-in-amazon-personalize/
https://aws.amazon.com/ko/about-aws/whats-new/2020/07/amazon-personalize-improved-handling-missing-metadata/
https://aws.amazon.com/ko/about-aws/whats-new/2020/08/amazon-personalize-can-now-create-up-to-50-better-recommendations-for-fast-changing-catalogs-of-new-products-and-fresh-content/
https://aws.amazon.com/ko/blogs/machine-learning/amazon-personalize-can-now-create-up-to-50-better-recommendations-for-fast-changing-catalogs-of-new-products-and-fresh-content/
https://aws.amazon.com/ko/blogs/machine-learning/simplify-data-management-with-new-apis-in-amazon-personalize/?nc1=b_r
https://aws.amazon.com/ko/about-aws/whats-new/2020/10/amazon-personalize-announces-improvements-that-reduce-model-training-time-by-up-to-40-percent-and-latency-for-generating-recommendations-by-up-to-30-percent/
https://aws.amazon.com/ko/blogs/machine-learning/amazon-personalize-improvements-reduce-model-training-time-by-up-to-40-and-latency-for-generating-recommendations-by-up-to-30/
https://aws.amazon.com/ko/about-aws/whats-new/2020/11/apply-business-rules-amazon-personalize-recommendations-on-the-fly/
https://aws.amazon.com/ko/blogs/machine-learning/amazon-personalize-now-supports-dynamic-filters-for-applying-business-rules-to-your-recommendations-on-the-fly/
https://aws.amazon.com/ko/blogs/machine-learning/introducing-recommendation-filters-in-amazon-personalize/
https://aws.amazon.com/ko/blogs/machine-learning/enhancing-recommendation-filters-by-filtering-on-item-metadata-with-amazon-personalize/
https://docs.aws.amazon.com/personalize/latest/dg/filter-expressions.html
https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html
https://housekdk.gitbook.io/ml/ml/rl
https://docs.aws.amazon.com/personalize/latest/dg/importing-items.html
https://docs.aws.amazon.com/personalize/latest/dg/importing-users.html
https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html#automatic-updates
https://github.com/aws-samples/amazon-personalize-samples/blob/master/PersonalizeCheatSheet2.0.md
https://aws.amazon.com/ko/blogs/machine-learning/using-a-b-testing-to-measure-the-efficacy-of-recommendations-generated-by-amazon-personalize/
https://ap-northeast-2.console.aws.amazon.com/servicequotas/home?region=ap-northeast-2#!/services/personalize/quotas
https://docs.aws.amazon.com/ko_kr/personalize/latest/dg/limits.html#limits-table
https://www.youtube.com/playlist?list=PLhr1KZpdzukd9GSGRy329wahNO_8TkRo_