2 Oracle Machine Learning for SQLの概要

様々な機械学習タスクを実行するためのOracle Machine Learning for SQLについて説明します。

2.1 Oracle Machine Learning for SQLについて

Oracle Machine Learning for SQLの使用方法を理解し、様々な機械学習手法について学習します。

OML4SQLにより、Oracle Database内に強力かつ最先端の機械学習機能が提供されます。OML4SQLを使用して予測的かつ記述的な機械学習アプリケーションを作成およびデプロイし、既存のアプリケーションに、高い知能を備えた機能を追加することや、データ調査のための予測問合せを生成することができます。

OML4SQLでは、様々な機械学習タスク(分類、回帰、異常検出、特徴抽出、クラスタリング、マーケット・バスケット分析など)を実行するためのデータベース内アルゴリズムの包括的なセットが提供されます。このアルゴリズムは、標準ケース・データ、トランザクショナル・データ、スター・スキーマ、およびテキストなどの形式の非構造化データを対象に動作します。OML4SQLは、他に類を見ないほど、非常に大規模なデータセットの分析に適しています。

Oracle Machine Learning for SQLは、Oracle Database Enterprise Editionのコンポーネントです。別のコンポーネントとしては、オープンソースの統計的環境であるRをOracle Databaseと統合する、Oracle Machine Learning for Rがあります。OML4SQLOracle Machine Learning for Rは、連携してビッグ・データ分析のための包括的な拡張分析プラットフォームを提供します。

2.2 データベース・カーネルにおけるOracle Machine Learning for SQL

Oracle DatabaseカーネルにおけるOracle Machine Learning for SQL (OML4SQL)の実装とそのメリットについて学習します。

OML4SQLは、Oracle Databaseカーネル内に実装されます。OML4SQLモデルは、優れたデータベース・オブジェクトです。Oracle Machine Learning for SQLのプロセスでは、Oracle Databaseの組込み機能を使用して、スケーラビリティを最大限に高め、システム・リソースを効率的に利用します。

Oracle Database内でOML4SQLを使用すると、次のような多くの利点があります。

  • データ移動なし: 一部のOML4SQL製品では、データを企業のデータベースからエクスポートして、特別な形式へと変換する必要があります。OML4SQLを使用すると、データの移動や変換が必要がなくなります。このため、プロセス全体の簡略化、作業時間の短縮、エラー発生頻度の抑制が実現し、非常に大規模なデータセットの分析が可能になります。

  • セキュリティ: データはOracle Databaseの広範なセキュリティ・メカニズムで保護されます。さらに、OML4SQLの様々なアクティビティには特定のデータベース権限が必要となります。適切な権限があるユーザーのみが、OML4SQLモデルのオブジェクトを定義、操作または適用できます。

  • データ準備および管理: ほとんどのデータは、マイニング前に様々な方法での整備、フィルタリング、正規化、サンプリング、変換を必要とします。多くの場合、OML4SQLプロジェクトにおける作業のうちデータ準備にかかる時間は最大で80%にもなります。OML4SQLでは、データ準備プロセスの主要なステップを自動的に管理できます。また、Oracle Databaseでも、データ準備および管理用の豊富な管理ツール群が提供されています。

  • データ・リフレッシュの簡易化: Oracle Database内の機械学習プロセスでは、リフレッシュしたデータにすぐにアクセスできます。OML4SQLでは、現在のデータに基づく機械学習結果を容易に提示できるので、最もタイムリで妥当性の高い結果が得られます。

  • Oracle Database Analytics: Oracle Databaseには、高度な分析やビジネス・インテリジェンス用の機能が多数用意されています。OML4SQLは、統計的分析やOLAPなど、データベースのその他の分析機能と簡単に統合できます。

  • Oracleテクノロジ・スタック: オラクル社に集積されたテクノロジのあらゆる側面を利用して、ビジネス・インテリジェンスや科学調査といった、より大規模なフレームワーク内に、OML4SQLを統合できます。

  • ドメイン環境: OML4SQLモデルは、適切なアプリケーション・ドメイン環境で作成、テスト、検証、管理および配置する必要があります。OML4SQLの結果には、永続リポジトリまたはデータ・ウェアハウスに格納する前に、分野固有の計算(推定リスクや反応確率の計算など)の一部として後処理を必要とするものもあります。OML4SQLを使用すると、機械学習の前処理および後処理をすべて同じ環境で実行できます。

  • アプリケーション・プログラミング・インタフェース: Oracle Database内のOML4SQL機能には、PL/SQL APIおよびSQL言語の演算子を利用して直接アクセスできます。

