データの一貫性評価指標の低下

最終更新: 2025年2月14日
データの一貫性評価指標の低下

データの一貫性メトリックの低下は、実行時トランザクションをトレーニングデータのトランザクションパターンと比較し、不整合を特定します。

メトリックの詳細

データの一貫性の低下は、時間の経過とともにモデルが結果を予測する精度を評価するドリフト評価指標です。

有効範囲 (Scope)

データの一貫性メトリックの低下は、機械学習モデルのみを評価します。

  • AI 資産の種類:機械学習モデル
  • 機械学習の問題タイプ
    • 2 項分類
    • マルチクラス分類

スコアと価値

データの一貫性メトリックスコアの低下は、トレーニングデータのパターンに違反してトランザクションに一貫性が欠けているかどうかを示します。

値の範囲 : 0.0-1.0

評価プロセス

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

データの不整合を特定するために、 ドリフト検出の設定時constraints.json ファイルを作成して入力データが従うべきルールを指定すると、スキーマが生成されます。 このスキーマは、指定された制約に適合しない異常値を特定することで、データのドリフトを評価するために使用されます。 スキーマは、次の例に示すように、トレーニングデータを記述する columnsconstraints の配列を含む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
                }
            }
        }

namedtypecountsparseskip_learning の各キーには、列を記述するための値が指定されています。

namedtype キーは、列のラベルとデータタイプを記述します。 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 キーは、列の行数を指定します。 ブール値は、列の sparse および skip_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 キーは、一意に識別可能な識別子(UUID)で制約を識別します。 kind キーは、制約が single_column 制約であるか、 two-column 制約であるかを指定します。

columns キーは、カラム名の配列を指定します。 single_column 制約に kind キーが指定されている場合、配列には、説明したいカラムに関連する値が含まれています。 two-column 制約が kind キーとともに指定される場合、配列には関連データを含むカラムと相関する値が含まれます。

content キーは、データの統計的特徴を説明する属性を指定します。 name キーで指定された制約タイプによって、 content キーで指定される属性が決定されます。次の表に示されているように:

属性 制約
度数分布 categorical_distribution_constraint
範囲 numeric_range_constraint, catnum_range_constraint
分布 numeric_distribution_constraint, catnum_distribution_constraint
まれな組み合わせ catcat_distribution_constraint
ソースカラム catcat_distribution_constraint, catnum_range_constraint, catnum_distribution_constraint
target_column 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"
                        ]
                    }
                ]
            }
        }

CheckingStatusCreditHistory の列では、 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
                    }
                }
            }
        }

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

次のステップ

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

注: パフォーマンスの改善や検証のために行うアクションは規定されておらず、お客様のモデルの使用事例や達成したい目標によって異なります。 各アプローチの有効性は、実装や要件によって異なる場合があります。

親トピック: 評価指標