Autonomous DatabaseのAutoMLにCommonLit Readability Prizeを試してみる

Oracle Cloud Infrastructure (OCI) で無料で使用可能なAutonomous Database (Autonomous Data Warehouse) を使用して、KaggleコンペのCommonLit Readability PrizeをAutoMLに試してみるのが目的です。
（以下の記述はAutonomous Data Warehouseがすでに作成されていることが前提条件です。）

## Autonomous Data Warehouse ML のユーザ作成

Autonomous Data Warehouseの管理者ADMINは既存していますが、後で使用したい「Oracle Machine Learningノートブック」には管理者ADMINだと一部機能制限があります。管理者以外のユーザを作成しておく必要があります。
※ADMINは機能制限でAutoMLを使用できません。

「Oracle MLユーザーの管理」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/78dc0c98-9d51-3edc-ebe7-9b79e8284884.png)

ユーザ情報を入力し、「作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/868a3543-be1b-b8c0-5acb-e0dd10b0118f.png)

作成したMLユーザが「データベースアクション」にアクセスできるように設定します。（データのインポートのため必要）

「データベース・アクション」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/64c9353c-9ff2-f911-623d-4c75f91722d7.png)

管理者ADMINでログインします。

「SQL」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/ce704ca2-1cbb-c83a-aa3c-217b53e40538.png)

下記SQLを実行します。

```sql
BEGIN
   ORDS_ADMIN.ENABLE_SCHEMA(
     p_enabled => TRUE,
     p_schema => 'AUTOML',
     p_url_mapping_type => 'BASE_PATH',
     p_url_mapping_pattern => 'automl',
     p_auto_rest_auth => TRUE
   );
   COMMIT;
END;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/05ff9b77-55b6-0aed-0123-8847a7c12de0.png)

## Kaggleデータのインポート

Kaggleからtrain.csvとtest.csvをダウンロードし、管理者ADMINでデータをインポートします。（上で作成したAUTOMLユーザでCSVインポートしたい場合は権限付与が必要）

train.csvを取り込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/f873d105-94a0-64ab-c492-94809f27c6a5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/294e7381-92f7-9026-7b41-27c84bf48bf5.png)

同様にtest.csvも取り込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/75ee60a0-3542-b0d4-dc5e-1600eb4b1d5f.png)

## Oracle Machine Learning AutoML UIでモデル作成とデプロイ

「Oracle Machine Learningノートブック」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/e12645ea-91b0-c7a8-73a7-0c597f68fe05.png)

AUTOMLユーザでログインします。

「AutoML」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/87e46afa-eebc-ebc4-091e-9e92fa0e2ad6.png)

必要な情報を入力し、「開始」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/66000993-6f37-609d-c111-be408837baab.png)

処理完了すると画面右上に「完了」と表示されます。
完了するとアルゴリズムごとの精度が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/4cdf11f6-f623-0fc5-7fd5-addd965897c7.png)

モデル名をクリックすると、項目が影響が大きい順で表示されます。
ただ今回は項目１つのみです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/412ebb18-deee-55a2-ef80-dd4a525097f2.png)

モデルを選んで、「デプロイ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/a7adac4a-a371-1fd3-e5b7-15b1fba67f32.png)

必要な情報を入力し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/fac0c553-5d38-68e6-38c3-1abc31353680.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/ebfc62ba-7881-2a90-298a-b0599a42a18a.png)

デプロイが完了すると、REST APIでモデルを呼出すことが可能になります。

## ノートブックの作成と結果予測

アルゴリズムを選択し、「ノートブックの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/c58d0c4e-a24b-7c53-1277-373a7f791f39.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/34dc2efe-d671-d22a-be28-a41b77440f43.png)

「ノートブック」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/ca060b01-e6a2-7e63-e4c9-5cf31ef7fc46.png)

ノートブック名をクリックすると、AutoMLで選択したアルゴリズムがPythonコードに変換されていることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/8f12caa9-5097-7fed-d5fb-4ecb2bb032ee.png)

TESTテーブルのデータを読込み、結果予測するには以下のコードを最後に追加します。

```python
%python
import oml

column = '"EXCERPT"'
schema='"AUTOML"'
table='"TEST"'

query = 'SELECT ' + column + ' FROM ' + schema + '.' + table + ' ORDER BY ID '

data_test = oml.sync(query=query)
result = svm_mod.predict(data_test)['PREDICTION'].pull()
print(result)
```

予測結果は以下を得られましたが、一様な値となってしまい予測がうまくできていないことがわかります。
タイタニックデータセットではそれなりのスコアが出ていますが、こちらの自然言語処理はうまくいかないことがわかりました。
※ [今度は Oracle Machine Learning AutoML UIで機械学習してタイタニック号の生存者を予測](https://qiita.com/kngsym2018/items/ba0c4c12ee268861da9b#%EF%BC%92oracle-machine-learning%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AE%E4%BD%9C%E6%88%90)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/3c6ae6ae-c16c-3e54-05bd-a5b3ea128fcd.png)