2.3 Oracle ExadataにおけるOracle Machine Learning for SQL

Oracle Exadataの使用による、複雑なスコアリングおよびアルゴリズムの処理の実行方法を理解します。

スコアリングとは、OML4SQLモデルをデータに適用して予測を生成するプロセスのことです。スコアリング・プロセスには、システム・リソースがかなり必要になることがあります。状況によっては、膨大な量のデータが関係するため、アルゴリズムの処理は非常に複雑になります。

OML4SQLでは、処理が非常に高速でインテリジェントなOracle Exadata Storage Serverにスコアリングの負荷を移行できます。

Oracle Exadata Storage Serverは、オラクル社の高性能なストレージ・ソフトウェアとオラクル社の業界標準仕様のSunハードウェアを組み合せて、業界最高レベルのデータベース・ストレージ・パフォーマンスを実現します。Oracle Exadataの詳細は、Oracle Technology Networkにアクセスしてください。

2.4 パーティション化モデルについて

複数のモデルを編成し表現するためのパーティション化モデルについて説明します。

Oracle Machine Learning for SQLでは、永続的なOML4SQLパーティション化モデルの作成がサポートされています。パーティション化モデルでは、複数のモデルが単一モデル・エンティティ内の複数のパーティションとして編成されて表されます。それにより、データのうち複数の独立した部分に合わせて、複数のモデルを簡単に作成および管理できます。永続とは、パーティション化モデルにディスク上の表現があることを意味します。OML4SQLにより、パーティション化モデルの組織が管理され、パーティション化モデルのスコアリングのプロセスが簡略化されます。スコアリングする際に、パーティション列をUSING句の一部として含める必要があります。GROUPINGヒントは、パーティション化されたモデルをスコアリングするときに、機械学習スコアリング関数に適用されるオプションのヒントです。

パーティション名、キー値およびパーティション化モデルの構造は、ALL_MINING_MODEL_PARTITIONSビューにあります。

関連項目:

GROUPINGヒントの使用方法は、『Oracle Database SQL言語リファレンス』を参照してください。

2.5 Oracle Machine Learning for SQLへのインタフェース

Oracle Machine Learning for SQLでサポートされているインタフェースについて説明します。

Oracle Machine Learning for SQLのプログラム・インタフェースは、モデルの作成および維持のためのPL/SQLと、スコアリングのためのSQL関数群です。OML4SQLでは、Oracle SQL Developerの機能拡張として実装されるグラフィカル・ユーザー・インタフェースもサポートされています。

Oracle Predictive Analytics (簡略化されたOML4SQLルーチンのセット)は、OML4SQLを基盤として構築され、PL/SQLパッケージとして実装されています。

2.5.1 PL/SQL API

Oracle Machine Learning for SQL用のPL/SQLパッケージが含まれています。

OML4SQL PL/SQL APIは、DBMS_DATA_MINING PL/SQLパッケージで実装されています。これには、機械学習モデルの作成、テストおよび保守のためのルーチンが含まれています。バッチ適用操作もこのパッケージに含まれます。

次の例に、SVMC_SH_Clas_sampleというSVM分類モデルを作成するための単純なPL/SQLスクリプトの一部を示します。モデルの作成では、重み付け表で指定される重みと、設定表で指定される設定が使用されます。重みは、ターゲット・クラスの重み付けに影響します。設定は、デフォルトの動作に優先します。モデルでは、自動データ準備(prep_auto_on設定)が使用されます。モデルは、mining_data_build_vのデータに対してトレーニングされます。

例2-1 分類モデルの作成

-----------------------  CREATE AND POPULATE A CLASS WEIGHTS TABLE  ------------
CREATE TABLE svmc_sh_sample_class_wt (
  target_value NUMBER,
  class_weight NUMBER);
INSERT INTO svmc_sh_sample_class_wt VALUES (0,0.35);
INSERT INTO svmc_sh_sample_class_wt VALUES (1,0.65);
COMMIT;
-----------------------  CREATE AND POPULATE A SETTINGS TABLE ------------------
CREATE TABLE svmc_sh_sample_settings (
  setting_name  VARCHAR2(30),
  setting_value VARCHAR2(4000));
BEGIN
INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES
  (dbms_data_mining.algo_name, dbms_data_mining.algo_support_vector_machines);
INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES
  (dbms_data_mining.svms_kernel_function, dbms_data_mining.svms_linear);
INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES
  (dbms_data_mining.clas_weights_table_name, 'svmc_sh_sample_class_wt');
INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES
  (dbms_data_mining.prep_auto, dbms_data_mining.prep_auto_on);
END;
/
------------------------  CREATE THE MODEL -------------------------------------
BEGIN
  DBMS_DATA_MINING.CREATE_MODEL(
    model_name          => 'SVMC_SH_Clas_sample',
    mining_function     => dbms_data_mining.classification,
    data_table_name     => 'mining_data_build_v',
    case_id_column_name => 'cust_id',
    target_column_name  => 'affinity_card',
    settings_table_name => 'svmc_sh_sample_settings');
END;
/

2.5.2 SQL関数

Oracle Machine Learning for SQLでは、予測、クラスタリングおよび特徴抽出を実行するためのSQL関数がサポートされています。

それらの関数は、OML4SQLモデル・オブジェクトを適用するか、動的スコアリングを実行する分析句を実行することで、データをスコアリングします。

次の例に、分類モデルsvmc_sh_clas_sampleをビューmining_data_apply_vのデータに適用する問合せを示します。この問合せによって、提携カードを使用する可能性の高い顧客の平均年齢が戻されます。結果は性別によって分類されます。

例2-2 PREDICTION関数

SELECT cust_gender,
       COUNT(*) AS cnt,
       ROUND(AVG(age)) AS avg_age
  FROM mining_data_apply_v
 WHERE PREDICTION(svmc_sh_clas_sample USING *) = 1
GROUP BY cust_gender
ORDER BY cust_gender;

C        CNT    AVG_AGE
- ---------- ----------
F         59         41
M        409         45

2.5.3 Oracle Data Miner

Oracle Machine Learning for SQLでは、Oracle Data Minerと呼ばれるグラフィカル・インタフェースがサポートされています。

Oracle Data MinerはOML4SQLへのグラフィカル・インタフェースです。Oracle Data Minerは、Oracle Technology Networkで無償ダウンロードできるOracle SQL Developerの拡張です。

Oracle Data Minerでは、ワークフロー・パラダイムを使用して、OML4SQLモデルの作成、評価、適用のプロセスが取得、ドキュメント化および自動化されます。ワークフロー内で、データ変換の指定、複数のモデルの作成と評価、および複数のデータセットのスコアリングを行うことができます。その後、ワークフローを保存して他のユーザーと共有できます。

図2-1 Oracle Data Minerのワークフロー

図2-1の説明が続きます
「図2-1 Oracle Data Minerのワークフロー」の説明

インストール手順を含むOracle Data Minerの詳細は、Oracle Technology Networkを参照してください。

関連項目

2.5.4 予測分析

予測分析は、Oracle Machine Learning for SQLのプロセスを単純なルーチンで取得する技術です。

ワンクリック機械学習と呼ばれることもあり、予測分析により機械学習プロセスが簡略化され自動化されます。

予測分析では、OML4SQLの技術が使用されますが、OML4SQLに関する知識は必要ありません。ユーザーは、データに対して実行する操作を指定するだけで予測分析を実行できます。OML4SQLモデルの作成や使用は不要であり、Oracle Machine Learning for SQLの基礎で説明されているOML4SQLの機能およびアルゴリズムについて理解しておく必要もありません。

Oracle Machine Learning for SQLの予測分析の操作については、次の表を参照してください。

表2-1 Oracle Predictive Analyticsによる操作

操作 説明

EXPLAIN

ターゲット列の値の偏差に対して個々の予測子(列)がどのように影響するかを説明する。

PREDICT

各ケース(行)について、ターゲット列の値を予測する。

PROFILE

同じターゲット値を想定するケース(行)に対するルールのセットを作成する。

Oracle Predictive Analyticsによる操作は、DBMS_PREDICTIVE_ANALYTICS PL/SQLパッケージに実装されています。これらは、Oracle Data Minerでも利用できます。

2.6 データベース分析の概要

Oracle Databaseでサポートされている、ネイティブの分析機能の概要です。

Oracle Databaseでは、ネイティブの多数の分析機能がサポートされています。これらの機能はすべて共通サーバーの一部であるため、効率的に組み合せることができます。分析処理の結果は、Oracle Business Intelligence Suite Enterprise EditionなどのBIツールやアプリケーションに統合できます。

