24 データの変換
24.1 変換について
自動データ準備(ADP)および組込み変換を使用したデータの変換方法について理解します。
変換とは、1つ以上の列のデータを変更するSQL式のことです。データを使用してモデルを作成するには、通常、事前にそれらのデータに特定の変換を行う必要があります。多くのデータ・マイニング・アルゴリズムに特定の変換要件が存在します。スコアリングされるデータは、トレーニング・データが変換されたのと同じ方法で事前に変換される必要があります。
Oracle Data Miningでは、アルゴリズムで必要とされる変換を自動的に実装する自動データ準備(ADP)をサポートしています。変換がモデル内に組み込まれ、モデルの適用時には常にその変換が自動的に実行されます。
追加の変換が必要な場合は、それらの変換をSQL式として指定し、モデルの作成時に入力として提供することができます。これらの変換は、ADPを使用する場合と同じようにモデルに組み込まれます。
自動の組込みデータ変換を使用すると、データ準備のほとんどの作業が自動的に処理されます。モデルの作成と複数のデータ・セットのスコアリングを、次の少ない手順で行うことができます。
-
ケース表に含める列を特定します。
-
ネストした列を作成します(トランザクショナル・データを含める場合)。
-
ADPで処理されない変換のSQL式を記述します。
-
モデルを作成し、SQL式を提供し(指定する場合)、テキスト・データを含む列を特定します。
-
スコアリング・データの一部またはすべての列が、モデルのトレーニングに使用された列と同じ名前と型を持つことを確認します。
関連項目
24.2 ケース表の準備
ケース表の準備が必要な理由を理解します。
関連項目
24.2.1 ネストした列の作成
ネストした列をいつ作成するかについて説明します。
データソースにトランザクショナル・データが含まれる場合(複数レコード・ケース)、ネストした列でトランザクションをケース・レベルに集計する必要があります。トランザクショナル・データでは、各ケースの情報が複数の行に含まれています。例として、本番レベルでのマイニング時のスター・スキーマにおける売上データがあります。売上は、その製品が多数の店舗で多数の顧客に対してある期間にわたって販売されるため、単一の製品(ケース)の多数の行に格納されます。
関連項目:
トランザクショナル・データのネストした列への変換の詳細は、「ネストしたデータの使用」を参照してください。
24.2.3 テキスト変換
Oracle Data Miningではテキストをマイニングできます。ケース表内のテキスト列は、適切に変換すると、マイニングできるようになります。
テキスト列は、ビューではなく、表内に存在している必要があります。変換プロセスでは、いくつかのOracle Textの機能が使用され、表の各行のテキストがそれぞれ別個のドキュメントとして処理されます。各ドキュメントは、数値およびテキスト・ラベルを持つ用語と呼ばれるテキスト・トークンのセットに変換されます。テキスト列は、DM_NESTED_NUMERICALS
のネストした列に変換されます。
24.2.4 ビジネスおよび分野に依存した変換について
ビジネス上の問題に従い、データを変換する必要がある理由を理解します。
一部の変換は、ビジネス上の問題の定義によって決まります。たとえば、高い利益を生む顧客を予測するモデルを作成する場合を考えます。現在の顧客の利益データはドルなどの通貨で表されているため、どの程度が「高い利益」なのかを定義する必要があります。この場合、モデルを作成する前に、これまでの経験から導かれたいくつかの式を使用して、利益属性を「低」、「中」および「高」の範囲に再コード化できます。
その他の一般的なビジネス上の変換には、データ情報の経過時間への変換があります。たとえば、出生日は年齢に変換できます。
専門知識は、データをどのように準備するのかを決める上で非常に重要になることがあります。たとえば、一部のアルゴリズムでは、通常の範囲から遠く外れた値がデータに含まれていると、信頼できない結果が生成されます。ある場合は、これらの値は誤差または異常値を表します。別の場合では、これらの値が意味のある情報を提供することもあります。
関連項目
24.3 自動データ準備の理解
自動データ準備(ADP)を使用したデータ変換について理解します。
ほとんどのアルゴリズムでは、なんらかの形のデータ変換が必要となります。Oracle Data Miningは、モデルの作成プロセス時にアルゴリズムで必要とされる変換を自動的に実行できます。ユーザーは、この自動変換に独自の変換を追加したり、すべての変換を独自に管理できます。
自動変換を計算する際、Oracle Data Miningでは、経験則を使用して特定のアルゴリズムの一般的な要件を見つけます。多くの場合、このプロセスによってモデルの質がある程度確保されます。
ビニング、正規化および外れ値の処理は、データ・マイニング・アルゴリズムで一般的に必要とされる変換です。
24.3.1 ビニング
ビニングは離散化とも呼ばれ、連続データおよび離散データのカーディナリティを減らすための手法です。ビニングでは、関連する複数の値をビンにグループ化して、個別値の数を減らします。
ビニングを行うと、モデルの質をほとんど落とすことなく、リソースの使用率やモデル作成の応答時間を大幅に向上させることが可能です。ビニングを行うと、属性間の関係が補強され、モデルの質が向上する場合があります。
監視ありビニングは、データの重要な特性を使用してビン境界を判断する高い知能を備える形式のビニングです。監視ありビニングでは、ターゲットとの結合分布を考慮した単一予測子のディシジョン・ツリーによってビン境界が特定されます。監視ありビニングは、量的属性と質的属性の両方に使用できます。
24.3.3 外れ値の処理
列内の他の値から大幅に外れている値は、外れ値とみなされます。外れ値が存在すると、データに歪効果が現れ、正規化やビニングなどの変換の有効性が抑制される場合があります。
トリミングやクリッピングなど外れ値の処理手法を行うと、外れ値の影響を最小限に抑えることができます。
外れ値は、機器の異常に起因する不正確な読取りなど、問題のあるデータを表します。ただし、特にビジネス分野などの一部のケースでは、外れ値が完全に有効となることがあります。たとえば、人口調査のデータにおいて、富裕層に属する一部の個人の収入が一般層とは大きく異なる場合があります。この情報はデータの重要な部分であるため、外れ値として処理しないでください。外れ値の処理を決定するには専門知識が必要です。
24.3.4 ADPによるデータの変換方法
各アルゴリズムに対してADPがどのようにデータを準備するかを、次の表に示します。
表24-1 ADPとOracle Data Miningのアルゴリズム
アルゴリズム | マイニング機能 | ADPによる処理 |
---|---|---|
相関ルール |
ADPは相関ルールに対して効果がない。 |
|
分類 |
ADPはディシジョン・ツリーに対して効果がない。データ準備はアルゴリズムによって処理される。 |
|
クラスタリング |
外れ値に敏感な正規化によって、ガウス分布を使用してモデル化された単一列の(ネストしていない)数値列が正規化される。ADPは他の種類の列に対して効果がない。 |
|
分類および回帰 |
外れ値に敏感な正規化によって量的属性が正規化される。 |
|
クラスタリング |
外れ値に敏感な正規化によって量的属性が正規化される。 |
|
属性評価 |
監視ありビニングによってすべての属性がビニングされる。 |
|
分類 |
監視ありビニングによってすべての属性がビニングされる。 |
|
特徴抽出 |
外れ値に敏感な正規化によって量的属性が正規化される。 |
|
クラスタリング |
属性ごとのビン数を自動的に計算する特別な形式の等幅ビニングによって量的属性がビニングされる。すべてNULLまたは単一の値を持つ数値列は除外されます。 |
|
特徴抽出 |
外れ値に敏感な正規化によって量的属性が正規化される。 |
|
分類、異常検出および回帰 |
外れ値に敏感な正規化によって量的属性が正規化される。 |
関連項目:
-
アルゴリズム固有のデータ準備の詳細は、『Oracle Data Mining概要』の第III部を参照してください。
24.4 モデルへの変換の組込み
独自の変換を指定してモデルに組み込むには、変換リストを作成してDBMS_DATA_MINING.CREATE_MODEL
に渡します。
PROCEDURE 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
);
24.4.1 属性の変換指示の指定
属性の変換指示とは何か、および変換レコード内のフィールドについて説明します。
変換リストは、変換レコードの表として定義されます。各レコード(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));
変換レコードのフィールドについては、この表で説明します。
表24-2 属性の変換レコードのフィールド
関連項目
24.4.1.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
を使用します。
24.4.1.2 属性指定
属性指定を通じて属性に固有の特性を定義する方法を説明します。
変換レコードの属性指定は、この属性に固有の特性を定義します。NULLである場合を除き、属性指定にはFORCE_IN
、NOPREP
またはTEXT
の値を含めることができます(表24-2を参照)。
例24-1 複数のキーワードを使用した属性指定
複数の属性指定キーワードが適用可能な場合、カンマ区切りリストで指定できます。次の式は、GLMモデルでの属性の指定です。ftr_selection_enable
設定が有効な場合、この式によって、属性がモデルに強制的に含まれます。ADPが有効な場合、属性の自動変換は実行されません。
"FORCE_IN,NOPREP"
例24-2 テキスト属性指定
テキスト属性の場合、必要に応じてPOLICY_NAME
、TOKEN_TYPE
およびMAX_FEATURES
のサブ設定を指定できます。サブ設定は、テキスト変換に固有の構成情報を提供します。次の例では、テキスト内容に対する変換指示がmy_policy
というテキスト・ポリシーで定義され、トークン・タイプとしてTHEME
が指定されます。抽出した特徴の最大数は3000です。
"TEXT(POLICY_NAME:my_policy)(TOKEN_TYPE:THEME)(MAX_FEATURES:3000)"
関連項目
24.4.2 変換リストの作成
変換リストは、変換レコードの集合です。新しい変換レコードを追加すると、変換リストの一番上に追加されます。変換リストを作成する場合は、次の手法のいずれかを使用できます。
-
DBMS_DATA_MINING_TRANSFORM
のSET_TRANFORM
プロシージャ -
DBMS_DATA_MINING_TRANSFORM
のSTACK
インタフェース -
DBMS_DATA_MINING
のGET_MODEL_TRANSFORMATIONS
ファンクションおよびGET_TRANSFORM_LIST
ファンクション
24.4.2.1 SET_TRANSFORM
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
を使用します。
24.4.2.2 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は、質的ビニングの定義表に格納されている情報に対する変換レコードを作成し、その変換レコードを変換リストに追加します。
24.4.2.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
のフィールドについては、表24-2で説明しています。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ファンクションに関する項
24.4.3 変換リストおよび自動データ準備
ADPを有効化し、変換リストを指定すると、その変換リストがシステムによって生成された自動の変換とともに組み込まれます。変換リストは、自動変換の前に実行されます。
ADPを有効化し、変換リストを指定しないと、自動変換のみがモデルに組み込まれます。
ADPを無効化し(デフォルト)、変換リストを指定すると、カスタム変換がモデルに組み込まれます。自動変換は実行されません。
ADPを無効化し(デフォルト)、変換リストを指定しないと、モデルには変換が組み込まれません。この場合、必要に応じてトレーニング・データセット、テスト・データセットおよびスコアリング・データセットを独自に変換する必要があります。各データセットには同じ変換を適用してください。
24.4.4 Oracle Data Miningの変換ルーチン
変換ルーチンについて説明します。
Oracle Data Miningには、DBMS_DATA_MINING_TRANSFORM
パッケージの様々な変換手法を実装するルーチンが用意されています。
24.4.4.1 ビニング・ルーチン
Oracle Data Miningにおけるビニング手法について説明します。
ビニング計画の決定には、多数の要因が関与します。通常、値の数を少なくするとモデルがコンパクトになり、短時間でモデルを作成できるようになりますが、精度が低下する可能性もあります。
ビンの境界を適切に選択すると、モデルの質が大幅に向上する場合があります。たとえば、年齢をビンに分ける適切な手段としては、0から13は子供、13から19は10代、19から24は青年、24から35は社会人、などのように、対象とするグループに分割する方法があります。
次の表に、Oracle Data Miningで提供されているビニングの手法を示します。
表24-3 DBMS_DATA_MINING_TRANSFORMのビニング手法
関連項目
24.4.4.2 正規化ルーチン
Oracle Data Miningにおける正規化ルーチンについて説明します。
正規化のほとんどの手法では、1つの属性の範囲を別の範囲(通常は0から1または-1から+1)にマップします。
正規化は外れ値に対して非常に敏感です。外れ値の処理をしない場合、値の多くがきわめて小さな範囲にマップされ、情報の多くが失われてしまいます。
関連項目
24.4.4.3 外れ値の処理のルーチン
外れ値は極端な値であり、通常は平均値から標準偏差の数倍離れた値のことを指します。外れ値の影響を最小限に抑えるには、データをウィンザライズするかトリミングします。
ウィンザライズでは、属性の両端の値を特定の指定値に設定します。たとえば、ウィンザライズを90%とする場合、値の下位5%は5パーセンタイルの最小値と同じ値に設定され、値の上位5%は95パーセンタイルの最大値に一致する値に設定されます。
トリミングでは、末端値をNULLに設定します。これらの値はアルゴリズムで欠損値として処理されます。
外れ値が及ぼす影響はアルゴリズムによって異なります。通常、外れ値は、等幅ビニングおよびmin-max正規化において歪みを生じさせます。
24.5 逆変換の理解
逆変換が必要な理由を理解します。
逆変換では、モデルによって戻される情報は、モデルのトレーニングに使用されたデータの形式に似た形式または同じ形式で表されます。内部変換は、モデルの詳細およびスコアリング結果で元に戻されます。
モデルで使用される属性の一部は、作成データ内の列に対応します。ただし、アルゴリズム、ネストしたデータおよび変換に固有のロジックがあるため、一部の属性は列に対応しません。
たとえば、モデルでは、トレーニング・データ内のネストした列は属性として解釈されません。Oracle Data Miningではモデルの作成時に、ネストした列が展開され、各行(属性の名前と値のペア)が1つの属性となります。
サポート・ベクター・マシン(SVM)および一般化線形モデル(GLM)などの一部のアルゴリズムは、量的属性でのみ動作します。SVMの場合、作成データ内の非数値列は2項属性に展開されます(列内の各個別値に対して1つ)。GLMでは、元の列内の最頻値に対して新しい属性は生成されません。これらの2項属性は、ケースの列値がその2項属性に関連付けられた値と等しい場合にのみ、1に設定されます。
係数を生成するアルゴリズムは、結果の解釈性に関する課題を示しています。例として、SVMおよびNon-Negative Matrix Factorization (NMF)があります。これらのアルゴリズムは、変換された属性と組み合せて使用される係数を生成します。これらの係数は、元のデータのスケールではなく、変換されたスケール上のデータに関連があります。
こうしたすべての理由から、モデルの詳細にリストされる属性は、モデルのトレーニングに使用されるデータの列とは似ていません。ただし、自動データ準備(ADP)で実行される、またはユーザーが指定した変換リストによるかにかかわらず、組込みの変換が行われる属性は、元の列値とできるだけ近い変換前の状態でモデルの詳細に表示されます。属性は、モデルによって使用される際に変換されますが、モデルの詳細ではユーザーが解釈できる形式で表示されます。