今度は Oracle Machine Learning AutoML UIで機械学習してタイタニック号の生存者を予測

#本投稿の背景

Oracle Autonomous Data Warehouseに AutoMLの機能が追加されました。
　 https://www.oracle.com/jp/corporate/pressrelease/jp20210318.html

機能を簡単に言うと、
**「Oracle Autonomous Databaseに無償で機械学習機能が組み込まれ、Oracle Autonomous Databaseにあるテーブルデータを使用して機械学習ができ、機械学習で作成したモデルをRest APIで公開できます。また、機械学習はローコードで実施できます。」**　


ちょうど、前記事で　[Oracle Cloud Infrastructure Data Science](https://qiita.com/kngsym2018/items/9afa6bc86a4b21f4fc54#oracle-cloud-infrastructure-data-science-%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%82%BF%E3%82%A4%E3%82%BF%E3%83%8B%E3%83%83%E3%82%AF%E5%8F%B7%E3%81%AE%E7%94%9F%E5%AD%98%E8%80%85%E4%BA%88%E6%B8%AC%E7%B5%90%E6%9E%9C%E3%82%92kaggle%E3%81%AB%E6%8F%90%E5%87%BA) を使用して、
機械学習で予測結果を評価しており、
「Oracle Machine Learning AutoML UI」と「Oracle Cloud Infrastructure Data Science」で
予測結果の比較をするのも面白いなと思い記事にしました。

■機械学習をするお題
　Kaggleのタイタニック生存者予測を提出して正解率を確認します。
  　※タイタニック生存者予測にの説明は、[こちら](https://qiita.com/kngsym2018/items/9afa6bc86a4b21f4fc54#%E3%81%9D%E3%81%AE%EF%BC%93%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%A7%E4%BA%88%E6%83%B3%E3%81%97%E3%81%9F%E7%B5%90%E6%9E%9C%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%84%E3%81%8B%E3%82%92%E7%9F%A5%E3%82%8A%E3%81%9F%E3%81%84)　を参照ください


記事では、以下２つについて記載しております
**１．[前回の記事]の 「Oracle Cloud Infrastructure Data Science」 で予測した結果と 
「Oracle Machine Learning AutoML UI」で予測した結果を比較**
  
**２．Oracle Machine Learning AutoML UIでモデルをデプロイしてREST API使用することができますので、APIをコールして予測結果を受け取ります**


※手順は詳細に記載しており、やってみようと思う方のお役に立てたら幸いです。

#実施手順
以下の手順で進めます。
  １．Always free(無料)のOracle Autonomous Data Warehouse を作成 
  ２．Oracle Machine Learningユーザの作成
  ３．csvデータをDBに登録
  ４．Oracle Machine Learning AutoML UIでモデル作成とデプロイ
  ５．Kaggleに提出する生存者データを予測
  ６．KaggleにOracle Machine Learning AutoML UIで予測した結果を提出
  ７．Rest APIをコールして予測結果を受け取る

※設定手順などの詳細は、折りたたんでいるので、確認は ▶　をクリックください

##１．Always free(無料)のOracle Autonomous Data Warehouse を作成
今回はAlways free(無料) で　Oracle Autonomous Data Warehouse　を作成します。
　https://docs.oracle.com/ja-jp/iaas/Content/Database/Concepts/adbfreeoverview.htm

##１－１．コンパートメントの作成
<details><summary>コンパートメント作成の詳細はこちら</summary><div>
コンパートメントの作成については、[こちら](https://qiita.com/kngsym2018/items/34b512fef527db38fd40#2%E3%82%B3%E3%83%B3%E3%83%91%E3%83%BC%E3%83%88%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)
</div></details>

##１－２．Oracle Autonomous Data Warehouseの作成
<details><summary>Oracle Autonomous Data Warehouse作成の詳細はこちら</summary><div>

メニューの[Oracle Database]-[Autonomous Database]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/d04508d0-6f74-ab87-dffb-8df0aacddb76.png)


１－１．で作成したコンパートメントになっている事を確認して、[Autonomous Databaseの作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/c95958ee-371a-27e4-9838-3340391c58c5.png)

作成したコンパートメントになっていることを確認、DBの表示名、データベース名を入力して、
[ワークロード・タイプの選択]を「データ・ウェアハウス」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/8473bd97-2fa8-5799-a5bc-025ff2839265.png)

[Always Free]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/e0899e26-3f57-72dc-ff8d-dc150c369b6c.png)