様々な分析は、ほとんど制限なく組み合せることができます。例2-3に、単一のSQL問合せにおけるOracle Machine Learning for SQLおよびテキストの処理を示します。この問合せでは、自然減する傾向が強く(確率が80%を超える)、有望な顧客であり(顧客価値率が90%を超える)、かつChecking Plusアカウントに関して最近カスタマ・サービスに問合せのあった顧客がすべて選択されます。自然減の傾向に関する情報は、tree_modelというOML4SQLモデルを使用して計算されます。Checking Plusアカウントに関するコール・センターのノートを検索するために、Oracle TextのCONTAINS演算子が使用されています。

Oracle Databaseでサポートされるネイティブ分析の一部を次の表で説明します。

表2-2 Oracle Databaseのネイティブ分析

分析機能 説明 参照先ドキュメント

複合データの変換

データ変換は、分析用アプリケーションやETL (抽出、変換およびロード)の重要な側面である。データ変換の実装には、SQL式またはDBMS_DATA_MINING_TRANSFORMパッケージを使用できる。

DBMS_DATA_MINING_TRANSFORMは柔軟性のあるデータ変換用パッケージで、ビニングや正規化の機能に加え、様々な欠損値や外れ値の処理が含まれる。

Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス

統計関数

Oracle Databaseでは多数のSQL統計関数が提供され、仮説検定(t検定、F検定など)、相関関数(ピアソン相関など)、クロスタブ統計および記述統計(中央値、最頻値など)がサポートされる。DBMS_STAT_FUNCSパッケージにより、分布適用プロシージャや、ある列に対する記述統計を戻すサマリー・プロシージャが追加されている。

『Oracle Database SQL言語リファレンス』および『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

ウィンドウ関数と分析SQL関数

Oracle Databaseでは、累積集計、移動集計および集中集計を計算するためのウィンドウ関数および分析関数がサポートされる。集計ウィンドウ関数群では、SUMAVERAGECOUNTMAXMINを始めとする多数の関数の移動および累積バージョンの計算が可能です。

Oracle Databaseデータウェアハウス・ガイド

線形代数

UTL_NLAパッケージでは、VARRAYで表されるベクターや行列に対する操作用に、一般的なBLASおよびLAPACKライブラリ(バージョン3.0)のサブセットが公開される。このパッケージには、一次方程式のシステムを解決するプロシージャ、行列を反転するプロシージャ、および固有値と固有ベクターを計算するプロシージャが含まれる。

Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス

OLAP

Oracle OLAPは多次元分析をサポートし、多次元問合せのパフォーマンスを向上するために使用できる。これまでは特殊なOLAPデータベースのみに存在した機能も提供されている。Oracle OLAPでは、ドリルダウンやロールアップにとどまらず、時系列分析、モデリングおよび予測の機能もサポートされる。

Oracle OLAPユーザーズ・ガイド

空間分析

Oracle Spatialでは、ハイエンドGISおよびLBSソリューションをサポートする高度な空間機能が提供される。Oracle Spatialの分析機能および機械学習機能には、ビニング、地域パターンの検出、空間相関、関連機械学習および空間クラスタリングなどがある。

また、Oracle Spatialでは、トポロジおよびネットワーク・データのモデルと分析もサポートされる。Oracle Spatialのトポロジ・データ・モデルを使用すると、トポロジ内のノード、エッジおよびフェイスに関するデータと連携できる。最短経路、最小コストの全域木、隣接分析、巡回セールスマン問題の計算など様々なネットワーク分析機能が含まれる。

Oracle Spatial and Graph開発者ガイド

テキスト分析

Oracle Textでは、Oracleデータベース、ファイルおよびWeb上に格納されているテキストおよびドキュメントの索引付け、検索および分析のために標準SQLが使用される。Oracle Textによって、一群のドキュメントの自動分類およびクラスタリングもサポートされる。こうしたOracle Textの分析機能の多くは、Oracle Machine Learningの機能の最上位に用意されている。

『Oracle Textアプリケーション開発者ガイド』

例2-3 Oracle Machine Learning for SQLとOracle Textを組み合せるSQL問合せ

SELECT A.cust_name, A.contact_info
  FROM customers A
 WHERE PREDICTION_PROBABILITY(tree_model,
            'attrite' USING A.*) > 0.8
   AND A.cust_value > 90
   AND A.cust_id IN
       (SELECT B.cust_id
          FROM call_center B
         WHERE B.call_date BETWEEN '01-Jan-2005'
                               AND '30-Jun-2005'   
         AND CONTAINS(B.notes, 'Checking Plus', 1) > 0);