ML.EVALUATE
関数
ML.EVALUATE
関数を使用して、モデルの指標を評価します。ML.EVALUATE
関数は、線形回帰、ロジスティック回帰、k 平均法、行列分解、ARIMA ベース時系列モデルで使用できます。ロジスティック回帰モデルの評価には ML.ROC_CURVE
関数も使用できますが、ML.ROC_CURVE
はマルチクラス モデルではサポートされていません。
ML.EVALUATE
関数は、提供されたモデルタイプに適用可能な共通指標を含む単一行を出力します。
ML.EVALUATE
は、ロジスティックまたはマルチクラス回帰モデルに対して次の列を返します。
precision
recall
accuracy
f1_score
log_loss
roc_auc
線形回帰または明示的な行列分解モデルの場合、ML.EVALUATE
は次の列を返します。
mean_absolute_error
mean_squared_error
mean_squared_log_error
median_absolute_error
r2_score
explained_variance
K 平均法モデルの場合、ML.EVALUATE
は次の列を返します。
- Davies-Bouldin インデックス
- 平均二乗距離
暗黙的な行列分解モデルの場合、ML.EVALUATE
は次の列を返します。
- mean_average_precision
mean_squared_error
- normalized_discounted_cumulative_gain
- average_rank(PDF ダウンロード)
ML.EVALUATE
は、ARIMA ベースの時系列モデルに対して次の列を返します。
time_series_id
: 時系列の識別子。複数の時系列を同時に予測する場合にのみ表示されます。列名と型は、モデル作成クエリで指定されたTIME_SERIES_ID_COL
オプションから継承されます。non_seasonal_p
non_seasonal_d
non_seasonal_q
has_drift
log_likelihood
AIC
variance
seasonal_periods
ML.EVALUATE
の制限
ML.EVALUATE
関数には、次の制限があります。
ML.EVALUATE
は、インポートした TensorFlow モデルをサポートしていません。threshold
オプションは、多項ロジスティック回帰モデルまたは行列因子分解モデルでは使用できません。
ML.EVALUATE
の構文
ML.EVALUATE(MODEL model_name [, {TABLE table_name | (query_statement)}] [, STRUCT(<T> AS threshold)])
model_name
model_name
は、評価するモデルの名前です。デフォルト プロジェクトを構成していない場合は、`[PROJECT_ID].[DATASET].[MODEL]`(バッククォートを含む)の形式でプロジェクト ID をモデル名の前に追加します(例: `myproject.mydataset.mymodel`)。
table_name
(省略可)table_name
は、評価データを含む入力テーブルの名前です。デフォルト プロジェクトを構成していない場合は、`[PROJECT_ID].[DATASET].[TABLE]`(バッククォートを含む)の形式でプロジェクト ID をテーブル名の前に追加します(例: `myproject.mydataset.mytable`)。
table_name
が指定されている場合、テーブルの入力列名はモデルの列名と一致する必要があります。また、型は BigQuery の暗黙の強制変換ルールに従って互換性がある必要があります。入力には、トレーニング中に提供されたラベル列名と一致する列が必要です。この値は、input_label_cols
オプションで指定します。input_label_cols
が未指定の場合は、トレーニング データで「label」という名前の列が使用されます。
table_name
も query_statement
も指定しない場合、ML.EVALUATE
は次のように評価結果を計算します。
- トレーニング中にデータを分割する場合、分割評価データを使用して評価結果を計算します。
- トレーニング中にデータを分割しない場合、トレーニング入力全体を使用して評価結果を計算します。
query_statement
(省略可)query_statement
句は、評価データの生成に使用する標準 SQL クエリを指定します。query_statement
句でサポートされる SQL 構文については、標準 SQL クエリ構文ページをご覧ください。
query_statement
が指定されている場合、クエリからの入力列名はモデルの列名と一致する必要があります。また、型は BigQuery の暗黙の強制型変換ルールに従って互換性がある必要があります。入力には、トレーニング中に提供されたラベル列名と一致する列が必要です。この値は、input_label_cols
オプションで指定します。input_label_cols
が未指定の場合は、トレーニング データで「label」という名前の列が使用されます。追加の列は無視されます。
model_name
を作成した CREATE MODEL
ステートメントに TRANSFORM
句が含まれている場合、TRANSFORM
句に含まれている入力列のみが query_statement
に表示される必要があります。
table_name
も query_statement
も指定しない場合、ML.EVALUATE
は次のように評価結果を計算します。
- トレーニング中にデータを分割する場合、分割評価データを使用して評価結果を計算します。
- トレーニング中にデータを分割しない場合、トレーニング入力全体を使用して評価結果を計算します。K 平均法モデルではデータ分割ができないため、
query_statement
やtable_name
を指定せずに K 平均法モデルでML.EVALUATE
を呼び出すことで、トレーニング入力全体の結果を計算します。
threshold
(省略可)threshold
は、評価に使用するロジスティック回帰モデルのカスタムしきい値です。デフォルト値は 0.5 です。STRUCT
型のしきい値を指定する必要があります。
適合率 / 再現率の値がゼロの場合、選択したしきい値は真陽性のラベルを生成していません。適合率の値が NaN の場合、選択したしきい値は陽性ラベル(真陽性と偽陽性)を生成していません。
table_name
と query_statement
の両方が指定されていない場合、しきい値は使用できません。また、threshold
は多項ロジスティック回帰モデルでは使用できません。
ML.EVALUATE
の例
入力データが指定されていない ML.EVALUATE
入力データが指定されていないモデルを評価するには、次のクエリを使用します。
SELECT * FROM ML.EVALUATE(MODEL `mydataset.mymodel`)
カスタムしきい値と入力データを伴う ML.EVALUATE
次のクエリは、入力データとカスタムしきい値 0.55 を指定してモデルを評価します。
SELECT * FROM ML.EVALUATE(MODEL `mydataset.mymodel`, ( SELECT custom_label, column1, column2 FROM `mydataset.mytable`), STRUCT(0.55 AS threshold))