{% include 'head.html' %}

{{ meta.report_title }}{{ meta.report_subtitle }}

Generated on {{ report_creation_datetime.strftime("%d %b %Y, %H:%M") }}   ●   {{ "{:,d}".format(meta.rows_original) }} original samples, {{ "{:,d}".format(meta.rows_synthetic) }} synthetic samples

{% if is_model_report %}
Accuracy
{{html_assets['info.svg']}}
{{ "{:.1%}".format(metrics.accuracy.overall) }}
({{ "{:.1%}".format(metrics.accuracy.overall_max) }})
{% if 'bivariate' in accuracy_table_by_column %} {% endif %} {% if 'coherence' in accuracy_table_by_column %} {% endif %}
Univariate {{ "{:.1%}".format(metrics.accuracy.univariate) }}
({{ "{:.1%}".format(metrics.accuracy.univariate_max) }})
Bivariate {{ "{:.1%}".format(metrics.accuracy.bivariate) }}
({{ "{:.1%}".format(metrics.accuracy.bivariate_max) }})
Coherence {{ "{:.1%}".format(metrics.accuracy.coherence).replace('nan%', '-') }}
({{ "{:.1%}".format(metrics.accuracy.coherence_max).replace('nan%', '-') }})
Similarity
{{html_assets['info.svg']}}
Cosine Similarity {{ "{:.5f}".format(metrics.similarity.cosine_similarity_training_synthetic) }}
{% if metrics.similarity.cosine_similarity_training_holdout is not none %} ({{ "{:.5f}".format(metrics.similarity.cosine_similarity_training_holdout) }}) {% endif %}
Discriminator AUC {{ "{:.1%}".format(metrics.similarity.discriminator_auc_training_synthetic) }}
{% if metrics.similarity.discriminator_auc_training_holdout is not none %} ({{ "{:.1%}".format(metrics.similarity.discriminator_auc_training_holdout) }}) {% endif %}
Distances
{{html_assets['info.svg']}}
Identical Matches {{ "{:.1%}".format(metrics.distances.ims_training) }}
{% if metrics.distances.ims_holdout is not none %} ({{ "{:.1%}".format(metrics.distances.ims_holdout) }}) {% endif %}
Average Distances {{ "{:.3f}".format(metrics.distances.dcr_training) }}
{% if metrics.distances.dcr_holdout is not none %} ({{ "{:.3f}".format(metrics.distances.dcr_holdout) }}) {% endif %}
{% endif %}

Correlations

{{ correlation_matrix_html_chart }}

Univariate Distributions

{% for uni_plots_row in univariate_html_charts | batch(3, ' ') %}
{% for uni_plot in uni_plots_row %}
{{ uni_plot }}
{% endfor %}
{% endfor %}
{% if bivariate_html_charts_tgt | length > 0 %}

Bivariate Distributions

{% for biv_plots_row in bivariate_html_charts_tgt | batch(3, ' ') %}
{% for biv_plot in biv_plots_row %}
{{ biv_plot }}
{% endfor %}
{% endfor %}
{% endif %} {% if bivariate_html_charts_ctx | length > 0 %}

Bivariate Distributions for context

{% for biv_plots_row in bivariate_html_charts_ctx | batch(3, ' ') %}
{% for biv_plot in biv_plots_row %}
{{ biv_plot }}
{% endfor %}
{% endfor %}
{% endif %} {% if 'coherence' in accuracy_table_by_column %}

Coherence: Auto-correlations

{% for biv_plots_row in bivariate_html_charts_nxt | batch(3, ' ') %}
{% for biv_plot in biv_plots_row %}
{{ biv_plot }}
{% endfor %}
{% endfor %}
{% endif %} {% if sequences_per_distinct_category_html_charts | length > 0 %}

Coherence: Sequences per Distinct Category

