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

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

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

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

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

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

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

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

Ручна категоризація транзакцій—те, що користувачі роблять першого тижня, а потім кидають. Автоматична категоризація на правилах ("якщо назва мерчанта містить 'ЛЕНТУ'—це продукти") працює для великих ритейлерів, але ламається на "ТОВ ПЕРСПЕКТИВА" або "ФОП Іванов А.В.". ML-категоризатор + LLM-аналіз поверх дає інший рівень якості.

Категоризація: модель vs LLM

ML-класифікатор (TF-IDF + LightGBM або distilBERT). Тренується на історичних категоризованих транзакціях. Inference < 10ms, працює offline, вартість—нуль після обучення. Точність на top-100 мерчантів—95%+, на "хвості" (ФОП, малі компанії)—60–70%.

LLM для невпізнаних. Транзакції з низькою впевненістю класифікатора (confidence < 0.7) спрямовуються в LLM. GPT-4o-mini, temperature=0, один промпт з категоріями та прикладами—рішення за 300–500ms, точність на нестандартних назвах 80–90%.

# Серверний конвеєр категоризації
async def categorize_transaction(transaction: Transaction) -> CategoryResult:
    # 1. Швидкий класифікатор
    ml_result = classifier.predict(transaction.description)

    if ml_result.confidence >= 0.75:
        return CategoryResult(
            category=ml_result.category,
            confidence=ml_result.confidence,
            method="ml_classifier"
        )

    # 2. LLM для невпевнених передбачень
    llm_category = await llm_categorize(
        description=transaction.description,
        amount=transaction.amount,
        merchant=transaction.merchant_name
    )
    return CategoryResult(
        category=llm_category,
        confidence=0.85,  # LLM впевненіший у складних випадках
        method="llm_fallback"
    )

Гібридний підхід: 85–90% транзакцій обробляє швидкий класифікатор (безплатно), 10–15%—LLM. При 1 000 трансакцій на день на користувача вартість LLM-запитів—копійки.

Збагачення даних мерчантів

Назва мерчанта в банківській виписці—брудні дані. "МАГНИТ КОСМЕТИК 0001" та "МАГНИТ КОСМЕТИК"—один мерчант. Нормалізація через базу мерчантів (Clearbit, Plaid Enrich, або власне маппування) значно підвищує точність класифікатора.

Додатковий сигнал—MCC-код (Merchant Category Code), який банк передає разом з транзакцією. MCC 5411—продуктові магазини, MCC 5812—ресторани. Використання MCC як ознаки в класифікаторі дає +5–10% точності.

AI-аналіз паттернів поверх

Категоризація—перший крок. AI-аналіз поверх категоризованих даних—те, що перетворює додаток із трекера на радника.

// iOS — Swift: запит до LLM для аналізу видатків за місяць
func generateExpenseInsights(transactions: [CategorizedTransaction]) async -> [Insight] {
    let summary = transactions.groupBy(\.category)
        .mapValues { txs in (count: txs.count, total: txs.map(\.amount).reduce(0, +)) }
        .map { "\($0.key): \($0.value.total) RUB (\($0.value.count) транзакцій)" }
        .joined(separator: "\n")

    let prompt = """
    Проаналізуй видатки користувача за місяць і дай 2-3 конкретні спостереження.
    Не загальні поради—конкретні паттерни з даних.
    Видатки по категоріях:\n\(summary)
    """

    let response = await llmClient.complete(prompt, maxTokens: 300, temperature: 0.4)
    return parseInsights(response)
}

LLM бачить: "Видатки на доставку їжі виросли з 3 200 до 8 700 рублів порівняно з попереднім місяцем" та генерує конкретне спостереження, а не generic "слідкуйте за видатками на їжу".

Обучение на користувацьких поправках

Користувачі виправляють неправильні категорії—золото для переобучення. Кожна поправка—новий labeled приклад. Накопивши достатньо поправок (50–100 на користувача), можна дообучати персоналізовану модель або додати користувацьку-специфічні правила:

// Android — збереження користувацької поправки
fun saveUserCorrection(transactionId: String, correctedCategory: Category) {
    val correction = UserCorrection(
        transactionDescription = getTransaction(transactionId).description,
        merchantId = getTransaction(transactionId).merchantId,
        correctedCategory = correctedCategory,
        timestamp = System.currentTimeMillis()
    )
    localDatabase.saveCorrection(correction)
    // Синхронізуємо на сервер для переобучення
    syncService.scheduleCorrectionUpload(correction)
}

Орієнтири за часом

Класифікатор на правилах + MCC—3–5 днів. ML-класифікатор з LLM-fallback—1–2 тижні. Повна система з аналізом паттернів, інсайтами та обученням на поправках—2–4 тижні.