概要
TFMA は、次のメトリックとプロットをサポートしています。
- 標準 keras メトリクス (
tf.keras.metrics.*
)- keras メトリクスを使用するために keras モデルは必要ないことに注意してください。メトリックは、メトリック クラスを直接使用して、ビーム内のグラフの外側で計算されます。
標準 TFMA メトリクスとプロット (
tfma.metrics.*
)カスタム keras メトリクス (
tf.keras.metrics.Metric
から派生したメトリクス)カスタム TFMA メトリック (
tfma.metrics.Metric
から派生したメトリック) は、カスタム ビーム コンバイナーまたは他のメトリックから派生したメトリックを使用します)。
TFMA は、マルチクラス/マルチラベルの問題で使用するバイナリ分類メトリックを変換するための組み込みサポートも提供します。
- クラスID、トップKなどによる2値化
- マイクロ平均、マクロ平均などに基づく集計指標。
TFMA は、パイプラインでクエリ キーによって例が自動的にグループ化される、クエリ/ランキング ベースのメトリックの組み込みサポートも提供します。
組み合わせると、回帰、バイナリ分類、マルチクラス/マルチラベル分類、ランキングなど、さまざまな問題に使用できる 50 以上の標準メトリックとプロットが利用できます。
構成
TFMA でメトリクスを設定するには 2 つの方法があります: (1) tfma.MetricsSpec
を使用するか、(2) Python でtf.keras.metrics.*
および/またはtfma.metrics.*
クラスのインスタンスを作成し、tfma.metrics を使用しtfma.metrics.specs_from_metrics
を使用して、それらをtfma.MetricsSpec
のリストに変換します。
次のセクションでは、さまざまな種類の機械学習の問題の構成例について説明します。
回帰指標
以下は、回帰問題の構成セットアップの例です。サポートされている可能性のある追加のメトリックについては、 tf.keras.metrics.*
およびtfma.metrics.*
モジュールを参照してください。
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "ExampleCount" }
metrics { class_name: "MeanSquaredError" }
metrics { class_name: "Accuracy" }
metrics { class_name: "MeanLabel" }
metrics { class_name: "MeanPrediction" }
metrics { class_name: "Calibration" }
metrics {
class_name: "CalibrationPlot"
config: '"min_value": 0, "max_value": 10'
}
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
tfma.metrics.ExampleCount(name='example_count'),
tf.keras.metrics.MeanSquaredError(name='mse'),
tf.keras.metrics.Accuracy(name='accuracy'),
tfma.metrics.MeanLabel(name='mean_label'),
tfma.metrics.MeanPrediction(name='mean_prediction'),
tfma.metrics.Calibration(name='calibration'),
tfma.metrics.CalibrationPlot(
name='calibration', min_value=0, max_value=10)
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
このセットアップはtfma.metrics.default_regression_specs
を呼び出すことによっても利用できることに注意してください。
バイナリ分類メトリック
以下は、バイナリ分類問題の構成設定の例です。サポートされている可能性のある追加のメトリックについては、 tf.keras.metrics.*
およびtfma.metrics.*
モジュールを参照してください。
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "ExampleCount" }
metrics { class_name: "BinaryCrossentropy" }
metrics { class_name: "BinaryAccuracy" }
metrics { class_name: "AUC" }
metrics { class_name: "AUCPrecisionRecall" }
metrics { class_name: "MeanLabel" }
metrics { class_name: "MeanPrediction" }
metrics { class_name: "Calibration" }
metrics { class_name: "ConfusionMatrixPlot" }
metrics { class_name: "CalibrationPlot" }
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
tfma.metrics.ExampleCount(name='example_count'),
tf.keras.metrics.BinaryCrossentropy(name='binary_crossentropy'),
tf.keras.metrics.BinaryAccuracy(name='accuracy'),
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
tf.keras.metrics.AUC(
name='auc_precision_recall', curve='PR', num_thresholds=10000),
tf.keras.metrics.Precision(name='precision'),
tf.keras.metrics.Recall(name='recall'),
tfma.metrics.MeanLabel(name='mean_label'),
tfma.metrics.MeanPrediction(name='mean_prediction'),
tfma.metrics.Calibration(name='calibration'),
tfma.metrics.ConfusionMatrixPlot(name='confusion_matrix_plot'),
tfma.metrics.CalibrationPlot(name='calibration_plot')
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
この設定はtfma.metrics.default_binary_classification_specs
を呼び出すことによっても利用できることに注意してください。
マルチクラス/マルチラベル分類指標
以下は、マルチクラス分類問題の構成セットアップの例です。サポートされている可能性のある追加のメトリックについては、 tf.keras.metrics.*
およびtfma.metrics.*
モジュールを参照してください。
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "ExampleCount" }
metrics { class_name: "SparseCategoricalCrossentropy" }
metrics { class_name: "SparseCategoricalAccuracy" }
metrics { class_name: "Precision" config: '"top_k": 1' }
metrics { class_name: "Precision" config: '"top_k": 3' }
metrics { class_name: "Recall" config: '"top_k": 1' }
metrics { class_name: "Recall" config: '"top_k": 3' }
metrics { class_name: "MultiClassConfusionMatrixPlot" }
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
tfma.metrics.ExampleCount(name='example_count'),
tf.keras.metrics.SparseCategoricalCrossentropy(
name='sparse_categorical_crossentropy'),
tf.keras.metrics.SparseCategoricalAccuracy(name='accuracy'),
tf.keras.metrics.Precision(name='precision', top_k=1),
tf.keras.metrics.Precision(name='precision', top_k=3),
tf.keras.metrics.Recall(name='recall', top_k=1),
tf.keras.metrics.Recall(name='recall', top_k=3),
tfma.metrics.MultiClassConfusionMatrixPlot(
name='multi_class_confusion_matrix_plot'),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
このセットアップはtfma.metrics.default_multi_class_classification_specs
を呼び出すことによっても利用できることに注意してください。
マルチクラス/マルチラベルのバイナリ化されたメトリクス
tfma.BinarizationOptions を使用して、マルチクラス/マルチラベル メトリックをバイナリ化して、クラスごと、 tfma.BinarizationOptions
ごとなどのメトリックを生成できます。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
binarize: { class_ids: { values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } }
// Metrics to binarize
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
// Metrics to binarize
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, binarize=tfma.BinarizationOptions(
class_ids={'values': [0,1,2,3,4,5,6,7,8,9]}))
マルチクラス/マルチラベルの集計メトリクス
tfma.AggregationOptions
を使用して、マルチクラス/マルチラベル メトリックを集計して、バイナリ分類メトリックの単一の集計値を生成できます。
集約設定は二値化設定とは独立しているため、 tfma.AggregationOptions
とtfma.BinarizationOptions
の両方を同時に使用できることに注意してください。
ミクロ平均
マイクロ平均化は、 tfma.AggregationOptions
内のmicro_average
オプションを使用して実行できます。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
aggregate: { micro_average: true }
// Metrics to aggregate
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
// Metrics to aggregate
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, aggregate=tfma.AggregationOptions(micro_average=True))
マイクロ平均化では、上位 k 値のみが計算に使用されるtop_k
の設定もサポートされています。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
aggregate: {
micro_average: true
top_k_list: { values: [1, 3] }
}
// Metrics to aggregate
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
// Metrics to aggregate
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics,
aggregate=tfma.AggregationOptions(micro_average=True,
top_k_list={'values': [1, 3]}))
マクロ/加重マクロ平均
tfma.AggregationOptions
内のmacro_average
またはweighted_macro_average
オプションを使用して、マクロ平均化を実行できます。 top_k
設定が使用されない限り、平均を計算するクラスを知るために、マクロはclass_weights
を設定する必要があります。 class_weight
が指定されていない場合は、0.0 が想定されます。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
aggregate: {
macro_average: true
class_weights: { key: 0 value: 1.0 }
class_weights: { key: 1 value: 1.0 }
class_weights: { key: 2 value: 1.0 }
class_weights: { key: 3 value: 1.0 }
class_weights: { key: 4 value: 1.0 }
class_weights: { key: 5 value: 1.0 }
class_weights: { key: 6 value: 1.0 }
class_weights: { key: 7 value: 1.0 }
class_weights: { key: 8 value: 1.0 }
class_weights: { key: 9 value: 1.0 }
}
// Metrics to aggregate
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
// Metrics to aggregate
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics,
aggregate=tfma.AggregationOptions(
macro_average=True, class_weights={i: 1.0 for i in range(10)}))
マイクロ平均化と同様に、マクロ平均化もtop_k
の設定をサポートしており、上位 k 値のみが計算に使用されます。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
aggregate: {
macro_average: true
top_k_list: { values: [1, 3] }
}
// Metrics to aggregate
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
// Metrics to aggregate
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics,
aggregate=tfma.AggregationOptions(macro_average=True,
top_k_list={'values': [1, 3]}))
クエリ/ランキング ベースの指標
メトリック仕様でquery_key
オプションを指定すると、クエリ/ランキング ベースのメトリックが有効になります。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
query_key: "doc_id"
metrics {
class_name: "NDCG"
config: '"gain_key": "gain", "top_k_list": [1, 2]'
}
metrics { class_name: "MinLabelPosition" }
}
""", tfma.EvalConfig()).metrics_specs
これと同じセットアップは、次の Python コードを使用して作成できます。
metrics = [
tfma.metrics.NDCG(name='ndcg', gain_key='gain', top_k_list=[1, 2]),
tfma.metrics.MinLabelPosition(name='min_label_position')
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics, query_key='doc_id')
マルチモデル評価指標
TFMA は、同時に複数のモデルを評価することをサポートしています。マルチモデル評価が実行されると、メトリックはモデルごとに計算されます。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
# no model_names means all models
...
}
""", tfma.EvalConfig()).metrics_specs
モデルのサブセットに対してメトリクスを計算する必要がある場合は、 metric_specs
でmodel_names
を設定します。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
model_names: ["my-model1"]
...
}
""", tfma.EvalConfig()).metrics_specs
specs_from_metrics
API は、モデル名の受け渡しもサポートしています。
metrics = [
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, model_names=['my-model1'])
モデル比較指標
TFMA は、ベースライン モデルに対する候補モデルの比較指標の評価をサポートしています。候補モデルとベースライン モデルのペアをセットアップする簡単な方法は、適切なモデル名 (tfma.BASELINE_KEY および tfma.CANDIDATE_KEY) を使用して eval_shared_model を渡すことです。
eval_config = text_format.Parse("""
model_specs {
# ... model_spec without names ...
}
metrics_spec {
# ... metrics ...
}
""", tfma.EvalConfig())
eval_shared_models = [
tfma.default_eval_shared_model(
model_name=tfma.CANDIDATE_KEY,
eval_saved_model_path='/path/to/saved/candidate/model',
eval_config=eval_config),
tfma.default_eval_shared_model(
model_name=tfma.BASELINE_KEY,
eval_saved_model_path='/path/to/saved/baseline/model',
eval_config=eval_config),
]
eval_result = tfma.run_model_analysis(
eval_shared_models,
eval_config=eval_config,
# This assumes your data is a TFRecords file containing records in the
# tf.train.Example format.
data_location="/path/to/file/containing/tfrecords",
output_path="/path/for/output")
比較メトリックは、すべての差分可能なメトリックに対して自動的に計算されます (現在、精度や AUC などのスカラー値メトリックのみ)。
マルチ出力モデルの指標
TFMA は、異なる出力を持つモデルでのメトリックの評価をサポートしています。多出力モデルは、出力予測を出力名でキー付けされた dict の形式で保存します。マルチ出力モデルを使用する場合、一連のメトリックに関連付けられた出力の名前を MetricsSpec のoutput_names
セクションで指定する必要があります。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
output_names: ["my-output"]
...
}
""", tfma.EvalConfig()).metrics_specs
specs_from_metrics
API は、出力名の受け渡しもサポートしています。
metrics = [
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, output_names=['my-output'])
メトリック設定のカスタマイズ
TFMA を使用すると、さまざまなメトリックで使用される設定をカスタマイズできます。たとえば、名前を変更したり、しきい値を設定したりしたい場合があります。これは、 config
セクションをメトリック構成に追加することによって行われます。 config は、メトリクス__init__
メソッドに渡されるパラメーターの JSON 文字列バージョンを使用して指定されます (使いやすくするために、先頭と末尾の '{' と '}' ブラケットは省略できます)。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics {
class_name: "ConfusionMatrixAtThresholds"
config: '"thresholds": [0.3, 0.5, 0.8]'
}
}
""", tfma.MetricsSpec()).metrics_specs
もちろん、このカスタマイズは直接サポートされています。
metrics = [
tfma.metrics.ConfusionMatrixAtThresholds(thresholds=[0.3, 0.5, 0.8]),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
出力
メトリクス評価の出力は、一連のメトリクス キー/値および/または使用された構成に基づくプロット キー/値です。
メトリック キー
MetricKeyは、構造化されたキー タイプを使用して定義されます。このキーは、メトリックの次の各側面を一意に識別します。
- メトリック名 (
auc
、mean_label
など) - モデル名 (マルチモデル評価の場合のみ使用)
- 出力名 (多出力モデルが評価される場合にのみ使用)
- サブキー (例: マルチクラス モデルがバイナリ化されている場合のクラス ID)
メトリック値
MetricValuesは、さまざまなメトリック ( double
、 ConfusionMatrixAtThresholds
など) によってサポートされるさまざまな値の型をカプセル化する proto を使用して定義されます。
以下は、サポートされているメトリック値のタイプです。
-
double_value
- double 型のラッパー。 -
bytes_value
- バイト値。 -
bounded_value
- ポイントごとの推定値である可能性がある実際の値を表し、オプションである種のおおよその境界を指定します。プロパティvalue
、lower_bound
、およびupper_bound
があります。 -
value_at_cutoffs
- カットオフ値 (precision@K、recall@K など)。プロパティvalues
があり、それぞれにプロパティcutoff
とvalue
があります。 - conflict_matrix_at_thresholds - しきい値での
confusion_matrix_at_thresholds
行列。プロパティmatrices
があり、それぞれにthreshold
、precision
、recall
率、およびfalse_negatives
などの混同マトリックス値のプロパティがあります。 -
array_value
- 値の配列を返すメトリクス用。
プロット キー
PlotKeysはメトリック キーに似ていますが、歴史的な理由からすべてのプロット値が 1 つの proto に格納されるため、プロット キーには名前がありません。
プロット値
サポートされているすべてのプロットは、 PlotDataと呼ばれる単一のプロトに保存されます。
評価結果
評価の実行からの戻り値はtfma.EvalResult
です。このレコードには、メトリック キーをマルチレベル dict としてエンコードするslicing_metrics
が含まれます。レベルは、出力名、クラス ID、メトリック名、およびメトリック値にそれぞれ対応します。これは、Jupiter ノートブックでの UI 表示に使用することを目的としています。基になるデータへのアクセスが必要な場合は、代わりにmetrics
結果ファイルを使用する必要があります ( metrics_for_slice.protoを参照)。
カスタマイズ
保存された keras (またはレガシー EvalSavedModel) の一部として追加されるカスタム メトリックに加えて。 TFMA ポスト保存でメトリックをカスタマイズするには、(1) カスタム keras メトリック クラスを定義する方法と、(2) ビーム コンバイナーに基づくカスタム TFMA メトリック クラスを定義する方法の 2 つがあります。
どちらの場合も、メトリックは、メトリック クラスの名前と関連するモジュールを指定することによって構成されます。例えば:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "MyMetric" module: "my.module"}
}
""", tfma.EvalConfig()).metrics_specs
カスタム Keras メトリクス
カスタム keras メトリクスを作成するには、ユーザーは実装でtf.keras.metrics.Metric
を拡張し、メトリクスのモジュールが評価時に利用可能であることを確認する必要があります。
モデル保存後に追加されたメトリクスの場合、TFMA は、ラベル (y_true)、予測 (y_pred)、およびサンプルの重み (sample_weight) をupdate_state
メソッドのパラメーターとして受け取るメトリクスのみをサポートすることに注意してください。
Keras メトリックの例
以下は、カスタム keras メトリクスの例です。
class MyMetric(tf.keras.metrics.Mean):
def __init__(self, name='my_metric', dtype=None):
super(MyMetric, self).__init__(name=name, dtype=dtype)
def update_state(self, y_true, y_pred, sample_weight=None):
return super(MyMetric, self).update_state(
y_pred, sample_weight=sample_weight)
カスタム TFMA 指標
カスタム TFMA メトリックを作成するには、ユーザーは実装でtfma.metrics.Metric
を拡張し、メトリックのモジュールが評価時に利用可能であることを確認する必要があります。
メトリック
tfma.metrics.Metric
実装は、メトリック値の計算に必要な計算 (場合によっては複数) を作成するための関数とともに、メトリック構成を定義する kwargs のセットで構成されます。使用できる主な計算タイプは 2 つあります。以下のセクションで説明するtfma.metrics.MetricComputation
とtfma.metrics.DerivedMetricComputation
です。これらの計算を作成する関数には、次のパラメーターが入力として渡されます。
-
eval_config: tfam.EvalConfig
- エバリュエーターに渡される評価構成 (使用する予測キーなどのモデル仕様設定を検索するのに役立ちます)。
-
model_names: List[Text]
- メトリックを計算するモデル名のリスト (単一モデルの場合はなし)
-
output_names: List[Text]
.- メトリックを計算する出力名のリスト (単一モデルの場合はなし)
-
sub_keys: List[tfma.SubKey]
.- メトリクスを計算するためのサブキー (クラス ID、上位 K など) のリスト (またはなし)
-
aggregation_type: tfma.AggregationType
- 集計メトリックを計算する場合の集計のタイプ。
-
class_weights: Dict[int, float]
.- 集約メトリクスを計算する場合に使用するクラスの重み。
-
query_key: Text
- クエリ/ランキング ベースのメトリックを計算する場合に使用されるクエリ キー。
メトリクスがこれらの設定の 1 つ以上に関連付けられていない場合、それらのパラメータがシグネチャ定義から除外される場合があります。
モデル、出力、およびサブキーごとにメトリックが同じ方法で計算される場合、ユーティリティtfma.metrics.merge_per_key_computations
を使用して、これらの入力のそれぞれに対して同じ計算を個別に実行できます。
メトリック計算
MetricComputation
は、 preprocessors
とcombiner
の組み合わせで構成されています。 preprocessors
はpreprocessor
のリストです。これは、抽出を入力として受け取り、コンバイナーによって使用される初期状態を出力するbeam.DoFn
です (抽出とは何かについての詳細は、アーキテクチャを参照してください)。すべてのプリプロセッサは、リストの順序で順次実行されます。 preprocessors
が空の場合、コンバイナにはStandardMetricInputsが渡されます (標準メトリック入力には、ラベル、予測、および example_weights が含まれます)。 combiner
は、入力として (スライス キー、プリプロセッサ出力) のタプルを受け取り、その結果として ( beam.CombineFn
、メトリック結果の辞書) のタプルを出力する beam.CombineFn です。
preprocessors
とcombiner
の間でスライスが発生することに注意してください。
メトリクス計算で両方の標準メトリクス入力を利用したいが、 features
抽出からのいくつかの特徴でそれを補強したい場合は、特別なFeaturePreprocessorを使用して、複数のコンバイナーから要求された特徴を 1 つにマージすることに注意してください。すべてのコンバイナーに渡される共有 StandardMetricsInputs 値 (コンバイナーは、関心のある機能を読み取り、残りを無視する責任があります)。
例
以下は、ExampleCount を計算するための TFMA メトリック定義の非常に単純な例です。
class ExampleCount(tfma.metrics.Metric):
def __init__(self, name: Text = 'example_count'):
super(ExampleCount, self).__init__(_example_count, name=name)
def _example_count(
name: Text = 'example_count') -> tfma.metrics.MetricComputations:
key = tfma.metrics.MetricKey(name=name)
return [
tfma.metrics.MetricComputation(
keys=[key],
preprocessors=[_ExampleCountPreprocessor()],
combiner=_ExampleCountCombiner(key))
]
class _ExampleCountPreprocessor(beam.DoFn):
def process(self, extracts: tfma.Extracts) -> Iterable[int]:
yield 1
class _ExampleCountCombiner(beam.CombineFn):
def __init__(self, metric_key: tfma.metrics.MetricKey):
self._metric_key = metric_key
def create_accumulator(self) -> int:
return 0
def add_input(self, accumulator: int, state: int) -> int:
return accumulator + state
def merge_accumulators(self, accumulators: Iterable[int]) -> int:
accumulators = iter(accumulators)
result = next(accumulator)
for accumulator in accumulators:
result += accumulator
return result
def extract_output(self,
accumulator: int) -> Dict[tfma.metrics.MetricKey, int]:
return {self._metric_key: accumulator}
DerivedMetricComputation
DerivedMetricComputation
は、他のメトリック計算の出力に基づいてメトリック値を計算するために使用される結果関数で構成されます。結果関数は、計算された値の辞書を入力として取り、追加のメトリック結果の辞書を出力します。
導出された計算が依存する計算を、メトリクスによって作成された計算のリストに含めることが許容される (推奨される) ことに注意してください。これにより、複数のメトリック間で共有される計算を事前に作成して渡す必要がなくなります。エバリュエーターは、同じ定義を持つ計算を自動的に重複排除するため、実際には 1 つの計算のみが実行されます。
例
TJUR メトリックは、派生メトリックの良い例です。