AI Box Office Revenue Forecasting System

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 1 servicesAll 1566 services
AI Box Office Revenue Forecasting System
Medium
~2-4 weeks
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823
  • image_logo-aider_0.jpg
    AIDER company logo development
    762
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    848

AI-прогнозирование кассовых сборов

Прогнозирование кассовых сборов — задача на стыке аналитики данных и неопределённости массового потребительского поведения. Studios используют прогнозы для планирования маркетингового бюджета, количества экранов и даты релиза. ML-модели достигают MAPE 25-40% — значительно лучше экспертных оценок, но не устраняют принципиальную непредсказуемость хитов.

Жизненный цикл фильма в прокате

Фазы:

  • Opening weekend (первые 3 дня): определяет итоговые сборы. Корреляция с total domestic ≈ 0.85
  • Week 1-4: decay rate зависит от жанра и word-of-mouth
  • Long tail: платформы, повторные показы, особые события

Decay model:

def weekly_decay_forecast(opening_weekend, genre, audience_score):
    """
    Недельный decay коэффициент: horror ~0.5, drama ~0.4, family ~0.55
    Audience Score корректирует: высокий → медленнее падает
    """
    base_decay_rates = {
        'horror': 0.50, 'action': 0.48, 'drama': 0.40,
        'comedy': 0.45, 'family': 0.52, 'animation': 0.55
    }
    base_decay = base_decay_rates.get(genre, 0.47)
    decay = base_decay * (1 - (audience_score - 70) / 200)  # коррекция на WOM

    weekly_forecasts = [opening_weekend]
    for week in range(1, 12):
        weekly_forecasts.append(weekly_forecasts[-1] * (1 - decay))

    return weekly_forecasts

Feature Engineering

Pre-release предикторы:

pre_release_features = {
    # Продакшн и дистрибуция
    'production_budget_usd': production_budget,
    'distributor_tier': map_distributor(distributor),  # major/mini-major/indie
    'studio': studio_name,

    # Аудитория и свойства фильма
    'genre': genre,
    'mpaa_rating': rating,  # G/PG/PG-13/R
    'sequel_flag': is_sequel,
    'franchise_previous_gross': previous_installment_gross,
    'based_on_ip': is_adaptation,

    # Творческий состав
    'director_avg_gross_5yr': director_historical_performance,
    'lead_actor_star_power': actor_star_index,  # из опросов или social media

    # Маркетинг
    'trailer_views_cumulative': youtube_trailer_views,
    'google_search_volume': google_trends_movie_title,
    'social_media_mentions_30d': twitter_instagram_mentions,
    'imdb_want_to_see_pct': imdb_user_interest,

    # Конкурентная среда
    'release_date_week': release_week_of_year,
    'competing_films_budget': sum([f.budget for f in same_weekend_releases]),
    'incumbent_screen_count': screens_by_current_top10_films
}

Social sentiment как lead indicator:

from transformers import pipeline

sentiment_analyzer = pipeline('sentiment-analysis', model='nlptown/bert-base-multilingual-uncased-sentiment')

def compute_sentiment_features(reviews_before_release):
    sentiments = sentiment_analyzer(reviews_before_release)
    return {
        'positive_pct': sum(1 for s in sentiments if s['label'] in ['4 stars', '5 stars']) / len(sentiments),
        'avg_sentiment_score': np.mean([int(s['label'][0]) for s in sentiments]),
        'sentiment_variance': np.std([int(s['label'][0]) for s in sentiments])
    }

Модели прогнозирования

Opening Weekend Regression: Основная задача — прогноз opening weekend (пятница-воскресенье) по pre-release данным.

from lightgbm import LGBMRegressor

# Таргет: log(opening_weekend_gross) — логарифм для нормализации skewed distribution
model = LGBMRegressor(
    n_estimators=500,
    learning_rate=0.05,
    num_leaves=31
)
model.fit(X_train, np.log(y_train))
predicted_opening = np.exp(model.predict(X_test))

Ensemble с market proxy:

  • Rotten Tomatoes Tomatometer (критики): до релиза для screened films
  • Cinemascore (A-F): в первый уик-энд, предсказывает legs
  • PostTrack, Comscore: pre-release tracking (awareness, interest scores)
ensemble_weights = {
    'lgbm_model': 0.5,
    'tomatometer_regression': 0.2,
    'tracking_survey_model': 0.3
}

Прогнозирование с обновлением

Bayesian Update при поступлении новых данных:

def update_forecast_with_early_actuals(prior_forecast, friday_actual_gross):
    """
    Пятница — первый день проката: обновляем прогноз уик-энда
    Исторически: Friday × 2.2 = Opening Weekend (поправка по жанру)
    """
    friday_multipliers = {'family': 2.7, 'horror': 2.0, 'drama': 2.1, 'action': 2.2}
    weekend_estimate = friday_actual_gross * friday_multipliers.get(genre, 2.2)

    # Байесовское смешивание: prior (модель) + likelihood (Friday actuals)
    posterior_forecast = 0.3 * prior_forecast + 0.7 * weekend_estimate
    return posterior_forecast

Международные рынки

Китайский рынок: Отдельная модель — иные жанровые предпочтения, квоты на иностранные фильмы, цензурные требования. China box office = separate forecast.

Global forecast:

international_features = {
    'domestic_opening_actual': domestic_results,
    'ip_international_recognition': franchise_global_awareness,
    'chinese_market_flag': china_approved,
    'release_timing_lag': weeks_after_domestic_release,
    'local_competition': local_blockbusters_same_period
}

Применения для дистрибьюторов

Screen Count Optimization: Прогноз сборов по регионам → оптимальное распределение экранов. Города с высоким прогнозируемым спросом → больше сеансов.

P&A Budget Allocation: Prints & Advertising: прогноз ROI от увеличения маркетингового бюджета на $10M.

Release Date Strategy: Сравнение прогнозируемых сборов при разных датах релиза с учётом конкурентной среды.

Сроки: baseline regression + social sentiment pipeline + opening weekend прогноз — 4-5 недель. Decay model + Bayesian update + международные рынки + release date optimizer — 2-3 месяца.