

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Personalize 도메인 추천자 평가
<a name="evaluating-recommenders"></a>

 오프라인 및 온라인 지표를 통해 추천자의 성능을 평가할 수 있습니다. 온라인 지표는 실시간 추천과의 사용자 상호작용에서 보게 되는 경험적 결과입니다.** 예를 들어 카탈로그를 탐색하는 사용자의 클릭률을 기록할 수 있습니다. 모든 온라인 지표를 생성하고 기록하는 것은 귀하의 책임입니다.

 *오프라인 지표*는 추천자를 생성할 때 Amazon Personalize가 생성하는 지표입니다. 오프라인 지표를 사용하면 추천자 지원 모델의 성능을 평가할 수 있습니다. 추천자의 구성을 수정하는 효과를 볼 수 있으며, 다른 사용 사례로 훈련된 추천자의 결과를 동일한 데이터세트 그룹의 *동일한 데이터*와 비교할 수 있습니다.

다양한 데이터로 학습된 다양한 추천자의 지표를 비교하지 마세요. 지표의 차이는 모델 성능이 아닌 데이터의 차이일 수 있습니다. 예를 들어 각 사용자에 대해 희소 `purchase` 이벤트 데이터가 있는 데이터세트 그룹과 강력한 `view` 이벤트 데이터가 있는 데이터세트 그룹이 있을 수 있습니다. `precision at K`와 같은 지표를 기반으로 보기 이벤트 데이터에 대해 학습된 추천자는 상호작용 수가 늘어나기 때문에 성능이 더 나아진 것으로 잘못 보일 수 있습니다.

 성능 지표를 얻기 위해 Personalize는 입력 상호작용 데이터를 학습 세트와 테스트 세트로 분리합니다. 학습 세트는 90%의 사용자와 이들의 상호작용 데이터로 구성됩니다. 테스트 세트는 나머지 10%의 사용자와 이들의 상호작용 데이터로 구성됩니다.

 그러면 Personalize는 학습 세트를 사용하여 추천자를 생성합니다. 학습이 완료되면 Personalize는 새 추천자에 테스트 세트의 각 사용자 데이터 중 가장 오래된 90%를 입력으로 제공합니다. 그런 다음 Personalize는 해당 추천자가 생성한 추천을 테스트 세트에 있는 각 사용자 데이터의 최신 10%에서 얻은 실제 상호작용과 비교하여 지표를 계산합니다.

