はじめに
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表を右クリックして「定義の編集」をクリックします。

フィルタアイコンをクリックしてメニューを表示させ、「式フィルタの作成」をクリックします。

CUSTOMER_IDに格納されている値の長さが5バイト以上の列だけを抽出します。

乱暴ですが、これで全データの90%程度を抽出できます。
保存アイコンをクリックして、データセットを保存します。

名前は「INSUR_CUST_LTV_TRAIN」にします。

続いて、テスト用のデータセットを作成します。
全く同じ要領で、式フィルタの内容だけを変えます。
(今度はCUSTOMER_IDの長さが5バイト未満のものだけを抽出)

「INSUR_CUST_LTV_TEST」という名前で保存します。

トレーニングのためのデータフローを作成
「作成」をクリックして、新しいデータフローを作成します。

「INSUR_CUST_LTV_TRAIN」データセットをクリックして選択し、「追加」をクリックします。

ステップを追加するために「+」をクリックして、「二項分類子のトレーニング」をクリックします。

今回は、アルゴリズムとしてサポートベクターマシンを選択します(後で変更も可能です)。

ターゲットを「BUY_INSURANCE」列とします。

この列には、保険に加入したかどうかを「Yes」「No」のいずれかのデータで入っています。
従って「Positive Class in Target」の値はデフォルトの「Yes」のままにしておきます。
その他のパラメータも全部デフォルトのままにしました。
モデルの保存ステップで、任意の名前のモデル名を入力します。

データフローを保存します。

任意の名前を入力します。

データフローを実行します。


作成した機械学習モデルの評価
機械学習モデルが作成できたら、モデルの評価を見てみます。
「機械学習」メニューを見てみると、データフローで作成した機械学習モデルがあるのがわかります。

作成した機械学習モデルを右クリックし「検査」をクリックします。

「品質」タブで、モデルの精度等を確認することができます。

機械学習モデルを適用するためのデータフローを作成
新規にデータフローを作成します。
使用するデータセットは「INSUR_CUST_LTV_TEST」を選択します。
ステップを追加するために「+」をクリックして、「モデルの適用」をクリックします。

先程作成した機械学習モデルをクリックして選択します。

さらに「データの保存」ステップを追加します。

データセット名とデータセット表に任意の名称を入力します。

データフローを保存します。

データフローの名前を入力します。

データフローを実行します。

予測したデータセットでワークブックを作成
データフローの実行が完了したら、データメニューでデータセットの一覧を確認します。
指定した名前のデータセットが作成されていたら、クリックしてワークブックを作成します。

ワークブックで可視化の体裁を整えたら完成です。
PredictiveValue列が予測結果で、BUY_INSURANCE列が実際の値です。

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