Multi-Objective Recommender System for Marketplaces

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1All 1564 services
Multi-Objective Recommender System for Marketplaces
Complex
~2-4 weeks
Frequently Asked Questions

AI Development Areas

AI Solution Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1347
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    948
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1183
  • image_logo-advance_0.webp
    B2B Advance company logo design
    642
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    921

Multi-Objective Recommender System for Marketplaces

A marketplace with 10 million SKUs and 50,000 sellers—the recommender system here doesn't just pick products; it balances relevance, monetization, and seller satisfaction. A typical mistake: sacrificing quality for conversion or vice versa. Recommender systems for marketplaces are a complex engineering product where poor tuning leads to a drop in GMV or seller churn. Our experience shows that the optimal solution is a multi-objective architecture with weights that adjust to business goals.

How Multi-Objective Architecture Resolves the Conflict of Interests?

The key challenge is that the interests of the buyer (finding the right product), the seller (promoting their product), and the platform (earning revenue) often conflict. We implement scoring with multiple objective functions, each with its own weight. For example, relevance—50%, product quality—20%, seller diversity—15%, promoted products—10%, conversion—5%. Weights are selected empirically through A/B tests.

import numpy as np
import pandas as pd
from dataclasses import dataclass

@dataclass
class MarketplaceItem:
    item_id: str
    seller_id: str
    price: float
    rating: float
    review_count: int
    is_promoted: bool
    conversion_rate: float
    inventory: int

class MarketplaceRecommender:
    """Recommendations with multi-objective balancing"""

    def __init__(self, user_model, item_index, seller_index):
        self.user_model = user_model
        self.item_index = item_index
        self.seller_index = seller_index

        # Objective function weights
        self.weights = {
            'relevance': 0.50,      # Relevance to user
            'quality': 0.20,        # Rating and reviews
            'seller_diversity': 0.15,  # Seller diversity
            'promoted': 0.10,       # Promoted products
            'conversion': 0.05      # Historical CR
        }

    def recommend(self, user_id: str, context: dict,
                   n: int = 20) -> list[dict]:
        """Multi-objective recommendations"""
        # Retrieval: top candidates by relevance
        user_emb = self.user_model.get_user_embedding(user_id)
        candidates = self.item_index.search(user_emb, k=200)

        # Scoring: multi-objective function
        scored = []
        seller_count = {}

        for item_id, relevance_score in candidates:
            item = self._get_item(item_id)
            if item is None or item.inventory == 0:
                continue

            # Product quality
            quality_score = (
                item.rating / 5.0 * 0.6 +
                np.log1p(item.review_count) / 10 * 0.4
            )

            # Penalty for seller concentration
            seller_count[item.seller_id] = seller_count.get(item.seller_id, 0) + 1
            seller_diversity = 1 / seller_count[item.seller_id]

            # Promoted boost (with limit)
            promo_boost = 1.2 if item.is_promoted else 1.0

            # Final score
            final_score = (
                self.weights['relevance'] * relevance_score +
                self.weights['quality'] * quality_score +
                self.weights['seller_diversity'] * seller_diversity +
                self.weights['promoted'] * (promo_boost - 1) +
                self.weights['conversion'] * item.conversion_rate
            )

            scored.append({
                'item_id': item_id,
                'seller_id': item.seller_id,
                'score': final_score,
                'relevance': relevance_score,
                'quality': quality_score
            })

        # Sort and return
        scored.sort(key=lambda x: x['score'], reverse=True)
        return scored[:n]

    def _get_item(self, item_id: str) -> MarketplaceItem:
        return self.seller_index.get(item_id)

    def similar_items_cross_seller(self, item_id: str,
                                    n: int = 6) -> list[dict]:
        """Similar products from other sellers (comparison shopping)"""
        item = self._get_item(item_id)
        if not item:
            return []

        similar = self.item_index.search_similar(item_id, k=20)

        # Filter: different seller, but similar product
        cross_seller = [
            s for s in similar
            if self._get_item(s[0]) and self._get_item(s[0]).seller_id != item.seller_id
        ]

        return cross_seller[:n]

How to Solve the Cold Start Problem?

New products have no interaction history—standard collaborative filtering does not work. According to Wikipedia on cold start, the problem occurs when a new item has no interactions. Our approach: use content-based boost based on metadata. Products with a high rating (≥4.5) and competitive price receive an initial score of 0.5. Additionally, 8% of traffic is allocated to exploration—the product is shown to a random sample of users.

