見つからないデータのクリーンアップ

データセットの欠損値を処理する方法を指定します

カテゴリ: データ変換/操作

注意

適用対象: Machine Learning Studio (クラシック)

このコンテンツは、Studio (クラシック) のみに関連しています。 Azure Machine Learning デザイナーに同様のドラッグアンドドロップモジュールが追加されました。 この記事では、2つのバージョンの比較について詳しく説明します。

モジュールの概要

この記事では、Azure Machine Learning Studio (クラシック) の [ 欠損データのクリーニング ] モジュールを使用して、欠損値を削除、置換、または推論する方法について説明します。

データ サイエンティストは多くの場合、欠損値がないかデータをチェックしてから、さまざまな操作を実行して、データを修正したり、新しい値を挿入したりします。 このような消去操作の目的は、モデルをトレーニングするときに発生する可能性がある、見つからないデータに起因する問題を回避することです。

このモジュールでは、欠落値を "消去" するため、次のような複数の種類の操作をサポートしています。

  • 欠損値をプレースホルダー、平均値、またはその他の値で置換する
  • 欠損値がある行と列を完全に削除する
  • 統計的手法に基づいて値を推測する

ヒント

Machine learning の新機能 この記事では、欠損値を処理するためのメソッドをそれぞれ使用する理由について説明します。

このモジュールを使用しても、ソース データセットは変更されません。 代わりに、以降のワークフローで使用できる新しいデータセットがワークスペース内に作成されます。 新しい、消去されたデータセットを再利用するために保存することもできます。

このモジュールは、欠損値を消去するために使用される変換の定義も出力します。 この変換は、 変換の適用 モジュールを使用して、同じスキーマを持つ他のデータセットで再利用できます。

Clean Missing Data (見つからないデータの消去) の使用方法

このモジュールでは、消去操作を定義できます。 後で新しいデータに適用できるように、消去操作を保存することもできます。 消去プロセスを作成して保存する方法の説明については、次のリンクを参照してください。

重要

欠損値の処理に使用する消去方法は、結果に大きく影響します。 さまざまな方法を試すことをお勧めします。 特定の方法の使用の妥当性と、結果の質の両方を考慮してください。

欠損値の置換

