この章では、Oracle Data Miningの機能を使用してマイニング用のデータを準備する方法について説明します。
この章では、次の項目について説明します。
モデルの質は、そのモデルの作成(トレーニング)に使用されるデータの質に大きく左右されます。どのようなデータ・マイニング・プロジェクトでも、その取組みのほとんどの時間がデータの準備に費やされます。データは慎重に調査、整備および変換する必要があり、アルゴリズムに適したデータ準備方法を適用する必要があります。
データ準備のプロセスは、テスト用であるかスコアリング用であるかに関係なく、モデルが適用されるあらゆるデータについて、そのモデルのトレーニングに使用されたデータと同じ変換を行う必要があるため、一層複雑になっています。
Oracle Data Miningでは、データ準備プロセスを大幅に単純化するいくつかの機能が提供されます。
組込みのデータ準備: モデルの作成時に指定された変換指示は、そのモデル内に組み込まれてモデルの作成時に使用され、モデルの適用時に再度使用されます。変換の指示は、1回指定するのみです。
自動データ準備(ADP): Oracle Data Miningには自動データ準備モードが用意されています。ADPが有効化されている場合、アルゴリズムで必要とされるデータ変換が自動的に実行されます。変換の指示は、ユーザーが指定した変換の指示とともにモデルに組み込まれます。
カスタム・データ準備用のツール: Oracle Data Miningには、独自の変換指示を作成する際に使用できる変換ルーチンが用意されています。これらの変換指示はADPとともに使用することも、ADPのかわりに使用することもできます。「組込みのデータ準備」を参照してください。
欠損値およびスパース・データの自動管理: Oracle Data Miningでは、マイニング・アルゴリズム間で一貫した方法でスパース性および欠損値が処理されます。『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言語リファレンス』を参照してください。
|
Oracle Data Miningではテキストをマイニングできます。ケース表内のテキスト列は、適切に変換すると、マイニングできるようになります。
テキスト列は、ビューではなく、表内にある必要があります。変換プロセスではOracle Textのいくつかの機能が使用されます。Oracle Textは、表の各行のテキストを別個のドキュメントとして扱います。各ドキュメントは、数値およびテキスト・ラベルを持つ用語と呼ばれるテキスト・トークンのセットに変換されます。テキスト列は、DM_NESTED_NUMERICALS
のネストした列に変換されます。
関連項目: 詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。 |
一部の変換は、ビジネス上の問題の定義によって決まります。たとえば、高い利益を生む顧客を予測するモデルを作成する場合を考えます。現在の顧客の利益データはドルなどの通貨で表されているため、どの程度が「高い利益」なのかを定義する必要があります。この場合、モデルを作成する前に、これまでの経験から導かれたいくつかの式を使用して、利益属性を「低」、「中」および「高」の範囲に再コード化できます。
その他の一般的なビジネス上の変換には、データ情報の経過時間への変換があります。たとえば、出生日は年齢に変換できます。
場合によっては、モデルによるデータの望ましくない解釈を最小限に抑えるため、データの変換が必要となります。例として、対数変換があります。値が非常に広い範囲に分布する場合、量的属性の対数をとることができます。たとえば、手数料などは数百から数百万の範囲に分布する場合があります。対数スケールに変換することによって、モデルにおける歪効果を最小化できます。
範囲の認識は、データをどのように準備するのかを決める上で非常に重要になることがあります。たとえば、一部のアルゴリズムでは、通常の範囲から遠く外れた値がデータに含まれていると、信頼できない結果が生成される可能性があります。ある場合は、これらの値は誤差または異常値を表します。別の場合では、これらの値が意味のある情報を提供することもあります。「外れ値の処理」を参照してください。
ほとんどのアルゴリズムでは、なんらかの形のデータ変換が必要となります。Oracle Data Miningは、モデルのトレーニング・プロセス時にアルゴリズムで必要とされる変換を自動的に実行できます。ユーザーは、この自動変換に独自の変換を追加したり、すべての変換を独自に管理できます。
自動変換を計算する際、Oracle Data Miningでは、経験則を使用して特定のアルゴリズムの一般的な要件を見つけます。多くの場合、このプロセスによってモデルの質がある程度確保されます。
ADPはモデルの設定です。ADPを有効にするには、モデルの設定表にPREP_AUTO
を指定します。デフォルトでは、ADPは有効化されていません。
設定表はSETTING_NAME
およびSETTING_VALUE
という2つの列を持つ表で、ユーザーが作成します。ADPを有効にするにはPREP_AUTO
をPREP_AUTO_ON
に設定し、ADPを無効にするにはPREP_AUTO
をPREP_AUTO_OFF
に設定します。
例19-1では、SETTINGS_TBL
という設定表でADPを有効化しています。
例19-1 ADP設定の有効化
BEGIN INSERT into settings_tbl( dbms_data_mining.prep_auto, dbms_data_mining.prep_auto_on); commit; END; /
例19-2では、この設定表を使用して、CLAS_MODEL
というモデルに対してADPを有効化しています。
例19-2 モデルのADPの有効化
BEGIN dbms_data_mining.create_model( model_name => 'clas_model', mining_function => dbms_data_mining.classification, data_table => 'my_data', case_id_column_name => 'case_id', target_column_name => 'class', settings_table_name => 'settings_tbl'); END; /
注意: デフォルトでは、ADPは有効化されていません。ADPを使用するには、該当するモデルの設定表でPREP_AUTO を明示的に設定する必要があります。 |
ビニング、正規化および外れ値の処理は、データ・マイニング・アルゴリズムで一般的に必要とされる変換です。これらの変換手法の概要は、この項内の該当セクションを参照してください。詳細は「組込みのデータ準備」を参照してください。
ビニングは離散化とも呼ばれ、連続データおよび離散データのカーディナリティを減らすための手法です。ビニングでは、関連する複数の値をビンにグループ化して、個別値の数を減らします。
ビニングを行うと、モデルの質をほとんど落とすことなく、リソースの使用率やモデル作成の応答時間を大幅に向上させることが可能です。ビニングを行うと、属性間の関係が補強され、モデルの質が向上する場合があります。
注意: ビニングは、Naive-Bayesおよび属性評価アルゴリズムで必要な第一の変換です。Oracle Data Miningのディシジョン・ツリー・アルゴリズムには、独自形式のビニング(監視ありビニング)が実装されています。 |
DBMS_DATA_MINING_TRANSFORM
でサポートされているビニング手法については、「ビニング」を参照してください。
正規化は、数値データの範囲を狭くする最も一般的な手法です。ほとんどの正規化手法では、1つの変数の範囲が別の範囲(通常は0〜1)にマップされます。
注意: 正規化は、サポート・ベクター・マシン(1クラス、分類および回帰)、Non-Negative Matrix Factorizationおよびk-Meansアルゴリズムで必要な第一の変換です。 |
DBMS_DATA_MINING_TRANSFORM
でサポートされている正規化手法については、「正規化」を参照してください。
列内の他の値から大幅に外れている値は、外れ値とみなされます。外れ値が存在すると、データに歪効果が現れ、正規化やビニングなどの変換の有効性が抑制される場合があります。
トリミングやクリッピングなどの外れ値の処理手法を行うと、外れ値の影響を最小限に抑えることができます。
外れ値は、機器の異常に起因する不正確な読取りなど、問題のあるデータを表している場合があります。ただし、特にビジネス分野などの一部のケースでは、外れ値が完全に有効となることがあります。たとえば、人口調査のデータにおいて、富裕層に属する一部の個人の収入が一般層とは大きく異なる場合があります。この情報はデータの重要な部分であるため、外れ値として処理すべきではありません。通常、外れ値の処理を決定するには専門知識が必要です。
DBMS_DATA_MINING_TRANSFORM
における外れ値の処理手法については、「外れ値の処理」を参照してください。
各アルゴリズムに対してADPがどのようにデータを準備するかを、表19-1に示します。
注意: ほとんどのアルゴリズムには、なんらかの形のデータ準備が組み込まれています。たとえば、量的属性に対してネイティブに作用するアルゴリズムは、各非数値入力列を量的属性のセットに展開します。アルゴリズム内にカプセル化されている変換は、ユーザーに対して透過的であり、ADPとは無関係に行われます。 また、ネストしたデータ、スパース性および欠損値の処理はアルゴリズム間で広く行われており、ADPとは無関係に行われます(『Oracle Data Miningアプリケーション開発者ガイド』を参照)。 |
表19-1 ADPとOracle Data Miningのアルゴリズム
アルゴリズム | マイニング機能 | ADPによる処理 |
---|---|---|
Naive Bayes |
分類 |
監視ありビニングによってすべての属性がビニングされる。 |
ディシジョン・ツリー |
分類 |
ADP設定はディシジョン・ツリーに対して効果がない。データ準備はアルゴリズムによって処理される。 |
GLM |
分類および回帰 |
量的属性が正規化される。 |
SVM |
分類、異常検出および回帰 |
量的属性が正規化される。 |
k-Means |
クラスタリング |
外れ値に敏感な正規化によって量的属性が正規化される。 |
O-Cluster |
クラスタリング |
属性ごとのビン数を自動的に計算する特別な形式の等幅ビニングによって量的属性がビニングされる。すべてNULLまたは単一の値を持つ数値列は除外される。 |
MDL |
属性評価 |
監視ありビニングによってすべての属性がビニングされる。 |
Apriori |
相関ルール |
ADP設定は相関ルールに対して効果がない。 |
NMF |
特徴抽出 |
量的属性が正規化される。 |
変換は、ADPによってモデルに自動的に組み込んだり、ユーザーが指定した変換の指示の結果として組み込むことができます。独自の組込み変換を指定するには、TRANSFORMATION_LIST
を作成し、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
);
ADPを有効化し、変換リストを指定すると、その変換リストがシステムによって生成された自動の変換とともに組み込まれます。変換リストは、自動変換の前に実行されます。
ADPを有効化し、変換リストを指定しないと、自動変換のみがモデルに組み込まれます。
ADPを無効化し(デフォルトを受け入れる)、変換リストを指定すると、カスタム変換がモデルに組み込まれます。自動変換は実行されません。
ADPを無効化し(デフォルトを受け入れる)、変換リストを指定しないと、モデルには変換が組み込まれません。この場合、作成データセット、テスト・データセットおよびスコアリング・データセットを独自に変換する必要があります。各データセットには同じ変換を適用してください。このデータ準備の方法は、以前のリリースのOracle Data Miningで必要でした。
変換リストは、属性変換式のセットから構成されます。各式で1つの属性の変換を指定します。
DBMS_DATA_MINING_TRANSFORM
のSTACK
ルーチンを使用すると、複数の属性変換式を1つの変換リストにまとめることができます。1つの変換リストで、任意の数の属性に対して変換を指定できます。
1つの属性変換式には、表19-2で説明するフィールドが含まれます。
表19-2 属性変換式の構成要素
フィールド名 | データ型 | 説明 |
---|---|---|
|
|
作成データ内の列の名前。列がネストしていない場合、完全な属性の名前となる。列がネストしている場合、完全な属性の名前は次のとおり。
|
|
|
ネストした列内の個々の属性。列がネストしていない場合、属性のサブ名はNULLとなる。 |
|
|
属性の変換方法を指定するSQL式。 この式は、モデルで内部的に使用される際に属性に適用される。 |
|
|
変換を逆にする方法を指定するSQL式。 この式は、モデルの詳細および監視ありモデルのターゲット内でユーザーに対して属性が可視である場合に、属性に適用される。 |
|
|
NULLまたは「NOPREP」のいずれか。attribute_specをNOPREPに設定すると、ADPが有効化されている場合にこの属性の自動データ準備を回避できる。ADPが無効化されている場合、NOPREPは無視される。 NOPREPは、ネストした属性の個々のサブ名には使用できない。ADPが有効化されている場合に個々のサブ名にNOPREPを指定すると、エラーが発生する。 |
expression
およびreverse_expression
フィールドは非常に長くなる(32Kを超える)場合があります。
例19-3では、INCOME
という属性の変換式を示しています。属性のサブ名は、INCOME
がネストした列でないためNULLです。モデルでは内部的にINCOME
の対数表現が使用されますが、INCOME
が監視ありモデルのターゲットである場合、モデルの詳細およびスコアリングの結果では、元の形式の属性として表示されます。
ネストした列内のすべての属性に同じ変換式を適用することも、ネストした個々の属性に別個の変換を指定することも可能です。
ネストした属性の一部を別個に変換する場合、ネストした列の残りの属性すべてに対してデフォルトの変換式を指定できます。デフォルトの指定では、列フィールドがNULL
、サブ属性フィールドがネストした列の名前になります。
たとえば、次に示す変換リストでは、ネストした列nested_col1
内の2つのネストした属性subname1
およびsubname2
の変換式を指定しています。
{nested_col1
,subname1
, (VALUE-(-1.5))/20, VALUE*20+(-1.5), NULL } {nested_col1
,subname2
, NULL, NULL, NULL } { NULL,nested_col1
, VALUE/10, VALUE*10, NULL }
nested_col1
内の残りの属性は、モデル内で使用されるために10で除算されてから、ユーザーが参照するために10で乗算されています。
変換および逆変換式のネストした属性の値は定数VALUE
であることに注意してください。
関連項目: 属性については、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。 スタック・インタフェース、変換式および変換リストの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 |
Oracle Data Miningには、DBMS_DATA_MINING_TRANSFORM
パッケージの様々な変換手法を実装するルーチンが用意されています。これらの変換手法の一部について、この項で説明します。
独自の変換リストを作成する場合、DBMS_DATA_MINING_TRANSFORM
のルーチンを使用することも、独自のSQLを記述することも、またはその2つを組み合せて使用することもできます。
関連項目: DBMS_DATA_MINING_TRANSFORM の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 |
ビニング計画の決定には、多数の要因が関与します。通常、値の数を少なくするとモデルがコンパクトになり、短時間でモデルを作成できるようになりますが、精度が低下する可能性もあります。
ビンの境界を適切に選択すると、モデルの質が大幅に向上する場合があります。たとえば、年齢をビンに分ける適切な手段としては、0〜13は子供、13〜19は10代、19〜24は青年、24〜35は社会人、などのように、対象とするグループに分割する方法があります。
表19-3に、Oracle Data Miningで提供されているビニングの手法を示します。
表19-3 DBMS_DATA_MINING_TRANSFORMのビニング方法
ビニング方法 | 説明 |
---|---|
上位N個の最頻出項目 |
この方法は、質的属性のビニングに使用できる。ユーザーはビンの数を指定する。発生頻度が最も高い値が最初のビンとしてラベル付けされ、発生頻度が2番目に高い値が2番目のビンとしてラベル付けされる、などとなる。残りの値はすべて追加のビンに含まれる。 |
監視ありビニング |
監視ありビニングは高い知能を備える形式のビニングであり、ビンの境界はデータの重要な特性から導かれる。監視ありビニングでは、単一予測子のディシジョン・ツリーが作成され、ターゲットに関して特徴的なビンの境界が検出される。このビニング方法は、量的属性または質的属性に使用できる。 |
等幅ビニング |
等幅ビニングは、量的属性に使用できる。最大値から最小値を差し引いて値の範囲を計算し、その値の範囲が等間隔に分割される。ビンの数は、ユーザーが指定することも、自動的に計算することもできる。等幅ビニングは通常、外れ値の処理とともに使用する必要がある(「外れ値の処理」を参照)。 |
分位ビニング |
分位ビニングは量的なビニングの手法である。分位の計算には、SQL分析関数の |
正規化のほとんどの手法では、1つの属性の範囲を別の範囲(通常は0〜1または-1〜+1)にマップします。
正規化は外れ値に対して非常に敏感です。外れ値の処理をしない場合、値の多くがきわめて小さな範囲にマップされ、情報の多くが失われてしまいます(「外れ値の処理」を参照)。
外れ値は極端な値です。通常、平均値から標準偏差の数倍離れた値のことを指します。外れ値の影響を最小限に抑えるには、データをウィンザライズするかトリミングします。
ウィンザライズでは、属性の両端の値を特定の指定値に設定します。たとえば、ウィンザライズを90%とする場合、値の下位5%は5パーセンタイルの最小値と同じ値に設定され、値の上位5%は95パーセンタイルの最大値に一致する値に設定されます。
トリミングでは、末端値をNULLに設定します。これらの値はアルゴリズムで欠損値として処理されます。
外れ値が及ぼす影響はアルゴリズムによって異なります。通常、外れ値は、等幅ビニングおよびmin-max正規化において歪みを生じさせます。
Oracle Data Miningでは、各アルゴリズムに対してGET_MODEL_DETAILS
ファンクションが用意されています。これらのファンクションは、モデルによって内部的に使用される質的属性および量的属性の説明を戻します。
モデルの詳細では、透明性がサポートされています。透明性が確保されることによって、モデルに関する重要な情報を取得でき、処理内容を把握できます。
透明性があることで、モデルによって生成された予測を元の形式で表現できるようになります。つまり、アルゴリズムによって内部的に使用されたすべての変換が、モデルの適用時に逆変換されます。たとえば、モデルの作成時に量的なターゲットが正規化された場合、スコアリング・データの予測は非正規化されます。
モデルで使用される属性の一部は、作成データ内の列に対応します。ただし、アルゴリズム、ネストしたデータおよび変換に固有のロジックがあるため、多くの属性は列に対応しません。
モデルでは、トレーニング・データ内のネストした列は属性として解釈されません。Oracle Data Miningではモデルの作成時に、ネストした列が展開され、各行(属性の名前と値のペア)が1つの属性となります。
SVMおよびGLMなどの一部のアルゴリズムは、量的属性に対してのみ作用します。SVMの場合、作成データ内の非数値列は2項の量的属性に展開されます(列内の各個別値に対して1つ)。GLMでは、元の列内の最頻値に対して新しい属性は生成されません。これらの2項属性は、ケースの列値がその2項属性に関連付けられた値と等しい場合にのみ、1に設定されます。
アルゴリズムではトレーニング・データ内のすべての列が必ずしも使用されるわけではありません。一部の列はモデルの質を維持する上で不要または有害とみなされる場合があります。これらの列は属性として使用されません。
こうしたすべての理由から、モデルの詳細にリストされる属性は、モデルのトレーニングに使用されるデータの列とは似ていない場合があります。ただし、ADPで実行される、またはユーザーが指定した変換リストによるかにかかわらず、組込みの変換が行われる属性は、元の列値とできるだけ近い変換前の状態でモデルの詳細に表示されます。属性は、モデルによって使用される際に変換されますが、モデルの詳細ではユーザーが解釈できる形式で表示されます。これが透明性の重要な側面です。
GET_MODEL_TRANSFORMATIONS
ファンクションを使用すると、モデルに関連付けられている組込みの変換を取得できます。
ユーザー指定の組込み変換では、逆変換式はユーザーが指定する必要があります。ADPが有効化されている場合、この逆変換は自動的に実行されます。多くの場合、これがわかりやすいプロセスです。
SVMおよびNMFは、結果の解釈性という観点において他のアルゴリズムより若干複雑です。どちらにも、変換された属性と組み合せて使用される係数のセットがあります。これらの係数は、元のデータのスケールではなく、変換されたスケール上のデータに関連があります。
ALTER_REVERSE_EXPRESSION
プロシージャを使用すると、属性に対してADPによって生成される逆変換を変更できます。このファンクションを使用するとモデルの詳細の可読性が向上し、クラスタリング・モデルによって生成されるクラスタにラベルを指定したり、1クラスSVMの出力をラベル付けすることができます。
関連項目: GET_MODEL_DETAILS 、GET_MODEL_TRANSFORMATIONS およびALTER_REVERSE_EXPRESSION については、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 |