この章では、Oracle Data Miningの機能を使用してマイニング用のデータを準備する方法について説明します。
この章には、次の項が含まれます。
モデルの質は、そのモデルの作成(トレーニング)に使用されるデータの質に大きく左右されます。どのようなデータ・マイニング・プロジェクトでも、その取組みの多くの時間がデータの準備に費やされます。データは慎重に調査、整備および変換する必要があり、アルゴリズムに適したデータ準備方法を適用する必要があります。
データ準備のプロセスは、テスト用であるかスコアリング用であるかに関係なく、モデルが適用されるあらゆるデータについて、そのモデルのトレーニングに使用されたデータと同じ変換を行う必要があるため、一層複雑になっています。
Oracle Data Miningでは、データ準備プロセスを大幅に単純化するいくつかの機能が提供されます。
組込みのデータ準備 - モデルのトレーニングに使用される変換は、モデルに組み込まれ、モデルが新しいデータに適用されるたびに自動的に実行されます。モデルの変換を指定する場合、1回指定すれば済みます。
自動データ準備(ADP) - Oracle Data Miningでは、自動データ準備モードがサポートされます。ADPが有効化されている場合、アルゴリズムで必要とされるデータ変換が自動的に実行されます。変換の指示は、ユーザーが指定した変換の指示とともにモデルに組み込まれます。
カスタム・データ準備用のツール - Oracle Data Miningには、独自の変換指示を作成する際に使用できるPL/SQLパッケージの変換ルーチンが用意されています。これらの変換指示はADPとともに使用することも、ADPのかわりに使用することもできます。
欠損値およびスパース・データの自動管理 - Oracle Data Miningでは、マイニング・アルゴリズム間で一貫した方法でスパース性および欠損値が処理されます。
透明性 - Oracle Data Miningでは、モデル内部の質的属性および量的属性のビューであるモデルの詳細が提供されます。ユーザーが解釈可能な形式に変換済属性値をマップする逆変換によって、モデル内部の詳細を調べることができます。可能である場合、属性値は元の列値に逆変換されます。逆変換は、監視ありモデルのターゲットにも適用されるため、スコアリングの結果は、元のターゲットの単位と同じ単位になります。
マイニング用のデータを準備する際の最初のステップは、ケース表の作成です。すべてのデータが単一の表内にあり、各ケース(レコード)のすべての情報が単一の行に含まれている場合(単一レコード・ケース)、このプロセスは完了しています。
データが複数の表に存在している場合、データソースの作成には、ビューの作成が伴います。「ケース表」という用語は、簡易的に、表またはビューを指すものとします。
データソースにトランザクショナル・データが含まれる場合(複数レコード・ケース)、必要に応じてネストした列を使用して、データソースをケース・レベルに集計する必要があります。トランザクショナル・データでは、各ケースの情報が複数の行に含まれています。例として、本番レベルでのマイニング時のスター・スキーマにおける売上データがあります。売上は、その製品が多数の店舗で多数の顧客に対してある期間にわたって販売されるため、単一の製品(ケース)の多数の行に格納されます。
関連データがすべて含まれたケース表を作成したら、列内で一貫性のない形式を持つデータを整備する必要があります。次の項で説明するように、電話番号、郵便番号、日付などの項目については特に注意してください。
関連項目: 詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。 |
Oracle Data Miningでサポートされている列のデータ型の数は限られています。数値データは量的属性として解釈され、文字データは質的属性として解釈されます。
列のデータ型は、その型がOracle Data Miningでサポートされていない場合や、その型をOracle Data Miningが誤認識する場合、変換する必要があります。たとえば、郵便番号は様々な郵便区を識別しますが、順番は示しません。郵便番号を数値列に格納すると、量的属性として解釈されます。この場合、列データがモデルによって質的属性として使用されるように、データ型を変換する必要があります。これには、TO_CHAR
関数を使用して1から9の数字を変換し、LPAD
関数を使用して先頭の0(ある場合)を保持します。
LPAD(TO_CHAR(ZIPCODE),5,'0')
Oracle Data MiningのAPIでは、DATE
およびTIMESTAMP
データはサポートされていません。データ列は、データ・マイニング用に単純な数値データ型か文字列データ型に変換する必要があります。
ほとんどの場合、DATE
およびTIMESTAMP
はNUMBER
への変換が必要ですが、個々のケースについて検討する必要があります。TIMESTAMP
列は時間軸におけるある固有点を表すため、通常は数値に変換します。
または、年次売上データの表内の日付列は、製品が販売された月を示す場合があります。このようなDATE
列はVARCHAR2
に変換し、質的に扱います。TO_CHAR
関数を使用すると、DATE
データ型をVARCHAR2
に変換できます。
開始日を選択して、各日付値からその開始日を減算すると、日付を数値に変換できます。また、日付を解析して、その構成要素をいくつかの列に分配する方法もあります。このアプローチは、DATE
およびTIMESTAMP
データ型をサポートしていないDBMS_PREDICTIVE_ANALYTICS
によって使用されます。
関連項目: データ型の変換については、『Oracle Database SQL言語リファレンス』を参照してください。 DBMS_PREDICTIVE_ANALYTICSでサポートされている日付データ型については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』 |
Oracle Data Miningではテキストをマイニングできます。ケース表内のテキスト列は、適切に変換すると、マイニングできるようになります。
テキスト列は、ビューではなく、表内に存在している必要があります。変換プロセスでは、いくつかのOracle Textの機能が使用され、表の各行のテキストがそれぞれ別個のドキュメントとして処理されます。各ドキュメントは、数値およびテキスト・ラベルを持つ用語と呼ばれるテキスト・トークンのセットに変換されます。テキスト列は、DM_NESTED_NUMERICALS
のネストした列に変換されます。
関連項目: 詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。 |
一部の変換は、ビジネス上の問題の定義によって決まります。たとえば、高い利益を生む顧客を予測するモデルを作成する場合を考えます。現在の顧客の利益データはドルなどの通貨で表されているため、どの程度が「高い利益」なのかを定義する必要があります。この場合、モデルを作成する前に、これまでの経験から導かれたいくつかの式を使用して、利益属性を「低」、「中」および「高」の範囲に再コード化できます。
その他の一般的なビジネス上の変換には、データ情報の経過時間への変換があります。たとえば、出生日は年齢に変換できます。
場合によっては、モデルによるデータの望ましくない解釈を最小限に抑えるため、データの変換が必要となります。例として、対数変換があります。値が非常に広い範囲に分布する場合、量的属性の対数をとることができます。たとえば、手数料などは数百から数百万の範囲に分布する場合があります。対数スケールに変換することによって、モデルにおける歪効果を最小化できます。
専門知識は、データをどのように準備するのかを決める上で非常に重要になることがあります。たとえば、一部のアルゴリズムでは、通常の範囲から遠く外れた値がデータに含まれていると、信頼できない結果が生成される可能性があります。ある場合は、これらの値は誤差または異常値を表します。別の場合では、これらの値が意味のある情報を提供することもあります。「外れ値の処理」を参照してください。
ほとんどのアルゴリズムでは、なんらかの形のデータ変換が必要となります。Oracle Data Miningは、モデルのトレーニング・プロセス時にアルゴリズムで必要とされる変換を自動的に実行できます。ユーザーは、この自動変換に独自の変換を追加したり、すべての変換を独自に管理できます。
自動変換を計算する際、Oracle Data Miningでは、経験則を使用して特定のアルゴリズムの一般的な要件を見つけます。多くの場合、このプロセスによってモデルの質がある程度確保されます。
ビニング、正規化および外れ値の処理は、データ・マイニング・アルゴリズムで一般的に必要とされる変換です。
ビニングは離散化とも呼ばれ、連続データおよび離散データのカーディナリティを減らすための手法です。ビニングでは、関連する複数の値をビンにグループ化して、個別値の数を減らします。
ビニングを行うと、モデルの質をほとんど落とすことなく、リソースの使用率やモデル作成の応答時間を大幅に向上させることが可能です。ビニングを行うと、属性間の関係が補強され、モデルの質が向上する場合があります。
列内の他の値から大幅に外れている値は、外れ値とみなされます。外れ値が存在すると、データに歪効果が現れ、正規化やビニングなどの変換の有効性が抑制される場合があります。
トリミングやクリッピングなどの外れ値の処理手法を行うと、外れ値の影響を最小限に抑えることができます。
外れ値は、機器の異常に起因する不正確な読取りなど、問題のあるデータを表している場合があります。ただし、特にビジネス分野などの一部のケースでは、外れ値が完全に有効となることがあります。たとえば、人口調査のデータにおいて、富裕層に属する一部の個人の収入が一般層とは大きく異なる場合があります。この情報はデータの重要な部分であるため、外れ値として処理すべきではありません。通常、外れ値の処理を決定するには専門知識が必要です。
各アルゴリズムに対してADPがどのようにデータを準備するかを、表19-1に示します。
表19-1 ADPとOracle Data Miningのアルゴリズム
アルゴリズム | マイニング機能 | ADPによる処理 |
---|---|---|
分類 |
監視ありビニングによってすべての属性がビニングされる。 |
|
分類 |
ADP設定はディシジョン・ツリーに対して効果がない。データ準備はアルゴリズムによって処理される。 |
|
分類および回帰 |
量的属性が正規化される。 |
|
分類、異常検出および回帰 |
量的属性が正規化される。 |
|
クラスタリング |
外れ値に敏感な正規化によって量的属性が正規化される。 |
|
クラスタリング |
属性ごとのビン数を自動的に計算する特別な形式の等幅ビニングによって量的属性がビニングされる。すべてNULLまたは単一の値を持つ数値列は除外されます。 |
|
属性評価 |
監視ありビニングによってすべての属性がビニングされる。 |
|
相関ルール |
ADP設定は相関ルールに対して効果がない。 |
|
特徴抽出 |
量的属性が正規化される。 |
変換は、ADPによってモデルに自動的に組み込んだり、ユーザーが指定した変換の指示の結果として組み込むことができます。独自の組込み変換を指定するには、変換リストを作成し、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
);
関連項目: 変換リストの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 |
ADPを有効化し、変換リストを指定すると、その変換リストがシステムによって生成された自動の変換とともに組み込まれます。変換リストは、自動変換の前に実行されます。
ADPを有効化し、変換リストを指定しないと、自動変換のみがモデルに組み込まれます。
ADPを無効化し(デフォルト)、変換リストを指定すると、カスタム変換がモデルに組み込まれます。自動変換は実行されません。
ADPを無効化し(デフォルト)、変換リストを指定しないと、モデルには変換が組み込まれません。この場合、作成データセット、テスト・データセットおよびスコアリング・データセットを独自に変換する必要があります。各データセットには同じ変換を適用してください。このデータ準備の方法は、以前のリリースのOracle Data Miningで必要でした。
Oracle Data Miningには、DBMS_DATA_MINING_TRANSFORM
パッケージの様々な変換手法を実装するルーチンが用意されています。このパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
ビニング計画の決定には、多数の要因が関与します。通常、値の数を少なくするとモデルがコンパクトになり、短時間でモデルを作成できるようになりますが、精度が低下する可能性もあります。
ビンの境界を適切に選択すると、モデルの質が大幅に向上する場合があります。たとえば、年齢をビンに分ける適切な手段としては、0から13は子供、13から19は10代、19から24は青年、24から35は社会人、などのように、対象とするグループに分割する方法があります。
表19-2に、Oracle Data Miningで提供されているビニングの手法を示します。
表19-2 DBMS_DATA_MINING_TRANSFORMのビニング方法
ビニング方法 | 説明 |
---|---|
上位N個の最頻出項目 |
この方法は、質的属性のビニングに使用できる。ユーザーはビンの数を指定する。発生頻度が最も高い値が最初のビンとしてラベル付けされ、発生頻度が2番目に高い値が2番目のビンとしてラベル付けされる、などとなる。残りの値はすべて追加のビンに含まれる。 |
監視ありビニング |
監視ありビニングは高い知能を備える形式のビニングであり、ビンの境界はデータの重要な特性から導かれる。監視ありビニングでは、単一予測子のディシジョン・ツリーが作成され、ターゲットに関して特徴的なビンの境界が検出される。これは、量的属性または質的属性に使用できる。 |
等幅ビニング |
等幅ビニングは、量的属性に使用できます。最大値から最小値を差し引いて値の範囲を計算し、その値の範囲が等間隔に分割されます。ビンの数は、ユーザーが指定することも、自動的に計算することもできます。等幅ビニングは通常、外れ値の処理とともに使用する必要があります。(「外れ値の処理のルーチン」を参照してください。) |
分位ビニング |
分位ビニングは量的なビニングの手法である。分位の計算には、SQL分析関数の |
正規化のほとんどの手法では、1つの属性の範囲を別の範囲(通常は0から1または-1から+1)にマップします。
正規化は外れ値に対して非常に敏感です。外れ値の処理をしない場合、値の多くがきわめて小さな範囲にマップされ、情報の多くが失われてしまいます。(「外れ値の処理のルーチン」を参照してください。)
外れ値は極端な値であり、通常は平均値から標準偏差の数倍離れた値のことを指します。外れ値の影響を最小限に抑えるには、データをウィンザライズするかトリミングします。
ウィンザライズでは、属性の両端の値を特定の指定値に設定します。たとえば、ウィンザライズを90%とする場合、値の下位5%は5パーセンタイルの最小値と同じ値に設定され、値の上位5%は95パーセンタイルの最大値に一致する値に設定されます。
トリミングでは、末端値をNULLに設定します。これらの値はアルゴリズムで欠損値として処理されます。
外れ値が及ぼす影響はアルゴリズムによって異なります。通常、外れ値は、等幅ビニングおよびmin-max正規化において歪みを生じさせます。
Oracle Data Miningでは、モデルによって戻される情報が、モデルのトレーニングに使用されたデータの形式に似た形式または同じ形式で表されることを保証する、モデルの透明性をサポートします。内部変換は、モデルの詳細および監視ありモデルによって生成された予測で逆変換されます。
モデルで使用される属性の一部は、作成データ内の列に対応します。ただし、アルゴリズム、ネストしたデータおよび変換に固有のロジックがあるため、多くの属性は列に対応しません。
たとえば、モデルでは、トレーニング・データ内のネストした列は属性として解釈されません。Oracle Data Miningではモデルの作成時に、ネストした列が展開され、各行(属性の名前と値のペア)が1つの属性となります。
SVMおよびGLMなどの一部のアルゴリズムは、量的属性に対してのみ作用します。SVMの場合、作成データ内の非数値列は2項の量的属性に展開されます(列内の各個別値に対して1つ)。GLMでは、元の列内の最頻値に対して新しい属性は生成されません。これらの2項属性は、ケースの列値がその2項属性に関連付けられた値と等しい場合にのみ、1に設定されます。
係数を生成するアルゴリズムは、結果の解釈性に関する課題を示しています。例としては、SVNやNMFが挙げられます。これらのアルゴリズムは、変換された属性と組み合せて使用される係数を生成します。これらの係数は、元のデータのスケールではなく、変換されたスケール上のデータに関連があります。
アルゴリズムではトレーニング・データ内のすべての列が必ずしも使用されるわけではありません。一部の列はモデルの質を維持する上で不要または有害とみなされる場合があります。これらの列は属性として使用されません。
こうしたすべての理由から、モデルの詳細にリストされる属性は、モデルのトレーニングに使用されるデータの列とは似ていない場合があります。ただし、ADPで実行される、またはユーザーが指定した変換リストによるかにかかわらず、組込みの変換が行われる属性は、元の列値とできるだけ近い変換前の状態でモデルの詳細に表示されます。属性は、モデルによって使用される際に変換されますが、モデルの詳細ではユーザーが解釈できる形式で表示されます。
関連項目: GET_MODEL_DETAILS GET_MODEL_TRANSFORMATIONS ALTER_REVERSE_EXPRESSION の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 |