Media Platform 2022 Live

Recommendation Engine v1

Cold-start hybrid recommendation system for a media platform — combining collaborative filtering with content-based embeddings for a 24% CTR uplift.

24%
CTR uplift
Cold-start
Solved
40ms
P99 recommendation latency
Stack TensorFlowFastAPIRedisPostgresScikit-learn

The Problem

A media platform (long-form written content) had a recommendation widget showing “you might also like” articles. It was powered by a simple tag-matching algorithm — if you just read a piece tagged “AI”, it showed other AI-tagged pieces. CTR was 2.1%.

Two problems:

  1. Cold start — new articles had no read history, so they never surfaced
  2. Staleness — the same popular articles dominated recommendations because they had the most reads

What I Built

A hybrid recommendation system combining two signals:

Collaborative Filtering (Who liked what)

Matrix factorization on the user-article interaction matrix (implicit feedback: reads, scroll depth, shares). Trained weekly with ALS (Alternating Least Squares) via Implicit library. Produces a “readers who liked this also liked…” signal.

Content-Based Filtering (What is this about)

Article embeddings using a fine-tuned sentence transformer (all-mpnet-base-v2). Each article is embedded at publish time. Recommendations based on cosine similarity of embeddings. This solves cold start — new articles get recommendations immediately from their content, before any read data exists.

Hybrid Blend

The final recommendation score is a weighted blend:

  • New articles (< 72h old): 100% content-based
  • Maturing articles (72h–2 weeks): 60% content / 40% collaborative
  • Established articles (> 2 weeks): 30% content / 70% collaborative

Weights tuned via offline A/B testing on held-out interaction data.

Serving Layer

FastAPI service with Redis caching. Recommendations pre-computed nightly for the top 10K articles; real-time fallback to content-based for the long tail. P99 latency: 40ms.

Cold Start in Practice

Before: a new article published on Monday would get 0 recommendations for 72 hours (no read data). After: new articles are embedded at publish time and immediately surface in the recommendations of semantically similar content. New article CTR in the first 72 hours improved by 4×.

Results

  • CTR uplift: 2.1% → 2.6% overall (+24%)
  • New article CTR in first 72h: 4× improvement (cold-start solved)
  • P99 latency: 40ms (within the 100ms UX threshold)
  • Long-tail content surfaced: 31% of recommendations now go to articles outside the top 1,000 (was 4%)
← Previous Multi-Tenant SaaS Billing Rebuild Next → Real-Time Analytics Dashboard

Want something
like this?

30 minutes, free, no deck. We'll figure out if I'm the right fit for your project.