[JAWS-UG CLI] Amazon MachineLearning 入門 (5) バッチ予測の実行（バッチ予測）

# この記事について

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


# 前提条件

## 必要な権限

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

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

# 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

    BUCKET_NAME: ${BUCKET_NAME}
    AWS_ID: ${AWS_ID}
    ML_MODEL_ID: ${ML_MODEL_ID}

ETX
```

```text:結果

    BUCKET_NAME: jawsug-cli-ml-************
    AWS_ID: ************
    ML_MODEL_ID: ml-model-cli-************

```


# 1. バッチ予測

## 1.1. バッチ予測の作成

### バッチ予測IDの指定

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

### 変数の確認

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

    BAT_ID: ${BAT_ID}
    ML_MODEL_ID: ${ML_MODEL_ID}
    PREDICTION_DATA_SOURCE_ID: ${PREDICTION_DATA_SOURCE_ID}
    BUCKET_NAME: ${BUCKET_NAME}

ETX
```

```text:結果

    BAT_ID: bat-cli-************
    ML_MODEL_ID: ml-model-cli-************
    PREDICTION_DATA_SOURCE_ID: prediction-cli-************
    BUCKET_NAME: jawsug-cli-ml-************

```


### バッチ予測の作成

```bash:コマンド
aws machinelearning create-batch-prediction \
    --batch-prediction-id ${BAT_ID} \
    --ml-model-id ${ML_MODEL_ID} \
    --batch-prediction-data-source-id ${PREDICTION_DATA_SOURCE_ID} \
    --output-uri s3://${BUCKET_NAME}/
```

```json:結果
{
    "BatchPredictionId": "bat-cli-************"
}
```


## 1.2. バッチ予測の確認

### バッチ予測の確認(1)

```bash:コマンド
aws machinelearning get-batch-prediction \
    --batch-prediction-id ${BAT_ID}
````

```json:結果
{
    "Status": "COMPLETED",
    "ComputeTime": 42000,
    "Name": "bat-cli-************",
    "InputDataLocationS3": "s3://jawsug-cli-ml-************/banking-batch.csv",
    "InvalidRecordCount": 0,
    "CreatedByIamUser": "arn:aws:iam::************:user/user01",
    "MLModelId": "ml-model-cli-************",
    "TotalRecordCount": 4119,
    "LastUpdatedAt": 1474613923.804,
    "BatchPredictionDataSourceId": "prediction-cli-************",
    "OutputUri": "s3://jawsug-cli-ml-************/",
    "StartedAt": 1474613832.984,
    "BatchPredictionId": "bat-cli-************",
    "LogUri": "https://eml-prod-dub-emr.s3.amazonaws.com/************-bp-bat-cli/userlog/************-bp-bat-cli?AWSAccessKeyId=********************&Expires=1475218749&Signature=********************************",
    "CreatedAt": 1474613830.048,
    "FinishedAt": 1474613923.804
}
```


### バッチ予測の確認(2)

```bash:コマンド
aws machinelearning describe-batch-predictions
```

```json:結果
{
    "Results": [
        {
            "Status": "COMPLETED",
            "ComputeTime": 42000,
            "Name": "bat-cli-************",
            "InputDataLocationS3": "s3://jawsug-cli-ml-************/banking-batch.csv",
            "InvalidRecordCount": 0,
            "CreatedByIamUser": "arn:aws:iam::************:user/user01",
            "MLModelId": "ml-model-cli-************",
            "TotalRecordCount": 4119,
            "LastUpdatedAt": 1474613923.804,
            "BatchPredictionDataSourceId": "prediction-cli-************",
            "OutputUri": "s3://jawsug-cli-ml-************/",
            "StartedAt": 1474613832.984,
            "BatchPredictionId": "bat-cli-************",
            "CreatedAt": 1474613830.048,
            "FinishedAt": 1474613923.804
        }
    ]
}
```

### ログの確認

```bash:コマンド
BAT_LOG_URI=$(aws machinelearning get-batch-prediction \
    --batch-prediction-id ${BAT_ID} \
    --query LogUri \
    --output text) \
    && curl ${BAT_LOG_URI}
