3.2.4 モデルのデプロイ
次に、OML4Rモデルをデプロイし、そのインサイトを活用するためのいくつかのアプローチを示します:
R APIを使用した予測:
これは最も簡単なメソッドであり、迅速な分析やプロトタイピングに最適です。 R環境内の適合モデルを直接使用して、新しいデータの予測を行うことができます。
pred <- predict(km.mod.ere, CUST_DF_CLEAN, supplemental.cols = "CUST_ID")
print(pred) # View predictions for new data
異なるデータベースにモデルをデプロイします:
異なるデータベース内の本番デプロイメントでは、組込み機能を利用します:
- エクスポート: DBMS_DATA_MINING.EXPORT_SERMODELを使用して、トレーニング済モデル(CUST_CLUSTER_MODEL_ERE)をデータベース1のBLOBオブジェクトにエクスポートします。
- 転送: BLOBオブジェクト(BFileなど)をDatabase 2に移動します。
- インポート: 転送されたBLOBオブジェクトからモデルをインポートするには、データベース2のDBMS_DATA_MINING.IMPORT_SERMODELを使用します。
RおよびSQLおよびADB RESTでのユーザー定義R関数の実行:
新しいデータによる定期的なモデル更新の場合は、ユーザー定義のR関数を作成します:
- モデル設定(クラスタ数、距離メトリックなど)を定義します。
- CUST_CLUSTER_MODEL_EREという名前の既存のモデルを削除します(オプション)。
- ore.odmKMeansを使用してモデルをトレーニングします。
- オプションで、新しいデータの予測を生成して表示します。
Oracleのスケジューリング機能を使用して、このスクリプトを定期的に実行するようにスケジュールします。
例3-1 スクリプト・リポジトリでのR関数の定義およびRからの実行
#suppress warnings#
options(warn=-1)
build.km.1 <- function(){
settings = list('KMNS_ITERATIONS'='10',
'KMNS_DISTANCE'='KMNS_EUCLIDEAN',
'KMNS_NUM_BINS'='10',
'KMNS_DETAILS'='KMNS_DETAILS_ALL',
'PREP_AUTO'='ON',
'MODEL_NAME'='CUST_CLUSTER_MODEL_ERE')
ore.exec(paste("BEGIN DBMS_DATA_MINING.DROP_MODEL('CUST_CLUSTER_MODEL_ERE'); EXCEPTION WHEN OTHERS THEN NULL; END;", sep=""))
km.mod.ere <- ore.odmKMeans(~ . -CUST_ID, CUST_DF_CLEAN, num.centers=3, odm.settings=settings)
# Show predictions
pred <- predict(km.mod.ere, CUST_DF_CLEAN, supplemental.cols="CUST_ID")
pred
}
ore.doEval(FUN = build.km.1)
出力が次のように表示されます。

例3-2 SQLからのユーザー定義Rスクリプトの実行
--set the access token
exec rqSetAuthToken('<access token>');
--run user-defined R script from SQL
SELECT *
FROM table(
rqEval2(
NULL,
'{"CUST_ID": "NUMBER", "probability_of_cluster_3": "BINARY_DOUBLE", "probability_of_cluster_4": "BINARY_DOUBLE",
"probability_of_cluster_5": "BINARY_DOUBLE", "CLUSTER_ID": "NUMBER"}',
'build.km.1'));
SQL出力は次のようになります:

