> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allyy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# From predictions to decisions

> How Allyy turns model scores into an optimised, ranked action list

A prediction tells you *how likely* or *how much* for each contact. A **decision** turns that into action: **who to contact, in what order, and how far down the list to go** — given your budget and goals.

> [!NOTE]
>
> "Decision" is the combination and optimisation of one or more model scores into a contact list. (Not to be confused with [content recommendations](https://docs.allyy.io/integrations/content_recommendation.md), which is a separate recommender feature for your CMS.)

## Why scores aren't enough on their own

Ranking by a single score is a good start, but the best campaigns combine signals and account for cost:

> [card] Combine signals
>
> Multiply **propensity × expected amount** to rank by **expected revenue**, not just likelihood — a contact who'll *probably* give a little may be worth less than one who'll *possibly* give a lot.

> [card] Account for cost
>
> Every contact costs money. Past a point, mailing more people *lowers* profit. The decision finds where to stop.

## Decision configurations

A **decision configuration** is a reusable recipe — a named pipeline of steps that you define once and re-run each time you need a fresh contact list. Because the same configuration runs before every edition of a campaign, results are consistent and comparable across mailings.

Each time you execute a configuration it produces a **decision run**: a timestamped, labelled contact list ready to export or review.

## What a decision does

**1. Brings scores together**

It pulls in the relevant model scores for your population — for example DM propensity plus expected amount from a recent prediction execution.

**2. Computes a decision value**

It combines them into a single ranking metric. The most common combination is **expected revenue**:

> Expected revenue = Propensity score × Expected donation amount

This ranks each contact by what they're likely to generate, not just how willing they are.

**3. Optimises the volume**

Using a **profit curve** — expected income minus cost as you contact more people — it identifies the volume that maximises return and where you break even.

**4. Segments and labels**

It can split the ranked list into named segments (e.g. high-potential, standard), reserve a slice for testing under-explored contacts, and hold out a control group to measure impact.

**5. Produces the final list**

The output is a ranked, labelled contact list ready to [export](https://docs.allyy.io/predictions/exporting.md) to your CRM, mailing house, or other tool.

## Segments

A decision can split the contact list into named groups based on score thresholds or rules:

| Segment | Typical meaning |
| - | - |
| **High-potential** | Top scorers — strong expected value, prioritised for your best offer. |
| **Standard** | Mid-range scorers — worth contacting but at a lower expected return. |
| **Low-potential / Not selected** | Below the threshold — expected value too low to justify contact cost. |
| **Control** | Randomly withheld from contact — used to measure the true uplift of the campaign. |
| **Core** | Selected by score (the top of the ranked list). |
| **Exploration** | Deliberately selected *despite* a lower score — see [Exploration quota](#exploration-quota) below. |

Segment names and thresholds are configurable per decision.

## The profit curve, in plain terms

Imagine ordering every contact best-first. As you add more, total income keeps rising but each extra contact adds cost and brings a less-likely contact. Plot profit against volume and you get a hump: profit climbs, peaks, then falls.

> [card] Optimal volume
>
> The peak — contact this many for maximum profit.

> [card] Break-even
>
> The point past which extra contacts cost more than they bring in.

> [card] Confidence band
>
> A range around the peak — the curve is often flat on top, so nearby volumes are about as good.

The curve is built from **historical calibration data**: past mailings where you know who was contacted, what they gave, and what their score was at the time. Allyy bins contacts by score, estimates the incremental value of each score band, and projects the curve forward. The better your historical data, the more reliable the volume recommendation.

> [!TIP]
>
> The model-evaluation dashboards let you explore exactly this with a cost-per-letter input and an as-is vs optimised comparison — see [Model evaluation dashboards](https://docs.allyy.io/dashboards-evaluation/overview.md).

## Control group

A control group is a randomly sampled slice of the eligible population that is **withheld from contact**. After the campaign you can compare their actual behaviour against the contacted group to isolate the uplift — the effect of mailing itself, not just the natural behaviour of likely donors.

You can size the control group in several ways:

| Method | Example | Result |
| - | - | - |
| Percentage of population | 20% | One in five eligible contacts → control |
| Fixed number | 5 000 contacts | Exactly 5,000 withheld |
| Selection size + ratio | Select 15 000; 25% control | 3,750 withheld; 11,250 contacted |
| Experiment arms | Treatment 70%, Control 30% | Deterministic, persistent allocation per contact |

Experiment arms are useful when you want **consistent group membership** — the same contact will always land in the same arm across re-runs, making longitudinal measurement reliable.

## Exploration quota

Over time, a model that only ever contacts the top-scored contacts stops learning about the rest of the audience. The **exploration quota** (also called *reserve*) deliberately includes a small number of lower-scored or under-contacted contacts in each contact list.

This serves two purposes:

1. **Cold-start fairness** — new or lapsed contacts get occasional exposure rather than being permanently excluded.
2. **Model improvement** — their responses (positive or negative) feed back into future training, keeping the model calibrated across the full contact base.

A typical configuration might reserve 10% of the contact volume for exploration, drawn randomly from contacts below a score threshold.

## Next

→ [Exporting decisions](https://docs.allyy.io/predictions/exporting.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.