0 / 0
資料の 英語版 に戻る
ドリフト指標
最終更新: 2024年10月25日
ドリフト指標

ドリフト評価を設定すると、時間の経過とともにモデルがどの程度結果を予測するかを判断するのに役立つメトリクスを生成することができます。

ドリフトの評価結果は、Insightsダッシュボードで確認することができます。 結果を表示するには、モデル・デプロイメント・タイルを選択し、 「ドリフト」 評価セクションの矢印 ナビゲーション矢印 をクリックして、最後の評価からのドリフト・メトリックの要約を表示します。 詳しくは、 ドリフト結果の確認を参照してください。

ドリフト・メトリクスは、モデルの挙動を分析し、独自のモデルを構築して、モデルがデータ・ポイントに対して正確な予測を生成するかどうかを予測することによって計算されます。 このドリフト検出モデルは、ペイロード・データを処理して、モデルが不正確な予測を行ったレコードの数を識別し、モデルの予測精度を生成します。

ドリフトは、構造化データに対してのみサポートされ、 Python 関数はサポートされません。

サポートされたドリフト指標

ドリフト評価では、以下のドリフト・メトリクスがサポートされている:

正解率の低下

ドリフト評価は、トレーニングデータと比較した場合の実行時のモデルの精度低下を推定します。 モデルがトレーニング・データ内で正しく評価されなかったトランザクションに類似したトランザクションが増加すると、モデルの正確度は低下します。

処理の流れ

ドリフト・モニターの動作は、実動前環境と実動環境で異なります。

実稼働前環境では、ラベル付きテスト・データをアップロードすると、フィードバック・テーブルとペイロード・テーブルにデータが追加されます。 ラベル付きデータは、ペイロード・テーブルにアノテーションとして追加されます。 正確度は、ペイロード・テーブルのラベル付きデータ列と予測列を使用して計算されます。

本番環境では、モデルのトレーニングとテストに使用されたデータを見て、ドリフト検出モデルを作成します。 例えば、テスト・データでモデルの正確度が 90% であった場合、10% のテスト・データについては誤った予測を示していることになります。 バイナリ分類モデルが構築され、データポイントを受け入れ、そのデータポイントが、モデルが間違って(10%)予測したデータと似ているか、あるいは正確に(90%)予測したデータと似ているかを予測する。

ドリフト検出モデルが作成された後、実行時にこのモデルはクライアントモデルが受け取るすべてのデータを使用してスコアリングされる。 例えば、クライアントモデルが過去3時間に1000レコードを受信した場合、ドリフト検出モデルは同じ1000データポイントに対して実行される。 それらのレコードのうち、トレーニング時にモデルの予測が誤っていた 10% のレコードに類似しているレコード件数を計算します。 200 件のレコードが 10% に類似していれば、モデルの正確度は 80% になる可能性があることになります。 トレーニング時のモデルの正確度は 90% であったので、モデルの正確度には 10% のドリフトがあることになります。

ドリフトが検出された後にドリフトを軽減するには、問題を修正した新しいバージョンのモデルを構築する必要があります。 そのための良い足掛かりとなるのが、ドリフトの理由として強調表示されているデータ・ポイントです。 ドリフトのあるトランザクションに手動でラベルを付け、それらを使用してモデルをリトレーニングした後、予測モデルに新しいデータを導入します。

計算

正解率低下メトリックは、構造化された 2 項分類モデルおよび複数クラス分類モデルについてのみ計算されます。 各取引は、モデルの予測が正確かどうかを推定するために分析される。 モデルの予測が不正確な場合、トランザクションはドリフトとしてマークされます。 その後、推定精度は、分析されたトランザクションの総数に対するドリフトのないトランザクションの割合として計算されます。 「基本正確度」は、テスト・データのモデルの正確度です。 精度のドリフトの程度は、基準精度と推定精度の差として計算される。 さらに、ドリフトしたトランザクションをすべて計算し、精度のドリフトに対する各特徴の寄与の類似性に基づいてトランザクションをグループ化する。 各クラスタにおいて、精度のドリフトに寄与した重要な特徴量を推定し、その特徴量の影響が大きい、やや大きい、小さいに分類する。

データ整合性の低下

処理の流れ

各トランザクションは、実行時のトランザクションを訓練データのトランザクションのパターンと比較することで、データの不整合を分析する。 トランザクションが 1 つ以上のトレーニング・データ・パターンに違反している場合、そのトランザクションは不整合として識別されます。 データ一貫性の低下を計算するには、トランザクションの総数を、一貫性がないと特定されたトランザクションの数で割る。 例えば、100 個のトランザクションのセットから 10 個のトランザクションが不整合として識別された場合、データ整合性の低下は 10% になります。

計算

