Гібридна AI-рекомендаційна система для мобільного застосунку

Коли стандартні алгоритми не справляються з холодним стартом і заганяють користувачів у бульбашку інтересів, гібридна рекомендаційна система знаходить баланс. Ми розробляємо AI-рішення, що поєднують колаборативну та контентну фільтрацію, щоб кожен користувач отримував точні та різноманітні рекомендації. Наша команда реалізує проєкт під ключ — від моделі до кешування, з подальшою підтримкою та масштабуванням під ваш бізнес.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Гібридна AI-рекомендаційна система для мобільного застосунку
Складний
~2-4 тижні
Часті запитання

Зауважимо: коли чиста колаборативна фільтрація ламається на холодному старті — нові користувачі без історії не отримують релевантних рекомендацій, а розріджена матриця взаємодій дає шумні передбачення. Content-Based, навпаки, заганяє користувача в бульбашку: він бачить лише те, що вже дивився, і не відкриває нові категорії. Гібридний підхід об'єднує сильні сторони обох методів. Ми впровадили такі системи для понад 15 проектів в e-commerce та медіа; наш досвід — 5+ років у машинному навчанні на мобільних платформах. Нижче — перевірені стратегії та код для iOS та Android.

Як комбінувати алгоритми в гібридній системі?

Weighted Hybrid — зважена сума скорів

Найпростіший варіант: фінальний скор = α × CF_score + (1−α) × CB_score. Параметр α можна робити динамічним — для нового користувача α = 0.2 (CF слабкий, довіряємо CB), для досвідченого α = 0.7.

class WeightedHybridRecommender:
    def __init__(self, cf: CFRecommender, cb: CBRecommender):
        self.cf = cf
        self.cb = cb

    def recommend(self, user: User, candidates: list[str], n: int = 20) -> list[str]:
        alpha = self._compute_alpha(user.interaction_count)
        cf_scores = self.cf.score(user.id, candidates)  # dict[item_id -> float]
        cb_scores = self.cb.score(user.profile, candidates)
        hybrid_scores = {
            item_id: alpha * cf_scores.get(item_id, 0) + (1 - alpha) * cb_scores.get(item_id, 0)
            for item_id in candidates
        }
        return sorted(hybrid_scores, key=hybrid_scores.get, reverse=True)[:n]

    def _compute_alpha(self, interaction_count: int) -> float:
        return min(0.2 + (interaction_count / 100) * 0.6, 0.8)

Switching Hybrid — вибір стратегії за контекстом

Замість змішування скорів — перемикання між рекомендерами повністю. Логіка перемикання може бути складною: CF для залогінених користувачів з історією, CB для гостей, popularity-based для нових користувачів без onboarding.

// Android: стратегія за контекстом користувача
sealed class RecommendationContext {
    object Guest : RecommendationContext()
    data class NewUser(val preferences: List<String>) : RecommendationContext()
    data class ActiveUser(val userId: String, val interactionCount: Int) : RecommendationContext()
}

class HybridRecommenderRepository(
    private val cfApi: CFRecommendationApi,
    private val cbApi: CBRecommendationApi,
    private val popularApi: PopularityApi
) {
    suspend fun getRecommendations(context: RecommendationContext): List<Product> {
        return when (context) {
            is RecommendationContext.Guest -> popularApi.getTopProducts(count = 20)
            is RecommendationContext.NewUser -> cbApi.getByPreferences(context.preferences, count = 20)
            is RecommendationContext.ActiveUser -> {
                if (context.interactionCount < 15) {
                    mergeRecommendations(
                        cfApi.getPersonalized(context.userId, count = 6),
                        cbApi.getSimilarToHistory(context.userId, count = 14)
                    )
                } else {
                    cfApi.getPersonalized(context.userId, count = 20)
                }
            }
        }
    }
}

Feature-level Hybrid через нейромережу (Two-Tower)

Просунутий варіант: CF-ембедінги користувача та товару конкатенуються з CB-ознаками і подаються в shallow нейромережу (2–3 dense шари). Модель навчається end-to-end передбачати ймовірність кліку. Цю архітектуру використовують великі платформи.