Example exploration strategyWe use 8% of traffic for random display of new products. This allows collecting enough data within 2-3 weeks to switch to a hybrid model.
After 2-3 weeks, enough data accumulates to switch to a hybrid model.

    def handle_new_item_cold_start(self, item: MarketplaceItem,
                                    item_features: dict) -> float:
        """Initial boost for new products"""
        base_score = 0.3  # Base position

        # Metadata-based boost
        if item.rating >= 4.5 and item.review_count >= 10:
            base_score += 0.2
        if item.price < self._get_category_avg_price(item_features.get('category')):
            base_score += 0.1  # Competitive price

        # Explore-exploit balance for new products
        # Show to 5-10% of traffic to collect data
        import random
        if random.random() < 0.08:  # 8% exploration
            return 0.7 + random.random() * 0.3

        return base_score

Comparison of Approaches to Interest Balancing — Recommender System Development

Approach Objective Advantages Disadvantages
Pure relevance Relevance High CTR Ignores monetization, seller dominance
Weighted multi-objective Balance all goals Flexibility, adjustable to business Complexity of weight selection
Constrained optimization (CCO) Maximize GMV under constraints Direct optimization of business metric Risk of quality reduction under tight constraints

Multi-objective architecture increases GMV by 1.12-1.2 times compared to pure relevance and boosts CTR by 1.3-1.5 times. This makes it more effective for long-term monetization.

What Does A/B Testing Provide for Recommendations?

Standard metrics: precision@k, recall@k, NDCG are insufficient for a marketplace. We use business metrics: GMV per session, homepage CTR, conversion rate. An A/B test is conducted for at least 2 weeks with 50/50 traffic split. Additionally, we monitor seller satisfaction through a monthly NPS among sellers.

Recommendation Effectiveness Metrics

Metric Before Implementation After Multi-Objective System
GMV per session baseline +12-20%
Homepage CTR baseline +30-50%
Conversion rate baseline +5-10%

Development Process: From Audit to Deployment

  1. Data audit: analyze interaction logs, product cards, seller profiles. Identify data quality issues and biases (selection bias, popularity bias).
  2. Architecture design: choose models (embeddings, transformers), define pipeline: batch vs online, select vector DB (ChromaDB, Qdrant).
  3. Implementation: write production-ready code in PyTorch/Hugging Face, wrap in REST API with p99 latency < 100ms.
  4. Integration: connect to the storefront, set up data drift monitoring via Weights & Biases.
  5. A/B testing: run experiment, analyze results, adjust weights.
  6. Documentation and training: hand over code, model description, maintenance instructions.

What’s Included in Turnkey Development

  • Full documentation: architecture description, deployment instructions, maintenance guide.
  • Source code of the model and pipeline with comments.
  • REST API for storefront integration.
  • Setup of data drift monitoring and A/B testing.
  • Training of the client's team on the system.
  • Technical support during the launch phase.

Timelines and Cost

Timelines: from 4 weeks (MVP) to 3 months (full system). Cost is calculated individually—depends on data volume, integration complexity, and real-time requirements. Get a consultation: we will analyze your data and propose an architecture suited to your business goals. Contact us for a project assessment—our experience includes 20+ implementations for high-turnover marketplaces. We guarantee a transparent process and post-launch support.

Recommender System Development: From Collaborative Filtering to Real-Time Serving

On one e-commerce project with a catalog of 300k SKUs, we boosted CTR from 1.8% to 4.4% — a 2.4x increase. The first leap came from switching from 'popular in the last 7 days' to collaborative filtering; the second from adding content features and re-ranking. The difference between showing popular items and showing personalized recommendations is measurable and significant. Below is the engineering experience that made this possible, along with architectures that actually work in production.

Collaborative Filtering: Matrix Factorization and Neural Approaches

Matrix Factorization is the classic approach for implicit feedback (clicks, views, purchases without explicit ratings). ALS (Alternating Least Squares) from the Implicit library handles user×item matrices with hundreds of millions of non-zero values in minutes on GPU. Latent factors 64–256, regularization λ=0.01–0.1 are starting parameters. Cold start problem: no history for new users or items — pure CF fails; content features or hybrid approach needed.

