Skip to main content

How personalization works

Uniform Optimize uses intent scores to allow simple selection of personalized content variations. Using intent scores provides a simple and understandable abstraction compared to a super complex rules engine.

Selecting Personalized Variations#

Personalized variation selection is easy to understand: Uniform Optimize will select the most relevant variation given an array of variations. This selection is based on an intent tag that defines the intent(s) relevant to the variation. Variation data generally would come from a headless CMS, but that is not a requirement - the intent tag is simple JSON data:

const variations = [  {    // other properties of your data are allowed here,    // i.e. title, content, etc
    // tag this variation as being for `intent_1`    intents: {      intent_1: {},    },  },  {    // tag this variation as being for `intent_2`    intents: {      intent_2: {        // intent tags can optionally have a strength, just like signals        // this can help tie-break variation selection        str: 100,      },    },  },  {    // this variation does not have an intent tag    // it will be selected if a visitor has no intent overlap    // with any personalized variations  },];

Given the above variation data and a visitor with:

  • Score in intent_1: the first variation is selected
  • Score in intent_2: the second variation is selected
  • Score in intent_3: no variation exists for intent_3, so the third (default) variation is shown
  • Score intent_1: 50, intent_2: 25: the first variation is selected as intent_1 has more strength
  • No score: the third (default) variation is shown

Relevance Calulation#

It is also possible to have a mesh of matches since a visitor can score in more than one intent. In this situation, a visitor may partially match more than one intent with a personalized variation or even match more than one variation; the variant itself may also be tagged for several intents.

For example, it might show a visitor personalized content with the following variation data:

[  { id: 1, intents: { intent_1: {} } },  { id: 2, intents: { intent_2: {} } },  { id: 3, intents: { intent_1: { str: 25 }, intent_2: { str: 25 } } },];

If more than one intent could match, Uniform Optimize uses vector algebra to determine the most relevant variation. It treats the visitor's intent scores as mathematical vectors and the intersection vector with the intent tag with the largest magnitude is selected.

For example, given the sample variations above and a visitor with scoring:

  • { intent_1: 5000 }: intent ID 1 would be selected
  • { intent_2: 100 }: intent ID 2 would be selected
  • { intent_1: 50, intent_2: 100 }: intent ID 3 would be selected because of the strength in both intents

Override Personalization#

A variation's intent tag can declare itself as an override:

[{ intents: { intent_1: { override: true } } }];

An override variation is always selected regardless of relevancy if there is any strength in the tagged intent. In the above example, a visitor with score 1 in intent_1 will show the variation, regardless of strength, in any other intents.

If more than one variation has override set, then the overrides are chosen according to relevancy like normal variations.

Score Thresholding#

You can set variations to have a threshold to prevent showing personalized content to users with very small intent scores. For example perhaps we wish to show a special offer to a specific intent, but only if they have shown themselves to be pretty serious about that intent. In this case you can set a threshold score and if the visitor's score is below the threshold the variation will not be selected.

If more than one variation has a threshold assigned, the largest matching threshold will be used. For example with these variations:

[  { id: 'default' } },  { id: 'not-so-serious', intents: { intent_1: {} } },  { id: 'y-so-serious', intents: { intent_1: { threshold: 100 } } },  { id: 'real-srs', intents: { intent_1: { threshold: 999 } } },];

A visitor with intent_1 score of:

  • 0 will be shown default
  • 1-99 will be shown not-so-serious
  • 100-998 will be shown y-so-serious
  • 1000-* will be shown real-srs

Programmatic Personalization#

It is possible to personalize functionality with Uniform Optimize and content, such as swapping out a form component. When doing this, you can create your variation array with intent tags and use the standard personalization infrastructure to select variations to receive all functionality, such as analytics emission and variation selection logic.

It is also possible to directly obtain the visitor's intent scores, or their score in a specific intent, directly from the tracker. Anything is possible when doing this, but you are also responsible for any analytics and selection logic. The getIntentScores() and getIntentScoresSingle() functions do this.

Personalization Lifecycles#

Personalized Rendering Flow#

Server-side Rendered Personalization Flow#

Edge Personalization Flow#

Edge based personalization is a technique where your site is statically rendered and deployed to an origin of your choice. When a page request is received, the file is retrieved from your origin (or from cache) and personalized based on the visitors personalization scoring. Interested in this technique? Contact us to get started.