This metrics measures whether a synthetic column respects the minimum and maximum values of the real column. It returns the percentage of synthetic rows that adhere to the real boundaries.
- Numerical : This metric is meant for numerical data
- Datetime : This metric converts datetime values into numerical values
This metric ignores missing values.
(best) 1.0: All values in the synthetic data respect the min/max boundaries of the real data
(worst) 0.0: No value in the synthetic data is in between the min and max value of the real data
The graph below shows an example of some fictional real and synthetic data (black and green, respectively) with BoundaryAdherence=0.912.
The real data is in range [37.0, 97.7], shown by vertical dotted lines. Around 8.8% of the synthetic data is outside of the min/max bounds of the real data, so the overall BoundaryAdherence score is 91.2%.
This metric computes the min and max values of the real column. Then, it computes the frequency of synthetic values that are in the [min, max] range.
To manually apply this metric, access the
single_columnmodule and use the
from sdmetrics.single_column import BoundaryAdherence
real_data: A pandas.Series object with the column of real data
synthetic_data: A pandas.Series object with the column of synthetic data
The scores that you see are based on the model that you used to create the synthetic data. Some models are designed to learn the min/max boundaries from the real data. For such models, the score should always be 1.0
Other models do not learn the boundaries. In these cases, you can expect the score to be close to, but not exactly, 1.0. Note that this may be a desirable feature if it is risky to leak the true min/max values in the synthetic data.
This metric only quantifies cases where the synthetic data is going out of bounds. If you're interested in knowing whether the synthetic data covers the full range of real values, use the RangeCoverage metric.