# SDV Evaluation After using SDV to model your database and generate a synthetic version of it you might want to evaluate how similar the synthetic data is to your real data. SDV has an evaluation module with a simple function that allows you to compare the synthetic data to your real data using [SDMetrics](https://github.com/sdv-dev/SDMetrics) and generate a simple standardized score. ## Evaluating your synthetic data After you have modeled your databased and generated samples out of the SDV models you will be left with a dictionary that contains table names and dataframes. For example, if we model and sample the demo dataset: ```python3 from sdv import SDV from sdv.demo import load_demo metadata, tables = load_demo(metadata=True) sdv = SDV() sdv.fit(metadata, tables) samples = sdv.sample_all(10) ``` `samples` will contain a dictionary with three tables, just like the `tables` dict. At this point, you can evaluate how similar the two sets of tables are by using the `sdv.evaluation.evaluate` function as follows: ``` from sdv.evaluation import evaluate score = evaluate(samples, tables, metadata) ``` The output will be a maximization score that will indicate how good the modeling was: the higher the value, the more similar the sets of table are. Notice that in most cases the value will be negative. For further options, including visualizations and more detailed reports, please refer to the [SDMetrics](https://github.com/sdv-dev/SDMetrics) library. ## SDV Benchmark SDV also provides a simple functionality to evaluate the performance of SDV across a collection of demo datasets or custom datasets hosted in a local folder. In order to execute this evaluation you can execute the function `sdv.benchmark.run_benchmark`: ```python3 from sdv.benchmark import run_benchmark scores = run_benchmark() ``` This function has the following arguments: * `datasets`: List of dataset names, which can either be names of demo datasets or names of custom datasets stored in a local folder. * `datasets_path`: Path where the custom datasets are stored. If not provided, the dataset names are interpreted as demo datasets. * `distributed`: Whether to execute the benchmark using Dask. Defaults to True. * `timeout`: Maximum time allowed for each dataset to be modeled, sampled and evaluated. Any dataset that takes longer to run will return a score of `None`. For example, the following command will run the SDV benchmark on all the given demo datasets using `dask` and a timeout of 60 seconds: ```python scores = run_benchmark( datasets=['DCG_v1', 'trains_v1', 'UTube_v1'], distributed=True, timeout=60 ) ``` And the result will be a DataFrame containing a table with the columns `dataset`, `score`: | dataset | score | |:-------:|:-----:| | DCG_v1 | -14.49341665631863 | | trains_v1 | -30.26840342069557 | | UTube_v1 | -8.57618576332235 | Additionally, if some dataset has raised an error or has reached the timeout, an `error` column will be added indicating the details. ### Demo Datasets The collection of datasets can be seen using the `sdv.demo.get_demo_demos`, which returns a table with a description of the dataset properties: ```python3 from sdv.demo import get_available_demos demos = get_available_demos() ``` The result is a table indicating the name of the dataset and a few properties, such as the number of tables that compose the dataset and the total number of rows and columns: | name | tables | rows | columns | |-----------------------|----------|---------|-----------| | UTube_v1 | 2 | 2735 | 10 | | SAP_v1 | 4 | 3841029 | 71 | | NCAA_v1 | 9 | 202305 | 333 | | airbnb-simplified | 2 | 5751408 | 22 | | Atherosclerosis_v1 | 4 | 12781 | 307 | | rossmann | 3 | 2035533 | 21 | | walmart | 4 | 544869 | 24 | | AustralianFootball_v1 | 4 | 139179 | 193 | | Pyrimidine_v1 | 2 | 296 | 38 | | world_v1 | 3 | 5302 | 39 | | Accidents_v1 | 3 | 1463093 | 87 | | trains_v1 | 2 | 83 | 15 | | legalActs_v1 | 5 | 1754397 | 50 | | DCG_v1 | 2 | 8258 | 9 | | imdb_ijs_v1 | 7 | 5647694 | 50 | | SalesDB_v1 | 4 | 6735507 | 35 | | MuskSmall_v1 | 2 | 568 | 173 | | KRK_v1 | 1 | 1000 | 9 | | Chess_v1 | 2 | 2052 | 57 | | Telstra_v1 | 5 | 148021 | 23 | | mutagenesis_v1 | 3 | 10324 | 26 | | PremierLeague_v1 | 4 | 11308 | 250 | | census | 1 | 32561 | 15 | | FNHK_v1 | 3 | 2113275 | 43 | | imdb_MovieLens_v1 | 7 | 1249411 | 58 | | financial_v1 | 8 | 1079680 | 84 | | ftp_v1 | 2 | 96491 | 13 | | Triazine_v1 | 2 | 1302 | 35 |