Clean Missing Data (見つからないデータの消去) モジュールをデータのセットに適用するたびに、同じ消去操作が選択したすべての列に適用されます。 そのため、さまざまな方法を使用して異なる列を消去する必要がある場合は、モジュールの別のインスタンスを使用します。

  1. Clean Missing Data (見つからないデータの消去) モジュールを実験に追加し、欠損値があるデータセットを接続します。

  2. [Columns to be cleaned](クリーニング対象の列) には、変更する欠損値を含む列を選択します。 複数の列を選択できますが、選択したすべての列で同じ置換方法を使用する必要があります。 そのため、通常は文字列の列と数値の列を個別に消去する必要があります。

    たとえば、すべての数値の列で欠損値を確認するには、次の手順を実行します。

    1. 列セレクターを開き、[WITH RULES](規則を使用) を選択します。

    2. [BEGIN WITH](次の値で始まる)[NO COLUMNS](列なし) を選択します。

      [ALL COLUMNS](すべての列) から開始して、列を除外することもできます。 最初は、[ALL COLUMNS](すべての列) をクリックしても規則は表示されませんが、[NO COLUMNS](列なし) をクリックしてから [ALL COLUMNS](すべての列) をもう一度クリックすると、すべての列から開始して、名前、データ型、列のインデックスに基づいて列を除外することができます。

    3. [Include](含める) には、ドロップダウン リストから [Column type](列型) を選択し、[Numeric](数値)、またはより具体的な数値型を選択します。

    選択した消去方法または置換方法は、いずれも選択範囲内の すべて の列に適用できる必要があります。 いずれかの列内のデータが指定された操作と互換性がない場合、モジュールはエラーを返して実験を停止します。

  3. [Minimum missing value ratio](欠損値の最小比率) には、操作を実行するために必要な欠損値の最小数を指定します。

    このオプションを [Maximum missing value ratio](欠損値の最大比率) と組み合わせて使用して、データセットで消去操作が実行される条件を定義します。 値が欠落している行が多すぎるまたは少なすぎる場合は、操作を実行できません。

    入力した値は、列内のすべての値に対する欠損値の 比率 を表します。 既定では、[Minimum missing value ratio](欠損値の最小比率) プロパティは 0 に設定されています。 これは、欠損値が 1 つだけの場合でも、欠損値が消去されることを意味します。 このオプションを使用する方法の例については、「 クリーニング操作のしきい値の設定」を参照してください。

    警告

    指定された操作を適用するためには、各列でこの条件を満たす必要があります。 たとえば、3 つの列を選択し、欠損値の最小比率の値を .2 (20%) に設定しましたが、実際には 20% の欠損値があるのは 1 列しかないとします。 この場合、クリーンアップ操作は、欠損値が 20% を超えている列にのみ適用されます。 そのため、他の列は変更されません。

    欠損値が変更されたかどうか不明な場合は、[欠損値インジケーター列の生成] オプションを選択します。 列がデータセットに追加され、各列が最小と最大の範囲に指定された条件を満たしているかどうかを示します。

  4. [Maximum missing value ratio](欠損値の最大比率) には、実行される操作に渡すことができる欠損値の最大数を指定します。

    たとえば、欠損値が含まれている行が 30% 以下の場合にのみ欠損値の置換を実行して、欠損値が含まれている行が 30% を超えている場合には、値をそのままにすることができます。

    列内のすべての値に対する欠損値の比率として値を定義します。 既定では、[Maximum missing value ratio](欠損値の最大比率) は 1 に設定されています。 これは、列の値の 100% が欠落している場合でも、欠損値が消去されることを意味します。

    注意

    [ 欠損値の最小比率 ] オプションまたは [ 欠損値の最大比率] オプションを使用してしきい値を設定すると、選択した列のいずれかが条件を満たしていない場合でも、クリーニング操作を実行できません。

  5. [Cleaning Mode](消去モード) には、欠損値を置換または削除するための次のいずれかのオプションを選択します。

    • [マウスを使用して置換]: 欠損値ごとに、このオプションによって新しい値が割り当てられます。これは、統計資料で説明されているメソッドを使用して計算されます。これは、「連結された式を使用したマルチバリエーション」または「チェーン式による多重分割」です。 複数の埋め込まれた メソッド を使用すると、欠損値を埋める前に、データの他の変数を使用して、データが欠落している各変数が条件付きでモデル化されます。 これに対して、 1 つ の入力方法 (欠損値を列の平均値に置き換えるなど) では、データに対して1つのパスが行われ、fill 値が決定されます。

      すべてのメソッドは、何らかのエラーまたはバイアスを発生させますが、複数の方法では、データを生成するプロセスとデータの確率分布をシミュレートすることができます。

      欠損値の処理方法の概要については、「 欠損データ: アートの状態」を参照してください。Graham、2002

      警告

      このオプションは、完全に空の列には適用できません。 そうした列は削除するか、そのまま出力に渡す必要があります。

    • カスタムの代入値: すべての欠損値に適用されるプレースホルダー値 (0 や NA など) を指定するには、このオプションを使用します。 置換として指定する値は、列のデータ型と互換性がある必要があります。

    • 平均値で置換: 列の平均を計算し、列の各欠損値の置換値として平均を使用します。

      Integer、Double、Boolean のいずれかのデータ型を持つ列にのみ適用されます。 詳細については、「 テクニカルノート 」を参照してください。

    • 中央値で置換: 列の中央値を計算し、列の欠損値の置換として中央値を使用します。

      Integer または Double のデータ型を持つ列にのみ適用されます。 詳細については、「 テクニカルノート 」を参照してください。

    • Mode で置換: 列のモードを計算し、列のすべての欠損値の置換値としてモードを使用します。

      Integer、Double、Boolean、Categorical のいずれかのデータ型を持つ列に適用されます。 詳細については、「 テクニカルノート 」を参照してください。

    • 行全体の削除: 1 つ以上の欠損値を含むデータセット内の行を完全に削除します。 これは、欠損値がランダムに欠落していると考えられる場合に便利です。

    • 列全体の削除: 1 つ以上の欠損値を含むデータセット内のすべての列を完全に削除します。

    • Replace Using 確率論的 PCA: 列間の相関関係を分析する線形モデルを使用して欠損値を置換し、完全なデータが再構築されたデータの低次元近似を推定します。 基礎となる次元削減は、主成分分析 (PCA) の確率的形式の 1 つで、Tipping 氏と Bishop 氏の共著による『Journal of the Royal Statistical Society』Series B 21(3)、611–622 で提案されたモデルの確率変数を実装しています。

      連鎖方程式を使用した多重補完法 (MICE) などの他のオプションと比較すると、このオプションには、各列に対して予測子を適用する必要がないというメリットがあります。 代わりに、完全なデータセットの共分散の近似値を求めます。 そのため、多くの列に値が不足しているデータセットでは、パフォーマンスが向上する可能性があります。

      この方法の主な制限として、カテゴリ列が数値インジケーターに展開され、結果データの共分散の密行列が計算されることがあります。 さらに、この方法は、スパース表現用として最適化されません。 これらの理由から、膨大な数の列や大規模なカテゴリのドメイン (何万も) を含むデータセットは、非常に大きなスペースを必要とするためサポートされません。

      ヒント

      選択した方法は、選択したすべての列に適用されることに注意してください。 したがって、一部の列で一部の欠損値をゼロに置き換え、他の列にプレースホルダーを挿入する場合は、 [データセット内の列の選択] を使用してデータを分離し、[ 欠損データのクリーニング ] モジュールの別のインスタンスを使用する必要があります。

  6. [Custom substitution value](カスタムの置換値) オプションを選択している場合は、[Replacement value](置換値) オプションを使用できます。 列内のすべての欠損値の置換値として使用する新しい値を入力します。

    このオプションは、Integer、Double、Boolean、Date のいずれかのデータ型を持つ列でのみを使用できることに注意してください。 データ列の場合、置換値を 1/1/0001 午前 12:00 から 100 ナノ秒単位の数として入力することもできます。

  7. 欠損値インジケーター列の生成: 列の値が欠損値のクリーニングの条件を満たしているかどうかを示す出力を出力する場合に、このオプションを選択します。 このオプションは、新しい消去操作を設定し、設計どおりに動作させる場合に特に便利です。

  8. 実験を実行するか、 見つからないデータのクリーンアップ モジュールを選択して [ 選択した実行] をクリックします。

