2021年4月12日月曜日

AutoMLで作成したモデルをAPEXアプリケーションで使用する

以前にOracle Machine Learningの機能をOracle APEXで使用するという記事で、Oracle APEXで作成したアプリケーションに、購買予測の行を追加するワークショップを紹介しました。

Autonomous DatabaseにAutoMLの機能が追加されたので、上記のワークショップでのモデル作成をAutoMLで実施してみました。以下に作業ログを記載します。東京リージョンのADWのインスタンスを使用しています。Always Freeですので、誰でも無料で作業を試すことができます。

ADWのインスタンス名APEXML、APEXのワークスペースとしてAPEXMLが作成されていることを前提としています。別のインスタンス名やワークスペース名でも、容易に置き換えて実施できます。

モデルの作り方以外は以前の記事と同じなので、作業自体の説明は割愛します。だだし、実施する操作については、元記事を参照せずに進めることができるように省略はしません。

アプリケーションをインストールする


機能追加を行う元となるアプリケーションをインストールします。この操作は以前の記事と全く同じです。GitHubよりf100.sqlを開き、ファイルに保存します。

Oracle APEXのワークスペースにサインインし、アプリケーション・ビルダーを開いて、インポートを実行します。


ドラッグ・アンド・ドロップをクリックして、ダウンロードしたf100.sql(またはf100.sql.txt)を選択するか、ファイルをドロップします。ファイル・タイプはデフォルトで指定される、データベース・アプリケーション、ページまたはコンポーネントのエクスポートのままにし、へ進みます。


エクスポート・ファイルが正常にインポートされた旨が通知されるので、そのままに進みます。


デフォルトの設定(次のアプリケーションとしてインストール新規アプリケーションIDを自動割当て)のまま、アプリケーションのインストールを実行します。


こちらもデフォルトの設定(サポートするオブジェクトのインストールON)のまま、に進みます。


確認画面で、インストールを実行します。


以上で、アプリケーションのインストールが完了です。


Oracle Machine Learningユーザーを作成する


Oracle Machine Learningユーザー(以後、MLユーザーとします)を作成するために、Autonomous Databaseのサービス・コンソールを開きます。


サービス・コンソールの概要管理を選択し、Oracle MLユーザーの管理を開きます。


システム管理者としてユーザーADMINがあらかじめ登録されていますが、これは使わず、新規にMLユーザーmluser1を作成します。作成をクリックします。


ユーザー名電子メール・アドレスを指定し、ユーザーにパスワードと電子メール・アカウントの詳細を生成してください。から始まる説明につけられているチェックボックスチェックを外します。チェックを入れるとパスワードが自動生成され、設定した電子メール・アドレスに通知されます。ユーザーは初回ログイン時にパスワードを変更する必要があります。今回はチェックを外して、パスワードは自分で設定します。設定を行ったのち、作成を実行します。


(別のタブで開いている)サービス・コンソールに戻り、開発からOracle Machine Learningノートブックを開きます。


ノートブックへのサインイン画面が開くので、先程作成したユーザー名と、そのユーザーのパスワードを入力してサインインをクリックします。


機械学習モデルをAutoMLで作成する


AutoMLを使って、Y Box Gamesを購入しそうな顧客を予測するモデルを作成します。

AutoMLをクリックします。


AutoML実験を作成します。


実験の作成が開きます。名前は任意ですが、今回はPredict Y Box Gamesとします。データ・ソースの選択画面を開き、スキーマSHより、表SUPPLEMENTARY_DEMOGRAPHICSを選択します。予想としてY_BOX_GAMESを選択します。予測タイプ分類を選択します。


追加設定を開きます。デフォルトのまま変更しませんが、設定できる内容は確認しましょう。利用できる8つのアルゴリズムを試し、上位5つの結果を返す設定になっています。


特徴
として、予測する値を除いたすべての列が、デフォルトで選択されています。


以上の設定を行い、開始をクリックし、より速い結果を選択します。時間に余裕があるようでしたら、より良い精度を選んでもよいでしょう。


処理の経過が表示されます。


モデルの作成が完了しました。アルゴリズムSupport Vector Machine(ガウス)が一番精度が高くなっています。

モデルのリンクをクリックすると、予測の影響および混同行例を確認することができます。


予測の影響の画面です。


混同行列の画面です。


今回は一番精度が高かったSupport Vector Machine(ガウス)によるモデルを使うことにします。モデル名をメモしておきます。

予測を実行する


モデルが作成できました。まだY Box Gamesを所有していない顧客を対象として、購入意思を持ちそうかどうかを予測します。

ノートブックを開きます。


ノートブックを作成します。


名前Predict Y Box Gamesとし、OKをクリックします。