DB管理者 ADMINのパスワードを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/5974bfcc-0c1c-23db-87dc-a1f0574cb76c.png)

[Autonomous Databaseの作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/20ac2020-157c-78fe-1bcc-cc15fd733b29.png)

[使用可能]になるのを待ちます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/d181d9f4-c093-3b47-2c23-9d4d86335f07.png)

</div></details>

#２．Oracle Machine Learningユーザの作成
AutoMLやモデルのデプロイをを実行するOracle Machine Learningユーザを作成します。
今後はこの作成したユーザを使用します。

<details><summary>Oracle Machine Learningユーザ作成の詳細はこちら</summary><div>


[サービス・コンソール]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/0740b3ff-e23d-d02f-53a0-6ff330d6aacc.png)

[管理]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/82f7c435-a1d8-de7a-e85b-ef4bff6d0089.png)

[Oracle MLユーザの管理]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/de0b292f-aced-6a5f-a7e1-416b6c0a2cf5.png)

[作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/68e1d300-0dd3-4093-9545-dad7348c0043.png)

[ユーザ名]、[電子メール・アドレス]、[チェック]を外し、[パスワード]を入力して、[作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/e7f7b9d1-570a-3260-7661-8007fd386ffd.png)

ユーザが作成されたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/6ba51a49-4526-6417-a6ad-1de182383a9e.png)

作成したOracle Machine Learningユーザがcsvファイルを取り込めるようにする設定をします

[開発]-[データベース・アクション]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/43a97ad7-6134-a860-6323-369c2b17b46c.png)

ADMIN　と入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/843cd989-ded0-e02c-4418-85805ffe5b49.png)

パスワードを入力して、[サインイン]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/6475c08d-4ccf-af3e-23f5-33009b90820f.png)

[SQL]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/083e6f1d-8265-277d-8148-aa0d7bda29b1.png)

Oracle Machine Learningユーザが「データベースアクション」できるように設定
sqlで設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/37204b01-1a08-91ec-25d3-c08344aada7b.png)


p_url_mapping_pattern は、ユーザ名の小文字を設定

```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;
/
```

</div></details>


#３．csvデータをDBに登録
Kaggleからダウンロードした機械学習するデータ(train.csv、test.csv)をDBにロードします。

<details><summary>csvデータをDBに登録の詳細はこちら</summary><div>

[開発]-[データベース・アクション]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/43a97ad7-6134-a860-6323-369c2b17b46c.png)

さっきほど設定した、p_url_mapping_pattern で設定した、ユーザ名の小文字を入力して
パスワードを入力、そして[サインイン]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/cb9e3651-2ed7-4cb3-3d3b-1388c92e203d.png)

[データ・ロード]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/f206efff-ba2c-8c46-765a-ae0ad6abbaa4.png)

[ローカル・ファイル]を選択して、[次]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/ded32bd4-2803-616e-9e78-80c745675d87.png)

##３－１．train.csvのロード
Kaggleからダウンロードした、train.csvをドラッグ・アンド・ドロップします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/78ad196b-40bb-1666-855d-69728e9094b0.png)

鉛筆マークをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/a7213ef9-9578-471d-a914-2aa2a013256f.png)

[Servived]を選択して、VARCHAR2にデータ型を変更して、[閉じる]をクリック
※後工程のnotebook作成でエラー回避する対応
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/eaea9e55-737f-81e3-83db-307cdd57daa7.png)

▶　ボタンをクリックして、[実行]ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/4a8169c2-7cf4-0928-eedd-e7e0fb05622a.png)

[ステータス]が完了されていることを確認して、[完了]ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/9ec4debf-fa24-d85f-4b54-8fd409e23583.png)

