Skip to main content
Rewards are the events that define success for an element. Each is declared by event name, with an optional window, weight, type and filter. Curious optimizes the composite: the weighted sum of the expected rewards.
A bare name is shorthand for a binary reward with the defaults. rewards accepts a name, an object, or a list of either.

Fields

Types

The type is the statistical shape of the outcome and selects the model Curious fits. It is declared, never guessed from data.
  • binary: did it happen. email_clicked, signed_up. The event’s value is ignored.
  • count: how many times. added_seats, pages_viewed. Each event counts once regardless of its value.
  • semicontinuous: did it happen, and how much. purchased with an amount. Zero when it did not happen, the amount when it did.
  • continuous: a measured value every time. nps_submitted with a score.

Where a semicontinuous amount comes from

value names the source, for semicontinuous rewards only. event.value (the default) reads the event’s value. event.properties.<key> reads a property, such as event.properties.amount_usd. arm.<field> reads a top-level field of the served arm’s content, which is how a price in the content becomes the amount; the format must then bound that field as a number with min and max.

Weights and costs

The composite is sum(weight × expected reward). A negative weight turns an event into something Curious avoids: refunded at -0.5, unsubscribed at -1. Weight 0 is a 400, because a reward that counts for nothing should not be declared.

Windows

The window starts at the decision. An event inside it attributes to that decision; an event after it does not. A new decision for the same user and element ends the previous decision’s window early, so an event always lands in exactly one window. Give each reward the window its outcome needs: a day for a click, a month for a refund. See Events and attribution.

Baseline rate

baseline_rate is optional prior information: the rate the control achieves today, in the reward’s own units. For binary and semicontinuous rewards it is an occurrence probability strictly between 0 and 1; for count a strictly positive expected count; for continuous any finite value. It sharpens Curious’s starting beliefs and is monitored against what the control actually does. It is never identity: changing it does not restart the experiment, and it is read once, when the experiment is created.

Changing rewards

Rewards fix the structure of the model, so any change to the list supersedes the experiment and starts a new one. Declare them deliberately and keep them in one place. See Declarations.