> For the complete documentation index, see [llms.txt](https://docs.rootcause.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rootcause.ai/more-details/digital-twin/model-quality.md).

# Reviewing Model Quality

Causal discovery finds relationships; evaluation tells you how trustworthy the model actually is. The **Evaluation** tab shows overall predictive accuracy, per-variable performance, and side-by-side version comparisons.

Read this before you trust simulation results. A model that predicts poorly will also simulate poorly.

For context, see [Step 5: Build Digital Twin](/user-guide/creating-digital-twin.md) and [Exploring the Causal Model](/more-details/digital-twin/exploring-causal-model.md).

***

## Opening the Evaluation tab

The twin's Home shows the headline accuracy figure on its **Model evaluation** card; open the card for the full view, which fills the page: the best-predicted charts and per-node metrics on the left, with a **Configuration** panel on the right holding the **Version comparison** selector (and, on multi-environment twins, an Environment scope summary).

<figure><img src="https://1662811113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBXg3gZLR0e2Q8SzeQmql%2Fuploads%2Fgit-blob-59ad113c9984e15686216b7c1a6305a22b14a567%2Frc-evaluation-tab-full.png?alt=media" alt="The Model Evaluation page for a 21-variable, 33-relationship churn model: the Best Predicted Categories and Best Predicted Numeric Variables charts on the left, and the Configuration panel with its Version comparison selector on the right"><figcaption><p>The full Evaluation view. Everything on it is per variable; the charts and the table below them are the whole verdict.</p></figcaption></figure>

***

## Where the headline number lives

The Evaluation view carries no aggregate grade: it is per variable throughout. The single headline figure is on the twin's Home instead, on the **Model evaluation** row, which reads `NN% model fit` — or "Very weak numeric fit — open for detail" when the fit is poor enough that a number would flatter it. The sentence interpreting that score sits in the row's help text.

That average covers the variables the model can be scored on: observed variables with at least one cause in the graph. Two kinds are left out. Variables with no causes are not scored at all. Columns computed exactly from a formula are scored but not averaged, because the model does not learn them — a total that is the sum of two other columns would score near-perfectly and say nothing about the model. A derived column the model only *approximated* is not a formula, so it stays in.

One number rarely settles anything. The variable you care most about may score very differently from the average, so read the per-variable table below before judging a model.

***

## Best predicted variables

Two bar charts show up to five scored variables each:

* **Best Predicted Categories** — scored by accuracy: the percentage of correct predictions. 100% means every prediction was right.
* **Best Predicted Numeric Variables** — scored by R²: how much of each variable's variation the model can explain. 1.0 is perfect; 0 is no better than guessing the mean; negative means worse than that. Where no R² is available — typically a forecasting twin — the same chart uses MAPE, the average percentage the forecast is off by, where lower is better, and the section's description says so.

***

## Per-variable metrics

The table at the bottom of the panel shows every variable and its performance. Click a category or boolean row to expand a per-class accuracy and F1 breakdown. On a forecasting twin, clicking a numeric row expands its MAPE curve across forecast horizons instead; numeric rows on a static twin do not expand.

| Variable type                    | Metrics shown                                                                                                        |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Boolean / Category (static twin) | Accuracy, Precision, Recall, F1, Weighted Accuracy, AUC                                                              |
| Boolean / Category (time series) | Accuracy, Precision, Recall, F1, Weighted Accuracy                                                                   |
| Numeric                          | MSE, MAE, R², Log Likelihood                                                                                         |
| Numeric (time series)            | MSE, MAE, R², Log Likelihood, plus a MAPE summary (first → last forecast horizon; expand the row for the full curve) |

Reading the classification metrics:

* **Accuracy** — overall correctness.
* **Precision** — when the model says "yes", how often is it right?
* **Recall** — of all true "yes" cases, how many did the model find?
* **F1** — the harmonic mean of precision and recall.
* **AUC** — discrimination ability. 1.0 is perfect; 0.5 is chance.

For rare-event variables, precision and recall are usually more informative than accuracy alone.

***

## Comparing versions

The **Version Comparison** dropdown selects one or more versions to chart side by side. Useful for confirming a configuration change improved things — and for spotting versions that improved some metrics while quietly degrading others.

***

## When a variable scores poorly

A low metric is information, not a verdict. Common causes:

* **Missing causes.** The variable's true drivers aren't in the model.
* **Data quality.** Noise, errors, or too many missing values.
* **Wrong model type.** A time-dependent variable in a static twin.
* **Too little data.** Not enough examples to learn the pattern.

If the missing driver is already a column in the Dataset, open the twin's Config tab, click **Modify model**, include the field, and retrain — see [Configuration for Existing Twin](/more-details/digital-twin/configuration.md). If it isn't in the Dataset yet, add it there first (see [Build 360 Table](/user-guide/data-views.md)), then rebuild. If the variable is genuinely hard to predict, that's a constraint to remember for any simulation that touches it.

***

## Other Working with a Digital Twin pages

* [Exploring the Causal Model](/more-details/digital-twin/exploring-causal-model.md) — graph layouts and variable details.
* [Inspecting Causal Relationships](/more-details/digital-twin/causal-relationships.md) — individual edges and their statistics.
* [Configuration for Existing Twin](/more-details/digital-twin/configuration.md) — model settings, included variables, constraints.
* [Version History](/more-details/digital-twin/version-history.md) — multiple versions of the same twin.

See [Digital Twin overview](/more-details/digital-twin.md) — general overview.
