4.5 モデルへの変換の組込み
独自の変換を指定してモデルに組み込むには、変換リストを作成してDBMS_DATA_MINING.CREATE_MODEL2
またはDBMS_DATA_MINING.CREATE_MODEL
に渡します。
変換の指示がモデル内に組み込まれ、新しいデータへのモデルの適用時には常にその変換指示が再適用されます。
xform_list
を使用して変換を組み込むためのスキーマは、CREATE_MODEL
プロシージャとともにここに示されています。
DBMS_DATA_MINING.CREATE_MODEL2 (
model_name IN VARCHAR2,
mining_function IN VARCHAR2,
data_query IN CLOB,
set_list IN SETTING_LIST,
case_id_column_name IN VARCHAR2 DEFAULT NULL,
target_column_name IN VARCHAR2 DEFAULT NULL,
xform_list IN TRANSFORM_LIST DEFAULT NULL
);
DBMS_DATA_MINING.CREATE_MODEL(
model_name IN VARCHAR2,
mining_function IN VARCHAR2,
data_table_name IN VARCHAR2,
case_id_column_name IN VARCHAR2,
target_column_name IN VARCHAR2 DEFAULT NULL,
settings_table_name IN VARCHAR2 DEFAULT NULL,
data_schema_name IN VARCHAR2 DEFAULT NULL,
settings_schema_name IN VARCHAR2 DEFAULT NULL,
xform_list IN TRANSFORM_LIST DEFAULT NULL
);
次の例は、CREATE_MODEL
およびCREATE_MODEL2
プロシージャを使用して組込み変換リストを作成する方法を示しています。
DBMS_DATA_MINING.CREATE_MODEL
プロシージャの例を次に示します:
BEGIN
DBMS_DATA_MINING.DROP_MODEL('model_sample2');
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE TABLE sett_table (SETTING_NAME VARCHAR2(30),
SETTING_VALUE VARCHAR2(4000));
BEGIN
INSERT INTO sett_table (SETTING_NAME, SETTING_VALUE) VALUES ('KMNS_DISTANCE','KMNS_EUCLIDEAN');
INSERT INTO sett_table (SETTING_NAME, SETTING_VALUE) VALUES ('PREP_AUTO','ON');
INSERT INTO sett_table (SETTING_NAME, SETTING_VALUE) VALUES ('KMNS_DETAILS', 'KMNS_DETAILS_ALL');
END;
DECLARE
xformlist dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
dbms_data_mining_transform.SET_TRANSFORM(xformlist, 'N_TRANS_ATM', null, 'TO_CHAR(N_TRANS_ATM)', null);
dbms_data_mining_transform.SET_TRANSFORM(xformlist, 'BANK_FUNDS', null, 'BANK_FUNDS+BANK_FUNDS+BANK_FUNDS', null);
dbms_data_mining_transform.SET_TRANSFORM(xformlist, 'AGE', null, 'log(10,AGE+1)', 'power(10, AGE)-1');
DBMS_DATA_MINING.CREATE_MODEL(
model_name => 'model_sample2',
mining_function => dbms_data_mining.clustering,
data_table_name => 'INSUR_CUST_LTV',
case_id_column_name => 'customer_id',
settings_table_name => 'sett_table',
xform_list => xformlist);
END;
DBMS_DATA_MINING.CREATE_MODEL2
プロシージャを使用して組込み変換を作成する方法を示しています:DECLARE
xformlist dbms_data_mining_transform.TRANSFORM_LIST;
v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
dbms_data_mining_transform.SET_TRANSFORM(xformlist, 'N_TRANS_ATM', null, 'TO_CHAR(N_TRANS_ATM)', null);
dbms_data_mining_transform.SET_TRANSFORM(xformlist, 'BANK_FUNDS', null, 'BANK_FUNDS+BANK_FUNDS+BANK_FUNDS', null);
dbms_data_mining_transform.SET_TRANSFORM(xformlist, 'AGE', null, 'log(10,AGE+1)', 'power(10, AGE)-1');
v_setlst('ALGO_NAME') := 'ALGO_KMEANS';
DBMS_DATA_MINING.CREATE_MODEL2(
model_name => 'model_sample3',
mining_function => 'CLUSTERING',
data_query => 'select * from INSUR_CUST_LTV',
set_list => v_setlst,
case_id_column_name => 'customer_id',
xform_list => xformlist);
END;
4.5.1 変換リストの作成
変換リストは、SET_TRANSFORM
、STACK
およびGET_*
メソッドで作成できます。これらのメソッドを次に示します。
変換リストは、変換レコードの集合です。新しい変換レコードを追加すると、変換リストの一番上に追加されます。変換リストを作成する場合は、次の手法のいずれかを使用できます。
-
DBMS_DATA_MINING_TRANSFORM
のSET_TRANFORM
プロシージャ -
DBMS_DATA_MINING_TRANSFORM
のSTACK
インタフェース -
DBMS_DATA_MINING
のGET_MODEL_TRANSFORMATIONS
ファンクションおよびGET_TRANSFORM_LIST
ファンクション
4.5.1.1 SET_TRANSFORM
SET_TRANSFORM
プロシージャは、指定されたSQL式を指定された属性に適用します。
SET_TRANSFORM
プロシージャは、1つの変換レコードを変換リストに追加します。
DBMS_DATA_MINING_TRANSFORM.SET_TRANSFORM ( xform_list IN OUT NOCOPY TRANSFORM_LIST, attribute_name VARCHAR2, attribute_subname VARCHAR2, expression VARCHAR2, reverse_expression VARCHAR2, attribute_spec VARCHAR2 DEFAULT NULL);
SET_TRANSFORM
を使用して指定するSQL式は、VARCHAR2
に収まる必要があります。より長い式を指定するには、VARCHAR2
配列に行を追加することにより式を作成するSET_EXPRESSION
を使用します。たとえば、次の文では、country_id
の変換指示を、my_xforms
という変換リストに追加します。変換指示は、アルゴリズムの処理が開始される前にcountry_id
を10で割ります。逆変換はcountry_id
に10を掛けます。
dbms_data_mining_transform.SET_TRANSFORM (my_xforms, 'country_id', NULL, 'country_id/10', 'country_id*10');
逆変換はモデルの詳細で適用されます。country_id
が教師ありモデルのターゲットである場合、逆変換はスコアリングされるターゲットにも適用されます。
4.5.1.2 STACKインタフェース
STACK
インタフェースは、変換指示の表から変換レコードを作成し、変換リストに追加します。
STACK
インタフェースは、属性または属性のグループに適用可能な事前定義された変換のセットを提供します。たとえば、すべての質的属性に対して教師ありビニングを指定することができます。
STACK
インタフェースは、指定したタイプの属性のすべてまたは一部を同じ方法で変換する必要があることを指定します。たとえば、STACK_BIN_CAT
は、質的属性のビニング指示を変換リストに追加します。STACK
インタフェースは、次の3つのステップで構成されます。
-
CREATE
プロシージャにより、変換定義表を作成します。たとえば、CREATE_BIN_CAT
は、質的ビニングの指示を保持する表を作成します。この表には、属性の名前、属性の値および値のビン割当てを格納するための列があります。 -
INSERT
プロシージャにより、1つ以上の属性のビン境界を計算し、定義表を移入します。たとえば、INSERT_BIN_CAT_FREQ
は、データ・ソースの一部またはすべての質的属性に対して頻度ベースのビニングを実行し、CREATE_BIN_CAT
により作成された表を移入します。 -
STACK
プロシージャにより、定義表の情報から変換レコードを作成し、その変換レコードを変換リストに追加します。たとえば、STACK_BIN_CAT
は、質的ビニングの定義表に格納されている情報に対する変換レコードを作成し、その変換レコードを変換リストに追加します。
4.5.1.3 GET_MODEL_TRANSFORMATIONSおよびGET_TRANSFORM_LIST
ファンクションを使用して、新しい変換リストを作成します。
これら2つのファンクションは、既存のモデルに組み込まれている変換から新しい変換リストを作成する場合に使用できます。
GET_MODEL_TRANSFORMATIONS
ファンクションは、組み込まれた変換のリストを戻します。
DBMS_DATA_MINING.GET_MODEL_TRANSFORMATIONS ( model_name IN VARCHAR2) RETURN DM_TRANSFORMS PIPELINED;
GET_MODEL_TRANSFORMATIONS
は、dm_transform
オブジェクトの表を戻します。各dm_transform
は、次のフィールドを持ちます。
attribute_name VARCHAR2(4000) attribute_subname VARCHAR2(4000) expression CLOB reverse_expression CLOB
変換リストの構成要素は、dm_transform
ではなく、transform_rec
です。transform_rec
のフィールドについては、表4-5で説明しています。GET_MODEL_TRANSFORMATIONS
をコールして、dm_transform
オブジェクトのリストをtransform_rec
オブジェクトに変換し、各transform_rec
を変換リストに追加することができます。
DBMS_DATA_MINING.GET_TRANSFORM_LIST ( xform_list OUT NOCOPY TRANSFORM_LIST, model_xforms IN DM_TRANSFORMS);
関連項目:
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING_TRANSFORM操作上のノートに関する項、SET_TRANSFORMプロシージャに関する項、CREATE_MODELプロシージャに関する項およびGET_MODEL_TRANSFORMATIONSファンクションに関する項
4.5.2 変換リストおよび自動データ準備
変換リストおよび自動データ準備(ADP)を指定して、データ変換をカスタマイズできます。
CREATE_MODEL2
およびCREATE_MODEL
に対する変換リスト引数は、ADPを制御するPREP_AUTO
設定と相互作用します。
-
ADPが有効で、変換リストを指定した場合、ユーザー指定の変換は自動変換とともに適用されてモデルに組み込まれます。指定した変換は、自動変換の前に処理されます。
-
ADPが無効で、変換リストを指定した場合、ユーザー指定の変換が適用されてモデルに組み込まれますが、システム生成の変換は実行されません。
-
ADPが有効で、変換リストを指定しなかった場合、システム生成の変換が適用されてモデルに組み込まれます。
-
ADPが無効で、変換リストも指定しなかった場合、変換はモデルに組み込まれません。モデルの作成、テストおよびスコアリングに使用するデータセットは別個に準備する必要があります。
4.5.3 属性の変換指示の指定
変換リストを定義することにより、属性の変換命令を渡すことができます。
変換リストは、変換レコードの表として定義されます。各レコード(transform_rec
)は、属性の変換指示を指定します。
TYPE transform_rec IS RECORD ( attribute_name VARCHAR2(30), attribute_subname VARCHAR2(4000), expression EXPRESSION_REC, reverse_expression EXPRESSION_REC, attribute_spec VARCHAR2(4000));
変換レコードのフィールドについては、この表で説明します。
表4-5 属性の変換レコードのフィールド
関連トピック
4.5.3.1 式のレコード
変換レコードの例。
変換レコードの変換式は、expression_rec
オブジェクトです。
TYPE expression_rec IS RECORD ( lstmt DBMS_SQL.VARCHAR2A, lb BINARY_INTEGER DEFAULT 1, ub BINARY_INTEGER DEFAULT 0); TYPE varchar2a IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;
lstmt
フィールドには、VARCHAR2A
(変換式をVARCHAR2
の複数の行に分割できるため、非常に長い変換式を使用可能)が格納されます。expression_rec
を作成するには、DBMS_DATA_MINING_TRANSFORM.SET_EXPRESSION
を使用します。
4.5.3.2 属性指定
属性指定を通じて属性に固有の特性を定義する方法を学習します。
変換レコードの属性指定は、この属性に固有の特性を定義します。NULL以外の場合、属性指定にはFORCE_IN
、NOPREP
またはTEXT
という値を含めることができます(表4-5を参照)。
例4-1 複数のキーワードを使用した属性指定
複数の属性指定キーワードが適用可能な場合、カンマ区切りリストで指定できます。次の式は、GLMモデルでの属性の指定です。ftr_selection_enable
設定が有効な場合、この式によって、属性がモデルに強制的に含まれます。ADPが有効な場合、属性の自動変換は実行されません。
"FORCE_IN,NOPREP"
例4-2 テキスト属性指定
テキスト属性の場合、必要に応じてPOLICY_NAME
、TOKEN_TYPE
およびMAX_FEATURES
のサブ設定を指定できます。サブ設定は、テキスト変換に固有の構成情報を提供します。次の例では、テキスト内容に対する変換指示がmy_policy
というテキスト・ポリシーで定義され、トークン・タイプとしてTHEME
が指定されます。抽出した特徴の最大数は3000です。
"TEXT(POLICY_NAME:my_policy)(TOKEN_TYPE:THEME)(MAX_FEATURES:3000)"
関連トピック
4.5.4 Oracle Machine Learning for SQLの変換ルーチン
変換ルーチンについて学習します。
OML4SQLには、DBMS_DATA_MINING_TRANSFORM
パッケージの様々な変換手法を実装するルーチンが用意されています。
関連トピック
4.5.4.1 ビニング・ルーチン
OML4SQLにおけるビニング手法について説明します。
ビニング計画の決定には、多数の要因が関与します。通常、値の数を少なくするとモデルがコンパクトになり、短時間でモデルを作成できるようになりますが、精度が低下する可能性もあります。
ビンの境界を適切に選択すると、モデルの質が大幅に向上する場合があります。たとえば、年齢をビンに分ける適切な手段としては、0から13は子供、13から19は10代、19から24は青年、24から35は社会人、などのように、対象とするグループに分割する方法があります。
次の表に、OML4SQLで提供されているビニングの手法を示します。
表4-6 DBMS_DATA_MINING_TRANSFORMのビニング手法
関連トピック
4.5.4.2 正規化ルーチン
Oracle Machine Learning for SQLにおける正規化ルーチンについて学習します。
正規化のほとんどの手法では、1つの属性の範囲を別の範囲(通常は0から1または-1から+1)にマップします。
正規化は外れ値に対して非常に敏感です。外れ値の処理をしない場合、値の多くがきわめて小さな範囲にマップされ、情報の多くが失われてしまいます。
関連トピック
4.5.4.3 外れ値の処理
外れ値を処理するために行う必要のある操作について理解します。
列内の他の値から大幅に外れている値は、外れ値とみなされます。外れ値が存在すると、データに歪効果が現れ、正規化やビニングなどの変換の有効性が抑制される場合があります。
トリミングやクリッピングなど外れ値の処理手法を行うと、外れ値の影響を最小限に抑えることができます。
外れ値は、機器の異常に起因する不正確な読取りなど、問題のあるデータを表します。ただし、特にビジネス分野などの一部のケースでは、外れ値が完全に有効となることがあります。たとえば、人口調査のデータにおいて、富裕層に属する一部の個人の収入が一般層とは大きく異なる場合があります。この情報はデータの重要な部分であるため、外れ値として処理しないでください。外れ値の処理を決定するには専門知識が必要です。
4.5.4.4 外れ値の処理のルーチン
外れ値の処理に使用される変換について理解します。
外れ値は極端な値であり、通常は平均値から標準偏差の数倍離れた値のことを指します。外れ値の影響を最小限に抑えるには、データをウィンザライズするかトリミングします。
ウィンザライズでは、属性の両端の値を特定の指定値に設定します。たとえば、ウィンザライズを90%とする場合、値の下位5%は5パーセンタイルの最小値と同じ値に設定され、値の上位5%は95パーセンタイルの最大値に一致する値に設定されます。
トリミングでは、末端値をNULLに設定します。これらの値はアルゴリズムで欠損値として処理されます。
外れ値が及ぼす影響はアルゴリズムによって異なります。通常、外れ値は、等幅ビニングおよびmin-max正規化において歪みを生じさせます。