例3-3 CURLコマンドを使用してADB RESTからRスクリプトを実行します:
curl -i -X POST --header "Authorization: Bearer ${token}" \
--header 'Content-Type: application/json' --header 'Accept: application/json' \
-d '{}' \
"<oml-cloud-service-location-url>/oml/api/r-scripts/v1/do-eval/build.km.1"
RESTレスポンスは次のように表示されます:
{
"result": [
{
"probability_of_cluster_5": 0.3084,
"CUST_ID": 100100,
"probability_of_cluster_4": 0.4691,
"'2'": 0.2224,
"CLUSTER_ID": 4
},
{
"probability_of_cluster_5": 0.1115,
"CUST_ID": 100200,
"probability_of_cluster_4": 0.2713,
"'2'": 0.6172,
"CLUSTER_ID": 2
},
â¦â¦
{
"probability_of_cluster_5": 0.3974,
"CUST_ID": 104498,
"probability_of_cluster_4": 0.4256,
"'2'": 0.177,
"CLUSTER_ID": 4
},
{
"probability_of_cluster_5": 0.273,
"CUST_ID": 104499,
"probability_of_cluster_4": 0.4102,
"'2'": 0.3168,
"CLUSTER_ID": 4
}
]
}
SQL統合の永続表:
永続データ構造を作成するには、2つの異なる方法があります: 最新のデータにアクセスするための動的ビュー(CUST_DF_VIEW)、およびデータのスナップショットを取得するためのマテリアライズド表(CUST_DF_CLEAN)です。
例3-4 動的ビューを使用した永続データ構造の作成
- 次のコードを使用してビューを作成
ore.drop(view="CUST_DF_VIEW") ore.create(CUST_DF,view="CUST_DF_VIEW")
- 次のSQL問合せを使用して、
KM_PRED_VIEW
という名前のビューを作成します。 このビューは、既存のビューCUST_DF_VIEW
に基づいてデータを動的にスコアリングします。CREATE OR REPLACE VIEW KM_PRED_VIEW AS SELECT CUST_ID, CLUSTER_ID(CUST_CLUSTER_MODEL_ERE USING *) AS CLUSTER_ID, round (CLUSTER_PROBABILITY (CUST_CLUSTER_MODEL_ERE USING *),3) AS PROB FROM CUST_DF_VIEW;
- 次のコードを使用して、動的スコアリング・ビュー'KM_PRED_VIEW'の最初の20行を表示
select * from KM_PRED_VIEW where rownum < 21;
出力が次のように表示されます。
例3-5 マテリアライズド表を使用した永続データ構造の作成
- 次のコードを使用して、
CUST_DF_CLEAN
という名前の表を作成し、クリーン・データをデータベースに格納します。ore.drop(table="CUST_DF_CLEAN") ore.create(CUST_DF_CLEAN,table="CUST_DF_CLEAN")
- 次のコードを使用して、
KM_SCORE_TABLE
という名前の表を作成します。この表には、CUST_DF_CLEAN
表のデータに基づいてスコアリング結果の静的スナップショットが格納されます。DROP TABLE KM_SCORE_TABLE; CREATE TABLE KM_SCORE_TABLE AS SELECT CUST_ID, CLUSTER_ID(CUST_CLUSTER_MODEL_ERE USING *) AS CLUSTER_ID, round(CLUSTER_PROBABILITY (CUST_CLUSTER_MODEL_ERE USING *),3) AS PROB FROM CUST_DF_CLEAN;
- スコアリング・スナップショット表の最初の10行を表示するには、次のコードを使用します。
select * from KM_SCORE_TABLE where rownum <= 10;
出力が次のように表示されます。
- スコアリングにSQLインタフェースを使用し、OMLノートブックを使用して結果をビジュアル化します。
次のコードを使用して、表を問い合せ、予測にCLUSTER_SET関数を適用し、XML解析を使用してモデル出力から詳細を抽出します。
SELECT CUST_ID, CLUSTER_ID, ROUND(PROB*100,0) PROB_PCT, RTRIM(TRIM(SUBSTR(OUTPRED."Attribute1",17,100)),'rank="1"/>') FIRST_ATTRIBUTE, RTRIM(TRIM(SUBSTR(OUTPRED."Attribute2",17,100)),'rank="2"/>') SECOND_ATTRIBUTE, RTRIM(TRIM(SUBSTR(OUTPRED."Attribute3",17,100)),'rank="3"/>') THIRD_ATTRIBUTE FROM (SELECT CUST_ID, S.CLUSTER_ID, PROBABILITY PROB, CLUSTER_DETAILS(KM_CLUSTERING_MODEL USING T.*) DETAIL FROM (SELECT V.*, CLUSTER_SET(KM_CLUSTERING_MODEL, NULL, 0.2 USING *) PSET FROM CUST_DF_KM V WHERE cust_id = ${CUST_ID ='101362','101362'|'102087'| '100456'}) T, TABLE(T.PSET) S ORDER BY 2 DESC) OUT, XMLTABLE('/Details' PASSING OUT.DETAIL COLUMNS "Attribute1" XMLType PATH 'Attribute[1]', "Attribute2" XMLType PATH 'Attribute[2]', "Attribute3" XMLType PATH 'Attribute[3]') OUTPRED
出力が次のように表示されます。
親トピック: クラスタリング・ユース・ケース