##３－２．test.csvのロード
[データ・ロード]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/f206efff-ba2c-8c46-765a-ae0ad6abbaa4.png)

[ローカル・ファイル]を選択して、[次]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/ded32bd4-2803-616e-9e78-80c745675d87.png)

test.csvをドラッグ・アンド・ドロップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/3331651c-9f0b-7efe-fb33-e251be6ad154.png)

▶　ボタンをクリックして、[実行]ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/6dbd783c-4729-ca26-d3b8-8034c112e67a.png)

[ステータス]が完了されていることを確認して、[完了]ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/6f628793-dfed-04cb-2c77-b7f5e87ed182.png)

</div></details>

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

ロードしたデータを使用して機械学習を行います


<details><summary>Oracle Machine Learning AutoML UIでモデル作成とデプロイする手順詳細はこちら</summary><div>


[開発]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/73d47a9a-c997-e888-5f0e-fbf3d0866f5f.png)

[Oracle Machine Learningノートブック]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/0120bd44-83fc-cda5-2463-b796755d6e49.png)

「２．Oracle Machine Learningユーザの作成」で作成したユーザ、パスワードを入力して「サインイン」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/6ecf8d33-3fab-4aa0-a6b1-3e1a23d808f4.png)

[AutoML]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/b9983f9c-52c4-f48d-a3d6-b86d9eba667e.png)

[作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/7bfc349e-4179-471b-9eee-4c7caff3c731.png)

「名前」、「コメント(任意）」を入力して、「データ・ソース」の[虫眼鏡アイコン]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/9d8e3cb7-28d0-83ee-6af2-645f159fe274.png)

「スキーマ」を作成したユーザ(この記事だとAUTOMLユーザ）を選択、「表」とトレーニングデータの
[TRAIN]を選択して、[OK]ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/3b952c68-f109-8303-2ec4-74e2bf7665c8.png)

「予測」は 機械学習で予測する列を選択します。※生存フラグ列の[SURVIVED]列を選択。
「予測タイプ」は、「予測」で列を選択した際に自動で[分類]or[回帰]を選択してくれます。
「ケースID」は、今回は一意な列[PASSENGERID]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/4c6a1a03-d39c-50f7-b91d-d119074e96d4.png)

[開始]ボタンをクリック。今回は「より早い結果」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/74659638-7a82-9be1-f21a-c4b8ad4b74b3.png)

実行中を表示される。進捗状況は[・・・]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/937e78c2-36b0-d1fd-5be7-fae1e647b02f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/17e9d784-6eef-639c-ff20-36a41b3e2601.png)
学習が終わると[完了]と表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/a789a14c-dbe7-2eb7-647d-c991388654e9.png)

アルゴリズム毎の精度がでる。（今回はランダム・フォレストが精度が高かった）
詳細はモデル名をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/f5f7c2a1-d677-2995-b1c9-e4ce3b882bc4.png)

予測するにあたり影響が大きい列が表示される。「混同行列」をクリックすることで混同行列を確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/372f2793-ed5e-54c8-584a-fd28bcd3b840.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/7f29490f-ad23-74cc-787c-ae30c77237bf.png)

デプロイするモデルを選択(今回はランダム・フォレスト:rf_6ce964502f)を選択して、[デプロイ]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/f2215b29-3e1a-7598-80a7-8c9da1cdf5b2.png)

「名前(任意)」、「URI(任意)」、「バージョン(任意)」、「ネームスペース(任意)」、「共有」にチェックを入れ、[OK]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/9066b564-1eb8-d646-6dee-bc559fd25b19.png)
モデルのデプロイ結果が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/81a8f52d-5e74-740f-d309-a008a8ebd365.png)

画面左上の[モデル]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/64e95f6d-694b-e463-d58a-0f34d038f8e3.png)

[デプロイメント」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/823b057b-bc10-7897-2bc3-cd1a4d0df1e4.png)

作成したモデル名をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/98264e72-97a6-004e-f6a6-d61d5c89e380.png)

