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

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

データ・セットにモデルを構築し、それを新しいデータに適用すると、新しいデータおよび進化するデータに対して実行したときに予測が一般的になりパフォーマンスが悪くなる場合があります。これを克服するために、データ・セットをいくつかの特性に基づいて異なる部分に分割できます。Oracle Machine Learning for SQLはパーティション化されたモデルをサポートしています。パーティション化されたモデルにより、ユーザーは各データ・パーティションごとに一種のアンサンブル・モデルを構築できます。トップレベル・モデルには、自動的に生成されるサブモデルがあります。サブモデルは、属性オプションに基づいています。たとえば、データ・セットに4つの値を持つREGIONという属性があり、それをパーティション化された属性として定義したとします。これで、この属性に対して4つのサブモデルが作成されます。サブモデルは自動的に管理され、単一のモデルとして使用されます。パーティション化されたモデルは、一般的な機械学習タスクを自動化し、複数のターゲット・モデルを通じてより高い精度を達成できる可能性があります。

パーティション化されたモデルとそのサブモデルは、ファースト・クラスの永続データベース・オブジェクトとして存在します。永続的とは、パーティション化されたモデルがディスク上の表現を持つことを意味します。パーティション・モデルでは、多数のパーティションを持つパーティション・モデルのパフォーマンスが向上し、パーティション・モデル内の単一モデルの削除も改善されます。

パーティション化されたモデルを作成するには、ODMS_PARTITION_COLUMNS設定を含めます。パーティションの数を定義するには、ODMS_MAX_PARTITIONS設定を含めます。予測を行う場合は、トップレベル・モデルを使用する必要があります。正しいサブモデルは、属性、属性オプションおよびパーティション設定に基づいて自動的に選択されます。スコアリング時、USING句の一部としてパーティション列を含める必要があります。GROUPINGヒントは、パーティション化されたモデルをスコアリングするときに、機械学習スコアリング関数に適用されるオプションのヒントです。

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

関連項目:

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

パーティション・モデルの詳細は、Oracle Machine Learning for SQLユーザーズ・ガイドを参照してください。

4.8.4.1 パーティション化されたモデルの作成プロセス

Oracle Machine Learning for SQLでは、パーティション化されたモデルを作成するには、設定表に指定されているパーティション化キーが必要となります。

パーティション化キーとは、入力データ・セットからの1つ以上列(最大16)で構成されるカンマ区切りリストです。パーティション化キーは、パーティション化キーの離散値に基づいて、入力データを水平方向にスライスします。つまり、パーティション化は、連続した値に対する範囲のパーティション化とは対照的に、リスト値として実行されます。パーティション化キーは、NUMBERおよびVARCHAR2のデータ型の列のみをサポートしています。

作成プロセス中、入力データ・セットは、指定されたキーの個別値に基づいてパーティション化されます。各データ・スライス(一意のキー値)が、その独自のモデル・パーティションとなります。結果として作成されるモデル・パーティションは分かれておらず、スタンドアロン・モデルとして表示されません。パーティション化されたモデルのパーティションの最大数のデフォルト値は、1000パーティションです。異なるパーティション値を設定することもできます。入力データ・セットのパーティション数が、定義された最大数を超えている場合、OML4SQLによって例外がスローされます。

パーティション化されたモデルでは、すべてのパーティションに共通の特徴、およびパーティション固有の特徴が編成されます。共通の特徴は、次のメタデータで構成されます。

  • モデル名

  • 機械学習機能

  • 機械学習のアルゴリズム

  • すべてのパーティションによって参照されるすべての機械学習モデル属性のスーパー・セット(シグネチャ)

  • ユーザー定義列変換の共通セット

  • グローバルとして解釈されるユーザー指定の設定またはデフォルトの作成設定(自動データ準備(ADP)設定など)

4.8.4.2 パーティション化されたモデル内のDDL

DDL操作を使用したパーティション化されたモデルのメンテナンスについて学習します。

パーティション化されたモデルは、次のDDL操作を通じて管理されます。

4.8.4.2.1 モデルの削除またはパーティションの削除

Oracle Machine Learning for SQLは、特定のパーティション名の単一のモデル・パーティションの削除をサポートしています。

1つのパーティションしか残っていない場合、そのパーティションを明示的に削除することはできません。かわりに、そのパーティションを削除する前に別のパーティションを追加するか、モデル自体の削除を選択できます。パーティション化されたモデルを削除する場合、すべてのパーティションは、単一のアトミック操作で削除されます。パフォーマンスの観点から、DROP_PARTITIONオプションは効率的に動作するため、REPLACEオプションを使用するのではなく、DROP_PARTITIONADD_PARTITIONの順に実行することをお薦めします。

