Organic Carousels

How Promoted optimizes content items within ordered groups

A carousel is an ordered group of items, positioned in a scrollable, horizontal list UI, allowing a single viewable slot to feature multiple items. The individual carousels may be formed into a vertical list, each slot containing a horizontally scrollable group of items. Carousels are a method of discovery that allow for two-dimensional interactivity, allowing the user to find relevant items more quickly.

This format is common among apps and websites with a vertical list of product categories, each featuring a carousel of multiple items within that category. For example, food delivery apps like Doordash or Uber Eats use carousels to feature multiple restaurants in different categories, like "fast delivery" or "healthy."

👍

Promoted can optimize ordered groups of content items in any format.

The group does not necessarily have to be a carousel, which implies a horizontal scrolling UI of items. It may be any ordered sequence of items — in a sense, a “page within a page," and it is allocated as such in Promoted's system.

Unified optimization

Promoted optimizes both the order of carousels and the items within carousels, all in a unified allocation Delivery API call. Internally, Promoted does two passes of scoring and ranking — one pass for each product item, and one for each carousel group. Each pass has its own parallel conversion joining, model training, and inference loop.

Promoted's unified carousel optimization has three stages:

  1. Assign each content item to a unique carousel optimally.
  2. Allocate the first K items in each carousel independently and in parallel.
  3. Allocate the carousels.

Items within carousels are treated just as regular, non-grouped items are.


🚧

The implementation details below are under construction.

For immediate details on implementing carousels or other groups, please contact Promoted.

Implementation

Delivery API

In Delivery, the Protobuf schema does not change. Use Request.Properties and Insertion.Properties to reflect the grouping. Each request insertion must include a list of one or more “GroupIDs” that the insertion may be allocated to. Each Response Insertion must specify which GroupID it’s allocated to.

Metrics API

Add in the GroupID on the request. Otherwise, there are no changes.

Content API

In the CMS, carousel features are denormalized to each item, so there are no "carousel" content items.