Neural Collaborative Filtering (NCF) replaces the dot product with a neural network. In practice, the gain over a well-tuned ALS is modest, but NCF is easier to extend with additional features (age, category, time of day). Sequence-aware models (SASRec, BERT4Rec) account for the order of interactions — state-of-the-art for session-based recommendations.

How to Choose Recommender System Architecture?

The answer depends on data, load, and cold start requirements. Below are three main approaches with selection criteria.

Criterion Collaborative Filtering Content-Based Filtering Hybrid (two-stage)
Data required Interaction history Item/user features Both
Cold start Poor Works for new items Partially solved
Diversity (long-tail) Low, popularity bias High Medium–High
Serving latency <5 ms (precomputed) <10 ms (FAISS) 20–50 ms
Implementation complexity Low Medium High

Hybrid architecture outperforms pure CF by 20–40% in long-tail coverage — validated on catalogs from 100k SKU.

Content-Based Filtering: When Interaction History is Scarce

Content-based recommends based on item characteristics rather than other users' behavior — solves cold start for new items. Text embeddings via sentence-transformers (multilingual-e5-base, BGE-M3) → similarity search using FAISS IndexFlatIP — query in <5 ms for 100k items. Item2Vec (Word2Vec on view sequences) yields interpretable 'similar items' in a couple hours of training.

Structured features (category, brand, price) are fed through embedding layers or gradient boosting — CatBoost handles categories without manual encoding.

Why Hybrid Models Work Better?

Production systems are almost always two-level. Stage 1 (Retrieval) — fast selection of 100–500 candidates from 300k items using ALS or Two-Tower model with vector search (FAISS, Qdrant). Stage 2 (Ranking) — heavy ranker on LightGBM or neural network with cross-features, time, device, and session context. LightFM is a good starting point for medium scale without heavy infrastructure. Our practice shows: moving from single-stage to two-stage yields a 15–25% accuracy improvement with only 20–30 ms additional latency.

Real-Time Serving: Architecture Under Load

Latency SLA — 50–100 ms at thousands of requests per second. Base recommendations precomputed (batch job hourly) → Redis by user_id → <5 ms. Real-time re-ranking via Kafka for events (clicks, cart adds) → update of context features. Feature serving — Redis with TTL (views in 24 hours, last clicked item). At 10k req/s, we deploy Redis Cluster with replication.

A/B testing is the only reliable way to measure improvements. Offline metrics do not always correlate with online. Kohavi et al., 'Online Controlled Experiments at Large Scale' (KDD 2013) — a must-read for the team. Test on 5–10% of traffic, monitor CTR, conversion, revenue per session. One of our client systems after hybridization increased revenue by 18% over a month of A/B.

Recommender System Development Timeline

The stages and typical time frames are in the table below. Costs are calculated individually based on catalog scale and latency requirements.

Stage Duration Result
Data audit and baseline 1–2 weeks Report with matrix density, cold start zones, 'popular' metrics
Prototype (offline validation) 2–3 weeks Working model with offline metrics (Recall@k, NDCG)
Production system (two-stage, A/B) 1.5–2.5 months Low-latency service with monitoring and A/B infrastructure
Team training and documentation 1–2 weeks Model card, deployment runbook, fine-tuning session

What's Included in Turnkey Development

  1. Data audit — user×item matrix density (typically <0.1%), activity distribution, temporal patterns, cold start statistics.
  2. Baseline — 'popular' as a simple threshold that is often hard to beat.
  3. Iterative improvement — ALS → content features → two-stage → sequence-aware. Each step with A/B.
  4. Serving infrastructure — batch precomputation, Redis, real-time re-ranking, Grafana monitoring.
  5. Documentation — model card with metrics, deployment instructions, feature descriptions.
  6. Team training — session on interpreting results and model fine-tuning.
  7. Support — 1 month post-launch (incident fixes, pipeline tuning).

We are a team with 7+ years of experience in recommender systems, having delivered over 30 projects for e-commerce and media. We guarantee transparent A/B testing and documented metric improvements.

Want to assess the growth potential of your catalog? Contact us for a free data audit. Order recommender system development — first prototype within two weeks.

Example ALS config for implicit feedback
from implicit.als import AlternatingLeastSquares

model = AlternatingLeastSquares(
    factors=64,
    regularization=0.05,
    iterations=15,
    use_gpu=True
)
model.fit(user_item_matrix)

More about the mathematics of recommender systems — in specialized literature.