Aller au contenu

Maturité utilisateur

La maturité utilisateur est une classification automatique des utilisateurs en segments comportementaux. Au lieu de segmenter manuellement les utilisateurs, Presage calcule la maturité à partir des signaux comportementaux.

SegmentDescriptionSeuil par défaut
newVient de commencer3 sessions ou moins
onboardingEn phase d’apprentissage4-10 sessions
activeUtilisateur régulier ayant dépassé l’intégrationPlus de 10 sessions, moins de 5 fonctionnalités utilisées
powerAdopteur intensif de fonctionnalités5+ fonctionnalités distinctes utilisées
dormantEst devenu silencieux14+ jours depuis la dernière visite

Le calcul suit cet ordre de priorité :

  1. Vérification dormant — Si l’utilisateur n’a pas été vu depuis dormantDaysInactive jours, il est dormant (indépendamment des autres signaux)
  2. Vérification nouveau — Si sessionCount est inférieur ou égal à newMaxSessions, il est new
  3. Vérification power — Si le nombre de fonctionnalités distinctes utilisées est supérieur ou égal à powerMinFeatures, il est power
  4. Vérification onboarding — Si sessionCount est inférieur ou égal à onboardingMaxSessions, il est onboarding
  5. Par défaut — Sinon, il est active
// Simplified version of the actual computation
function computeMaturity(signals: BehavioralSignals, config: MaturityConfig): Maturity {
const daysSinceLastSeen = daysBetween(new Date(signals.lastSeenAt), new Date())
if (daysSinceLastSeen >= config.dormantDaysInactive) return 'dormant'
if (signals.sessionCount <= config.newMaxSessions) return 'new'
const featuresUsed = Object.keys(signals.featureUsage).length
if (featuresUsed >= config.powerMinFeatures) return 'power'
if (signals.sessionCount <= config.onboardingMaxSessions) return 'onboarding'
return 'active'
}

Surchargez n’importe quel seuil via la configuration maturity :

const client = createAdaptiveClient({
maturity: {
newMaxSessions: 5, // Consider "new" for 5 sessions instead of 3
onboardingMaxSessions: 15, // Extend onboarding period
powerMinFeatures: 8, // Require more features for "power" status
dormantDaysInactive: 30, // Wait longer before marking as dormant
},
// ...rules, persistence
})

L’interface de configuration complète :

interface MaturityConfig {
newMaxSessions: number // Default: 3
onboardingMaxSessions: number // Default: 10
powerMinFeatures: number // Default: 5
dormantDaysInactive: number // Default: 14
}

La maturité est accessible au niveau racine du contexte (pas imbriquée sous traits ou signals) :

{
id: 'new-user-onboarding',
adaptationId: 'onboarding',
priority: 10,
conditions: {
all: [
{ field: 'maturity', operator: 'eq', value: 'new' },
],
},
action: { type: 'show', variantId: 'guided-tour' },
}

Vous pouvez combiner la maturité avec d’autres conditions :

{
id: 'dormant-enterprise-reactivation',
adaptationId: 'banner',
priority: 20,
conditions: {
all: [
{ field: 'maturity', operator: 'eq', value: 'dormant' },
{ field: 'traits.plan', operator: 'eq', value: 'enterprise' },
],
},
action: { type: 'show', variantId: 'reactivation-offer' },
}

Exemple : Un onboarding différent pour chaque niveau de maturité

Section intitulée « Exemple : Un onboarding différent pour chaque niveau de maturité »
import { createAdaptiveClient, createLocalStorageDriver } from '@presage-kit/core'
const client = createAdaptiveClient({
rules: [
{
id: 'new-guided-tour',
adaptationId: 'onboarding',
priority: 50,
conditions: {
all: [{ field: 'maturity', operator: 'eq', value: 'new' }],
},
action: { type: 'show', variantId: 'guided-tour' },
},
{
id: 'onboarding-tips',
adaptationId: 'onboarding',
priority: 40,
conditions: {
all: [{ field: 'maturity', operator: 'eq', value: 'onboarding' }],
},
action: { type: 'show', variantId: 'contextual-tips' },
},
{
id: 'active-whats-new',
adaptationId: 'onboarding',
priority: 30,
conditions: {
all: [{ field: 'maturity', operator: 'eq', value: 'active' }],
},
action: { type: 'show', variantId: 'whats-new' },
},
{
id: 'power-changelog',
adaptationId: 'onboarding',
priority: 20,
conditions: {
all: [{ field: 'maturity', operator: 'eq', value: 'power' }],
},
action: { type: 'show', variantId: 'changelog-only' },
},
{
id: 'dormant-reengagement',
adaptationId: 'onboarding',
priority: 60,
conditions: {
all: [{ field: 'maturity', operator: 'eq', value: 'dormant' }],
},
action: { type: 'show', variantId: 'welcome-back' },
},
],
persistence: {
driver: createLocalStorageDriver('my-app'),
},
})

Puis dans votre composant React :

import { Adaptive, Variant } from '@presage-kit/react'
function OnboardingFlow() {
return (
<Adaptive id="onboarding" defaultVariant="contextual-tips">
<Variant id="guided-tour">
<GuidedTour />
</Variant>
<Variant id="contextual-tips">
<ContextualTips />
</Variant>
<Variant id="whats-new">
<WhatsNew />
</Variant>
<Variant id="changelog-only">
<Changelog />
</Variant>
<Variant id="welcome-back">
<WelcomeBack />
</Variant>
</Adaptive>
)
}

La maturité est recalculée chaque fois que les signaux changent (après chaque appel track()). Cela signifie qu’un utilisateur peut transiter entre segments au cours d’une même session :

  1. L’utilisateur arrive (session 1) → new
  2. L’utilisateur revient pour la session 4 → onboarding
  3. L’utilisateur utilise 5 fonctionnalités distinctes → power
  4. L’utilisateur disparaît pendant 14 jours → dormant

Votre interface s’adapte à chaque transition sans aucune intervention manuelle.