Predict.aiDocs
Goals

Concepts

What a goal is, how discovery runs work, and how champions, the graph, and cost fit together.

What is a goal?

A goal pairs a target with an intent:

FieldWhat it is
target_keyThe signal to forecast — any key you've pushed to Signals
goal_typeWhat kind of answer you want

Four goal types are supported for a single target:

goal_typeThe champion serves
forecast_valueThe target's future values (a point path)
forecast_distributionFuture values with quantile bands (uncertainty)
trendThe likelihood of an upward trend, as a probability
anomalyThe likelihood of anomalous behavior, as a probability

The goal type matters downstream: trend and anomaly goals serve a probability in [0, 1] rather than the target's own scale, which changes which alert metrics apply and how the forecast renders.

A goal can also target a whole population of signals instead of one: pass goal_kind: "fleet" with a target_selector and one of the fleet goal types — rank_by_risk or rank_by_growth. Instead of a champion forecast, the fleet serves a ranked leaderboard of its members, re-scored on a cadence. See Fleet goals.

Auto-everything

Only target_key and goal_type are required. Every setting you omit — horizon_bins, interval_seconds, max_lag_bins — is marked auto and resolved from measured data by the profile stage on every run, so a re-run after new data arrives picks fresh values. An explicit value beats auto and is honored verbatim.

You can see exactly what auto would resolve to before creating anything with GET /v1/goals/profile-preview.

Discovery runs & the funnel

Creating a goal queues a discovery run. Each run walks a funnel of stages — profile the target, build the data grid, generate candidate features, screen and prune them, characterize the survivors, test predictive lift, validate for stability, then write the results as relationships. Every stage records what came in, what survived, and why the rest was rejected, so the run is fully inspectable via GET /v1/goals/runs/{run_id}.

Runs are also how a goal stays current: re-run any time (or let the goal's discovery policy do it) and the funnel re-validates old relationships and folds in new ones.

Champions & tournaments

After discovery, candidate models compete in a tournament: every entry in the lineup trains on the same discovered drivers and is scored on the same purged walk-forward folds, in the goal type's own metric. The best scorer becomes the champion — the model that serves the goal's forecast.

The champion is a normal platform artifact: a pipeline, a training, and a deployment you can see in your workspace. You can override the automatic pick and select any scored entry instead.

The relationship graph

Discovery's lasting output is a graph: the target at the center, connected to the signals and event streams that predict it by scored, lagged edges. Each edge carries:

  • a lag — how far ahead the source leads the target,
  • a strength — correlation and walk-forward lift,
  • a confidence — the validation q-value behind it,
  • a lifecyclevalidated, weakening, exploratory, and so on, as live monitoring re-checks it against fresh data.

The graph powers everything that explains the forecast: drivers-now, scenarios, and multi-hop paths.

Activity & cost

A goal is charged per action, not per month:

  • Discovery runs are charged upfront when queued (discovery.run), scaled by your workspace's candidate volume.
  • Tournaments are one bounded charge (discovery.tournament), scaled by the model selection.
  • Scenarios and their variants charge per simulation; saved results are free to view.
  • Live serving charges per prediction on Shared serving.

Every automated action lands in the goal's timeline with its trigger and its charge, and automated spend is capped per goal per month. Estimate everything before creating with GET /v1/goals/price; rates live in Billing.

On this page