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

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

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

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

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

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

参照:

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

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

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

Oracle Machine Learning for SQLでパーティション化されたモデルを作成するには、パーティション化キーが必要です。

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

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

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

  • モデル名

  • 機械学習ファンクション

  • 機械学習アルゴリズム

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

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

  • グローバルと解釈されるユーザー指定またはデフォルトの作成設定。たとえば、Auto Data Preparation (ADP)設定

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

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

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

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

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

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

36.5.4.2.2 パーティションの追加

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

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

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

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

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

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

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

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

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

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

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

この例では、SVMモデルを使用して顧客の居住年数を予測しますが、顧客性別でパーティション化されています。その後、モデルはターゲットの予測に使用されます。この例では、パーティション化されたモデルの作成時に定義できるモデル設定をハイライトしています。次の例は、SHスキーマ表から作成されたビューを使用しています。CREATE_MODEL2プロシージャはモデルの作成に使用されます。パーティション属性はCUST_GENDERです。この属性には、MFの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 ...