# RangeCoverage

This metric measures whether a synthetic column covers the full range of values that are present in a real column.

## Data Compatibility

* **Numerical** : This metric is meant for continuous, numerical data
* **Datetime** : This metric converts datetime values into numerical values

This metric ignores missing values.

## Score

* **(best) 1.0**: The synthetic column covers the range of values present in the real column
* **(worst) 0.0**: The synthetic column does not overlap at all with the range of values in the real column

The plot below shows some fictitious real and synthetic data (black and green respectively) with RangeCoverage=0.82.

![The real data is in range \[37.0, 97.7\] while the synthetic data is in the range \[45, 95\]. The synthetic data fails to cover the lower end and higher ends of the real values: \[37, 45\] and \[95, 97.7\]. The missing ranges account for roughly 18% of the overall range, making the RangeCoverage 0.82.](/files/YswD4lxrPxPMuzlnRXZe)

## How does it work?

If *r* and *s* represent the real and synthetic columns, then this metric computes how close the min and max values of *s* come to the true min and max values in *r* according to the formula below.

$$
score = 1 - \left\[\max\left(\frac{\min(s)-\min(r)}{\max(r)-\min(r)}, 0\right) + \max\left(\frac{\max(r)-\max(s)}{\max(r)-\min(r)}, 0\right)\right]
$$

If the synthetic data does has extremely poor range coverage, the equation above may become negative. In this case, we report a score 0 since it is the lowest possible value.

Note that the score isn't penalized if the synthetic data data goes out of bounds. If the synthetic data reaches beyond the real min and max, the range is fully covered and the score will be 1.

## **Usage**

To manually apply this metric, access the `single_column` module and use the `compute` method.

```python
from sdmetrics.single_column import RangeCoverage

RangeCoverage.compute(
    real_data=real_table['column_name'],
    synthetic_data=synthetic_table['column_name']
)
```

**Parameters**

* (required) `real_data`: A pandas.Series object with the column of real data
* (required) `synthetic_data`: A pandas.Series object with the column of synthetic data&#x20;

## FAQs

<details>

<summary>Is there an equivalent metric for discrete data?</summary>

Use the [CategoryCoverage](/sdmetrics/data-metrics/quality/categorycoverage.md) metric with discrete data, for example categorical or boolean values that don't span a continuous range.

</details>

<details>

<summary>What if the synthetic data is going out of bounds?</summary>

If the synthetic data is going out of bounds (the min is less than the real min or the max is greater than the real max), then this metric considers that part of the range covered.

If you'd like to quantify when the synthetic data is going out of bounds, use the [BoundaryAdherence](/sdmetrics/data-metrics/diagnostic/boundaryadherence.md) metric.

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sdv.dev/sdmetrics/data-metrics/quality/rangecoverage.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