結果

モジュールにより、次の 2 つの出力が返されます。

  • 消去の選択がされていない列も "渡されます"。

  • クリーニング変換: クリーニングに使用されるデータ変換で、ワークスペースに保存し、後で新しいデータに適用することができます。

保存されたクリーニング操作を新しいデータに適用する

データの消去操作を頻繁に繰り返し実行する必要がある場合は、データ消去のレシピを 変換 として保存して、同じデータセットで再利用することをお勧めします。 同じスキーマを持つデータを頻繁に再インポートしてから消去する必要がある場合は特に、消去変換を保存しておくと便利です。

  1. 変換の適用モジュールを実験に追加します。

  2. 消去するデータセットを追加し、データセットを右側の入力ポートに接続します。

  3. Studio (クラシック) の左側のウィンドウで、[ 変換 ] グループを展開します。 保存した変換を見つけ、それを実験にドラッグします。

  4. 保存した変換を Apply Transformation (変換の適用) の左側の入力ポートに接続します。

    保存した変換を適用するときに、変換を適用する列を選択することはできません。 これは、変換が既に定義されていて、元の操作で指定されたデータ型に自動的に適用されるためです。

    ただし、数値列のサブセットに変換を作成する場合、 この変換を列の型が混在するデータセットに適用することができ、エラーが発生することはありません。これは、欠損値が一致する数値列でのみ変更されたからです。

  5. 実験を実行します。

