GH GambleHub

Прогнозування доходу

Прогнозування доходу

Дохід - підсумок взаємодії багатьох факторів: пропозиції контенту/продукту, поведінки користувачів, цін і промо, зовнішніх умов (свята, спорт-івенти, курс валют, регуляторні зміни). Надійний прогноз - це не одна «модель», а керований контур: визначення → дані → модель → сценарії → експлуатація → звірки → поліпшення.

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

Що прогнозуємо: валову виручку (GGR), чисту (Net), виручку після бонусів/комісій, по базовій валюті і в локальних валютах.
Горизонт/крок: щоденний/тижневий/місячний; для планування касових розривів - денний, для бюджету - місячний/квартальний.
Одиниця прогнозу: бренд × країна × платформа × канал (мінімум) з подальшим узгодженням щодо ієрархії.
Призначення: бюджетування, закупівля трафіку/контенту, ліміти інфраструктури, фінансові ковенанти.
Ціна помилки: недопрогноз (упущений попит/недозакуп) vs перепрогноз (зайві закупівлі/переобіцяння).

2) Визначення та узгодження з фінансовим контуром

Формули: GGR, Net, відрахування (податки, бонуси, афіліатські комісії) - версіоновані в семантичному шарі.
Календар: UTC-зберігання + локальні представлення; свята/зарплатні дні; спорт-розклади (якщо релевантно).
FX-політика: джерело курсів, дата конверсії (на дату операції/середній курс періоду), єдина базова валюта.
Звірки: обов'язкова процедура reconciliation c бухгалтерією (розбіжність у допустимих межах).

3) Декомпозиція доходу на драйвери

Базова формула:
[
\ text {Дохід} =\text {Трафік }\times\text {Конверсія }\times\text {Частота }\times\text {Середній чек}
]

Трафік/активні: користувачі/сесії/входи.
Конверсія: частка платять, CR в цільові події.
Частота: число транзакцій на що платить/період.
Середній чек: середня сума транзакції (враховуйте бонуси/знижки).

Рекомендується прогнозувати драйвери окремо, потім збирати композит, щоб бачити внесок факторів (міст «план-факт»).

4) Дані та регресори

Часові ряди: денні/тижневі агрегати за одиницею прогнозу.

Регресори X:
  • промо/бонуси (інтенсивність, тип, охоплення);
  • маркетингові витрати/імпресії/кліки;
  • контент-івенти (релізи, турніри, великі матчі);
  • зміни цін/лімітів/каталогу;
  • FX/інфляція, погода/календар (якщо впливає);
  • регуляторні події (обмеження/розморозки).
  • Аномалії/one-off: позначайте, не «згладжуйте» мовчки.
  • Відсутність ликів: використовуйте тільки інформацію, доступну на момент прогнозу.

5) Моделювання

5. 1 Бейзлайни

Naive/Seasonal Naive/Drift - обов'язкові для чесної оцінки.

5. 2 Класичні ряди

ETS/ARIMA/SARIMA, TBATS (множинні сезонності), Prophet (швидкий старт зі святами).

5. 3 Регресори

ARIMAX/ETS + X, динамічні регресії з календарем і промо/FX.

5. 4 Мульти-сирійні/табличні

LightGBM/XGBoost/лінійні з лагами/вікнами/календарем;

Темпоральні NN (TFT, N-Beats) для портфелів і довгих X.

5. 5 Ймовірнісні

Квантильна регресія (pinball), Student-t/Gaussian передбачення, ансамблі квантилів для інтервалів (q10/q50/q90).

5. 6 Ієрархії та узгодження

Bottom-Up/Top-Down/MinT (оптимальне узгодження помилок) для структури strana→brend→kanal→platforma.

6) Специфіка метрик доходу

Частки/відносини (маржа, комісія): моделюйте чисельник/знаменник окремо, потім композируйте.
Інтермітуючі компоненти (chargeback, high-roller): Croston/TSB, zero-inflated, окремі компоненти з квантилями.
Канібалізація: при запуску нової акції/продукту моделюйте перетоки між сегментами (мультивихідні моделі або обмежені регресори).
Еластичність за ціною/бонусами: лог-лог моделі/каузальні оцінки (DiD/SC) для оцінки коефіцієнтів, потім - what-if.

7) Оцінка якості та backtesting

Спліти: rolling/expanding origin з кратністю сезонності (тижні/місяці).
Метрики рівнів: WAPE/sMAPE (стійкі до нулів), MAE/RMSE.
Ймовірнісні: pinball loss, coverage 80/95% -інтервалів.
Стабільність: помилки по сегментах/святах/каналах; out-of-time.
Правило бейзлайну: модель повинна обганяти Seasonal Naive на ключових горизонтах.

8) Сценарії та невизначеність

Квантилі: q10/q50/q90 → «песиміст/база/оптиміст».
Сценарії X: «без промо/с промо», «FX ± 10%», «великий івент», «регуляторні обмеження».
Ризик метапараметрів: стрес-тести на зміни еластичностей і сезонності.
Вартість ризику: плануйте за умовним shortfall (покарання за недопрогноз/перепрогноз асиметричні).

