モデル評価のコンポーネント

モデル評価コンポーネントは、グラウンド トゥルースとバッチ予測の結果を入力として受け取り、評価指標を生成します。グラウンド トゥルースのデータは、人間が判断した「正しくラベル付けされた」データであり、通常はモデルのトレーニングに使用したテスト データセットのターゲット フィールドとして提供されます。詳細については、Vertex AI でのモデル評価をご覧ください。

Vertex AI には、次のモデル評価コンポーネントが用意されています。

モデルタイプのサポート

次の表に、各モデル評価コンポーネントでサポートされているモデルタイプを示します。

モデル評価コンポーネント サポートされているモデルタイプ
ModelEvaluationClassificationOp
  • AutoML 表形式、画像、テキスト、動画
  • カスタム表形式
  • ModelEvaluationRegressionOp
  • AutoML 表形式
  • カスタム表形式
  • ModelEvaluationForecastingOp
  • AutoML 表形式
  • ターゲット フィールドを削除する

    一部のモデルタイプの場合、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 は、スライスを作成する特徴です。例: age

    • KIND は、次のいずれかです。

      • value

        value は、特徴の 1 つの値に単一のスライスを作成します。キーが float_value または string_value の Key-Value ペアとして CONFIG を指定します。例: "float_value": 1.0

        次の構成例では、age1 のデータを含む単一のスライスを作成します。

        {
          "age": {
            "value": {
              "float_value": 1.0
            }
          }
        }
      • range

        range は、指定された範囲内のデータを含む単一のスライスを作成します。キーが lowhigh の 2 つの Key-Value ペアとして CONFIG を指定します。

        次の構成例では、age13 の任意の値であるデータを含む単一のスライスを作成します。

        {
          "age": {
            "range": {
              "low": 1,
              "high": 3
            }
          }
        }
      • all_values

        all_values は、設定可能な特徴のラベルごとに個別のスライスを作成します。CONFIG"value": true として指定します。

        次の構成例では、3 つのスライス("dog""cat""rabbit" に 1 つずつ)を作成します。

        {
          "species": {
            "all_values": {
              "value": true
            }
          }
        }

    複数の特徴を使用して 1 つ以上のスライスを作成することもできます。

    次の構成では、age13 の間の値、species"dog" であるデータを含む単一のスライスを作成します。

    {
      "age": {
        "range": {
          "low": 1,
          "high": 3
        }
      },
      "species": {
        "value": {
          "string_value": "dog"
        }
      }
    }
    

    次の構成では、複数のスライス(データセット内の一意の種類ごとに 1 つ)を作成します。ここで、age1 です。

    {
      "species": {
        "all_values": {
          "value": true
        }
      },
      "age": {
        "value": {
          "float_value": 1.0
        }
      }
    }
    

    生成されたスライスには、サンプル データセットの次のデータが含まれます。

    • スライス 1: age:1species:"dog"

    • スライス 2: age:1species:"cat"

    • スライス 3: age:1species:"rabbit"

    スライスの形式を設定する

    ModelEvaluationClassificationOp コンポーネントのスライスの形式を設定するには、次のようにします。

    1. 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') ) })
    2. スライスの構成を保存するリストを作成します。次に例を示します。

      slicing_specs = []
    3. slicing_spec を JSON または辞書として形式を設定します。次に例を示します。

      slicing_spec_json = json_format.MessageToJson(slicing_spec)
      
      slicing_spec_dict = json_format.MessageToDict(slicing_spec)
    4. slicing_spec を組み合わせてリストにします。次に例を示します。

      slicing_specs.append(slicing_spec_json)
    5. slicing_specs をパラメータとして ModelEvaluationClassificationOp コンポーネントに渡します。次に例を示します。

      ModelEvaluationClassificationOp(slicing_specs=slicing_specs)

    公平性指標のスライスを構成して形式を設定する

    モデルの公平性を評価するには、次のコンポーネントを使用します。

    DetectDataBiasOp コンポーネントと DetectModelBiasOp コンポーネントのスライスの形式を設定するには、次のようにします。

    1. 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') ) }))
    2. バイアス構成を保存するリストを作成します。次に例を示します。

      bias_configs = []
    3. bias_config を JSON または辞書として形式を設定します。次に例を示します。

      bias_config_json = json_format.MessageToJson(bias_config)
      
      bias_config_dict = json_format.MessageToDict(bias_config)
    4. bias_config を組み合わせてリストにします。次に例を示します。

      bias_configs.append(bias_config_json)
    5. 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 コンポーネントを使用すると、ワークフローを効率化できます。

    デフォルト スキーマには次のフィールドがあります。

    • ids: 文字列の配列
    • displayName: 文字列の配列
    • confidence: 浮動小数点数の配列

    label をターゲット列とするデータセットの例を次に示します。

    {
      "content": "gs://kbn-us-central1-test/datasets/text/happy_0.txt",
      "mimeType": "text/plain",
      "label": "affection"
    }
              

    TargetFieldDataRemoverOp コンポーネントは、ファイルを BatchPredictionJob コンポーネントに送信する前にターゲット列を削除します。

    {
      "content": "gs://kbn-us-central1-test/datasets/text/happy_0.txt",
      "mimeType": "text/plain"
    }
              

    label のターゲット列を持たないバッチ予測の出力ファイルの例を次に示します。

    {
      "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]
      }
    }
              

    次の表に、テキストモデルを使用した ModelEvaluationClassificationOp コンポーネントに必要なパラメータを示します。

    評価コンポーネント パラメータ 必須
    target_field_name はい
    prediction_label_column デフォルトのスキーマでは不要です。
    デフォルト以外のスキーマには "prediction.displayNames" を使用します。
    prediction_score_column デフォルトのスキーマでは不要です。
    デフォルト以外のスキーマには "prediction.confidences" を使用します。
    evaluation_class_labels デフォルトのスキーマの場合、または prediction_label_column が指定されている場合は不要です。
    ground_truth_gcs_source はい: ターゲット列を持つ元のデータセットへの Cloud Storage リンク。
    ground_truth_format いいえ: 元のデータセットの形式。例: "jsonl""csv""bigquery"

    動画

    分類

    動画分類モデルの場合、BatchPredictionJob コンポーネントでは、ターゲット列(グラウンド トゥルース)をデータセットから除外する必要があります。TargetFieldDataRemoverOp コンポーネントを使用すると、ワークフローを効率化できます。

    デフォルト スキーマには次のフィールドがあります。

    • id: 文字列
    • displayName: 文字列
    • type: 列挙型
    • timeSegmentStart: 文字列
    • timeSegmentEnd: 文字列
    • confidence: 浮動小数点数

    ground_truth をターゲット列とするデータセットの例を次に示します。

    {
      "content": "gs://automl-video-demo-data/hmdb51/Aerial_Cartwheel_Tutorial_By_Jujimufu_cartwheel_f_nm_np1_ri_med_0.avi",
      "ground_truth": "cartwheel",
      "timeSegmentStart": "0.0",
      "timeSegmentEnd": "inf"
    }
              

    TargetFieldDataRemoverOp コンポーネントは、ファイルを BatchPredictionJob コンポーネントに送信する前にターゲット列を削除します。

    {
      "content": "gs://automl-video-demo-data/hmdb51/Aerial_Cartwheel_Tutorial_By_Jujimufu_cartwheel_f_nm_np1_ri_med_0.avi",
      "timeSegmentStart": "0.0",
      "timeSegmentEnd": "inf"
    }
              

    label のターゲット列を持たないバッチ予測の出力ファイルの例を次に示します。

    {
      "instance": {
        "content": "gs://automl-video-demo-data/hmdb51/20_Marine_Corps_Pull_Ups___JimmyDShea_pullup_f_cm_np1_ba_bad_3.avi"
        "mimeType": "video/avi",
        "timeSegmentStart": "0.0",
        "timeSegmentEnd": "inf"
      },
      "prediction": [
        {
          "id":"5015420640832782336",
          "displayName":"pullup",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.98152995
        },
        {
          "id":"2709577631619088384",
          "displayName":"cartwheel",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.0047166348
        },
        {
          "id":"403734622405394432",
          "displayName":"golf",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.0046260506
        },
        {
          "id":"1556656127012241408",
          "displayName":"ride_horse",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.004590442
        },
        {
          "id":"7321263650046476288",
          "displayName":"kick_ball",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.004536863
        }
      ]
    }
              

    次の表に、動画モデルを使用する ModelEvaluationClassificationOp コンポーネントに必要なパラメータを示します。

    評価コンポーネント パラメータ 必須
    target_field_name はい
    prediction_label_column デフォルトのスキーマでは不要です。
    デフォルト以外のスキーマには "prediction.displayName" を使用します。
    prediction_score_column デフォルトのスキーマでは不要です。
    デフォルト以外のスキーマには "prediction.confidence" を使用します。
    evaluation_class_labels デフォルトのスキーマを使用する場合、または prediction_label_column が指定されている場合は不要です。
    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 デフォルトのスキーマでは必須ではありません。JSONLCSVBIGQUERY のいずれかの形式に対して自動的に設定されます。
    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 リリースノートをご覧ください。