このモジュールを Azure AI Galleryで使用する方法の例を参照してください。

テクニカルノート

ここでは、実装の詳細と、既知の問題とよく寄せられる質問について説明します。

  • 平均値または中央値のオプションを使用する場合、任意の文字列の列を選択すると、エラーが発生します。 データ型が異なる列を処理する必要がある場合は、[欠損データのクリーニング] のインスタンスを 2 つ作成してください。

  • ブール値、整数、DateTime、または TimeSpan データ型の列で、欠損値を平均値で置換する場合は、最初に列が浮動小数点数に変換され、平均が計算されてから、結果が元のデータ型の最も近い値に丸められます。

  • 置換値を入力する場合、その値は選択した列のデータ型と互換性がなければなりません。

  • NaNデータ型が Double の列では、、、およびの値を Inf –Inf 使用できます。

  • MICE メソッドを使用する場合、置換値は、トレーニングされた MICE モデルを使用して予測します。

  • 欠損データのクリーン を使用すると、他の列の種類を 機能 にリセットできます。 データにラベルなどの他の種類の列が含まれている場合は、[ メタデータの編集 ] を使用して列の型を修正します。

クリーニング変換の使用に関する制限事項

失われた データのクリーン に基づいて保存した変換を新しいデータに使用する場合は、次の制限が適用されます。

  • このオプションが元のクリーニング操作で使用されていた場合でも、保存された変換でインジケーターの値を生成することはできません。 新しい変換をテストするときに最も役に立つインジケーター値を検討してください。

  • この変換では、新しいデータセットに基づいて新しい値は計算されません。 つまり、データセット A の [ 欠損データのクリーニング ] を使用し、平均値0.5 を生成した場合、データセット b の実際の値に関係なく、データセット b の欠損値を置き換えるための平均値と同じ値が適用されます。

  • 新しいデータセット内の列のデータ型は、変換が最初に作成された列のデータ型と一致している必要があります。 データ型を暗黙的に変更する列に対して何らかの操作が実行されると、エラーが発生します。

    たとえば、整数データ列 [Col1] の平均を作成し、変換を保存するとします。 ここで、([Col1]/1.5 などの) 式を使用して調整された [Col1] のコピーにクリーンアップ変換を適用します。 結果が整数であることを確認するために、結果を切り上げますが、変換を適用するとエラーが発生します。 ただし、([Col 1] * 10) などの式を使用して値を調整すると、エラーは発生しません。

    このような問題を回避するには、[ メタデータの編集 ] を使用して、データ型を明示的に整数にリセットします。 一般に、 算術演算の適用 モジュールの操作では、数値列が暗黙的にに変更さ double れます。

しきい値の設定と解釈

[ 欠損値の最小比率 ] オプションまたは [ 欠損値の最大比率] オプションを使用してクリーニング操作のしきい値を指定すると、予期しない結果や混乱を招くことがあります。 欠損値の最大値と最小値のオプションがどのように機能するかを説明するために、 自動車価格 のサンプルデータセットからいくつかの例を提供しています。これには、欠損値を含む多数の列が含まれています。

次の表に、そのデータセット内の複数の列の欠損値の数と、データセットで計算された欠損値の比率を示します。 欠損値の比率 (右端の列) は、指定されたしきい値に対してデータセットを評価するときに使用される値です。

