ドリフト評価を設定すると、時間の経過とともにモデルがどの程度結果を予測するかを判断するのに役立つメトリクスを生成することができます。
ドリフトの評価結果は、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
指定されたデータ・タイプによって、 min
、 max
、 mean
などのキーを使用して、より多くの統計プロパティーを記述するかどうかが決まります。 例えば、 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
キーは、汎用固有 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 |
以下のセクションでは、各制約タイプの指定方法の例を示します。
- Categorical distribution constraint (カテゴリー分布制約)
- 数値範囲制約
- 数値分布制約
- Categorical-カテゴリー分布制約 (Categorical-categorical distribution constraint)
- Categorical-numeric range constraint (カテゴリー数値範囲制約)
- Categorical-numeric 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
列の最小値と最大値を指定します。 ペイロードデータの中に、範囲とあらかじめ定義されたバッファに収まるLoanAmount
とCheckingStatus
列の値を含まないレコードが見つかった場合、そのレコードはドリフトとして識別される。
カテゴリー数値分布の制約
{
"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
属性で指定された値が含まれています。 ペイロードデータの中に、正規分布に収まるLoanAmount
とCheckingStatus
列の値を含まないレコードが見つかった場合、そのレコードはドリフトとして識別される。
ドリフトが検出された後にドリフトを軽減するには、問題を修正した新しいバージョンのモデルを構築する必要があります。 そのための良い足掛かりとなるのが、ドリフトの理由として強調表示されているデータ・ポイントです。 ドリフトのあるトランザクションに手動でラベルを付け、それらを使用してモデルをリトレーニングした後、予測モデルに新しいデータを導入します。
もっと見る
親トピック: ドリフト・メトリック