1 Oracle Machine Learning for SQLの概要

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

1.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のコンポーネントです。もう1つのコンポーネントとして、Oracle Machine Learning for Rがあります。これは、オープンソースの統計環境RとOracle Databaseを統合するものです。OML4SQLOracle Machine Learning for Rの組合せにより、ビッグ・データの分析に対応する高度な包括的分析プラットフォームが実現します。

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

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

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

1.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にアクセスしてください。

1.4 パーティション化されたモデルについて

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

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

パーティション化されたモデルのパーティション名、キー値および構造は、ALL_MINING_MODEL_PARTITIONSビューで得られます。

参照:

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

1.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パッケージとして実装されます。

1.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のデータに対してトレーニングされます。

例1-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;
/

1.5.2 SQL関数

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

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

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

例1-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

1.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モデルの作成、評価、適用のプロセスを取得、ドキュメント化および自動化します。ワークフロー内で、データ変換の指定、複数のモデルの作成と評価、および複数のデータセットのスコアリングを行うことができます。その後、ワークフローを保存して他のユーザーと共有できます。

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

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

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

関連トピック

1.5.4 予測分析

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

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

予測分析にはOML4SQLテクノロジを使用しますが、予測分析を使用する際にOML4SQLに関する知識は不要です。ユーザーは、データに対して実行する操作を指定するだけで予測分析を実行できます。OML4SQLモデルを作成する必要も使用する必要もありません。また、「Oracle Machine Learning for SQLの基本」にまとめたOML4SQLの関数やアルゴリズムについての知識も不要です。

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

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

操作 説明

EXPLAIN

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

PREDICT

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

PROFILE

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

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

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

Oracle Databaseでサポートされているネイティブ分析の概要を示します。

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

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

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

表1-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アプリケーション開発者ガイド』

例1-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);