モデル評価コンポーネントは、グラウンド トゥルースとバッチ予測の結果を入力として受け取り、評価指標を生成します。グラウンド トゥルースのデータは、人間が判断した「正しくラベル付けされた」データであり、通常はモデルのトレーニングに使用したテスト データセットのターゲット フィールドとして提供されます。詳細については、Vertex AI でのモデル評価をご覧ください。
Vertex AI には、次のモデル評価コンポーネントが用意されています。
モデルタイプのサポート
次の表に、各モデル評価コンポーネントでサポートされているモデルタイプを示します。
| モデル評価コンポーネント | サポートされているモデルタイプ | 
|---|---|
ModelEvaluationClassificationOp | 
    
       | 
  
ModelEvaluationRegressionOp | 
    
       | 
  
ModelEvaluationForecastingOp | 
    
       | 
  
ターゲット フィールドを削除する
一部のモデルタイプの場合、BatchPredictionJob コンポーネントでは、データセットからターゲット列(グラウンド トゥルース)を除外する必要があります。
表形式のデータセットのスライスを構成して形式を設定する
スライスは、指定された特性を持つ表形式データのサブセットです。スライスされた指標では、AutoML の表形式モデルとカスタム トレーニング分類モデルに対して、より詳細な評価指標が用意されています。
たとえば、ペットが 1 週間以内に引き取られるかどうかを予測するようにモデルをトレーニングした、ペットの引き取りデータセットについて考えてみましょう。データセット全体の指標を確認することは有益ですが、ペットの種類と年齢に関連する指標について考えてみましょう。つまり、関心があるのは以下に示すデータセットのサブセットです。
| 特徴 | 値 | 
|---|---|
age (in years) | 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 | 
species | 
"dog", "cat", "rabbit" | 
この詳細な分析は、モデルで最もエラーが生じやすい場所を特定する、または重要なデータ サブセットでモデルが適切に機能することを確認する際に有効です。
スライスを構成する
スライスを構成するには、次の構成で JSON ファイルを作成します。
{
  "FEATURE": {
    "KIND": {
      CONFIG
    }
  }
}
ここで
FEATURE は、スライスを作成する特徴です。例:
ageKIND は、次のいずれかです。
valuevalueは、特徴の 1 つの値に単一のスライスを作成します。キーがfloat_valueまたはstring_valueの Key-Value ペアとして CONFIG を指定します。例:"float_value": 1.0。次の構成例では、
ageが1のデータを含む単一のスライスを作成します。{ "age": { "value": { "float_value": 1.0 } } }rangerangeは、指定された範囲内のデータを含む単一のスライスを作成します。キーがlowとhighの 2 つの Key-Value ペアとして CONFIG を指定します。次の構成例では、
ageが1~3の任意の値であるデータを含む単一のスライスを作成します。{ "age": { "range": { "low": 1, "high": 3 } } }all_valuesall_valuesは、設定可能な特徴のラベルごとに個別のスライスを作成します。CONFIG を"value": trueとして指定します。次の構成例では、3 つのスライス(
"dog"、"cat"、"rabbit"に 1 つずつ)を作成します。{ "species": { "all_values": { "value": true } } }
複数の特徴を使用して 1 つ以上のスライスを作成することもできます。
次の構成では、age が 1~3 の間の値、species が "dog" であるデータを含む単一のスライスを作成します。
{
  "age": {
    "range": {
      "low": 1,
      "high": 3
    }
  },
  "species": {
    "value": {
      "string_value": "dog"
    }
  }
}
次の構成では、複数のスライス(データセット内の一意の種類ごとに 1 つ)を作成します。ここで、age は 1 です。
{
  "species": {
    "all_values": {
      "value": true
    }
  },
  "age": {
    "value": {
      "float_value": 1.0
    }
  }
}
生成されたスライスには、サンプル データセットの次のデータが含まれます。
スライス 1:
age:1とspecies:"dog"スライス 2:
age:1とspecies:"cat"スライス 3:
age:1とspecies:"rabbit"
スライスの形式を設定する
ModelEvaluationClassificationOp コンポーネントのスライスの形式を設定するには、次のようにします。
slicing_specを作成します。次に例を示します。from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice import SliceSpec from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice.SliceSpec import SliceConfig slicing_spec = SliceSpec(configs={ 'feature_a': SliceConfig(SliceSpec.Value(string_value='label_a') ) })スライスの構成を保存するリストを作成します。次に例を示します。
slicing_specs = []
各
slicing_specを JSON または辞書として形式を設定します。次に例を示します。slicing_spec_json = json_format.MessageToJson(slicing_spec) slicing_spec_dict = json_format.MessageToDict(slicing_spec)
各
slicing_specを組み合わせてリストにします。次に例を示します。slicing_specs.append(slicing_spec_json)
slicing_specsをパラメータとしてModelEvaluationClassificationOpコンポーネントに渡します。次に例を示します。ModelEvaluationClassificationOp(slicing_specs=slicing_specs)
公平性指標のスライスを構成して形式を設定する
モデルの公平性を評価するには、次のコンポーネントを使用します。
DetectDataBiasOp: コンポーネントに渡したスライスのデータバイアス指標を返します。DetectModelBiasOp: コンポーネントに渡したスライスのモデルバイアス指標を返します。
DetectDataBiasOp コンポーネントと DetectModelBiasOp コンポーネントのスライスの形式を設定するには、次のようにします。
BiasConfigを作成します。次に例を示します。from google.cloud.aiplatform_v1.types.ModelEvaluation import BiasConfig from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice import SliceSpec from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice.SliceSpec import SliceConfig bias_config = BiasConfig(bias_slices=SliceSpec(configs={ 'feature_a': SliceConfig(SliceSpec.Value(string_value='label_a') ) }))バイアス構成を保存するリストを作成します。次に例を示します。
bias_configs = []
各
bias_configを JSON または辞書として形式を設定します。次に例を示します。bias_config_json = json_format.MessageToJson(bias_config) bias_config_dict = json_format.MessageToDict(bias_config)
各
bias_configを組み合わせてリストにします。次に例を示します。bias_configs.append(bias_config_json)
bias_configsをパラメータとしてDetectDataBiasOpコンポーネントまたはDetectModelBiasOpコンポーネントに渡します。次に例を示します。DetectDataBiasOp(bias_configs=bias_configs) DetectModelBiasOp(bias_configs=bias_configs)
必須入力パラメータ
モデル評価コンポーネントに必要な入力パラメータは、評価するモデルのタイプによって異なります。
AutoML モデル
AutoML モデルをトレーニングする場合、Vertex AI はデフォルトのスキーマを使用します。モデル評価コンポーネントの一部の入力パラメータは、デフォルト以外のスキーマを使用してモデルをトレーニングした場合にのみ必要です。
スキーマ ファイルは、Cloud Storage の gs://google-cloud-aiplatform/schema/modelevaluation/ で表示、ダウンロードできます。
次のタブでは、バッチ予測の出力ファイルと各表形式モデルタイプのパラメータに必要な入力パラメータの例を示します。
分類
デフォルト スキーマには次のフィールドがあります。
scores: 配列classes: 配列
            male のターゲット列を持つバッチ予測の出力ファイルの例を次に示します。
{
  "instance": {
    "male": "1",
    "age": "49",
    "heartRate": "67",
    "education": "medium_high",
    "totChol": "282",
    "diaBP": "79",
    "BPMeds": "0",
    "currentSmoker": "current_high",
    "cigsPerDay": "25",
    "prevalentStroke": "stroke_0",
    "prevalentHyp": "hyp_0",
    "TenYearCHD": "FALSE",
    "diabetes": "0",
    "sysBP": "134",
    "BMI": "26.87",
    "glucose": "78"
    },
  "prediction": {
      "scores": [0.3666940927505493, 0.6333059072494507],
      "classes": ["0", "1"]
    }
}
          次の表に、表形式モデルを使用した ModelEvaluationClassificationOp コンポーネントに必要なパラメータを示します。
