Розробка рекомендаційної системи крипто-активів

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка рекомендаційної системи крипто-активів
Складний
від 2 тижнів до 3 місяців
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

Розробка рекомендаційної системи крипто-активів

Рекомендаційна система для крипто-активів — це не Netflix "вам сподобається цей фільм". Це система, яка на основі профілю користувача (apetite до ризику, горизонт інвестування, поточний портфель) та поточних ринкових даних пропонує активи для покупки, продажу або ребалансування.

Постановка задачі

Контентні рекомендації: рекомендуємо активи, схожі на ті, які користувач уже тримає.

Колаборативна фільтрація: рекомендуємо активи, які тримають подібні користувачі.

Гібридний підхід: комбінація обох + ринкові сигнали.

Контекстно усвідомлено: враховуємо поточні умови ринку.

Профіль користувача

from dataclasses import dataclass
from enum import Enum

class RiskProfile(Enum):
    CONSERVATIVE = 'conservative'
    MODERATE = 'moderate'
    AGGRESSIVE = 'aggressive'
    DEGEN = 'degen'

@dataclass
class UserProfile:
    user_id: str
    risk_profile: RiskProfile
    investment_horizon_days: int
    portfolio_value_usd: float
    current_holdings: dict
    preferred_categories: list
    excluded_categories: list
    max_single_asset_pct: float
    
    def get_available_budget(self):
        invested = sum(self.current_holdings.values())
        return max(0, self.portfolio_value_usd - invested)

Механізм оцінювання активів

class AssetScorer:
    def score_asset(self, symbol, user_profile, market_regime):
        """Фінальна оцінка = зважена сума sub-scores"""
        scores = {}
        
        scores['momentum'] = self._momentum_score(symbol)
        scores['risk_return'] = self._risk_adjusted_score(symbol, user_profile)
        scores['diversification'] = self._diversification_score(symbol, user_profile.current_holdings)
        scores['liquidity'] = self._liquidity_score(symbol, user_profile.portfolio_value_usd)
        scores['sentiment'] = self._sentiment_score(symbol)
        scores['fundamentals'] = self._fundamentals_score(symbol)
        scores['regime_fit'] = self._regime_fit_score(symbol, market_regime)
        
        weights = self._get_weights_for_profile(user_profile.risk_profile)
        final_score = sum(scores[k] * weights.get(k, 0.1) for k in scores)
        
        return {
            'symbol': symbol,
            'final_score': final_score,
            'sub_scores': scores,
            'weights': weights
        }

Побудова портфеля з рекомендацій

def build_recommended_portfolio(user_profile, scored_assets, max_positions=10):
    """Побудувати оптимальний портфель"""
    # Фільтрування
    filtered = [a for a in scored_assets 
                if a['symbol'] not in user_profile.excluded_categories
                and a['final_score'] > 0.3]
    
    # Сортування за оцінкою
    filtered.sort(key=lambda x: x['final_score'], reverse=True)
    
    # Вибір топ-N з диверсифікацією
    selected = []
    for asset in filtered[:50]:
        if len(selected) >= max_positions:
            break
        selected.append(asset)
    
    # Розподіл за оцінкою
    total_score = sum(a['final_score'] for a in selected)
    available_budget = user_profile.get_available_budget()
    
    allocations = []
    for asset in selected:
        raw_allocation = (asset['final_score'] / total_score) * available_budget
        max_alloc = user_profile.portfolio_value_usd * user_profile.max_single_asset_pct
        final_allocation = min(raw_allocation, max_alloc)
        
        allocations.append({
            'symbol': asset['symbol'],
            'allocation_usd': final_allocation,
            'allocation_pct': final_allocation / user_profile.portfolio_value_usd,
            'score': asset['final_score']
        })
    
    return allocations

Пояснюваність

Користувачі мають розуміти логіку рекомендації:

def generate_recommendation_explanation(asset, score_result):
    reasons = []
    sub_scores = score_result['sub_scores']
    
    if sub_scores['momentum'] > 0.7:
        reasons.append(f"Strong momentum: +{get_return(asset, 30):.1f}% in 30 days")
    
    if sub_scores['diversification'] > 0.7:
        reasons.append(f"Low correlation with portfolio")
    
    if sub_scores['fundamentals'] > 0.7:
        reasons.append(f"High on-chain activity")
    
    risk_warning = []
    if get_volatility(asset) > 0.8:
        risk_warning.append("High volatility")
    
    return {
        'reasons': reasons,
        'risk_warnings': risk_warning,
        'confidence': score_result['final_score']
    }

Dashboard та UX

Панель рекомендацій: топ-10 рекомендацій з розбором оцінок, пояснення простою мовою, кнопка автоматичного виконання, очікувані характеристики портфеля.

Персоналізація: налаштування профілю ризику, горизонт інвестування, виключені категорії.

Відстеження продуктивності: бектестування алгоритму рекомендацій.

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