Mar 2024 — Oct 2025

Similar Product Recommendation System

I helped build a system that surfaces products similar to one a user just clicked, in real time, across multiple recommendation surfaces. This walks through how a system that increased total clicks in the home feed's and product-detail page's recommendation areas by 13% and 9% respectively was built.

Home Recommendation Clicks +13% Product-Detail Recommendation Clicks +9%

Situation

User engagement with the recommendation area on the product-detail screen was lower than expected, and we traced the cause to the collaborative-filtering algorithm already running there. A collaborative-filtering algorithm that recommends "products other users viewed together" didn't align well with Bungaejangter users' actual behavior pattern — deciding on a specific item they want, then comparing similar alternatives before buying. So we needed a content-based algorithm that recommends items with attributes similar to the one a user clicked.

Task

  1. Defining a product vector: Since the core of this algorithm is finding "products similar to the one a user clicked," we needed to represent a product's multi-dimensional attributes — category, brand, price, title text — in a single unified vector space where semantically close products sit near each other.
  2. Domain fit: Public pretrained text encoders are trained on data that doesn't reflect Bungaejangter's domain vocabulary, so we'd need to continue training on domain data regardless. On top of that, since a public encoder's backbone size sets a hard floor on operating cost, we built a lightweight encoder designed from the ground up for our domain and task.
  3. Operating cost: Recommendation inference is a high-call-volume component that runs 24/7, so a system that could run reliably on minimal CPU resources was preferred to keep costs down.

Action

Result

The similar-product recommendation system, now also live on the home screen.

The algorithm we built first launched in the first container of the recommendation area at the bottom of the product-detail screen. That spot had been running a system that pre-trained product vectors with a collaborative-filtering algorithm to recommend similar products. That approach couldn't recommend a newly listed product at all until its vector had been trained, which meant a lower-performing fallback algorithm was shown fairly often.

Our algorithm, by contrast, doesn't pre-train a vector per product — instead, it takes product attributes (title, category, brand, price, size) as input and generates the vector at inference time. That means a newly listed product is vectorized instantly, with no training step, and can be recommended right away — resolving the legacy algorithm's cold-start limitation.

An A/B test against the legacy algorithm showed a 30% higher daily average CTR, and we replaced the legacy algorithm with ours. As a result, clicks on products in that recommendation area rose substantially, increasing per-user product clicks across the entire product-detail page by about 6% over baseline. On the strength of that result, the same algorithm has since been extended to a slot on the home screen that recommends products similar to ones a user recently clicked.

We later redesigned the text encoder to fix a bug that had been degrading embedding quality, and the following changes in user engagement on the home and product-detail recommendation surfaces were observed as a result.

  • Home recommendation area: recommendation-area click volume up 13% over baseline, translating to a 10.2% increase in CTR and a 10.4% increase in the share of users who clicked the recommendation area
  • Product-detail recommendation area: recommendation-area click volume up 9% over baseline, translating to a 4.1% increase in CTR and a 3.6% increase in the share of users who clicked the recommendation area