Oracle Analytics Cloud：データフローで機械学習を試してみる

# はじめに
Oracle Analytics Cloud（**OAC**）では、データセットをインプットとして機械学習モデルを構築するためのデータフローを作成できます。
構築した機械学習モデルは、別のデータセットに適用できます。
この一連の流れを紹介します。

# データの準備
手元の環境にSQLDeveloperをインストールしているのですが、Oracle Data Miner用のサンプルデータをロードするためのスクリプトがあることを知りました。
これを使ってみようと思います。

場所は、sqldeveloper/dataminer/scripts です。
ここにある instInsurCustData.sql を流用します。
顧客リストが作成され、保険に加入したかどうかを示すデータが含まれます。
Autonomous Data Warehouse（**ADW**）に専用のユーザーを作成し、SQLを実行します。

# データフローの作成
ここから先は、OACでの作業です。
サンプルデータをデータセットとして定義して、データフローを作成していきます。

## データセットの作成
INSUR_CUST_LTV_SAMPLE表を使用しますが、この表をトレーニング用とテスト用に分けて使います。
まずは、トレーニング用のデータセットを作成します。
普通にINSUR_CUST_LTV_SAMPLE表を使ってデータセットを作ります。
INSUR_CUST_LTV_SAMPLE表を右クリックして「定義の編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b6a1c556-c34d-4fc8-d075-14a663d8f7ec.png)
フィルタアイコンをクリックしてメニューを表示させ、「式フィルタの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a9e388fa-d48e-0a21-da24-e075c3390f9f.png)
CUSTOMER_IDに格納されている値の長さが5バイト以上の列だけを抽出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f77bc17d-917e-95b0-b774-b604da44a094.png)
乱暴ですが、これで全データの90%程度を抽出できます。
保存アイコンをクリックして、データセットを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/52a15dcc-192e-e263-6b39-d981255a2882.png)
名前は「INSUR_CUST_LTV_TRAIN」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/cf3dffad-5dee-badc-9f1c-0ad6b6d8ff78.png)

続いて、テスト用のデータセットを作成します。
全く同じ要領で、式フィルタの内容だけを変えます。
（今度はCUSTOMER_IDの長さが5バイト未満のものだけを抽出）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/fae28506-21e7-ba03-e2c6-3eebf2953eb1.png)
「INSUR_CUST_LTV_TEST」という名前で保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/c5404381-b493-2ad6-e98e-a1b86acb08a3.png)

## トレーニングのためのデータフローを作成
「作成」をクリックして、新しいデータフローを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2f555b24-a824-3ddc-9851-84add759b989.png)
「INSUR_CUST_LTV_TRAIN」データセットをクリックして選択し、「追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/400b4e62-1e6d-7ad9-144b-b868433a60c1.png)
ステップを追加するために「＋」をクリックして、「二項分類子のトレーニング」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/48999450-839b-b4c1-8e9d-f21a3be9f724.png)
今回は、アルゴリズムとしてサポートベクターマシンを選択します（後で変更も可能です）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8b408def-2655-b791-4b78-2be6b0a673e2.png)
ターゲットを「BUY_INSURANCE」列とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3dfbf14d-40d0-7e90-15d2-a4348d02002a.png)
この列には、保険に加入したかどうかを「Yes」「No」のいずれかのデータで入っています。
従って「Positive Class in Target」の値はデフォルトの「Yes」のままにしておきます。
その他のパラメータも全部デフォルトのままにしました。
モデルの保存ステップで、任意の名前のモデル名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/971048b5-f43c-2725-6adc-9987ab039251.png)
データフローを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/08c72061-0062-2651-8d27-372b94aa854f.png)
任意の名前を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0e04e12a-33ec-1923-0404-57d213d9ff02.png)
データフローを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1dda5932-387c-19ce-18da-e9acc750b4fa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/73006977-c819-d56c-04a9-f67c5a80cff7.png)

## 作成した機械学習モデルの評価
機械学習モデルが作成できたら、モデルの評価を見てみます。
「機械学習」メニューを見てみると、データフローで作成した機械学習モデルがあるのがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/6eabbac5-9cbc-0737-c74d-e3c8e1961e63.png)
作成した機械学習モデルを右クリックし「検査」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/5915a1fc-9a4c-19b4-eb5d-21643c3bd72d.png)
「品質」タブで、モデルの精度等を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/84e3bc9c-aacb-e367-3d19-158cb446d849.png)

## 機械学習モデルを適用するためのデータフローを作成
新規にデータフローを作成します。
使用するデータセットは「INSUR_CUST_LTV_TEST」を選択します。
ステップを追加するために「＋」をクリックして、「モデルの適用」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1836b810-5620-525f-8dd8-c139ca4d193a.png)
先程作成した機械学習モデルをクリックして選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b259664a-711c-6411-17f3-be94a21ef055.png)
さらに「データの保存」ステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/5448a594-8777-e789-e0cd-a5113097325c.png)
データセット名とデータセット表に任意の名称を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/efed7a82-3271-3613-ea51-4a0fb16954a4.png)
データフローを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b1146357-4ee4-7b7e-d461-7c7a940f2462.png)
データフローの名前を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b526ad57-b1fe-f0c5-4446-f8e8d165fbe3.png)
データフローを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8501580a-0436-cb37-91bf-e5b65abff3c4.png)

# 予測したデータセットでワークブックを作成
データフローの実行が完了したら、データメニューでデータセットの一覧を確認します。
指定した名前のデータセットが作成されていたら、クリックしてワークブックを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ab24fd7b-5922-d832-682b-3ec0fe3f0d2e.png)
ワークブックで可視化の体裁を整えたら完成です。
PredictiveValue列が予測結果で、BUY_INSURANCE列が実際の値です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2437e0ef-038e-c4ce-1c79-f0a1c9a089e4.png)

# おわりに
1行もコードを書かずに機械学習モデルを作成し、それをデータに適用することができました。
トレーニングのためのデータフローで、機械学習アルゴリズムを変更したり、パラメータを変更したりして、結果がどうなるかを試してみてください。