32.2 データ・マイニングSQL関数の使用
データ・マイニングにおけるSQL関数の利点について学習します。
データ・マイニングSQL関数には、次のメリットがあります。
-
既存のSQLアプリケーションのコンテキストで、モデルを簡単に配置できます。
-
スコアリング操作では、既存の問合せ実行機能を利用します。これにより、パフォーマンスが向上します。
-
スコアリング結果がパイプライン化され、実体化を行わずに行を処理することができます。
データ・マイニング関数は、選択した各行のスコアを生成します。これらの関数は、マイニング・モデルのスキーマ・オブジェクトを適用してスコアを計算することも、事前定義されたモデルを使用せずに動的なスコアリングを行うこともできます(「動的スコアリング」を参照)。
32.2.1 予測子の選択
データ・マイニング関数では、スコアリングに使用する属性を指定するUSING
句をサポートしています。選択した属性の一部またはすべてを指定でき、また式を指定することができます。次の例では、すべてPREDICTION
関数を使用してアフィニティ・カードを使用しそうな顧客を検出していますが、各例で異なる予測子のセットを使用しています。
例32-1の問合せでは、すべての予測子を使用しています。
例32-2の問合せでは、予測子として性別、未婚/既婚、職業および所得のみを使用しています。
例32-3の問合せでは、予測子として3つの属性と1つの式を使用しています。予測は、性別、未婚/既婚、職業に加えて、すべての顧客が最高額所得者階層に属するという前提に基づいて行われています。
例32-1 すべての予測子を使用した場合
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION(dt_sh_clas_sample USING *) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 25 38 M 213 43
例32-2 一部の予測子を使用した場合
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION(dt_sh_clas_sample USING cust_gender,cust_marital_status, occupation, cust_income_level) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 30 38 M 186 43
例32-3 一部の予測子と1つの式を使用した場合
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION(dt_sh_clas_sample USING cust_gender, cust_marital_status, occupation, 'L: 300,000 and above' AS cust_income_level) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 30 38 M 186 43
32.2.2 単一レコードのスコアリング
データ・マイニング関数は、単一レコードのスコアを生成できます(例32-4および例32-5を参照)。
例32-4では、分類モデルNB_SH_Clas_sample
を適用することによって、顧客102001に対する予測が戻されます。結果として生成されるスコアは0 (この顧客がアフィニティ・カードを使用する可能性は低い)です。
例32-5では、テキスト・マイニング・モデルT_SVM_Clas_sample
を適用することによって、コメント属性として「Affinity card is great」を使用した場合の予測が戻されます。結果として生成されるスコアは1 (この顧客がアフィニティ・カードを使用する可能性は高い)です。
例32-4 単一の顧客または単一のテキスト式のスコアリング
SELECT PREDICTION (NB_SH_Clas_Sample USING *) FROM sh.customers where cust_id = 102001; PREDICTION(NB_SH_CLAS_SAMPLEUSING*) ----------------------------------- 0
例32-5 単一のテキスト式のスコアリング
SELECT PREDICTION(T_SVM_Clas_sample USING 'Affinity card is great' AS comments) FROM DUAL; PREDICTION(T_SVM_CLAS_SAMPLEUSING'AFFINITYCARDISGREAT'ASCOMMENTS) ----------------------------------------------------------------- 1