作成したモデルは、予想する際に必要な情報は、「AGE」、「FARE」、「PCLASS」、「SEX」、「SIBSP」で
結果は、"0"、"1" でかえるようになっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/d665040a-7b75-03dd-4b68-ec8aedf48fd9.png)

URIの情報を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/b4042167-5135-1037-05dc-c6855fcc6610.png)
URIをPATHを確認(あとで使用します) ※APIのURLになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/6fa2802e-4963-2c9e-505d-1f2f9549239b.png)

</div></details>

#５．Kaggleに提出する生存者データを予測

notebookを作成すると、
「４．Oracle Machine Learning AutoML UIでモデル作成とデプロイ」で作成したモデルを
Pythonのコードにして自動生成されます。

notebook上でpythonを実行し、モデルを使用できる状態にして、
Kaggleに提出する生存者データの予測をします。


<details><summary>Kaggleのtestデータを予測する手順詳細はこちら</summary><div>

画面左上の[AutoML]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/e16dcbc7-2bc7-0884-000d-090ededc7afc.png)
作成したAutoMLをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/71e64daa-90d8-f538-a969-4109b876f7a4.png)

先ほどデプロイした精度の１番高いアルゴリズムを選択して、[ノートブックの作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/47a8c4e9-0e8a-9cad-e721-f327ceac974a.png)

ノードブック名を入力して、[OK]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/d238aefc-89f2-644e-9d72-2ef1f791b796.png)

[ノートブック]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/47b1fc89-db9a-72a3-7802-f9d847d9395a.png)

作成されたノートブックが表示される。ノートブック名をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/7f2e9a19-3ee0-12f7-739c-a0d8b4257593.png)

ノートブックが開くと、AutoMLで選択したアルゴリズムからpythonコードに変換されている
このpython コードを上から順番に実施していき、モデルが使用できる状態にして、
「Kaggleに提出する test データ」を予想させます

▶　をクリックして、pythonを上から順番に実行します。(編集なしで実行のみでOK）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/f2f48a7d-be89-495a-7da7-f90645e81544.png)

「Show Accuracy」の後に以下のコードを入力します。
内容は、「TEST」テーブルのデータを読み込み、モデルに予測させる内容となります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/29047102-44fc-ce19-1369-1f46e54b8874.png)

```python
%python
import oml

columns = '"PASSENGERID"' , '"AGE"' ,  '"FARE"'   , '"PCLASS"' , '"SEX"' , '"SIBSP"' 
schema='"AUTOML"'
table='"TEST"'

column = ','.join(columns)
query = 'SELECT ' + column + ' FROM ' + schema + '.' + table + ' ORDER BY PASSENGERID '

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

```

実行すると予測結果が表示されます。結果をコピーしてKaggleに提出する形式に加工します。
※PASSENGERID順の予測結果になっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/1af83519-c205-4b28-3e6c-9a1c9c142534.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/b4da7bcb-a957-6a33-bd06-75684d68a2a3.png)

</div></details>

#６．KaggleにOracle Machine Learning AutoML UIで予測した結果を提出

Oracle Machine Learning AutoML UIで予測した結果を提出

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/51fddf40-d315-7ac2-6490-ee44bab54471.png)

結果は、77.9%
**※2021年5月に予想した結果になります(日々、製品は進化するのでいつ時点の結果かを追記)**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/53f17365-36d0-0053-90e6-923cd1b39652.png)


「Oracle Machine Learning AutoML UI」と「Oracle Cloud Infrastructure Data Science」の
　予測結果の比較


|製品|正解率   |生存者予測した月   |
|---|---|---|
|Oracle Machine Learning AutoML UI|0.779  |2021年5月|
|Oracle Cloud Infrastructure Data Science  |0.760 |2021年2月|
※日々、製品は進化するので、結果は参考値という位置づけになります


#７．Rest APIをコールして予測結果を受け取る
「４．Oracle Machine Learning AutoML UIでモデル作成とデプロイ」の手順で作成された
 Rest API をコールして結果を受け取る方法について記載します。


