

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

# 추가 목표에 맞게 솔루션 최적화
<a name="optimizing-solution-for-objective"></a>

**중요**  
기본적으로 모든 새 솔루션은 자동 학습을 사용합니다. 자동 학습을 사용하면 솔루션이 활성화되어 있는 동안 학습 비용이 발생합니다. 불필요한 비용을 방지하기 위해 완료되면 [솔루션을 업데이트](updating-solution.md)하여 자동 학습을 끌 수 있습니다. 학습 비용에 대한 자세한 내용은 [Amazon Personalize 요금](https://aws.amazon.com/personalize/pricing/)을 참조하세요.

 User-Personalization 레시피 또는 Personalized-Ranking 레시피를 사용하는 경우 수익 극대화처럼 관련성을 최대한 높이는 것 외에도 목표에 맞게 Amazon Personalize 솔루션을 최적화할 수 있습니다.

 항목 추천 레시피를 사용하는 경우 Amazon Personalize의 주요 목표는 과거 및 실시간 항목 상호 작용 데이터를 기반으로 사용자에게 가장 관련성이 높은 항목을 예측하는 것입니다. 다음은 사용자가 가장 많이 상호작용할 가능성이 높은 항목입니다(예: 클릭할 가능성이 가장 높은 항목). 스트리밍 시간 최대화나 수익 증대와 같은 추가 목표가 있는 경우 관련성과 목표 두 가지 모두를 기반으로 추천을 생성하는 솔루션을 만들 수 있습니다.

추가 목표에 맞게 솔루션을 최적화하려면 사용자-개인 맞춤 레시피 또는 -순위 레시피로 새 솔루션을 생성하고 목표와 관련된 항목 데이터세트에서 숫자 메타데이터 열을 선택합니다. 추천을 생성할 때 Personalize는 이 데이터 열에 대해 값이 더 높은 항목에 더 많은 중요도를 부여합니다. 예를 들어 스트리밍 시간을 최대화하려면 VIDEO\$1LENGTH 열을 선택하고 수익을 극대화하기 위해 PRICE 열을 선택할 수 있습니다.

Personalize 콘솔, AWS Command Line Interface (AWS CLI) 또는 AWS SDKs. Amazon Personalize 콘솔 사용에 대한 자세한 내용은 [솔루션 생성(콘솔)](create-solution.md#configure-solution-console) 섹션을 참조하세요.

**Topics**
+ [지침 및 요구 사항](#optimize-objective-guidelines-req)
+ [목표 강조와 관련성의 균형 유지](#balancing-objective-emphasis)
+ [최적화 성능 측정](#measuring-performance)
+ [솔루션 최적화(AWS CLI)](#optimizing-solution-cli)
+ [솔루션(AWS SDKs) 최적화](#optimizing-solution-sdk)
+ [샘플 Jupyter Notebook](#optimization-objective-sample-notebooks)

## 지침 및 요구 사항
<a name="optimize-objective-guidelines-req"></a>

 목표 요구 사항은 다음과 같습니다.
+ 목표에 사용할 열을 하나만 선택할 수 있습니다.
+ 스키마의 열은 숫자 유형을 가져야 합니다.
+ 스키마의 열은 `null`유형을 가질 수 없습니다.

스키마와 데이터 유형에 대한 자세한 내용은 [Amazon Personalize 스키마에 대한 스키마 JSON 파일 생성](how-it-works-dataset-schema.md)단원을 참조하세요.

## 목표 강조와 관련성의 균형 유지
<a name="balancing-objective-emphasis"></a>

 관련성보다는 목표에 더 중점을 두고 항목을 추천하는 경우 절충점이 있을 수 있습니다. 예를 들어 추천을 통해 수익을 높이려는 경우 고가의 항목만 추천하면 항목이 사용자와 관련성이 떨어지고 사용자 참여도와 전환율이 낮아질 수 있습니다.

관련성과 목표 간의 균형을 맞추려면 솔루션을 만들 때 다음과 같은 목표 민감도 수준 중 하나를 선택하십시오.
+ 끄기: Amazon Personalize가 주로 항목 상호 작용 데이터를 사용하여 사용자와 가장 관련성이 높은 항목을 예측합니다.
+ 낮음: Personalize가 사용자의 목표에 덜 중점을 둡니다. 항목 상호 작용 데이터를 통한 관련성이 더 중요합니다.
+ 보통: Amazon Personalize가 항목 상호 작용 데이터를 통해 사용자의 목표와 관련성을 동등하게 강조합니다.
+ 높음: Personalize가 고객의 목표에 더 중점을 둡니다. 항목 상호 작용 데이터를 통한 관련성은 그다지 중요하지 않습니다.

## 최적화 성능 측정
<a name="measuring-performance"></a>

최적화 목표를 가진 솔루션에 대한 솔루션 버전을 생성(모델을 학습)하면 Personalize가 `average_rewards_at_k`지표를 생성합니다. `average_rewards_at_k`의 점수는 목표 달성에 있어 솔루션 버전이 얼마나 잘 수행되는지를 나타냅니다. 이 지표를 계산하기 위해 Personalize는 다음과 같이 각 사용자에 대한 보상을 계산합니다.

`rewards_per_user = total rewards from the user's interactions with their top 25 reward generating recommendations / total rewards from the user's interactions with recommendations`

최종 `average_rewards_at_k`는 1보다 작거나 같고 0보다 큰 10진수 값으로 정규화된 모든 `rewards_per_user`의 평균입니다. 값이 1에 가까울수록 추천에서 기대할 수 있는 사용자당 평균 이득이 더 커집니다.

예를 들어 클릭으로 인한 수익을 극대화하는 것이 목표인 경우 Personalize는 가장 비용이 많이 드는 상위 25개 추천 항목 중에서 사용자가 클릭한 항목에서 발생한 총 수익을 사용자가 클릭한 모든 추천 항목의 수익으로 나누어 각 사용자 점수를 계산합니다. 그러면 Personalize는 모든 사용자 점수의 정규화된 평균을 반환합니다. `average_rewards_at_k`이 1에 가까울수록 추천을 통해 사용자당 얻을 수 있는 평균 수익이 더 커집니다.

지표 생성에 대한 자세한 내용은 [지표를 사용하여 Amazon Personalize 솔루션 버전 평가](working-with-training-metrics.md)단원을 참조하세요.

## 솔루션 최적화(AWS CLI)
<a name="optimizing-solution-cli"></a>

 사용자-개인 맞춤 또는 -순위 레시피를 통해서만 목표에 맞게 최적화할 수 있습니다. 를 사용하여 추가 목표에 맞게 솔루션을 최적화하려면 새 솔루션을 AWS CLI생성하고 `solutionConfig` 객체의 `optimizationObjective` 키를 사용하여 목표 세부 정보를 지정합니다. `optimizationObjective`에는 다음 필드가 있습니다.
+ `itemAttribute`: 목표와 관련된 항목 데이터세트의 수치 메타데이터 열의 이름을 지정합니다.
+ `objectiveSensitivity`: 추천을 생성할 때 솔루션이 목표에 중점을 두는 정도를 지정합니다. 목표 민감도 수준은 Amazon Personalize가 항목 상호 작용 데이터 세트의 데이터를 통해 목표와 관련성을 기준으로 추천 항목의 균형을 맞추는 방법을 구성합니다. `objectiveSensitivity`은 `OFF`, 낮음, `MEDIUM`또는 `HIGH`가 될 수 있습니다. 자세한 내용은 [목표 강조와 관련성의 균형 유지](#balancing-objective-emphasis)단원을 참조하세요.

다음은 `create-solution` AWS CLI 명령의 예입니다. `solution name`, `dataset group arn`및 `recipe arn`값을 사용자의 값으로 바꿉니다.

`optimizationObjective`의 경우, `COLUMN_NAME`를 해당 목표와 관련된 항목 데이터세트의 숫자 메타데이터 열 이름으로 바꿉니다. `objectiveSensitivity`의 경우 OFF, LOW, MEDIUM 또는 HIGH를 지정합니다.

```
aws personalize create-solution \
--name solution name \
--dataset-group-arn dataset group arn \
--recipe-arn recipe arn \
--solution-config "{\"optimizationObjective\":{\"itemAttribute\":\"COLUMN_NAME\",\"objectiveSensitivity\":\"MEDIUM\"}}"
```

솔루션이 준비되면 새 솔루션 버전을 생성합니다(예제 명령은 [솔루션 생성(AWS CLI)](create-solution.md#configure-solution-cli)참조). 솔루션 버전을 만들었다면 솔루션 버전 지표로 최적화 성능을 볼 수 있습니다. [최적화 성능 측정](#measuring-performance)을(를) 참조하세요.

## 솔루션(AWS SDKs) 최적화
<a name="optimizing-solution-sdk"></a>

사용자-개인 맞춤 또는 -순위 레시피를 통해서만 목표에 맞게 최적화할 수 있습니다.

 AWS SDKs를 사용하여 추가 목표에 맞게 솔루션을 최적화하려면 새 솔루션을 생성하고 솔루션의 `solutionConfig` 객체에 `optimizationObjective` 키를 사용하여 목표 세부 정보를 지정합니다. `optimizationObjective`에는 다음 필드가 있습니다.
+ `itemAttribute`: 목표와 관련된 데이터세트 그룹의 항목 데이터세트의 수치 메타데이터 열의 이름을 지정합니다.
+ `objectiveSensitivity`: 추천을 생성할 때 솔루션이 목표에 중점을 두는 정도를 지정합니다. 목표 민감도 수준은 Amazon Personalize가 항목 상호 작용 데이터 세트의 데이터를 통해 목표와 관련성을 기준으로 추천 항목의 균형을 맞추는 방법을 구성합니다. `objectiveSensitivity`은 `OFF`, `LOW`, `MEDIUM`또는 `HIGH`일 수 있습니다. 자세한 내용은 [목표 강조와 관련성의 균형 유지](#balancing-objective-emphasis) 단원을 참조하십시오.

다음 코드를 사용하여 AWS SDK for Python (Boto3) 또는 AWS SDK for Java 2.x를 통해 추가 목표가 있는 솔루션을 생성합니다.

솔루션이 준비되면 새 솔루션 버전을 생성합니다(예: 코드는 [솔루션 버전 생성(AWS SDK)](creating-a-solution-version.md#create-solution-version-sdk)참조). 솔루션 버전을 만들었다면 솔루션 버전 지표로 최적화 성능을 볼 수 있습니다. [최적화 성능 측정](#measuring-performance)을(를) 참조하세요.

------
#### [ SDK for Python (Boto3) ]

 추가 목표에 최적화된 솔루션을 만들려면 다음 `create_solution`메서드를 사용합니다. `solution name`, `dataset group arn`및 `recipe arn`값을 사용자의 값으로 바꿉니다.

`optimizationObjective`의 경우, `COLUMN_NAME`를 해당 목표와 관련된 항목 데이터세트의 숫자 메타데이터 열 이름으로 바꿉니다. `objectiveSensitivity`의 경우 OFF, LOW, MEDIUM 또는 HIGH를 지정합니다.

```
import boto3

personalize = boto3.client('personalize')

create_solution_response = personalize.create_solution(
    name= 'solution name', 
    recipeArn = 'recipe arn', 
    datasetGroupArn = 'dataset group arn',
    solutionConfig = {
        "optimizationObjective": {
            "itemAttribute": "COLUMN_NAME",
            "objectiveSensitivity": "MEDIUM"
        }
    }
)
solution_arn = create_solution_response['solutionArn']
print('solution_arn: ', solution_arn)
```

------
#### [ SDK for Java 2.x ]

추가 목표에 최적화된 솔루션을 생성하려면 `createPersonalizeSolution`메서드를 사용하여 Personalize 서비스 클라이언트, 데이터세트 그룹의 Amazon 리소스 이름(ARN), 솔루션 이름, 레시피 ARN, 항목 속성, 목표 민감도 수준 등을 파라미터로 전달합니다.

```
public static String createPersonalizeSolution(PersonalizeClient personalizeClient, 
                                             String datasetGroupArn, 
                                             String solutionName, 
                                             String recipeArn,
                                             String itemAttribute, 
                                             String objectiveSensitivity) {
    
    try {
        OptimizationObjective optimizationObjective = OptimizationObjective.builder()
            .itemAttribute(itemAttribute)
            .objectiveSensitivity(objectiveSensitivity)
            .build();
    
        SolutionConfig solutionConfig = SolutionConfig.builder()
            .optimizationObjective(optimizationObjective)
            .build();

        CreateSolutionRequest solutionRequest = CreateSolutionRequest.builder()
            .name(solutionName)
            .datasetGroupArn(datasetGroupArn)
            .recipeArn(recipeArn)
            .solutionConfig(solutionConfig)
            .build();

        CreateSolutionResponse solutionResponse = personalizeClient.createSolution(solutionRequest);
        
        return solutionResponse.solutionArn();

    } catch (PersonalizeException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return "";
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients and commands using ES6 syntax.
import { CreateSolutionCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";
  
// create the personalizeClient
const personalizeClient = new PersonalizeClient({ region: "REGION"});

// set the solution parameters.
export const createSolutionParam = {
  datasetGroupArn: 'DATASET_GROUP_ARN',              /* required */
  recipeArn: 'RECIPE_ARN',                           /* required */
  name: 'NAME',                                      /* required */
  solutionConfig: {
    optimizationObjective: {
      itemAttribute: "COLUMN_NAME",           /* specify the numerical column from the Items dataset related to your objective */
      objectiveSensitivity: "MEDIUM"          /* specify OFF, LOW, MEDIUM, or HIGH */
    }
  }
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(new CreateSolutionCommand(createSolutionParam));
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

## 샘플 Jupyter Notebook
<a name="optimization-objective-sample-notebooks"></a>

추가 목표 기반 항목 메타데이터에 최적화된 솔루션을 생성하는 방법을 보여주는 샘플 Jupyter Notebook은 [Personalize 샘플](https://github.com/aws-samples/amazon-personalize-samples) GitHub 리포지토리의 [objective\$1optimization](https://github.com/aws-samples/amazon-personalize-samples/tree/master/next_steps/core_use_cases/objective_optimization) 폴더를 참조하세요