Repository: tensorflow/model-analysis
Issue: MinLabelPosition does not display in Slicing Metrics graphs
Root cause: Interface Contract Mismatch

### System information

-   **Have I written custom code (as opposed to using a stock example script
    provided in TensorFlow Model Analysis)**: yes
-   **OS Platform and Distribution (e.g., Linux Ubuntu 16.04)**: Ubuntu
-   **TensorFlow Model Analysis installed from (source or binary)**: binary
-   **TensorFlow Model Analysis version (use command below)**: 0.26.0
-   **Python version**: 3.7.6
-   **Jupyter Notebook version**: 6.2.0
-   **Exact command to reproduce**:
(pandas version : 1.2.0)
```
import os
import json
from typing import List

import pandas as pd
import tensorflow_model_analysis as tfma


df_data = pd.DataFrame({
    'score': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
    'label': [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0],
    'query_id': [0] * 4 + [1] * 4 + [2] * 4 + [3] * 4, 
    'slice': ['aaa'] * 4 + ['bbb'] * 12
})

def set_eval_config(prediction: str, label: str, query_key: str, slices: List) -> tfma.EvalConfig:
    model_specs = [
      tfma.ModelSpec(
          prediction_key=prediction,
          label_key=label)
    ]

    metrics = [
        tfma.metrics.NDCG(name='ndcg', gain_key=label, top_k_list=[4]),
        tfma.metrics.MinLabelPosition(name='min_label_position', label_key='label'),
    ]

    metrics_specs = tfma.metrics.specs_from_metrics(metrics, query_key=query_key)

    slicing_specs = [tfma.SlicingSpec()]  # the empty slice represents the overall dataset  
    slicing_specs += [tfma.SlicingSpec(feature_keys=[slice]) for slice in slices]
    

    eval_config = tfma.EvalConfig(
        model_specs=model_specs,
        metrics_specs=metrics_specs,
        slicing_specs=slicing_specs)
    return eval_config

eval_config = set_eval_config(prediction='score', 
                                      label='label', 
                                      query_key='query_id',
                                      slices=['slice'])

eval_result = tfma.analyze_raw_data(df_data, 
                                        eval_config)

tfma.view.render_slicing_metrics(eval_result, slicing_column='slice')

#print(eval_result) 
```

### Describe the problem
I am trying to evaluate a ranking model based on a dataframe of predictions. 
When I evaluate MinLabelPosition and try to visualize it using `tfma.view.render_slicing_metrics`, the graphs does not display for this metric whereas it displays well for NDCG. 
Nonetheless the MinLabelPosition value is available in the dataframe view output by `tfma.view.render_slicing_metrics`.

There seems to be a problem of type for the output generated by the metric MinLabelPosition (see below in part **Source code / logs**).

I suggested a fix in the submitted Pull Request :  https://github.com/tensorflow/model-analysis/pull/106 

### Source code / logs
**When printing what's inside `eval_result` :**

```
EvalResult(slicing_metrics=[((), {'': {'': {'example_count': {'doubleValue': 16.0}, 
'weighted_example_count': {'doubleValue': 16.0}, 
'min_label_position': {'arrayValue': {'dataType': 'FLOAT32', 'shape': [1], 'float32Values': [1.5]}}}, 
'topK:4': {'ndcg': {'doubleValue': 0.8154648767857289}}}}), 
((('slice', 'aaa'),), {'': {'': {'example_count': {'doubleValue': 4.0}, 'weighted_example_count': {'doubleValue': 4.0}, 'min_label_position': {'arrayValue': {'dataType': 'FLOAT32', 'shape': [1], 'float32Values': [1.0]}}}, 
'topK:4': {'ndcg': {'doubleValue': 1.0}}}}),
 ((('slice', 'bbb'),), {'': {'': {'example_count': {'doubleValue': 12.0}, 
'weighted_example_count': {'doubleValue': 12.0},
 'min_label_position': {'arrayValue': {'dataType': 'FLOAT32', 'shape': [1], 'float32Values': [1.6666666]}}}, 
'topK:4': {'ndcg': {'doubleValue': 0.7539531690476383}}}})], 
plots=[((), None), ((('slice', 'aaa'),), None), ((('slice', 'bbb'),), None)], attributions=[((), None), ((('slice', 'aaa'),), None), ((('slice', 'bbb'),), None)], config=model_specs {
  label_key: "label"
  prediction_key: "score"
}
slicing_specs {
}
slicing_specs {
  feature_keys: "slice"
}
metrics_specs {
  metrics {
    class_name: "ExampleCount"
    config: "{\"name\": \"example_count\"}"
  }
}
metrics_specs {
  metrics {
    class_name: "WeightedExampleCount"
    config: "{\"name\": \"weighted_example_count\"}"
  }
}
metrics_specs {
  metrics {
    class_name: "NDCG"
    config: "{\"gain_key\": \"label\", \"name\": \"ndcg\", \"top_k_list\": [4]}"
  }
  metrics {
    class_name: "MinLabelPosition"
    config: "{\"label_key\": \"label\", \"name\": \"min_label_position\"}"
  }
  query_key: "query_id"
}
, data_location='<user provided PCollection>', file_format='<unknown>', model_location='<unknown>')
```

**Screenshot of the output with `render_slicing_metrics`**
![slicing_metrics](https://user-images.githubusercontent.com/22873939/104745584-8bd52780-574e-11eb-854c-f2d2f3783cfd.png)