**Topics**
+ [지표 검색](#retrieving-recommender-metrics)
+ [지표 정의](#metric-definitions-recommenders)
+ [예제](#working-with-recommender-metrics-example)
+ [추가 리소스](#additional-metrics-resources-recommenders)

## 지표 검색
<a name="retrieving-recommender-metrics"></a>

추천자가 활성화되면 Personalize 콘솔에서 해당 추천자에 대한 지표를 보거나 [DescribeRecommender](API_DescribeRecommender.md)작업을 호출하여 지표를 검색할 수 있습니다.

**Topics**
+ [지표 보기(콘솔)](#retrieving-recommender-metrics-console)
+ [지표 검색(AWS CLI)](#retrieving-recommender-metrics-cli)
+ [지표(AWS SDKs) 검색](#retrieving-recommender-metrics-sdk)

### 지표 보기(콘솔)
<a name="retrieving-recommender-metrics-console"></a>

콘솔에서 추천자 지표를 보려면 해당 추천자의 세부 정보 페이지로 이동합니다.

1. [https://console.aws.amazon.com/acm-pca/home](https://console.aws.amazon.com/personalize/home)에서 Personalize 콘솔을 열고 계정에 로그인합니다.

1. **데이터세트 그룹** 페이지에서 도메인 데이터세트 그룹을 선택합니다.

1. 탐색 창에서 **추천자**를 선택합니다.

1. 추천자 목록에서 해당 지표를 확인할 추천자를 선택합니다.

### 지표 검색(AWS CLI)
<a name="retrieving-recommender-metrics-cli"></a>

다음 코드는 AWS CLI을 사용하여 추천자의 지표를 가져오는 방법을 보여줍니다.

```
aws personalize describe-recommender \
--recommender-arn recommender arn
```

다음은 VIDEO\$1ON\$1DEMAND 도메인의 가장 적합한 추천 제품 사용 사례에 대해 생성된 추천자의 지표 출력 예제입니다.**

```
{
    "recommender": {
        "recommenderArn": "arn:aws:personalize:region:acct-id:recommender/recommenderName",
        "datasetGroupArn": "arn:aws:personalize:region:acct-id:dataset-group/dsGroupName",
        "name": "name123",
        "recipeArn": "arn:aws:personalize:::recipe/aws-vod-top-picks",
        "modelMetrics": {
            "coverage": 0.27,
            "mean_reciprocal_rank_at_25": 0.0379,
            "normalized_discounted_cumulative_gain_at_5": 0.0405,
            "normalized_discounted_cumulative_gain_at_10": 0.0513,
            "normalized_discounted_cumulative_gain_at_25": 0.0828,
            "precision_at_5": 0.0136,
            "precision_at_10": 0.0102,
            "precision_at_25": 0.0091,
        }
        "recommenderConfig": {},
        "creationDateTime": "2022-05-06T10:11:24.589000-07:00",
        "lastUpdatedDateTime": "2022-05-06T10:34:33.270000-07:00",
        "status": "ACTIVE",
    }
}
```

### 지표(AWS SDKs) 검색
<a name="retrieving-recommender-metrics-sdk"></a>

다음 코드는 Python용 SDK(Boto3)를 사용하여 추천자에 대한 지표를 가져오는 방법을 보여줍니다.

```
import boto3

personalize = boto3.client('personalize')

response = personalize.describe_recommender(
    recommenderArn = 'recommender_arn'
)
print(response['recommender']['modelMetrics'])
```

다음은 VIDEO\$1ON\$1DEMAND 도메인의 가장 적합한 추천 제품 사용 사례에 대해 생성된 추천자의 지표 출력 예제입니다. ** 

```
{
    "recommender": {
        "recommenderArn": "arn:aws:personalize:region:acct-id:recommender/recommenderName",
        "datasetGroupArn": "arn:aws:personalize:region:acct-id:dataset-group/dsGroupName",
        "name": "name123",
        "recipeArn": "arn:aws:personalize:::recipe/aws-vod-top-picks",
        "modelMetrics": {
            "coverage": 0.27,
            "mean_reciprocal_rank_at_25": 0.0379,
            "normalized_discounted_cumulative_gain_at_5": 0.0405,
            "normalized_discounted_cumulative_gain_at_10": 0.0513,
            "normalized_discounted_cumulative_gain_at_25": 0.0828,
            "precision_at_5": 0.0136,
            "precision_at_10": 0.0102,
            "precision_at_25": 0.0091,
        }
        "recommenderConfig": {},
        "creationDateTime": "2022-05-06T10:11:24.589000-07:00",
        "lastUpdatedDateTime": "2022-05-06T10:34:33.270000-07:00",
        "status": "ACTIVE",
    }
}
```

## 지표 정의
<a name="metric-definitions-recommenders"></a>

Personalize가 추천자에 대해 생성하는 지표는 다음과 같은 용어를 사용하여 아래에 설명되어 있습니다.
+ 관련 추천은 사용자가 실제로 상호작용한 항목에 대한 추천입니다.** 이들 항목은 테스트 세트의 각 사용자 상호작용 데이터 중 최신 10%에서 가져온 것입니다.
+ 순위는 추천 목록 내에서 해당 추천 항목의 위치를 말합니다.** 위치 1(목록의 맨 위)이 사용자와 가장 관련 있는 것으로 간주됩니다.

각 지표의 경우 숫자가 높을수록(1에 가까울수록) 더 좋습니다. 더 자세히 알아보려면 [추가 리소스](#additional-metrics-resources-recommenders)에 나열된 리소스를 참조하세요.

**비율**  
 비율 값은 상호작용 및 항목 데이터세트의 고유 항목 총 수 중에서 Personalize가 추천할 수 있는 고유 항목의 비율을 나타냅니다.** 비율 점수가 높을수록 Personalize는 여러 사용자에게 동일한 몇 가지 항목을 반복해서 추천하는 대신 해당 품목을 더 많이 추천한다는 의미입니다. 가장 적합한 추천 제품(VIDEO\$1ON\$1DEMAND) 및 추천 제품(ECOMMERCE) 등 특성 항목 탐색이 포함된 사용 사례가 그렇지 않은 경우보다 비율이 더 높습니다.****

**평균 역수 순위 25**  
이 지표는 관련 추천을 상위 순위에서 생성하는 모델의 능력을 보여줍니다. 사용자에게 관련성이 높은 검색 결과를 생성하고 있지만 사용자가 목록에서 더 아래 쪽의 항목을 선택하지 않을 것으로 예상한다면 평균 역수 순위 25가 높은 모델을 선택할 수 있습니다.** 예를 들어 사용자는 검색 결과에서 첫 번째 요리 레시피를 선택하는 경우가 많습니다.  
 Personalize는 추천 요청에 대해 평균 역수 순위 점수를 사용하여 이 지표를 계산합니다. 각 역수 순위 점수는 `1 / the rank of the highest item interacted with by the user`로 계산되는데, 여기서 가능한 총 순위는 25개입니다. 해당 사용자가 상호작용하는 더 낮은 순위의 다른 항목은 무시됩니다. 사용자가 첫 번째 항목을 선택한 경우 점수는 1입니다. 항목을 선택하지 않은 경우 점수는 0입니다.  
 예를 들어 세 명의 사용자에게 각각 25개의 추천을 표시할 수 있습니다.  
+ 사용자 1이 4 순위의 항목과 10 순위의 항목을 클릭한 경우 역수 순위 점수는 1/4이 됩니다.******
+ 사용자 2가 2 순위의 항목, 4 순위의 항목, 12 순위의 항목을 클릭한 경우 역수 순위 점수는 1/2이 됩니다.******
+ 사용자 3이 6 순위의 단일 항목을 클릭한 경우 역수 순위 점수는 1/6이 됩니다.**
 모든 추천 요청의 평균 역수 순위(이 경우 3)는 `(1/4 + 1/2 + 1/6) / 3 = .3056`로 계산됩니다.  


**정규화된 할인 누적 이득(NDCG) K(5, 10 또는 25)**  
이 지표는 모델이 추천의 순위를 얼마나 잘 매겼는지 알려줍니다. 여기서 K는 5, 10 또는 25개의 추천으로 구성된 표본 크기입니다. 이 지표는 순위가 가장 높은 항목 이외의 추천 순위에 가장 관심이 있는 경우에 유용합니다(자세한 내용은 `mean reciprocal rank at 25`단원 참조). 예를 들어 한 번에 최대 10가지의 영화를 캐루셀에 표시하는 애플리케이션이 있다면 `NDCG at 10`의 점수가 유용할 것입니다.  
Personalize는 테스트 세트의 각 사용자에 대한 순위 위치를 기반으로 추천에 가중치를 할당하여 NDCG를 계산합니다. 각 추천은 위치에 따라 계수만큼 할인됩니다(더 낮은 가중치가 부여됨). 최종 지표는 테스트 세트에 있는 모든 사용자의 평균입니다. 정규화된 할인 누적 이득 K는 목록에서 더 아래 쪽에 있는 추천이 목록에서 더 위쪽에 있는 추천보다 관련성이 낮다고 가정합니다.  
Personalize에서는 `1/log(1 + position)`의 가중 계수를 사용하며 목록의 맨 위가 위치 `1`입니다.

**정밀도 K**  
이 지표는 K(5, 10 또는 25)개 추천의 표본 크기를 기반으로 한 모델 추천의 관련성을 알려줍니다.  
 Personalize는 테스트 세트의 각 사용자에 대한 상위 K개 추천 중 관련성이 있는 추천 수를 K로 나눈 값을 기반으로 이 지표를 계산합니다. 여기서 K는 5, 10 또는 25입니다. 최종 지표는 테스트 세트에 속한 모든 사용자의 평균입니다.  
예를 들어, 사용자에게 10개의 항목을 추천하고 사용자가 그 중 3개와 상호작용하는 경우 정밀도 K는 올바르게 예측된 항목 3개를 총 10개의 추천 항목으로 나눈 값, `3 / 10 = .30`이 됩니다.  
이 지표는 관련 항목의 정확한 추천을 보상합니다. 점수가 1에 가까울수록 모델의 정밀도가 높아집니다.

## 예제
<a name="working-with-recommender-metrics-example"></a>

다음은 특정 사용자를 위한 추천 목록을 생성하는 추천자의 간단한 예입니다. 두 번째 추천과 다섯 번째 추천은 이 사용자에 대한 테스트 데이터의 레코드와 일치합니다. 이들 두 가지는 관련 추천입니다. `K`을 `5`로 설정하면 사용자에 대해 다음 지표가 생성됩니다.

**reciprocal\$1rank**  
계산: 1/2  
결과: 0.5000

**normalized\$1discounted\$1cumulative\$1gain\$1at\$15**  
계산: (1/log(1 \$1 2) \$1 1/log(1 \$1 5)) / (1/log(1 \$1 1) \$1 1/log(1 \$1 2))  
결과: 0.6241

**precision\$1at\$15**  
계산: 2/5  
결과: 0.4000

## 추가 리소스
<a name="additional-metrics-resources-recommenders"></a>

추천자 시스템을 위한 다양한 유형의 지표를 자세히 알아보려면 다음 외부 리소스를 참조하세요.
+ [MRR 대 MAP 대 NDCG: 순위 인식 평가 지표 및 사용 시기](https://medium.com/swlh/rank-aware-recsys-evaluation-metrics-5191bba16832/)
+  [할인된 누적 이득: 알아야 할 순위 지표](https://medium.com/@maeliza.seymour/discounted-cumulative-gain-the-ranking-metrics-you-should-know-about-e1d1623f8cd9) 
+  [추천자 시스템의 k 재현율 및 정밀도](https://medium.com/@bond.kirill.alexandrovich/precision-and-recall-in-recommender-systems-and-some-metrics-stuff-ca2ad385c5f8) 
+  [추천자 시스템의 순위 평가 지표](https://towardsdatascience.com/ranking-evaluation-metrics-for-recommender-systems-263d0a66ef54) 