| 評価コンポーネント パラメータ | 必須 | 
|---|---|
target_field_name | 
              はい | 
prediction_label_column | 
              デフォルトのスキーマでは不要です。 デフォルト以外のスキーマには prediction.classes を使用します。 | 
            
prediction_score_column | 
              デフォルトのスキーマでは不要です。 デフォルト以外のスキーマには prediction.scores を使用します。 | 
            
evaluation_class_labels | 
              デフォルトのスキーマでは不要です。 デフォルト以外のスキーマには ["0","1"] を使用します。 | 
            
回帰
デフォルト スキーマには次のフィールドがあります。
value: 浮動小数点数lower_bound: 浮動小数点数upper_bound: 浮動小数点数
            age のターゲット列を持つバッチ予測の出力ファイルの例を次に示します。
{
  "instance": {
    "BPMeds": "0",
    "diabetes": "0",
    "diaBP": "65",
    "cigsPerDay": "45",
    "prevalentHyp": "hyp_0",
    "age": "46",
    "male": "1",
    "sysBP": "112.5",
    "glucose": "78",
    "BMI": "27.48",
    "TenYearCHD": "FALSE",
    "totChol": "209",
    "education": "high",
    "prevalentStroke": "stroke_0",
    "heartRate": "75",
    "currentSmoker": "current_high"
  },
  "prediction": {
    "value": 44.96103286743164,
    "lower_bound": 44.61349868774414,
    "upper_bound": 44.590206146240234
  }
}
          次の表に、表形式モデルを使用した ModelEvaluationRegressionOp コンポーネントに必要なパラメータを示します。
