次の方法で共有


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

重要

Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。

2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。

ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。

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

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

注意

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

類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。

モジュールの概要

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

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

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

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

ヒント

機械学習初心者の場合は、 この記事では、欠損値を処理するためのメソッドをそれぞれ使用する理由について説明します。

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

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

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 のデータ型を持つ列にのみ適用されます。 詳細については、「 テクニカルノート 」を参照してください。

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

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

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

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

    • Probabilistic 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 つ作成してください。

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

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

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

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

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

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

(見つからないデータのクリーンアップに基 づいて) 保存された変換を新しいデータに使用する場合は、次の制限が適用されます。

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

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

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

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

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

しきい値の設定と解釈

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

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

[最小欠損値比率] を 0.019 に設定し、[最大欠損値比率] を 0.020 に設定するとします。 次の値の表を考えると、一部の列はしきい値の条件を満たしますが、一部の列では満たされない場合があります。

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

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

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

ヒント

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

既知の問題

データをクリーンアップし、欠損値を含むデータセットを処理するために、次のエラーが発生する可能性があります:"AFx ライブラリ ライブラリの例外: モデルはトレーニングされていない。 ( エラー 1000 )"

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

想定される入力

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

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

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

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

出力

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

例外

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

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

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

こちらもご覧ください

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