Weekly Behavioural Recommendation System
A production pipeline from second-level telemetry to content embeddings, behavioural vectors, and weekly per-user weight updates.
The challenge
Recommendations could not improve until consumption was measured to the second, aligned with content understanding, and re-weighted per user on a weekly cycle the audience actually follows.
Aggregate metrics (starts, completes, likes) hid the signal that drives good recommendations: which seconds of which titles correlate with sustained engagement versus abandonment. The catalogue mixed genres, narrators, and topic arcs — without a consistent semantic layer, the system could not explain why two sessions looked similar to a user even when titles differed. Prior stacks refreshed too often for users who do not discover new content daily, adding churn to the model without improving relevance. Event volume at second granularity ruled out naive relational designs for hot paths; the team needed clear separation between streaming ingestion, batch recomputation, and serving.
The system
Decision system built
We engineered a recommendation decision system that ingests playback at second resolution, enriches each interval with a content-understanding representation (taxonomy, derived metadata, and dense vectors), and joins engagement to semantics so each user's behaviour is expressed in a comparable vector space. Similarity across users and items informs candidate generation and re-ranking. Per-user weights are recomputed on a weekly schedule — matching validated product analytics — via queued jobs (Redis), with raw and intermediate data landing in S3 and profile or weight documents in MongoDB for schema flexibility and historical audit.
System components
Second-level consumption pipeline: playback position, dwell, skip, and completion events normalised into a time-series model per user per asset
Content understanding layer: unified semantic representation per title/episode (structured tags, text-derived features, and encoded vectors) so seconds listened map to topics and tone, not only IDs
Engagement × semantics join: align each consumption segment to the content state at that timestamp for training and online feature assembly
Behavioural embedding and similarity: vector encodings of user trajectories and catalogue items to surface neighbours in behaviour and in content space
Weekly per-user weight job: batch recompute of ranking weights and preferences from the prior window, published to serving config — tuned to weekly discovery patterns rather than daily noise
Redis: queues and coordination for ingestion workers, feature backfills, and weekly recomputation; low-latency caches where needed for serving hot keys
S3: durable store for raw events, parquet-style aggregates, model artefacts, and reproducibility of weekly training snapshots
MongoDB: document model for user profiles, per-week weight versions, cold-start fallbacks, and catalogue-adjacent metadata that evolves without rigid migrations
Serving integration: candidate retrieval and re-ranking using updated weekly weights with guardrails for freshness, diversity, and business rules
How we worked
Engagement scope
End-to-end design and implementation of second-level ingestion, content understanding and vector pipeline, weekly per-user weight computation, Redis queuing, S3 data lake patterns, MongoDB profile store, and integration with the existing delivery and ranking stack.
Timeline
Phased delivery: ingestion and semantic baseline first, weekly job and serving weights second, iterative model and guardrail tuning against live holdout metrics.
Operating model
Joint squads across data, backend, and product; clear ownership of event contracts, weekly job SLAs, and rollback of weight versions; monitoring on queue depth, job failure rates, and ranking drift week-over-week.
Outcomes
Business impact & measurable results
A production pipeline from second-level telemetry to content embeddings, behavioural vectors, and weekly per-user weight updates.
Recommendations grounded in second-level truth: ranking could distinguish shallow starts from deep listening on the same title
Semantic matching improved relevance for long-tail catalogue items where sparse co-occurrence had previously failed
Weekly refresh cycle aligned with real usage — fewer spurious daily shifts and more stable personalised surfaces for returning listeners
Operational clarity: ingestion, training, and serving decoupled via queues and object storage, with MongoDB supporting iterative schema evolution on profile and weight documents
Vector-based behavioural similarity enabled explainable cohort-style diagnostics (which behaviour clusters drive which recommendations) without exposing individual identities in product surfaces
Governance
Trust, collaboration & governance
Event and profile handling designed around consent and retention policies — second-level data treated as high-sensitivity with minimisation and access controls
Weekly weight publishes versioned and reversible — bad runs do not require a full catalogue redeploy
Cold-start and low-data users routed through explicit fallbacks rather than overconfident personalisation
Content understanding and vectors documented for editorial and trust teams — not a black box to the business
Reframe
Not a daily recommender tuned for constant novelty — a weekly decision system that respects how this audience actually consumes.
Across every engagement, the goal is the same: engineer a system that makes better decisions — faster, more consistently, and at scale — than the process it replaces.
Start a discovery
Most engagements begin with a conversation about context.
We do not send a proposal before we understand the problem. Start by telling us about your decision context — we will identify the highest-leverage intervention areas before any scope is agreed.