| 評価コンポーネント パラメータ | 必須 | 
|---|---|
target_field_name | 
              はい | 
prediction_label_column | 
              回帰モデルでは不要です。 | 
prediction_score_column | 
              デフォルトのスキーマでは不要です。 デフォルト以外のスキーマには prediction.value を使用します。 | 
            
evaluation_class_labels | 
              回帰モデルでは不要です。 | 
予測
表形式の予測モデルの場合、BatchPredictionJob コンポーネントでは、データセットからターゲット列(正解)を除外する必要があります。
デフォルト スキーマには次のフィールドがあります。
id: 文字列displayNames: 文字列type: 列挙型timeSegmentStart: 文字列timeSegmentEnd: 文字列confidence: 浮動小数点数
            sale_dollars をターゲット列とする CSV ファイルの例を次に示します。
date,store_name,city,zip_code,county,sale_dollars
2020-03-17,Thriftway,,,,774.08999999999992
2020-03-10,Thriftway,,,,1160.67
2020-03-03,Thriftway,,,,2247.24
2020-06-08,New Star / Fort Dodge,,,,753.98
2020-06-01,New Star / Fort Dodge,,,,967.73
2020-01-10,Casey's General Store #1280 / Fort Dodge,,,,1040.92
2020-10-30,KUM & GO #76 / ADAIR,Adair,50002,ADAIR,1387.02
          
            TargetFieldDataRemoverOp コンポーネントは、ファイルを BatchPredictionJob コンポーネントに送信する前にターゲット列を削除します。
date,store_name,city,zip_code,county
2020-03-17,Thriftway,nan,nan,nan
2020-03-10,Thriftway,nan,nan,nan
2020-03-03,Thriftway,nan,nan,nan
2020-06-08,New Star / Fort Dodge,nan,nan,nan
2020-06-01,New Star / Fort Dodge,nan,nan,nan
2020-01-10,Casey's General Store #1280 / Fort Dodge,nan,nan,nan
2020-10-30,KUM & GO #76 / ADAIR,Adair,50002.0,ADAIR
          
            sale_dollars のターゲット列を持たないバッチ予測の出力ファイルの例を次に示します。
{
  "instance": {
    "content": "gs://kbn-us-central1-test/datasets/text/happy_11556.txt",
    "mimeType":"text/plain"
  },
  "prediction": {
    "ids":    ["7903916851837534208","3292230833410146304","986387824196452352","2139309328803299328","5598073842623840256","6750995347230687232","4559431178561519616"],
    "displayNames": ["affection","bonding","achievement","exercise","nature","enjoy_the_moment","leisure"],
    "confidences": [0.99483216,0.005162797,4.1117933E-6,3.9997E-7,2.4624453E-7,1.9969502E-7,1.16997434E-7]
  }
}
          次の表に、表形式モデルを使用した ModelEvaluationForecastingOp コンポーネントに必要なパラメータを示します。
| 評価コンポーネント パラメータ | 必須 | 
|---|---|
target_field_name | 
              はい | 