<details><summary>Rest APIをコールして予測結果を受け取る手順詳細はこちら</summary><div>

##７－１．トークンを取得する
APIをコールするには、トークンを取得する必要があります。

構文

```bash
curl -X POST --header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d '{"grant_type":"password", "username":"'<ユーザ>'", "password":"'<パスワード>'"}'\
 <OMLサーバURL>/omlusers/tenants/<テナンシOCID>/databases/<データベース名>/api/oauth2/v1/token

```

<ユーザ>：「２．Oracle Machine Learningユーザの作成」で作成したユーザ名
<パスワード>：「２．Oracle Machine Learningユーザの作成」で設定したパスワード
<ＯＭＬサーバURL>：以下手順で取得する OMLサーバURL
<テナンシーOCID>：以下手順で取得する テナンシOCID
<データベース名>:以下手順で取得する データベース名

■確認手順（「OMLサーバURL」、「データベース名」）
[サービス・コンソール]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/7a192528-8dc2-81cf-73a7-1881ae54de0c.png)
「OMLサーバURL」、「データベース名」を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/359c2eef-f5a5-5e01-9389-3f2bd776cba0.png)

■確認手順（「テナンシのOCID」)
画面右上の人アイコンをクリックして、テナンシーをクリック
OCIDの[コピー]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/944cc305-3623-eb21-ea07-344ae90affa5.png)

サンプル

```bash
curl -X POST --header 'Content-Type: application/json' \
 --header 'Accept: application/json' -d '{"grant_type":"password", "username":"'AUTOML'", "password":"'DUMMY'"}' \
 https://adb.ap-tokyo-1.oraclecloud.com/omlusers/tenants/OCID1.TENANCY.OC1..略SC7M5YHQ/databases/DBAUTOML/api/oauth2/v1/token

```