9) План-факт і внесок факторів (прибутковий bridge)

Покажіть міст: тренд + сезонність + промо + ціна/ліміти + FX + шоки/інциденти → підсумкове відхилення. Це підвищує довіру і допомагає приймати дії (додати бюджет, зрушити промо, поміняти прайсинг).

10) MLOps та експлуатація

Розклад: денні прогнози - T + 1 до 06:00 лок.; тижневі - N раз на тиждень; місячні - T + 1/T + 3.
Артефакти: фічестор (онлайн/офлайн паритет), реєстр моделей, версії формул доходу.
Моніторинг: WAPE/coverage по вікну, PSI дрейфу ознак, затримка фідів, SLA генерації.
Алерти: зростання помилки> порогу, некалібровані інтервали, розлад ієрархій.
Fail-safe: відкат до ETS/Seasonal Naive; freeze-режим в пікові свята.
Гістерезис: різні пороги включення/вимикання промо-регресорів, щоб не «блимати».
Звірки: щоденні/тижневі reconciliation з фінансовими звітами.

11) Шаблони артефактів

A. Паспорт прогнозу доходу

KPI: `NET_REVENUE_EUR_v3`

Горизонт/крок: 8 тижнів/день

Одиниці: бренд × країна × платформа × канал; reconciliation: MinT

Регресори: `promo_spend`, `content_event_flag`, `price_index`, `fx_rate`, `holiday`

Моделі: 'ARIMAX _ v2'+'LightGBM _ Quantiles _ v4'( ансамбль, q10/50/90)

Цілі: WAPE ≤ 8% (денний), coverage 90% -інтервала ≥ 85%

SLO: генерація ≤ 10 хв після 06:00; лаг даних ≤ 1 год

Власники: Finance & Growth Analytics; дата ревізії, версія

B. decision-ready звіт (скелет)

Заголовок: "Дохід, прогноз 8 тижнів: q10/q50/q90»

Ризики: недопрогноз в тижні 3 - 21% (очікуваний shortfall € X- € Y)

Внесок факторів: + свята, + контент-івент, −FX, −snyatiye промо

Рекомендації: збільшити промо в країнах A/B, зрушити акцію, хедж FX

C. псевдо-код пайплайна

python
1) load y = load_revenue_series(grain=['brand','country','platform','channel'], step='D')
X = load_regressors(['promo_spend','content_event','price_idx','fx_rate','holiday'])
2) features ds = make_lags(y, lags=[1,7,14,28])
ds = add_rolling_stats(ds, windows=[7,14,28])
ds = join_regressors(ds, X)
3) cv cv = rolling_backtest(ds, folds=6, horizon=28, step=7)
4) models m_baseline = ETS(). fit(ds. train)
m_gbm = LGBMQuantiles(q=[0. 1,0. 5,0. 9]). fit(ds. train)
m_arimax = ARIMAX(). fit(ds. train)
5) evaluate & ensemble scores = evaluate([m_baseline,m_gbm,m_arimax], cv, metrics=['WAPE','pinball'])
best = ensemble_quantiles([m_gbm,m_arimax])
6) reconcile & publish f = reconcile_minT(forecast(best), hierarchy=['country','brand','platform','channel'])
publish(f, sla='06:10', owners=['Finance','Growth'])

12) Часті помилки і анти-патерни

MAPE при нулях/низьких значеннях: використовуйте WAPE/sMAPE.
Середнє середніх: агрегуйте чисельник/знаменник, а не усереднюйте відсотки по сегментах.
Ігнор календаря/контенту/FX: без регресорів прогноз «сліпне».
Лики: фічі з майбутнього або пост-фактум коригування в train.
Неузгодженість ієрархій: підсумкові суми не сходяться → застосовуйте reconciliation.
Немає fail-safe: модель «пливе» на святах.
Відсутність звірок: прогноз не стикується з управлінським/бухобліком.

13) Чек-лист перед релізом

  • Визначення доходу і відрахувань узгоджені і версіоновані
  • Календар/FX/регресори підключені і протестовані
  • Бейзлайни переможені на backtesting; цілі по WAPE/coverage досягнуті
  • Інтервали калібровані; сценарії «песиміст/база/оптиміст» зібрані
  • Ієрархічний прогноз узгоджений (MinT/Top-Down)
  • MLOps: розклад, моніторинг, алерти, fail-safe, рунібук
  • Налаштовані щоденні/тижневі звірки з фіннаглядом/бухгалтерією
  • Звіт «decision-ready» з мостом факторів і рекомендаціями

Підсумок

Прогнозування доходу - це узгоджені визначення + драйверна декомпозиція + регресори + імовірнісні та ієрархічні моделі + сценарії та інтервали + дисциплінований MLOps і звірки. Такий контур перетворює «ворожіння за графіком» в інструмент планування бюджету, маркетингу та операцій зі зрозумілою вартістю ризику і прозорими діями.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Telegram
@Gamble_GC
Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.