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 месяца.