ドリフト検出を設定する際、入力データが従うべきルールを指定するconstraints.jsonファイルを作成することで、スキーマが生成される。 スキーマは、指定された制約に当てはまらない異常値を特定することで、ドリフトのためにデータを評価するために使用される。 スキーマは、以下の例に示すように、トレーニング・データを記述する columns 配列および constraints 配列を使用して JSON オブジェクトとして指定されます。

{
      "columns": [
        {
            "name": "CheckingStatus",
            "dtype": "categorical",
            "count": 5000,
            "sparse": false,
            "skip_learning": false
        },
      "constraints": [
        {
            "name": "categorical_distribution_constraint",
            "id": "f0476d40-d7df-4095-9be5-82564511432c",
            "kind": "single_column",
            "columns": [
                "CheckingStatus"
            ],
            "content": {
                "frequency_distribution": {
                    "0_to_200": 1304,
                    "greater_200": 305,
                    "less_0": 1398,
                    "no_checking": 1993
                }
            }
        }

列を記述するために、name,dtype,count,sparse,skip_learningキーに値が指定される。

name キーと dtype キーは、列のラベルとデータ・タイプを記述します。 dtype キーで指定される以下の値は、データ・タイプを記述します。

  • categorical
  • numeric_discrete
  • numeric_continuous

指定されたデータ・タイプによって、 minmaxmeanなどのキーを使用して、より多くの統計プロパティーを記述するかどうかが決まります。 例えば、 numeric_discrete または numeric_continuous データ・タイプが指定されている場合、以下の例に示すようにプロパティーが記述されます。

{
            "name": "LoanDuration",
            "dtype": "numeric_discrete",
            "count": 5000,
            "sparse": false,
            "skip_learning": false,
            "min": 4,
            "max": 53,
            "mean": 21.28820697954272,
            "std": 10.999096037050032,
            "percentiles": [
                13.0,
                21.0,
                29.0
            ],
            "count_actual": 4986
        }

count キーは、列の行数を指定します。 カラムのsparseskip_learningキーを記述するためにブール値が指定される。 sparse キーは、列が疎かどうかを指定し、 skip_learning キーは、列がスキーマに記述されているいずれかの規則の学習をスキップするかどうかを指定します。 25thパーセンタイルと75thパーセンタイルが同じ値であれば、列は疎である。

制約

name キーは、制約タイプを指定します。 制約タイプを記述するために、以下の値が指定されます。

  • categorical_distribution_constraint
  • numeric_range_constraint
  • numeric_distribution_constraint
  • catnum_range_constraint
  • catnum_distribution_constraint
  • catcat_distribution_constraint

id キーは、汎用固有 ID (UUID) を使用して制約を識別します。 kind キーは、制約が single_column 制約であるか two-column 制約であるかを指定します。

columns キーは、列名の配列を指定します。 kindを持つsingle_column制約が指定された場合、配列には記述したい列に関連する値が含まれます。 kindを持つtwo-column制約が指定されると、配列には関連するデータを含む列に関連する値が含まれます。

content キーは、データの統計的特性を記述する属性を指定します。 以下の表に示すように、 name キーで指定された制約タイプによって、 content キーで指定される属性が決まります。

属性 制約
度数分布 categorical_distribution_constraint
範囲 numeric_range_constraint、catnum_range_constraint
分布 numeric_distribution_constraint、catnum_distribution_constraint
rare_コンビネーション catcat_distribution_constraint
ソース列 catcat_distribution_constraint、catnum_range_constraint、catnum_distribution_constraint
ターゲット列 catcat_distribution_constraint、catnum_range_constraint、catnum_distribution_constraint

以下のセクションでは、各制約タイプの指定方法の例を示します。

カテゴリー分布制約

        {
            "name": "categorical_distribution_constraint",
            "id": "f0476d40-d7df-4095-9be5-82564511432c",
            "kind": "single_column",
            "columns": [
                "CheckingStatus"
            ],
            "content": {
                "frequency_distribution": {
                    "0_to_200": 1304,
                    "greater_200": 305,
                    "less_0": 1398,
                    "no_checking": 1993
                }
            }
        }

トレーニング・データの CheckingStatus 列には、 frequency_distribution 属性で指定された 4 つの値が含まれています。 frequency_distribution 属性は、 0_to_200などのカテゴリーの値を持つ度数を指定します。 ペイロードデータの中に、frequency_distribution属性値と異なる値を指定するレコードが見つかった場合、そのレコードはドリフトとして識別される。

数値範囲制約

   {
            "name": "numeric_range_constraint",
            "id": "79f3a1f5-30a1-4c7f-91a0-1613013ee802",
            "kind": "single_column",
            "columns": [
                "LoanAmount"
            ],
            "content": {
                "ranges": [
                    {
                        "min": 250,
                        "max": 11676,
                        "count": 5000
                    }
                ]
            }
        }

LoanAmount 列には、トレーニング・データの範囲を設定するために ranges 属性で指定された最小値と最大値が含まれます。 ranges 属性は、列の高密度領域を指定します。 トレーニング・データでめったに発生しない範囲は含まれません。 ペイロードデータの中に、範囲とあらかじめ定義されたバッファに収まらないレコードが見つかった場合、そのレコードはドリフトとして識別される。

数値分布制約

{
            "name": "numeric_distribution_constraint",
            "id": "3a97494b-0cd7-483e-a1c6-adb7755c1cb0",
            "kind": "single_column",
            "columns": [
                "LoanAmount"
            ],
            "content": {
                "distribution": {
                        "name": "norm",
                        "parameters": {
                            "loc": 3799.62,
                            "scale": 1920.0640064678398
                        },
                        "p-value": 0.22617155797563282
                }
            }
        }

LoanAmount 列には、トレーニング・データの正規分布を設定するために distribution 属性で指定された値が含まれます。 ペイロードデータの中に正規分布に当てはまらないレコードが見つかった場合、そのレコードはドリフトとして識別される。 適合する分布は、一様分布、指数分布、または正規分布である。 これらの分布に当てはまるレコードが見つからない場合、この制約は学習されない。

カテゴリー・カテゴリー分布の制約

    {
            "name": "catcat_distribution_constraint",
            "id": "99468600-1924-44d9-852c-1727c9c414ee",
            "kind": "two_column",
            "columns": [
                "CheckingStatus",
                "CreditHistory"
            ],
            "content": {
                "source_column": "CheckingStatus",
                "target_column": "CreditHistory",
                "rare_combinations": [
                    {
                        "source_value": "no_checking",
                        "target_values": [
                            "no_credits"
                        ]
                    }
                ]
            }
        }

CheckingStatus 列および CreditHistory 列の場合、 rare_combinations 属性は、トレーニング・データにほとんど出現しない値の組み合わせを指定します。 ペイロードデータにその組み合わせを含むレコードが見つかった場合、そのレコードはドリフトとして識別される。

カテゴリー数値範囲の制約

        {
            "name": "catnum_range_constraint",
            "id": "f252033c-1635-4974-8976-3f7904d0c37d",
            "kind": "two_column",
            "columns": [
                "CheckingStatus",
                "LoanAmount"
            ],
            "content": {
                "source_column": "CheckingStatus",
                "target_column": "LoanAmount",
                "ranges": {
                    "no_checking": [
                        {
                            "min": 250,
                            "max": 11676,
                            "count": 1993
                        }
                    ],
                    "less_0": [
                        {
                            "min": 250,
                            "max": 7200,
                            "count": 1398
                        }
                    ],
                    "0_to_200": [
                        {
                            "min": 250,
                            "max": 9076,
                            "count": 1304
                        }
                    ],
                    "greater_200": [
                        {
                            "min": 250,
                            "max": 9772,
                            "count": 305
                        }
                    ]
                }
            }
        }

ranges 属性は、トレーニング・データの範囲を設定する CheckingStatus 列と LoanAmount 列の最小値と最大値を指定します。 ペイロードデータの中に、範囲とあらかじめ定義されたバッファに収まるLoanAmountCheckingStatus列の値を含まないレコードが見つかった場合、そのレコードはドリフトとして識別される。

カテゴリー数値分布の制約

        {
            "name": "catnum_distribution_constraint",
            "id": "3a97494b-0cd7-483e-a1c6-adb7755c1cb0",
            "kind": "two_column",
            "columns": [
                "CheckingStatus",
                "LoanAmount"
            ],
            "content": {
                "source_column": "CheckingStatus",
                "target_column": "LoanAmount",
                "distribution": {
                    "greater_200": {
                        "name": "norm",
                        "parameters": {
                            "loc": 3799.62,
                            "scale": 1920.0640064678398
                        },
                        "p-value": 0.22617155797563282
                    }
                }
            }
        }

LoanAmount 列と CheckingStatus 列には、トレーニング・データの正規分布を設定するために distribution 属性で指定された値が含まれています。 ペイロードデータの中に、正規分布に収まるLoanAmountCheckingStatus列の値を含まないレコードが見つかった場合、そのレコードはドリフトとして識別される。

注:

ドリフトが検出された後にドリフトを軽減するには、問題を修正した新しいバージョンのモデルを構築する必要があります。 そのための良い足掛かりとなるのが、ドリフトの理由として強調表示されているデータ・ポイントです。 ドリフトのあるトランザクションに手動でラベルを付け、それらを使用してモデルをリトレーニングした後、予測モデルに新しいデータを導入します。

もっと見る

モデルの洞察の確認

親トピック: ドリフト・メトリック

生成 AI の検索と回答
これらの回答は、製品資料の内容に基づいて、 watsonx.ai のラージ言語モデルによって生成されます。 詳細