4.8.4.2.2 パーティションの追加

Oracle Machine Learning for SQLは、単一のパーティションまたは複数のパーティションの既存のパーティション化されたモデルへの追加をサポートしています。

追加は、入力データ・セットおよび既存のパーティション化されたモデルの名前に基づいて発生します。操作は、入力データ・セットおよび既存のパーティション化されたモデルをパラメータとして使用します。パーティション・キーは、入力データ・セットから抽出され、モデル・パーティションは入力データ・セットに対して作成されます。このパーティションは、パーティション化されたモデルとして追加されます。新規パーティションのパーティション・キーがモデル内の既存パーティションと競合する場合、次の3つの手法から選択して競合を解決できます。

  • ERROR: パーティションを追加することなくADD操作を終了します。

  • REPLACE: 競合するキーが検出された既存のパーティションを置き換えます。

  • IGNORE: 競合するキーがある行を排除します。

入力データ・セットに複数のキーが含まれている場合、複数のパーティションが作成されます。モデル内のパーティションの合計数が、モデルの作成時に指定したユーザー定義最大数を超えると、エラーが発生します。パーティション数のデフォルトしきい値は1000です。

4.8.4.3 パーティション化されたモデルのスコアリング

パーティション化されたモデルのスコアリングは、パーティション化されていないモデルのそれと同じです。

機械学習機能の構文は同じですが、オプションのヒントを提供するように拡張されています。オプションのヒントは、パーティション化されたモデルのスコアリングを含む問合せのパフォーマンスに影響を及ぼす可能性があります。

パーティション化されたモデルのスコアリングでは、パーティショニング・キーの作成中に使用されるシグネチャ列が、スコアリング・データセットに存在している必要があります。この列は、一意のパーティション・キーを形成するために組合されます。この一意のキーは、特定の基底となるモデル・パーティションにマップされ、識別されたモデル・パーティションがその行のスコアリングに使用されます。

スコアリングに必要なパーティション化オブジェクトが、問合せの実行時にオンデマンドでロードされ、システム・グローバル領域(SGA)メモリーに応じて有効期限が切れます。

この例では、SVMモデルを使用して、顧客が居住しているが顧客性別でパーティション化されている年数を予測します。次に、モデルを使用してターゲットを予測します。この例では、パーティション化されたモデルの作成時に定義できるモデル設定を強調しています。次の例では、SHスキーマ表から作成されたビューを使用しています。CREATE_MODEL2プロシージャは、モデルの作成に使用されます。パーティション属性はCUST_GENDERです。この属性には、MおよびFの2つのオプションがあります。
%script
BEGIN DBMS_DATA_MINING.DROP_MODEL('SVM_MOD_PARTITIONED');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
DECLARE
    v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
    v_setlst('ALGO_NAME'):= 'ALGO_SUPPORT_VECTOR_MACHINES'; 
    v_setlst('SVMS_KERNEL_FUNCTION')  :='SVMS_LINEAR';      
    v_setlst('ODMS_PARTITION_COLUMNS'):='CUST_GENDER';      

    DBMS_DATA_MINING.CREATE_MODEL2(
        MODEL_NAME          => 'SVM_MOD_PARTITIONED',
        MINING_FUNCTION     => 'REGRESSION',
        DATA_QUERY          => 'SELECT * FROM CUSTOMERS_DEMO',
        SET_LIST            => v_setlst,
        CASE_ID_COLUMN_NAME => 'CUST_ID',
        TARGET_COLUMN_NAME  => 'YRS_RESIDENCE');
END;
出力内容は次のようになります。


PL/SQL procedure successfully completed.


---------------------------

PL/SQL procedure successfully completed.
次のコード・サンプルに、予測を示します。
%script

SELECT cust_id, YRS_RESIDENCE,
       ROUND(PREDICTION(SVM_MOD_PARTITIONED USING *),2) pred_YRS_RESIDENCE
FROM CUSTOMERS_DEMO;

CUST_ID   YRS_RESIDENCE   PRED_YRS_RESIDENCE   
   100100               4                 4.71 
   100200               2                 1.62 
   100300               4                 4.66 
   100400               6                  5.9 
   100500               2                 2.07 
   100600               3                 2.74 
   100700               6                 5.78 
   100800               5                 7.22 
   100900               4                 4.88 
   101000               7                 6.49 
   101100               4                 3.54 
   101200               1                 1.46 
   101300               4                 4.34 
   101400               4                 4.34 ...