Search…
⌃K
Links

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.

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[max(min(s)min(r)max(r)min(r),0)+max(max(r)max(s)max(r)min(r),0)]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 the single_column module and use the compute method.
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

FAQs

Use the CategoryCoverage metric with discrete data, for example categorical or boolean values that don't span a continuous range.
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 metric.