3.6 欠損値の処理

Oracle Data Miningでは、スパース・データと、ランダムな欠損値の含まれるデータとが区別されます。後者は、一部の属性値が不明であることを意味します。一方、スパース・データには、データ内には表されていないが既知であるとみなされる値が含まれます。

スパース・データの典型例はマーケット・バスケット・データです。何百または何千個もある取扱い商品の中で、個々のケース(バスケットまたはトランザクション)に含まれる商品はわずかです。商品の値はすべて既知ですが、すべての商品がバスケットの中に存在するわけではありません。存在する商品に対しては特定の数量がありますが、存在していない商品についてはスパース(既知の数量は0(ゼロ))となります。

Oracle Data Miningでは、欠損データは次のように解釈されます。

  • ランダムな欠損: 単純な(ネストしていない)データ型の列内の欠損値は、ランダムに欠損しているとみなされます。

  • スパース: ネストした列内の欠損値は、スパース性を示します。

3.6.1 例: 欠損値とスパース・データの識別基準

この項の例では、データがスパースであるのかランダムに欠損しているのかをOracle Data Miningがどのように識別するかについて説明します。

3.6.1.1 売上表のスパース性

ある売上表には、一定期間内に複数の店舗で顧客に販売された製品グループのPOSデータが格納されます。それぞれの顧客は、少数の製品しか購入しません。顧客が購入しなかった製品は、売上表の行として表示されません。

1人の顧客が各製品に支払った金額を求める場合、購入されなかった製品の金額は0(ゼロ)と推定されます。表に行が表示されなくても、この値はランダムな欠損でも未知でもなくゼロになります。

売上データは(製品、店舗、顧客、時間で)ディメンション化され、多くの場合、マイニング用のネストしたデータとして表されます。

ネストした列の欠損値は常にスパース性を示すため、マイニング対象のデータに関してこの解釈が適切であることを確認する必要があります。たとえば、大規模な映画データベースのユーザーの映画評価が格納されている複数レコード・ケースのデータセットをマイニングしようとする場合、欠損している評価は未知の(ランダムに欠損している)値ですが、Oracle Data Miningではこのデータをスパースとして扱い、欠損値については評価を0(ゼロ)と推定します。

3.6.1.2 顧客データの表の欠損値

顧客に関する人口統計データが格納されている顧客データの表があるとします。ケースID列は顧客IDです。属性は、年齢、学歴、職業、性別、世帯人員などです。データがすべてそろっていない顧客もいます。欠損値がある場合は、ランダムに欠損しているとみなされます。たとえば、顧客1の年齢と顧客2の職業がデータにない場合、その情報は単に不明なだけです。スパース性を示すことにはなりません。

この顧客データはディメンション化されないことに注意してください。ケースとその各属性の間には1対1のマッピングが存在します。どの属性もネストしていません。

3.6.2 Oracle Data Miningにおける欠損値の扱い

欠損値の処理方法は、アルゴリズムおよびデータの性質(質的または量的、スパースまたはランダムな欠損)によって異なります。次の表に、欠損値の処理方法の概要を示します。

ノート:

Oracle Data Miningでは、自動データ準備が使用されているかどうかにかかわらず、同じ欠損値処理が実行されます。

表3-3 アルゴリズムによる欠損値処理

欠損データ EM、GLM、NMF、k-Means、SVD、SVM DT、MDL、NB、OC Apriori

ランダムな欠損値(量的)

欠損している量的な値はアルゴリズムにより平均値に置換される。

期待値最大化(EM)では、ガウス分布でモデル化された列のみ置換される。

欠損値はそのままランダムな欠損として処理される。

すべての欠損データがスパースとして解釈される。

ランダムな欠損値(質的)

一般化線形モデル(GLM)、Non-Negative Matrix Factorization (NMF)、k-Meansおよびサポート・ベクター・マシン(SVM)により、欠損質的値がモードで置換されます。

特異値分解(SVD)は、質的データをサポートしていません。

EMは欠損している質的な値を置換しない。EMはNULLを、独自の頻度カウントとともに、個別値として扱う。

欠損値はそのままランダムな欠損として処理される。

すべての欠損データがスパースとして解釈される。

スパース・データ(量的)

スパースな量的データはアルゴリズムにより0(ゼロ)に置換される。

O-Clusterはネストしたデータをサポートしないため、スパース・データもサポートされない。ディシジョン・ツリー(DT)、最小記述長(MDL)およびNaive Bayes (NB)では、スパースな量的データはゼロに置換される。

スパース・データは処理される。

スパース・データ(質的)

SVD以外のすべてのアルゴリズムは、スパースな質的データをゼロ・ベクターで置換する。SVDは質的データをサポートしない。

O-Clusterはネストしたデータをサポートしないため、スパース・データもサポートされない。DT、MDLおよびNBでは、スパースな質的データはDM$SPARSEという特別な値に置換される。

スパース・データは処理される。

3.6.3 欠損値処理の変更

欠損データをスパースまたはランダムな欠損として置換します。

Oracle Data Miningで、欠損データを、ランダムな欠損としてではなくスパースとして、またはスパースとしてではなくランダムな欠損として処理する必要がある場合、モデルを作成する前に変換を行う必要があります

欠損値をスパースとして処理する必要があるが、Oracle Data Miningではその欠損値がランダムな欠損値として解釈される場合、NVLなどのSQL関数を使用すると、NULLを「NA」などの値に置換できます。Oracle Data Miningでは、特定の値が存在する場合、欠損値処理は行われません。

欠損しているネストした属性をランダムな欠損として処理する場合は、ネストした行を、別々の列に格納された物理的な属性に変換できます(ただし、ケース表の列数がデータベースによる制限(1000列以内)を超えない場合に限ります)。存在しうる属性の名前をすべて入力し、それらをNULLとして指定してください。かわりに、存在していないすべての商品について、ネストした列に行を挿入し、各行に平均値やモードなどの値を割り当てます。