```


## 1.3. バッチ予測結果の確認

### URLの確認

```bash:コマンド
OUTPUT_URL=$(aws machinelearning get-batch-prediction \
    --batch-prediction-id ${BAT_ID} \
    --query "OutputUri" \
    --output text) \
    && echo ${OUTPUT_URL}
```

```text:結果
s3://jawsug-cli-ml-************/
```


### 結果ファイルの確認

```bash:コマンド
aws s3 ls ${OUTPUT_URL}batch-prediction/result/
```

```text:結果
2016-09-23 06:58:28      20195 bat-cli-************-banking-batch.csv.gz
```


### ファイルのダウンロード

```bash:コマンド
aws s3 cp ${OUTPUT_URL}batch-prediction/result/${BAT_ID}-banking-batch.csv.gz ~/${BAT_ID}-banking-batch.csv.gz
```

```text:結果
download: s3://jawsug-cli-ml-************/batch-prediction/result/bat-cli-************-banking-batch.csv.gz to ./bat-cli-************-banking-batch.csv.gz
```

### ファイルの展開

```bash:コマンド
gzip -d ~/${BAT_ID}-banking-batch.csv.gz
```

```text:結果
（返値無し）
```


### ファイルの確認

```bash:コマンド
head -n 100 ${BAT_ID}-banking-batch.csv
```

```text:結果
bestAnswer,score
0,8.590992E-2
0,1.335159E-2
0,1.950702E-2
0,1.63126E-3
0,2.532505E-3
0,9.161337E-2
0,4.183979E-1
0,1.800268E-3
0,2.563585E-3
0,3.935924E-3
0,4.716424E-2
0,1.501254E-2
0,2.398386E-3
0,8.43198E-3
0,4.303181E-1
0,2.86207E-1
0,2.357897E-2
0,1.268291E-3
0,1.642615E-3
0,3.097656E-1
0,2.948386E-2
1,7.252365E-1
1,5.434449E-1
0,1.312167E-2
0,1.915593E-2
0,1.009565E-1
0,4.014505E-2
0,2.910636E-3
0,3.118411E-3
0,6.947834E-3
0,1.809382E-1
0,4.026444E-2
0,2.908092E-1
0,1.897957E-2
0,2.379741E-3
0,7.800709E-2
0,1.223549E-3
0,7.934856E-2
0,4.733014E-3
0,1.153531E-1
0,2.497169E-3
0,4.523935E-2
0,1.775234E-1
0,1.56301E-2
0,4.539988E-2
0,8.185244E-2
0,9.733788E-3
0,5.293093E-3
0,2.525336E-2
0,1.301621E-2
0,4.115836E-1
0,3.770942E-2
0,2.402706E-2
0,3.158798E-1
0,1.751984E-2
0,1.735797E-3
0,2.206039E-3
0,8.102211E-3
0,8.296724E-3
1,6.299675E-1
0,2.314626E-1
0,1.80875E-2
1,8.896276E-1
0,6.093348E-2
0,5.301622E-3
0,8.836432E-2
0,6.371402E-2
0,2.497029E-2
1,6.450742E-1
0,7.008393E-2
0,4.396785E-2
0,1.793529E-1
0,6.828636E-3
0,8.618571E-3
1,5.415242E-1
0,7.498209E-3
0,4.472229E-2
0,3.440514E-2
0,2.017661E-3
0,4.173267E-2
1,6.667838E-1
0,1.113257E-2
0,3.411497E-3
1,7.40254E-1
0,3.20409E-2
0,6.831488E-3
0,6.114282E-3
0,1.881771E-1
0,8.277351E-2
0,1.525499E-3
0,2.966657E-2
0,9.674413E-3
0,2.176874E-2
0,1.185455E-2
0,5.816767E-3
0,2.041374E-2
0,1.054261E-2
0,8.247854E-3
0,6.490427E-2
```

以上です。