[JAWS-UG CLI] Amazon MachineLearning 入門 (3) モデルの評価

# この記事について

[JAWS-UG CLI専門支部 #67 MachineLearning入門](https://jawsug-cli.doorkeeper.jp/events/41917)で実施するハンズオン用の手順書です。


# 前提条件

## 必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

- MachineLearningのフルコントロール権限

# 0. 準備

## 0.1. リージョンを指定

```bash:コマンド
export AWS_DEFAULT_REGION="eu-west-1"
```

## 0.2. 資格情報を確認


```bash:コマンド
aws configure list
```

インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。

```text:結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************GMWA         iam-role
secret_key     ****************obFC         iam-role
    region                eu-west-1              env    AWS_DEFAULT_REGION
```

## 0.3. バージョン確認

```bash:コマンド
aws --version
```

```text:結果
aws-cli/1.10.66 Python/2.7.12 Linux/4.4.19-29.55.amzn1.x86_64 botocore/1.4.56
```

## 0.4. バージョンアップ（必要に応じて）

```bash:コマンド
sudo pip install -U awscli
```


## 0.5. 変数の確認

```bash:コマンド
cat << ETX

    AWS_ID: ${AWS_ID}
    ML_MODEL_ID: ${ML_MODEL_ID}
    TRAINING_DATA_SOURCE_ID: ${TRAINING_DATA_SOURCE_ID}

ETX
```

```text:結果

    AWS_ID: ************
    ML_MODEL_ID: ml-model-cli-************
    TRAINING_DATA_SOURCE_ID: training-cli-************

```


# 1. 学習モデルの評価

## 1.1. 評価の実行

### 評価IDの指定

```bash:コマンド
EVAL_ID="eval-cli-${AWS_ID}-$(date +%Y%m%d%H)"
```


### 変数の確認

最初に作成したデータソースの3割を評価用データとして使用します。

```bash:コマンド
cat << ETX

    EVAL_ID: ${EVAL_ID}
    ML_MODEL_ID: ${ML_MODEL_ID}
    TRAINING_DATA_SOURCE_ID: ${TRAINING_DATA_SOURCE_ID}

ETX
```

```text:結果

    EVAL_ID: eval-cli-************
    ML_MODEL_ID: ml-model-cli-************
    TRAINING_DATA_SOURCE_ID: training-cli-************

```

### 評価の作成

```bash:コマンド
aws machinelearning create-evaluation \
    --evaluation-id ${EVAL_ID} \
    --ml-model-id ${ML_MODEL_ID} \
    --evaluation-data-source-id ${TRAINING_DATA_SOURCE_ID}
```

```json:結果
{
    "EvaluationId": "eval-cli-************"
}
```

### 評価の確認(1)

```bash:コマンド
aws machinelearning get-evaluation \
    --evaluation-id ${EVAL_ID}
```

完了前には以下のような結果になります。

```json:結果
{
    "EvaluationDataSourceId": "training-cli-************",
    "Status": "INPROGRESS",
    "Name": "eval-cli-************",
    "InputDataLocationS3": "s3://jawsug-cli-ml-************/banking.csv",
    "EvaluationId": "eval-cli-************",
    "CreatedByIamUser": "arn:aws:iam::************:user/user01",
    "MLModelId": "ml-model-cli-************",
    "LastUpdatedAt": 1474611149.443,
    "StartedAt": 1474611106.459,
    "Message": "Current Step: EVALUATION (1/2) 0%",
    "PerformanceMetrics": {
        "Properties": {}
    },
    "CreatedAt": 1474611104.298
}
```

完了後には以下のような結果になります。

```json:結果
{
    "EvaluationDataSourceId": "training-cli-************",
    "Status": "COMPLETED",
    "ComputeTime": 108000,
    "Name": "eval-cli-************",
    "InputDataLocationS3": "s3://jawsug-cli-ml-************/banking.csv",
    "EvaluationId": "eval-cli-************",
    "CreatedByIamUser": "arn:aws:iam::************:user/user01",
    "MLModelId": "ml-model-cli-************",
    "LastUpdatedAt": 1474611287.208,
    "StartedAt": 1474611106.459,
    "LogUri": "https://eml-prod-dub-emr.s3.amazonaws.com/************-ev-eval-cli/userlog/************-ev-eval-cli?AWSAccessKeyId=********************&Expires=1475216221&Signature=********************************",
    "PerformanceMetrics": {
        "Properties": {
            "BinaryAUC": "0.9395127463458541"
        }
    },
    "CreatedAt": 1474611104.298,
    "FinishedAt": 1474611287.208
}
```


### 評価の確認(2)

`BinaryAUC`が、評価指標です。
0から1で表現され、1に近いほど精度の高い予測が可能とされます。

Management Consoleでも確認が可能です。

評価指標については、Developers.IOを見ればいいと思うよ。

[Amazon Machine Learningの評価指標まとめ](http://dev.classmethod.jp/cloud/aws/aml-evaluation-measures/)


```bash:コマンド
aws machinelearning describe-evaluations
```

```json:結果
{
    "Results": [
        {
            "EvaluationDataSourceId": "training-cli-************",
            "Status": "COMPLETED",
            "ComputeTime": 108000,
            "Name": "eval-cli-************",
            "InputDataLocationS3": "s3://jawsug-cli-ml-************/banking.csv",
            "EvaluationId": "eval-cli-************",
            "CreatedByIamUser": "arn:aws:iam::************:user/user01",
            "MLModelId": "ml-model-cli-************",
            "LastUpdatedAt": 1474611287.208,
            "StartedAt": 1474611106.459,
            "PerformanceMetrics": {
                "Properties": {
                    "BinaryAUC": "0.9395127463458541"
                }
            },
            "CreatedAt": 1474611104.298,
            "FinishedAt": 1474611287.208
        }
    ]
}
```

### 評価の確認(3)

Management Consoleで確認します。

![Amazon Machine Learning Management Console.png](https://qiita-image-store.s3.amazonaws.com/0/36230/fcd31d26-aa33-ece4-3990-dca719368ef1.png)


### ログの確認

```bash:コマンド
EVAL_LOG_URI=$(aws machinelearning get-evaluation \
    --evaluation-id ${EVAL_ID} \
    --query LogUri \
    --output text) \
    && curl ${EVAL_LOG_URI}
```

```text:結果
（省略）
```


以上です。