結果がかえる
※{"accessToken":" ～ "　までがトークン (白の部分） 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/d5393609-99ad-24f7-01da-73a1d09feab3.png)
※取得したトークンの有効時間は１時間になりますので、失効したら再取得します

##７－２．APIをコールしてみる
７－１．で取得したトークンを使用して、APIをコール



トークンを環境変数に格納して、curlを実行

構文

```bash
export token=xxx<省略>xxxx==

curl -i -X POST --header "Authorization: Bearer ${token}" --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"inputRecords": [{"AGE":20, "FARE":200, "PCLASS":1, "SEX":"female","SIBSP":3}],"topN":2,"topNdetails":0}' -k https://192.xx.xx.xx/omlmod/v1/deployment/<設定した値>

```
＜export＞ ：はまりポイントは、トークンの中に「!」がある場合、export する際、エラーになるので、「\」エスケープ文字を「!」の前に入れる
＜-d ＞ ：モデルで使用する条件を設定
＜-k ＞：SSLのワーニングを無視するために入れています
＜APIのURL＞：「４．Oracle Machine Learning AutoML UIでモデル作成とデプロイ」で確認した、「URIをPATH」になります
＜topN＞：予測結果をprobabilityの高い順に並べてくれます。「0」:は "0"、"1"と結果でソート。今回は「2」として結果でソートしています(結果は"0"、"1" の２種類しかない）
＜toPdetails＞：予測結果したどの列が影響をしたかを表示します。今回は「0」:非表示にしています


</div></details>
　


■Rest APIをコールして予測結果を受け取った画面キャプチャ
　予想する条件をcurlの引数に設定して実行。
　予想が「1」になる確率が0.83 、「0」になる確率が 0.16 と結果がかえります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/43d9e9d8-1393-5896-04c0-4f1d572077af.png)



Oracle Machine Learning AutoML UIで機械学習を行い、APIを公開して
API をコールすることが確認できました。


#応用編：作成した予測モデルをアプリケーションから呼び出す

今回公開したAPIと前回作成したAPIをコールして、予測結果を取得するアプリを作ってみました。(PythonでCGIを用いたWebアプリケーション)
※curl から Python の変換は[このサイト](https://curl.trillworks.com/)で変換したものを参考にしました


構成図は以下のとおり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/829637a4-3c1e-901a-26e7-4bc8fe0bc353.png)


各APIから予測結果が「0」、「1」と取得できるので、結果によりメッセージを変えています。
　0：「生還できない」かもしれない　
　1：「無事に帰れる」かもしれない
※Oracle Machine Learning AutoML UIの場合、probability(確率) も取得できるので表示しています




|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261475/56b11d58-ea8d-6c9e-c92c-c8bd33ac9e59.gif" width=80%>|
|:--|



Web画面のHTMLとPythonで処理するコード。
※最低限動くコードとなっています(エラー処理などはありません)

<details><summary>Web画面のHTMLはこちら</summary><div>


```html:画面のHTML
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>タイタニック</title>
  <head>
  <body>
    <form action="/cgi-bin/cgi-app.py" method="post">

    <h2>タイタニック号に乗船する人の情報を入力</h2>
    <table border="1" style="border-collapse: collapse">
      <tr>
        <td>チケットクラス</td>
        <td>
            <select name="pclass">
            <option value="1">上層クラス（お金持ち）</option>
            <option value="2">中級クラス（一般階級）</option>
            <option value="3">下層クラス（労働階級）</option>
            </select>
        </td>
      </tr>
      <tr>
        <td>性別</td>
        <td><select name="sex">
            <option value="male">男性</option>
            <option value="female">女性</option>
            </select>
        </td>
      </tr>
      <tr>
        <td>年齢(数字)</td>
        <td><input type="text" name="age"  maxlength="3" oninput="value = value.replace(/[^0-9]+/i,'');"></td>
      </tr>
      <tr>
        <td>同乗している兄弟/配偶者の数(数字)</td>
        <td><input type="text" name="sibsp"  maxlength="3" oninput="value = value.replace(/[^0-9]+/i,'');"></td>
      </tr>
      <tr>
        <td>同乗している親/子供の数(数字)</td>
        <td><input type="text" name="parch"  maxlength="3" oninput="value = value.replace(/[^0-9]+/i,'');"></td>
      </tr>
      <tr>
        <td>料金(数字)500以下位</td>
        <td><input type="text" name="rare"  maxlength="3" oninput="value = value.replace(/[^0-9]+/i,'');"></td>
      </tr>
      <tr>
        <td>タイタニックへ乗った港</td>
        <td><select name="embarked">
            <option value="C">Cherbourg</option>
            <option value="Q">Queenstown</option>
            <option value="S">Southampton</option>
            </select>
        </td>
       </tr>
    </table>
    <BR>
    <input type="submit" name="送信">
  </form>
  </body>
</html>

```

</div></details>

<details><summary>Web画面の条件で 各APIをコールして結果を返す Pythonのコードはこちら</summary><div>


```python:pythonのコード

#!/usr/bin/python
# -*- coding: utf-8 -*-

import cgi
import sys
import io
import requests
import urllib.request, json
import urllib3

#Web画面の条件を変数に格納
form = cgi.FieldStorage()
pclass = form.getvalue('pclass', '')
sex = form.getvalue('sex', '')
age = form.getvalue('age', '0')
parch = form.getvalue('parch', '0')
rare = form.getvalue('rare', '0')
embarked = form.getvalue('embarked', '')
sibsp = form.getvalue('sibsp', '0')

#デバッグ用
#pclass = "1"
#sex = 'male'
#age =  '80'
#parch =  '0'
#rare =  '120'
#embarked =  'E'
#sibsp = '1'

#####
#Oracle Cloud Infrastructure Data Science のAPIコール処理
#####

#Oracle Cloud Infrastructure Data Scienceに渡す headers情報
headers = {
    'Content-Type': 'application/json',
}

#Oracle Cloud Infrastructure Data Scienceに渡す条件
dataDS =  "{\"input\":[[" + pclass + ",\"" +  sex + "\"," + age + "," + parch + "," + rare + ",\"" +   embarked    +  "\"]]}"


#Oracle Cloud Infrastructure Data Science の APIをコール
returnDS = requests.get('https://xxxxx.apigateway.ap-tokyo-1.oci.customer-oci.com/titanic/app', headers=headers, data=dataDS)

returnDSdata = returnDS.json()
predictionDS = returnDSdata["prediction"]


#結果を編集
if str(predictionDS[0]) == "1":
    textDS ="「無事に帰れる」かもしれない"
else:
    textDS ="「生還できない」かもしれない"

  
#####
#Oracle Machine Learning AutoML UI のAPIコール処理
#####

#Oracle Machine Learning AutoML UIに渡す headers情報
headersAutoML = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
}


#Oracle Machine Learning AutoML UIに渡す条件
dataML = "{\"inputRecords\": [{\"AGE\":"  + age  + ", \"FARE\":" + rare +", \"PCLASS\":"  +  pclass + ", \"SEX\":\"" + sex + "\",\"SIBSP\":" + sibsp + "}],\"topN\":2,\"topNdetails\":0}"

#Oracle Machine Learningユーザの情報
dataAutoML = '{"grant_type":"password", "username":"AUTOML", "password":"xxxxx"}'

#トークン情報を取得
tokenAutoML=requests.post('https://adb.ap-tokyo-1.oraclecloud.com/omlusers/tenants/OCID1.xxxxx/databases/DBAUTOML/api/oauth2/v1/token', headers=headersAutoML, data=dataAutoML)
tokentext = tokenAutoML.text


#{"accessToken":" ～ " の文字位置を特定
serchtext_start="{\"accessToken\":\""
serchtext_end="\",\"expiresIn\""
position_start=tokentext.find(serchtext_start) + 16
position_end=tokentext.find(serchtext_end)

#トークン情報を取得
retoken=tokentext[position_start:position_end]

#ヘッダ情報を作成
authML= "Bearer " + retoken
headersML = {
    'Authorization': 'Bearer test',
    'Content-Type': 'application/json',
    'Accept': 'application/json'
}

headersML['Authorization']=authML


#Oracle Machine Learning AutoML UIの APIをコール
urllib3.disable_warnings()
responseML = requests.post('https://192.xxx.xxx.xxx/omlmod/v1/deployment/titanic_v1/score', headers=headersML, data=dataML, verify=False)

resML=responseML.text

#予測結果 「0」 or 「1」 とprobability を 取得
position_label="label"
position_probability="probability"

#labelの結果を取得
sp=resML.find(position_label) + 8
retlabel=resML[sp:sp+1]

#probability の結果を取得
sp=resML.find(position_probability)+13
retprobability=resML[sp:sp+4]
retprobability="（probability:" + retprobability + "）"

#結果を編集
if str(retlabel) == "1":
    textML ="「無事に帰れる」かもしれない"
else:
    textML ="「生還できない」かもしれない"


#####
#結果を表示する処理
#####

print('Content-type: text/html; charset=UTF-8\r\n')

html_body = """
<!DOCTYPE html>
<html>
<head>
</haed>
<link rel="stylesheet" type="text/css" href="./../oracle.css">
<h2>予測結果</h2>
<table border=1>
  <tr>
     <TH>製品</TH><TH>予測結果</TH>
  </tr>
  <tr>
     <TD valign="left"><b><font color="#C00000">Oracle Machine Learning AutoML</font></B></TD><TD>%s<BR>%s</TD>
  </tr>
  <tr>
     <TD valign="left"><b><font color="#0070C0">Oracle Cloud Infrastructure Data Science</font></B></TD><TD>%s</TD>
  </tr>
</table>
<body>
<br>
<a href= "https://xxxx.xxxxx.xxxx/" >TOPに戻る</a>
</body>
</html>
"""

print(html_body % (textML,retprobability,textDS))

```

</div></details>


#参考

https://blogs.oracle.com/machinelearning/using-oracle-machine-learning-for-python-rest-api


https://docs.oracle.com/en/database/oracle/machine-learning/oml-automl-ui/index.html

https://docs.oracle.com/en/database/oracle/machine-learning/omlss/omlss/authenticate.html

https://www.youtube.com/watch?v=yJGsfU9cmt0