@@ -31,6 +31,7 @@ class EvaluationMetricTypeEnum(str, Enum):
31
31
MODEL_CARD_METRIC_SCHEMA = "Model Card Metric Schema"
32
32
CLARIFY_BIAS = "Clarify Bias"
33
33
CLARIFY_EXPLAINABILITY = "Clarify Explainability"
34
+ MODEL_MONITOR_MODEL_QUALITY = "Model Monitor Model Quality"
34
35
REGRESSION = "Model Monitor Model Quality Regression"
35
36
BINARY_CLASSIFICATION = "Model Monitor Model Quality Binary Classification"
36
37
MULTICLASS_CLASSIFICATION = "Model Monitor Model Quality Multiclass Classification"
@@ -138,6 +139,7 @@ def _parse(self, json_data: dict):
138
139
[
139
140
{"name" : i ["name" ], "value" : i ["value" ], "type" : "number" }
140
141
for i in item ["metrics" ]
142
+ if i ["value" ] is not None
141
143
]
142
144
)
143
145
for group_name , metric_data in group_data .items ():
@@ -368,9 +370,10 @@ def _parse(self, json_data: dict):
368
370
result = {"metric_groups" : []}
369
371
for group_name , group_data in json_data .items ():
370
372
metric_data = []
371
- for metric_name , raw_data in group_data .item ():
372
- metric_data .extend (self ._parse_basic_metric (metric_name , raw_data ))
373
- result ["metric_groups" ].append ({"name" : group_name , "metric_data" : metric_data })
373
+ if group_name == "regression_metrics" :
374
+ for metric_name , raw_data in group_data .items ():
375
+ metric_data .extend (self ._parse_basic_metric (metric_name , raw_data ))
376
+ result ["metric_groups" ].append ({"name" : group_name , "metric_data" : metric_data })
374
377
return result
375
378
376
379
@@ -388,7 +391,7 @@ def _validate(self, json_data: dict):
388
391
"""
389
392
if (
390
393
"binary_classification_metrics" not in json_data
391
- and "multiclass_classification_metrics" in json_data
394
+ and "multiclass_classification_metrics" not in json_data
392
395
):
393
396
raise ValueError ("Missing *_classification_metrics from the metric data." )
394
397
@@ -401,6 +404,11 @@ def _parse(self, json_data: dict):
401
404
result = {"metric_groups" : []}
402
405
for group_name , group_data in json_data .items ():
403
406
metric_data = []
407
+ if group_name not in (
408
+ "binary_classification_metrics" ,
409
+ "multiclass_classification_metrics" ,
410
+ ):
411
+ continue
404
412
for metric_name , raw_data in group_data .items ():
405
413
metric_data .extend (self ._parse_confusion_matrix (metric_name , raw_data ))
406
414
metric_data .extend (
@@ -506,11 +514,45 @@ def _parse_precision_recall_curve(self, metric_name, raw_data):
506
514
return metric_data
507
515
508
516
517
+ class ModelMonitorModelQualityParser (ParserBase ):
518
+ """Top level parser for model monitor model quality metric type"""
519
+
520
+ def _validate (self , json_data : dict ):
521
+ """Implement ParserBase._validate.
522
+
523
+ Args:
524
+ json_data (dict): Metric data to be validated.
525
+
526
+ Raises:
527
+ ValueError: missing model monitor model quality metrics.
528
+ """
529
+ if len (json_data ) == 0 :
530
+ raise ValueError ("Missing model monitor model quality metrics from the metric data." )
531
+
532
+ def _parse (self , json_data : dict ):
533
+ """Implement ParserBase._parse.
534
+
535
+ Args:
536
+ json_data (dict): Raw metric data.
537
+ """
538
+ result = {"metric_groups" : []}
539
+ if "regression_metrics" in json_data :
540
+ result = RegressionParser ().run (json_data )
541
+ elif (
542
+ "binary_classification_metrics" in json_data
543
+ or "multiclass_classification_metrics" in json_data
544
+ ):
545
+ result = ClassificationParser ().run (json_data )
546
+
547
+ return result
548
+
549
+
509
550
EVALUATION_METRIC_PARSERS = {
510
551
EvaluationMetricTypeEnum .MODEL_CARD_METRIC_SCHEMA : DefaultParser (),
511
552
EvaluationMetricTypeEnum .CLARIFY_BIAS : ClarifyBiasParser (),
512
553
EvaluationMetricTypeEnum .CLARIFY_EXPLAINABILITY : ClarifyExplainabilityParser (),
513
554
EvaluationMetricTypeEnum .REGRESSION : RegressionParser (),
514
555
EvaluationMetricTypeEnum .BINARY_CLASSIFICATION : ClassificationParser (),
515
556
EvaluationMetricTypeEnum .MULTICLASS_CLASSIFICATION : ClassificationParser (),
557
+ EvaluationMetricTypeEnum .MODEL_MONITOR_MODEL_QUALITY : ModelMonitorModelQualityParser (),
516
558
}
0 commit comments