PREDICTIONおよびPREDICTION_PROBABILITYファンクションを、先程AutoMLで作成されたモデル名を引数として呼び出します。以下のSQLを実行します。%sqlとしてSQLであることを指示し、Run this paragraph(再生アイコン)をクリックします。
CREATE TABLE CUST_PREDICTION AS
  SELECT CUST_ID, 
  PREDICTION(モデル名 USING *) PREDICTION,
  PREDICTION_PROBABILITY(モデル名 USING *) PRED_PROBABILITY
  FROM SH.SUPPLEMENTARY_DEMOGRAPHICS WHERE Y_BOX_GAMES = 0;

実行が完了してREADYの表示がFINISHEDに変わったら、作成された表をの内容を確認します。以下のSQLを実行します。
select * from cust_prediction

作成した表CUST_PREDICTIONをAPEXのアプリケーションから参照できるよう、APEXワークスペース・スキーマへSELECT権限を与えます。以下のSQLを実行します。今回の例では、スキーマ名はAPEXMLです。
grant select on cust_prediction to スキーマ名;

APEXアプリケーションに組み込む


アプリケーションをインポートしたときに作成されているビューCUSTOMER_Vの定義を以下に置き換えます。
CREATE OR REPLACE FORCE VIEW "CUSTOMER_V" 
("CUST_ID", "CUST_FIRST_NAME", "CUST_LAST_NAME", "CUST_GENDER", 
 "CUST_YEAR_OF_BIRTH", "CUST_MARITAL_STATUS", "CUST_STREET_ADDRESS", 
 "CUST_POSTAL_CODE", "CUST_CITY", "CUST_CITY_ID", "CUST_STATE_PROVINCE", 
 "CUST_STATE_PROVINCE_ID", "COUNTRY_ID", "CUST_MAIN_PHONE_NUMBER", 
 "CUST_INCOME_LEVEL", "CUST_CREDIT_LIMIT", "CUST_EMAIL", "CUST_TOTAL", 
 "CUST_TOTAL_ID", "CUST_SRC_ID", "CUST_EFF_FROM", "CUST_EFF_TO", "CUST_VALID",
 prediction, pred_probability
) AS 
  select c."CUST_ID","CUST_FIRST_NAME","CUST_LAST_NAME","CUST_GENDER",
  "CUST_YEAR_OF_BIRTH","CUST_MARITAL_STATUS","CUST_STREET_ADDRESS",
  "CUST_POSTAL_CODE","CUST_CITY","CUST_CITY_ID","CUST_STATE_PROVINCE",
  "CUST_STATE_PROVINCE_ID","COUNTRY_ID","CUST_MAIN_PHONE_NUMBER",
  "CUST_INCOME_LEVEL","CUST_CREDIT_LIMIT","CUST_EMAIL","CUST_TOTAL",
  "CUST_TOTAL_ID","CUST_SRC_ID","CUST_EFF_FROM","CUST_EFF_TO","CUST_VALID",
  prediction, pred_probability
  from sh.customers c left outer join mluser1.cust_prediction p
       on c.cust_id = p.cust_id
/
顧客情報に機械学習を使用して予測した結果である列PREDICTIONとPRED_PROBABILITYを追加します。

SQLワークショップオブジェクト・ブラウザを開き、ビューからCUSTOMER_Vを選びます。コードのタブを開きます。定義を更新して、保存してコンパイルを実行します。


インポートしたアプリケーションをアプリケーション・ビルダーで開き、ページ2 - Customersの対話モード・レポートのSQLを編集します。


SELECT文に以下の列RECOMMENDATIONを追加します。CUST_EMAILの後ろにカンマを追加するのを忘れないようにしましょう。

case
when prediction = 1 and pred_probability > 0.5 then
cust_first_name || ' is ' || to_char(pred_probability * 100, '999.99') || '% likely to be interested in Y Box Games'
else
''
end recommendation

機械学習による予測を追加したAPEXアプリケーションを確認する


更新したアプリケーションを実行し、顧客リストの対話モード・レポートを表示します。列Recommendationに何も表示されていない行が多いので、Y Box Gamesの販売対象となっている顧客はあまり存在していません。これらの顧客は、この製品に興味は持たないでしょう。


名(Cust First Name)Connor姓(Cust Last Name)Clarkの顧客を検索します。1970年生まれのConnor Clarkさんの行には列Recommendationの表示があり、Y Box Gamesを高い確率で気にいるだろうと案内されています。


以上で、本記事は完了です。以前のワークショップのモデル作成の部分をAutoMLで行うことで、大幅に手順が簡単になっていることがわかります。

私自身、Oracle Data Miningの勉強はまったくしていないのですが、モデルの作成がこれほど容易になったので、もうちょっとSQLスコアリング・ファンクションを勉強しようという気持ちになりました。

以上です。

Oracle APEXのアプリケーション作成の参考になれば幸いです。