{% for seq_per_cat_plots_row in sequences_per_distinct_category_html_charts | batch(3, ' ') %}
{% for seq_per_cat_plot in seq_per_cat_plots_row %}
{{ seq_per_cat_plot }}
{% endfor %}
{% endfor %}
{% endif %} {% if distinct_categories_per_sequence_html_charts | length > 0 %}

Coherence: Distinct Categories per Sequence

{% for cats_per_seq_plots_row in distinct_categories_per_sequence_html_charts | batch(3, ' ') %}
{% for cats_per_seq_plot in cats_per_seq_plots_row %}
{{ cats_per_seq_plot }}
{% endfor %}
{% endfor %}
{% endif %} {% if is_model_report %}

Accuracy

{% if 'bivariate' in accuracy_table_by_column %} {% endif %} {% if 'coherence' in accuracy_table_by_column %} {% endif %} {% for key, row in accuracy_table_by_column.iterrows() %} {% if 'bivariate' in accuracy_table_by_column %} {% endif %} {% if 'coherence' in accuracy_table_by_column %} {% endif %} {% endfor %} {% if 'bivariate' in accuracy_table_by_column %} {% endif %} {% if 'coherence' in accuracy_table_by_column %} {% endif %}
Column UnivariateBivariateCoherence
{{ row['column'] }} {{ "{:.1%}".format(row['univariate']) }}{{ "{:.1%}".format(row['bivariate']) }}{{ "{:.1%}".format(row['coherence']).replace('nan%', '-') }}
Total {{ "{:.1%}".format(metrics.accuracy.univariate) }}{{ "{:.1%}".format(metrics.accuracy.bivariate) }}{{ "{:.1%}".format(metrics.accuracy.coherence) }}
{{ accuracy_matrix_html_chart }}

{{html_assets['explainer.svg']}}
Explainer
Accuracy of synthetic data is assessed by comparing the distributions of the synthetic (shown in green) and the original data (shown in gray). For each distribution plot we sum up the deviations across all categories, to get the so-called total variation distance (TVD). The reported accuracy is then simply reported as 100% - TVD. These accuracies are calculated for all univariate and bivariate distributions. A final accuracy score is then calculated as the average across all of these.
{% endif %} {% if similarity_pca_html_chart %}

Similarity

{{ similarity_pca_html_chart }}

{{html_assets['explainer.svg']}}
Explainer
These plots show the first 3 principal components of training samples, synthetic samples, and (if available) holdout samples within the embedding space. The black dots visualize the centroids of the respective samples. The similarity metric then measures the cosine similarity between these centroids. We expect the cosine similarity to be close to 1, indicating that the synthetic samples are as similar to the training samples as the holdout samples are.
{% endif %} {% if is_model_report %}

Distances

{% if metrics.distances.ims_holdout is not none %} {% endif %} {% if metrics.distances.ims_holdout is not none %} {% endif %} {% if metrics.distances.dcr_holdout is not none %} {% endif %}
Synthetic vs. Training Data(Synthetic vs. Holdout Data)
Identical Matches {{ "{:.1%}".format(metrics.distances.ims_training) }}({{ "{:.1%}".format(metrics.distances.ims_holdout) }})
Average Distances {{ "{:.3f}".format(metrics.distances.dcr_training) }}({{ "{:.3f}".format(metrics.distances.dcr_holdout) }})

{{ distances_dcr_html_chart }}

{{html_assets['explainer.svg']}}
Explainer
Synthetic data shall be as close to the original training samples, as it is close to original holdout samples, which serve us as a reference. This can be asserted empirically by measuring distances between synthetic samples to their closest original samples, whereas training and holdout sets are sampled to be of equal size. For the visualization above, the distances of synthetic samples to the training samples are displayed in green, and the distances of synthetic samples to the holdout samples (if available) displayed in gray. A green line that is significantly left of the gray line implies that synthetic samples are closer to the training samples than to the holdout samples, indicating that the data has overfitted to the training data. A green line that overlays with the gray line validates that the trained model indeed represents the general rules, that can be found in training just as well as in holdout samples.
{% endif %}