Skip to navigation

Feature Adoption Prediction

View as Markdown

A product growth team wants to offer each user guidance on features they are likely to start using. This example predicts which product features a user will first adopt over the next 30 days. Kumo Engine learns from users and their connected adoption history to make a multilabel prediction: a user can adopt several features in the same period, or none. The feature categories come from recorded adoption history, so this example assumes the features already have historical adopters.

Data and relationships

The example assumes a prepared Kumo Engine graph, a matching snapshot, and these tables:

TableRequired data and role
usersuser_id primary key. The users to score, with optional profile columns.
product_successsuccess_id primary key; user_id, feature, and date_of_success. One row per user’s first adoption of a feature, with a categorical feature name and the time of that first adoption.

Connect product_success.user_id directly to users.user_id. Mark date_of_success as the time column of the product success table and feature as categorical.

Define what counts as adoption, such as completing a first successful export or creating a first dashboard. Prepare exactly one adoption row per user and feature, using the earliest qualifying event across the available history. Repeated use of an already adopted feature must not create another adoption row. If the source history starts after a user began using a feature, the earliest recorded event may not represent their actual first adoption.

The users table has no time column of its own, so the 30-day window starts at the scoring time. It excludes adoptions at that exact time and includes adoptions through 30 days later.

Predict which features a user will first adopt

LIST_DISTINCT(product_success.feature, 0, 30, days) collects the distinct features a user first adopts in the next 30 days. CLASSIFY makes those feature names the labels of a multilabel classification task. A historical window with no first adoptions has an empty target set. A window with two different first adoptions has both feature labels.

from kumo.engine import PredictiveQuery
query_text = (
"PREDICT LIST_DISTINCT(product_success.feature, 0, 30, days) "
"CLASSIFY FOR EACH users.user_id"
)
query = PredictiveQuery(graph, query_text)
query.validate()
print(query.get_task_type()) # multilabel_classification

The query scores the users in the users table, including users with no adoption history. LIST_DISTINCT does not find the first use of a feature for you. The prepared product success table makes the target describe first adoption rather than repeat usage.

Reading the predictions

The prediction estimates each user’s likelihood of adopting each learned feature category in the coming 30 days. Several features can have high scores for the same user because the outcomes are not mutually exclusive. A higher score for dashboard indicates a stronger expectation of a first dashboard adoption during that period.

Use these scores to prioritize feature education or onboarding prompts. Before choosing a prompt, check whether the user has already adopted the feature and whether it is available on their plan. The scores describe expected adoption from historical patterns; they do not measure how much a prompt would increase adoption. Evaluate that effect separately when deciding which outreach to send.