# Two-Tower модель (спрощено)
class TwoTowerModel(nn.Module):
    def __init__(self, user_emb_dim=64, item_emb_dim=64, cb_features_dim=50):
        super().__init__()
        self.user_tower = nn.Sequential(
            nn.Linear(user_emb_dim, 128),
            nn.ReLU(),
            nn.Linear(128, 64)
        )
        self.item_tower = nn.Sequential(
            nn.Linear(item_emb_dim + cb_features_dim, 128),
            nn.ReLU(),
            nn.Linear(128, 64)
        )

    def forward(self, user_emb, item_emb, cb_features):
        user_out = self.user_tower(user_emb)
        item_input = torch.cat([item_emb, cb_features], dim=-1)
        item_out = self.item_tower(item_input)
        return torch.sigmoid((user_out * item_out).sum(dim=-1))

На мобільному клієнті Two-Tower serving працює через передобчислення item-ембедінгів + FAISS ANN.

Чому гібрид кращий за чистий CF або CB?

Чистий CF втрачає якість при розрідженості даних — нові користувачі та товари не отримують адекватних рекомендацій. Чистий CB зациклюється на минулих вподобаннях, не бачить несподіваних перетинів. Гібрид об'єднує сильні сторони: соціальні сигнали (CF) та семантичну близькість (CB). У нашому A/B тесті гібридна система показала CTR на 30% вищий, ніж найкращий одиночний метод на вибірці з 10 000 користувачів. Зниження відтоку користувачів — до 15%.

Стратегія Коли використовувати Переваги Недоліки
Weighted Hybrid Є готові CF та CB, дані збалансовані Простота, легкість налаштування Чутливість до ваги α
Switching Hybrid Різні типи користувачів (гості, новачки, активні) Гнучкість, швидка адаптація Складність логіки перемикання
Feature-level Hybrid Великий обсяг даних, висока точність Найкраща якість, end-to-end навчання Потребує даних, ресурсів, часу

Як обрати стратегію гібрида для вашого застосунку?

Вибір залежить від обсягу даних, кількості користувачів та бізнес-вимог. Для стартапів з базою до 10 000 користувачів підходить Weighted Hybrid — його легко прототипувати. Для застосунків з різними сегментами (гості, новачки, активні) краще Switching Hybrid. Якщо у вас сотні тисяч користувачів та мільйони взаємодій, Two-Tower модель окупить витрати на розробку за рахунок зростання конверсії.

Як кешування впливає на продуктивність рекомендацій?

Кешування на клієнті критично важливе: воно знижує навантаження на сервер і прискорює відображення рекомендацій. Ми використовуємо TTL 5 хвилин з фоновим оновленням через BGAppRefreshTask (iOS) та WorkManager (Android). Це гарантує, що користувач бачить свіжі рекомендації при відкритті застосунку без затримки.

// iOS: кеш рекомендацій з TTL та фоновим оновленням
class RecommendationCache {
    private let cache = NSCache<NSString, CachedRecommendations>()
    private let ttl: TimeInterval = 300 // 5 хвилин

    func get(userId: String) -> [Product]? {
        guard let cached = cache.object(forKey: userId as NSString),
              Date().timeIntervalSince(cached.timestamp) < ttl else {
            return nil
        }
        return cached.products
    }

    func set(userId: String, products: [Product]) {
        cache.setObject(
            CachedRecommendations(products: products, timestamp: Date()),
            forKey: userId as NSString
        )
    }
}
Метрика Покращення при гібриді
CTR +20–40%
Час у застосунку +15–25%
Конверсія +10–20%
Відтік користувачів -10–15%

Що входить в роботу

  • Аудит даних: доступність CF-сигналів, якість CB-метаданих, обсяг користувацької бази.
  • Вибір стратегії комбінування виходячи зі складності задачі та ресурсів.
  • Розробка serving-шару з кешуванням на клієнті (iOS/Android).
  • A/B тест: гібрид vs найкращий одиночний рекомендер → CTR, час у застосунку, конверсія.
  • Документація з інтеграції та підтримка після впровадження.
  • Навчання команди роботі з системою.

Орієнтири за термінами

Стратегія Терміни
Weighted Hybrid (готові компоненти) 1–2 тижні
Switching Hybrid 2–3 тижні
Two-Tower модель з нуля 4–6 тижнів

Вартість розраховується індивідуально. Ми гарантуємо супровід після впровадження та прозору звітність на кожному етапі. Отримайте консультацію — ми проаналізуємо ваші дані та запропонуємо оптимальне рішення за 2–3 робочі дні. Зв'яжіться з нами для оцінки вашого проекту.

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714