Dynamic Yield affinity-based personalization enables you to translate user engagement and interactions with your products (say, product views or purchases) into an affinity profile that helps you present product recommendations and promotions based on user preferences, as follows:
- Built into Experience OS is a system that calculates preference scores for attributes you define in your product catalog. Based on this affinity, you can recommend pink products to users whose favorite color is pink or target a new shoe collection promotion to users who are interested in shoes. Learn more about how the profile scoring is done in the How the affinity profile is built section of this article.
- AffinityML, part of the AdaptML package, uses deep learning to go beyond attribute preferences to predict purchasing intent based on both historical and real-time user behavior. To acquire AffinityML, contact your Customer Success Manager.
How you can leverage user affinity
The affinity profile of a user can be used in several ways:
- Recommendations: A recommendation algorithm that enables you to recommend products according to each user's past behavior. For example, if the user purchases lots of black shirts, the algorithm will recommend more black shirts to them.
- Affinity allocation: Target users by what you know they like, based on their affinity profile, in a process more precise than rule-based targeting.
- Audiences: Affinity-based audiences enable you to target users with a strong affinity to a specific value of a specific attribute (for example, a high affinity to black shoes).
- Retrieve user affinity data via API: Use Profile Anywhere to get affinity data generated by Dynamic Yield, and then use it to offer users enhanced personalized experiences across all your touchpoints, online and offline.
Selecting attributes to add to your user affinity profile
Work with your Customer Success Manager to set this up:
- Click Assets in the top navigation and click Data Feeds.
- Click the View Feed icon in the Product Feed row.
- Select the attributes from the Affinity Profile Attributes dropdown, and then click Save.
Note that although all the columns from your product feed appear in the dropdown, and therefore can be selected, affinity is not calculated for the following attributes:
group_id | name | URL | price | image_url
Limitations
Affinity-based performance can be degraded when selecting attributes that exceed our cardinality guidelines. Make sure that you don't select attributes that exceed the following limits:
- Categories and keywords must not exceed 1,000 unique combinations of pipe-separated values.
- All other attributes must not exceed 500 unique values.
Best practices
To maximize the potential of affinity personalization, use the following guidelines when working with your account manager to select product attributes for Affinity calculation:
- Less is more: Select up to five attributes.
- Select only attributes that you want to employ in campaigns or have represented in product recommendations. Unnecessary attributes add noise to product recommendations.
- Select attributes that offer a valid value for every SKU (or most SKUs). Avoid values like “not applicable” or special characters. If absolutely necessary, leave the value empty.
- Select only attributes that imply users’ preferences for other products and categories. For example, if purchasing a product made of cotton implies that a user is likely to purchase cotton products from other categories as well, then "material" is a suitable attribute.
- Avoid attributes with frequently shifting values. For example, “On_Sale” is not ideal as its values frequently change from “true” to “false.”
- Break down multi-value categories into single-value attributes. For example, for a category with multiple values like women|shoes|slippers, use three columns as follows:
- ‘category_l1’=”women”
- ‘category_l2’=”shoes”
- ‘category_l3’=”slippers”
How the affinity profile is built
This method refers to the affinity profile built into Experience OS. Learn more about AffinityML in the dedicated article.
Step 1: Collection
For each engagement type, Dynamic Yield collects all the product attribute values that the user interacted with. We start collecting product interaction from the first product or category pageview, add to cart, or purchase. In the context of a single visitor, we can imagine the following table:
Attribute: |
Color |
Style |
Gender |
Price Range |
||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Value: |
green |
red |
blue |
T |
tank |
cami |
Men |
Women |
Boys |
Girls |
<$50 |
>$50 |
Product view |
4 |
6 |
2 |
12 |
0 |
0 |
12 |
0 |
0 |
0 |
12 |
0 |
Add to cart |
1 |
1 |
0 |
2 |
0 |
0 |
2 |
0 |
0 |
0 |
2 |
0 |
Purchase |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
This table describes the following session: A visitor generated 4 pageviews in which the product color was green, 6 in which the product was red, and 2 that were blue. All viewed items were men's T-shirts priced under $50. The user added two items to the cart (red and green T-shirts) but ultimately bought a single red T-shirt.
Note: A limited set of product attributes is used in affinity calculations to ensure that the calculations are performed efficiently. You can view the attributes included in the calculation at the top of your product feed page. To modify the list of attributes, speak to your Customer Success Manager.
Step 2: Calculating
The score sums up the total engagements for each value, weighted by engagement type and engagement recency.
Engagement type weight
Each interaction type (such as product view or add to wishlist) receives a coefficient determined by an assumed "level of intent" of that interaction. For example, a purchase receives more weight than an add-to-cart, which receives more weight than a product view. When calculating the attribute value score, the number of occurrences of each engagement type is multiplied by the engagement type coefficient.
∑ engagement type weight * attribute value count = score
You can adjust the automatically calculated weight of the coefficient to meet your particular business needs. If you need to adjust the weights of these interactions, speak to your Customer Success Manager.
Let’s assume the following coefficients: Purchase weight is 4, add to cart weight is 2, and product view weight is 1. The total score for attribute value “color:red” is (1x6)+(2x1)+(4x1) = 12
Weight |
Color |
|||
---|---|---|---|---|
green |
red |
blue |
||
Product view |
1 |
4 |
6 |
2 |
Add to cart |
2 |
1 |
1 |
0 |
Purchase |
4 |
0 |
1 |
0 |
Score |
6 |
12 |
2 |
Engagement recency weight
To identify user intent in real time as well as preference changes over time, each interaction receives a recency coefficient, to favor recent activity over historical activity. There are three supported recency periods:
- Real-time: The last 48 hours, including the current browsing session
- Recent history: The last 30 days
- Old history: The last 12 months
When calculating an attribute value score, the score is multiplied by the recency weight too.
∑ recency weight (engagement type weight x attribute value count) = score
Let’s assume that the user from our previous example comes back to the site 2 weeks later and purchases the green T-shirt he abandoned in the cart last time. Assuming that the recency coefficients are 8 for real-time interaction and 2 for recent interactions, the calculation of a total score for the color green is now: 2(1x4)+2(2x1)+2(4x0) + 8(4x1)= 44
Attribute: |
Color |
||||
---|---|---|---|---|---|
Recency |
Value: |
Weight: |
green |
red |
blue |
Recent history (weight = 2) |
Product view |
1 |
4 |
6 |
2 |
Add to cart |
2 |
1 |
1 |
0 |
|
Purchase |
4 |
0 |
1 |
0 |
|
Score |
6×2=12 |
12×2=24 |
2×2=4 |
||
Real-time (weight = 8) |
Purchase |
4 |
1 |
0 |
0 |
Score |
4×8=32 |
0 |
0 |
||
Total Score |
44 |
24 |
4 |
Engagement-type incidence normalization
Every additional add-to-cart and purchase event done after a pageview is also normalized based on its incidence in the section. This is done by multiplying the event by the ratio of that engagement type compared to the number of pages viewed on the website. The reasoning is to properly weigh based on how many of the events are on the site. For example, fashion sites have many add-to-cart events, while a high-end furniture store has fewer; so an add-to-cart on the former has lower significance compared to the latter. In other words, the goal is to consider the interaction type rarity (compared to pageviews). Each affinity score is then multiplied by a relevant incidence factor.
Continuing the same example, assuming there were 100 pageviews, 20 additions to the cart, and 5 purchase events, the total score is changed:
Recency |
Engagement |
Weight | Green |
Incidence factor |
Final Score |
---|---|---|---|---|---|
Recent history (weight = 2) |
Product view |
1 | 4 |
1 |
1*4*1=4 |
Add to cart |
2 | 1 |
100/20=5 |
2*1*5=10 | |
Purchase |
4 | 0 |
100/5=20 |
4**0*20=0 | |
Score |
|
14*2=28 | |||
Real-time (weight = 8) |
Purchase |
4 | 1 |
100/5=20 |
4*1*20=80 |
Score |
|
80*8=640 | |||
Total Score |
|
|
640 |
Note:
- A product view always has an incidence factor of 1.
- The section's statistics are calculated based on a 1-year period.
- For all periods, the same metrics are used to calculate the incidence factor (as in the example).
For users that are identified on multiple devices, the affinity profile is calculated based on cross-device behavior.
Inferred vs. explicit affinity
Dynamic Yield creates and updates each user's affinity profile in real time, based on historical engagement signals that are collected and analyzed, as well as real-time behavior and preferences exhibited during the current session.
Inferred affinity data is information based on behavior from which affinity can be implied, like adding items to a wishlist, making a purchase, viewing a product or category page, adding to the cart, sorting items, and so on.
A user's affinity profile can also be informed and enriched with information that users explicitly and voluntarily provide themselves about what they like. This explicit affinity data, also knows as "zero-party data", can be collected in various ways, including surveys, onboarding forms, loyalty club registrations, or hitting "like" buttons. It's extremely valuable and reliable data for personalization, because users know themselves best.
Dynamic Yield offers several ways to help you leverage this type of information, including the Inform Affinity event, and out-of-the-box templates.
Inform Affinity event
The Inform Affinity event (available in both script and server-side API) reports zero-party data for use in affinity-based personalization and AffinityML. The event reports product attributes and values (for example, if the attribute is "categories" the values could be "sportswear", "loungewear", and "sleepwear", or if the attribute is "color" the values could be "black", "red", and "white"). Attributes and values must correspond exactly to the product feed.
When these values are reported, the user's affinity score for these attributes is boosted to the top of their profile for the next 48 hours: This directly answers user expectations as they have provided. After this initial period, the attributes are included in the infinity score as ordinary affinity events with static weight and normal recency considerations (if you need to adjust this, speak with your account manager).
The following out-of-the-box templates incorporate the Inform Affinity event, and automatically apply the affinity score boost to the items selected by the user.
Affinity Onboarding Questionnaire
The Affinity Onboarding Questionnaire is a Dynamic Yield out-of-the-box notification template that you can use to ask your users what they like, and then use the information to maximize personalization and drive conversions.
Product Finder
The Product Finder template is a tool you can use to help your site visitors select a product, whether for themselves or as a gift. The template enables you to ask users a series of questions, and then presents them with matching personalized product options. This can save the user time and stress, while also fitting in with your marketing goals.