How scoring works
Optimize Deprecation
Uniform Optimize has been deprecated and replaced by Context, a more powerful and flexible personalization solution. Optimize is not being discontinued at this time, but it will not receive updates or new features.
We do not recommend starting a new project with Optimize. If you have an existing project that uses Optimize, you can upgrade your project to Context at no cost using our upgrade guide. If you have any issues with this process you can contact our team.
The visitor's intent scores are calculated based on each signal's strength that the visitor has triggered.
Let's take the following intent manifest:
- Intent: Foo
- Signal: Query String,
?foocontainsbar, strength Normal (50%).
- Signal: Query String,
In this situation, a visitor who visited https://mysite.com/any/page?foo=bar would receive +50 score in the Foo intent:
// uniform_trk_visitor_score cookie
{ "foo": { "str": 50 } }
Signals can also have negative strength - in this case, they subtract intent score if triggered.
A visitor with a 100 score in an intent that triggered would leave a signal with -50 strength with only a 50 score left, cannot reduce scores below zero.
Signals can also have the special strength value of 0. Signals with zero strength remove all score in the intent, regardless of how much there is.
A visitor with 451 score in an intent who triggered a signal with 0 strength would then have 0 strength in that intent.
Scope
A signal can set the scope of its effect.
- Visit-scoped signals - cause a score change only for the current visit; it will remove the score after a short inactivity period.
- Visitor-scoped signals - cause a score change for as long as the visitor does not clear their Optimize data ('forever').
Technically these are implemented by storing a score vector for each scope. These scope vectors are merged when the current visitor scores are calculated;
for example, if you have dev: 25 in visitor, and dev: 75, mkt: 25 in visit, then your intent score is dev:100, mkt:25.
tip
Signals with 0 strength that remove all score in an intent are scope-specific.
If that signal has scope visit, it would remove all visit score for the intent but not affect visitor score.
If you wanted to clear all intent regardless of scope, you would create two signals - one for each scope - with 0 strength.
Frequency
Signals support the concept of frequency which enables control of how often a signal may trigger. For example, you may not wish for a query string signal to continue adding more intent score if a visitor refreshes the page or for a cookie signal to continue increasing intent score every time a page is visited and the cookie is set.
- Visit frequency signals can fire at most once per visit.
- Once frequency signals can fire, at most, once per visitor unless the visitor clears their Optimize data.
- Always frequency signals fire every time they evaluate to true.
Behavior Scoring
Behavior signals have special scoring rules because:
Behavior Signals Have Two Strength Values
The behavior signal added to the intent has a strength value as does the intent tag on the content. It provides independent control over how strong a signal behavior is and how strongly correlated a tagged piece of content is to the intent.
We might say that behavior is a Strong signal in the dev intent but that an intent tag on a technical author is a Weak indicator of interest in dev.
This is because the technical author might write about more than dev-related content.
Behavior intents' two strengths are combined as an average.
For example, if the intent strength is 50% and the tag strength is 75%, the base final strength is (50 + 75) / 2 = 62.5, which turns into 62.5 score added to the visitor's intent.
One Route Can Have Many Content Items with Intent Tags
Visiting a news release page might have an intent tag on the release copy itself, the release's author(s), or a call to the action shown with the release. In this situation, Optimize dilutes each behavior score's strength based on the number of behaviors being tracked. For example, suppose we have the following behaviors:
- Author: Intent
dev, strength 50, intent tag strength 50 - News release: Intent
marketer, strength 50, intent tag strength 50 - Call to action: Intent
dev, strength 50, intent tag strength 100
First, we scale the tags by their two strength values as discussed above:
- Author:
dev 50((50 + 50)/2) - News release:
marketer 50((50 + 50)/2) - Call to action:
dev 75((50 + 100)/2)
Next, we divide each score by the number of behaviors being tracked - so we divide each scaled score by 3 in this case:
- Author:
dev 16.66(50/3) - News release:
marketer 16.66(50/3) - Call to action:
dev 25(75/3)
Finally, we sum the scores for each intent, resulting in a net intent score change of:
dev 41.66(16.66 + 25)marketer 16.66
This dilution prevents a single page with several behavior tags from overwhelming the strength of other signals.
Decay
Uniform Optimize will automatically decay intent strength over time calculated when a new visit occurs. The default decay algorithm will cause intent scores to wither over a 30-day time scale based on the time since the previous visit.
This is not an absolute time scale - frequent visits will cause less overall decay, for example, given a visitor with a100 score in an intent:
- Visitor returns after 30 days: they have
0score in that intent. - Visitor returns after 10 days: they have
66score in that intent. - Visitor returns daily for 10 days: each day they return, they will lose
1/30of their remaining intent score:- On day 2,
100 * 0.966 = 96.66 - On day 3,
96.66 * 0.966 = 93.44 - ...
- On day 10,
76.24- more than the 66 they would have without the daily engagement
- On day 2,
tip
Intent decay is done on an absolute time scale: the decay amount is calculated by the exact amount of time since the last interaction, not whole days.