prediction_label_column | 
              予測モデルには必要ありません。 | 
prediction_score_column | 
              デフォルトのスキーマでは不要です。 デフォルト以外のスキーマには "prediction.value" を使用します。 | 
            
evaluation_class_labels | 
              予測モデルには必要ありません。 | 
ground_truth_gcs_source | 
              はい: ターゲット列を持つ元のデータセットへの Cloud Storage リンク。 | 
ground_truth_format | 
              いいえ: 元のデータセットの形式。例: "jsonl"、"csv"、"bigquery"。 | 
            
カスタム トレーニング済みモデル
カスタム トレーニング済みモデルの場合、BatchPredictionJob コンポーネントでは、ターゲット列(グラウンド トゥルース)をデータセットから除外する必要があります。TargetFieldDataRemoverOp コンポーネントを使用すると、ワークフローを効率化できます。
次の例は、カスタム トレーニング済み表形式分類モデルでのバッチ予測の出力ファイルと必要な入力パラメータを示しています。
分類
一般的なスキーマには次のフィールドがあります。
instance: モデル トレーニング データセットの列と同じ順序の入力データの配列。prediction: モデル トレーニング データセットの列と同じ順序の入力データの配列。
            species をターゲット列とする CSV データセットの例を次に示します。
petal_length,petal_width,sepal_length,sepal_width,species
6.4,2.8,5.6,2.2,2
5.0,2.3,3.3,1.0,1
4.9,2.5,4.5,1.7,2
4.9,3.1,1.5,0.1,0
          
            TargetFieldDataRemoverOp コンポーネントは、ファイルをバッチ予測コンポーネントに送信する前に、ターゲット列を削除します。
petal_length,petal_width,sepal_length,sepal_width
6.4,2.8,5.6,2.2
5.0,2.3,3.3,1.0
4.9,2.5,4.5,1.7
4.9,3.1,1.5,0.1
          
            species のターゲット列を持たないバッチ予測の出力ファイルの例を次に示します。
{
  "instance": [5.6, 2.5, 3.9, 1.1],
  "prediction": [0.0005816521588712931, 0.9989032745361328, 0.0005150380893610418]
}
{
  "instance": [5.0, 3.6, 1.4, 0.2],
  "prediction": [0.999255359172821, 0.000527293945197016, 0.00021737271163146943]
}
{
  "instance": [6.0, 2.9, 4.5, 1.5],
  "prediction": [0.00025063654175028205, 0.9994204044342041, 0.00032893591560423374]
}
          次の表に、カスタム トレーニング済みモデルを使用する ModelEvaluationClassificationOp コンポーネントに必要なパラメータを示します。
| 評価コンポーネント パラメータ | 必須 | 
|---|---|
target_field_name | 
              はい | 
prediction_label_column | 
              空にする必要があります。この列はカスタム トレーニング モデルには存在しません。 | 
prediction_score_column | 
              デフォルトのスキーマでは必須ではありません。JSONL、CSV、BIGQUERY のいずれかの形式に対して自動的に設定されます。 | 
            
evaluation_class_labels | 
              はい。出力予測配列と同じ長さにする必要があります。 | 
ground_truth_gcs_source | 
              はい: ターゲット列を持つ元のデータセットへの Cloud Storage リンク。 | 
ground_truth_format | 
              いいえ: 元のデータセットの形式。例: "jsonl"、"csv"、"bigquery"。 | 
            
Vertex AI で生成されたバッチ予測を使用しないモデル評価
Vertex AI で生成しなかったバッチ予測で、モデル評価パイプライン コンポーネントを使用できます。ただし、モデル評価パイプライン コンポーネントの入力は、次の接頭辞に一致するファイルを含むバッチ予測ディレクトリであることが必要です。
prediction.results-explanation.results-predictions_
API リファレンス
コンポーネントのリファレンスについては、モデル評価コンポーネントのGoogle Cloud SDK リファレンス ページをご覧ください。
モデル評価のコンポーネントの使用例については、評価を作成するに記載されているノートブックをご覧ください。
変更履歴とリリースノート
Google Cloud パイプライン コンポーネント SDK の変更履歴と変更点については、Google Cloud パイプライン コンポーネント SDK リリースノートをご覧ください。