最小欠損値の比率 を0.019 に設定し、欠損値の最大比率 を0.020 に設定したとします。 次の値のテーブルを指定すると、いくつかの列がしきい値の条件を満たし、一部の列では満たされません。

  • 列とは、 bore stroke しきい値条件を満たしています。
  • normalized-losses とが compression-ratio しきい値条件を満たしていません。
列名 欠損値の数 欠損値の比率
正規化損失 41 0.2
ボア 4 0.019512195
ひと筆 4 0.019512195
圧縮率 0 0

選択範囲の 一部 の列が指定された条件を満たしていないため、どの列に対してもクリーニング操作は実行されませんでした。 何が起こったかを把握するために、モジュールは2つのインジケーター列 (と) で値 FALSE を返し bore_IsMissing stroke_IsMissing ます。

ただし、 最小欠損値の比率 の場合は既定値の0、 欠損値の最大 比率の場合は1に変更すると、選択したすべての列についてインジケーター列が返され、指定された操作が実行されます。

ヒント

不足値のクリーンアップが想定どおりに動作しているかどうか不明な場合は、[ 欠損値インジケーター列の生成 ] オプションを選択します。

既知の問題

マウスメソッドを使用してデータを消去し、欠損値を含むデータセットを処理すると、次のエラーが表示されることがあります。 "AFx ライブラリライブラリの例外: モデルがトレーニングされていません。 (エラー 1000) "

このエラーは、マウスのメソッドが選択されていて、トレーニングデータセットに欠損値が含まれておらず、テストデータセットがある場合にのみ発生します。

想定される入力

名前 Type 説明
データセット データ テーブル クリーニングするデータセット

モジュールのパラメーター

名前 Range Type Default 説明
クリーニング対象の列 Any ColumnSelection すべて 欠損値のクリーニング操作を行う列を選択します。
欠損値の最小比率 [0.0;1.0] Float 0.0 選択されたすべての列のうち、指定された値を超える値の比率が不足している列のみを消去します。
欠損値の最大比率 [0.0;1.0] Float 1.0 選択したすべての列の中から、欠損値比率が指定値を下回る列のみをクリーニングします。
クリーニング モード List 処理ポリシー カスタムの代入値 欠損値をクリーニングする際に使用するアルゴリズムを選択します。
置換値 Any String "0" 欠損値を置き換える値を入力します。

この値は省略可能です。
すべての欠損値の列 Any ColumnsWithAllValuesMissing 削除 すべてが欠損値の列を出力で保持する必要があるかどうかを示します。
欠損値インジケーター列の生成 Any Boolean false 行がクリーニングされたことを示す列を生成します。
イテレーション数 [1;10] Integer 5 MICE を使用する場合のイテレーション数を指定します。
PCA 予測用のイテレーション数 [1; 50] Integer 10 PCA 予測を使用する場合は、イテレーションの数を指定します。

出力

名前 Type 説明
クリーニング済みデータセット データ テーブル クリーニング済みデータセット
クリーニング変換 ITransform インターフェイス 新しいデータをクリーニングするために 変換の適用 モジュールに渡される変換。

例外

例外 説明
エラー 0002 1 つ以上のパラメーターが解析できなかった、または指定した型から対象のメソッドの種類で必要な型に変換されなかった場合に、例外が発生します。
エラー 0003 1 つ以上の入力データセットが null または空の場合に、例外が発生します。
エラー 0008 パラメーターが範囲内にない場合に、例外が発生します。
エラー 0013 モジュールに渡された学習器に無効な型が含まれている場合に、例外が発生します。
エラー 0018 入力データセットが有効でない場合に、例外が発生します。
エラー 0039 操作が失敗した場合に、例外が発生します。

Studio (クラシック) モジュール固有のエラーの一覧については、「 Machine Learning エラーコード」を参照してください。

API 例外の一覧については、「 Machine Learning REST API のエラーコード」を参照してください。

関連項目

操作性
データ変換
モジュールの一覧 (アルファベット順)