SPORTS BETTING MATH
НАУЧНАЯ СТАТЬЯ

Портфельный критерий Келли для параллельных ставок: многомерная оптимизация банкролла

Математическое руководство по многомерному критерию Келли для одновременных ставок, расчету матрицы ковариации, квадратичному программированию KKT и защите от просадок.

22 мин чтения Продвинутый Последнее обновление: 2026-09-20
Иллюстрация темы: Портфельный критерий Келли для параллельных ставок: многомерная оптимизация банкролла
Концептуальная иллюстрация. Числовые допущения и примеры разобраны в тексте.

Лаборатория стохастического моделирования SBM

Редакционная подпись: модели матчей и банкролла

Эта подпись объединяет статьи о Пуассоне, Келли и симуляциях. Это редакционное обозначение, а не свидетельство о составе лаборатории или независимо подтверждённой квалификации.

Двумерное моделирование исходов матчей по распределению Пуассона Оптимизация геометрического роста банкролла по критерию Келли Симуляция риска разорения методом Монте-Карло

1. Введение: почему скалярный критерий Келли не работает при параллельных ставках

В квантитативном беттинге и алгоритмической торговле на спортивных рынках классическая работа Джона Л. Келли-младшего 1956 года «A New Interpretation of Information Rate» служит фундаментальной основой для расчета оптимального размера позиции. Традиционная скалярная формула Келли определяет точную долю банкролла f∗, максимизирующую асимптотическую геометрическую скорость роста капитала при изолированной оценке отдельного пари:

f∗=b⋅p−qb=p(b+1)−1b=p⋅O−1O−1

Здесь p — истинная субъективная вероятность выигрыша, q=1−p — вероятность поражения, b=O−1 — чистый выигрыш на единицу ставки, а O — десятичный коэффициент букмекера. В строго последовательном режиме, когда исход каждой ставки становится известен и капитал пересчитывается до заключения следующего пари, критерий Келли гарантирует математически максимальный долгосрочный логарифмический рост при нулевой вероятности полного разорения.

Одновременные позиции используют общий банк до расчёта. Отдельные скалярные доли Келли могут превысить единицу в сумме, но это зависит от вероятностей и цен, а не типичного числа недельных возможностей. Проверяйте допустимость и капитал по совместным состояниям; сумма меньше единицы также не гарантирует оптимум логарифмического роста.

Катастрофа овербеттинга при независимом скалярном сайзинге: Предположим, что алгоритмическая модель выявила десять независимых ставок в одном туре АПЛ, каждая из которых имеет перевес над линией 8% при коэффициенте 2.10. Скалярный критерий Келли рекомендует выделить 7.27% банкролла на каждое событие. Заключение всех десяти пари одновременно требует поставить 72.7% всего депозита за один двухчасовой матчдей. При обнаружении двадцати таких позиций сумма долей составит 145.4% банкролла — физически невозможное плечо, гарантирующее сокрушительную просадку депозита при стандартной серии неудач.

Более того, параллельные события нередко связаны скрытой корреляцией: ставки на чистую победу фаворита (1X2), минусовую фору (-1.5) и тотал больше 2.5 в одном и том же матче несут высокую статистическую зависимость. Независимый расчет Келли в таких ситуациях катастрофически недооценивает хвостовые риски портфеля.

Для корректного распределения банкролла между параллельными позициями необходимо переходить от скалярной арифметики к многомерной портфельной оптимизации по критерию Келли (Simultaneous / Multivariate Kelly). В данной статье приводится строгий математический вывод многомерного логарифмического критерия, аналитическое решение для независимых рынков, квадратичное программирование для ковариационных матриц и готовый алгоритм на Python.

2. Математическая формулировка: максимизация логарифмической полезности

Пусть начальный банкролл инвестора равен W0. В момент времени t доступно n параллельных неисключающих событий. Аналитик определяет вектор долей распределения капитала 𝐟=(f1,f2,…,fn)T, где fi≥0 — доля банкролла в ставке i, а нераспределенный остаток f0=1−∑fi удерживается в виде безрискового кэша с нулевой доходностью.

Для n событий существует K=2n возможных совместных состояний исходов в пространстве событий Ω={ω1,…,ωK}, где каждое состояние ωk наступает с вероятностью pk≥0, а ∑pk=1. Для каждого состояния вектор чистых выплат равен 𝐑k=(R1,k,…,Rn,k)T, где:

Ri,k={bi=Oi−1если ставка i выиграла в состоянии ωk−1если ставка i проиграла в состоянии ωk

Мультипликатор совокупного капитала в состоянии ωk составляет:

g(𝐟,ωk)=1+∑i=1nfiRi,k=1+𝐟T𝐑k

Задача квант-инвестора — максимизировать математическое ожидание логарифма конечного капитала G(𝐟)=𝔼[ln⁡(W1/W0)]:

max𝐟⁡G(𝐟)=∑k=1Kpkln⁡(1+𝐟T𝐑k)при условиях∑i=1nfi≤1,fi≥0

Квадратичная задача ниже приближает цель с помощью A. Условия KKT характеризуют решение при обычных условиях регулярности ограничений. Положительная полуопределённость даёт вогнутость приближённого роста, но не измеренное время работы или автоматический успех оптимизации. Точная цель вогнута; строгая единственность дополнительно требует, чтобы векторы доходностей с положительными вероятностями различали допустимые направления. Избыточные позиции могут разделять один оптимум.

3. Независимые состояния и квадратичное приближение

Независимость позволяет разложить совместные вероятности в произведения, но не превращает логарифм общего капитала в сумму отдельных логарифмов. Деньги заняты одновременно, поэтому точный оптимум решает общую задачу состояний. Для двух независимых бинарных ставок с коэффициентом 2 и вероятностью 0.6 скалярный Келли равен 0.2 на каждую, а точный одновременный равен 5/26, примерно 0.1923076923. Два проигрыша имеют вероятность 0.16 и множитель капитала 1-2f; смешанные состояния дают 1, две победы имеют вероятность 0.36 и множитель 1+2f. Производная этого логарифмического ожидания даёт указанный оптимум.

G(f,f)=0.36ln⁡(1+2f)+0.16ln⁡(1−2f),f∗=5/26

Разложение Тейлора второго порядка использует матрицу вторых моментов A, а не только ковариацию C. Внешнее произведение средних ненулевое при ненулевых преимуществах. Даже при независимости внедиагональные элементы A равны mu_i mu_j. Использование одной диагональной ковариации является дополнительным приближением для малых средних. Точность зависит от малости возможных доходностей всего портфеля, а не только отдельных долей. Стационарная точка без ограничений может нарушать бюджет или требовать отрицательных ставок, поэтому тогда не является допустимой аллокацией.

μ=E[R],C=Cov⁡(R),A=E[RRT]=C+μμT
G(f)≈fTμ−12fTAf,fquad=A−1μ

Пропорциональное масштабирование сохраняет отношения неотрицательных скалярных долей и соблюдает выбранный бюджет. Это допустимая эвристика, а не общее решение точной или квадратичной задачи с ограничениями. Порог 0.20 является условным выбором экспозиции, а не универсальным институциональным стандартом или гарантией просадки. Разные коэффициенты и вероятности не требуют одинакового оптимального множителя сокращения.

fiscaled=simin⁡(1,B/∑jsj),si=max⁡(0,(piOi−1)/(Oi−1))

4. Ковариация, зависимость и обратная матрица

Для фиксированного неотрицательного портфеля положительная ковариация увеличивает дисперсию по сравнению с нулевой. Из этого не следует, что при повторной оптимизации обязательно уменьшится каждая позиция. Обратная матрица ниже решает ковариационный суррогат C f=mu. Это точная линейная алгебра для суррогата, а не точная формула логарифмического Келли. Матрица C должна быть невырожденной; отрицательные результаты также нарушают запрет коротких позиций.

C=(σ12ρσ1σ2ρσ1σ2σ22)
fC,1=μ1σ22−ρσ1σ2μ2σ12σ22(1−ρ2),fC,2=μ2σ12−ρσ1σ2μ1σ12σ22(1−ρ2)

Для C=[[4,0.6],[0.6,1]] и mu=(0.4,0.2) определитель равен 3.64, решение равно(0.0769230769,0.1538461538). Умножение C на этот вектор возвращает mu. При равных средних и дисперсиях суррогат даёт mu/(sigma²(1+rho)); rho 0.5 сокращает именно это приближение на треть. Процент не является универсальным свойством точной задачи совместных состояний.

Для условной бинарной пары O1=1.90,p1=0.55,O2=2.05,p2=0.52,p12=0.35 вероятности четырёх состояний равны 0.35,0.20,0.17,0.28. Ковариация равна 0.24928, корреляция примерно 0.25750. Эти числа не задают универсальный процент уменьшения ставок. Нужна допустимая совместная модель: одна ковариационная матрица не описывает все состояния логарифмического роста.

Cov⁡(R1,R2)=O1O2(p12−p1p2)=0.24928

5. Ограничения и приёмка численного результата

minf≥0, ∑fi≤B⁡{12fTAf−μTf}

Код считает точную цель по независимым бинарным состояниям. Их число растёт как 2^n, поэтому учебный пример принимает не больше 12 ставок. Бюджет строго меньше 1 сохраняет положительный капитал во всех состояниях. До возврата результата проверяются конечность входов, успех оптимизации, неотрицательность долей и соблюдение бюджета. Для коррелированных рынков, возвратов, половинных выигрышей, комиссий и отмен нужно явно расширить совместную модель.

6. Практический числовой пример: субботний кард из 5 событий

Пять строк ниже задают условные независимые бинарные победы, включая обычную победу «Интера», а не фору 0. Вероятности являются предположениями, а не измеренными прогнозами. Сумма скалярных долей равна 0.4836491228, выбранный бюджет 0.20. Векторы посчитаны до округления. Рост означает ожидаемый логарифм множителя капитала за раунд, а не фактический ROI или прогноз просадки.

ID Матч и рынок Коэфф. (O) Вер. (p) Перевес Келли Сумма ставки
1 Арсенал (Победа 1) 1.95 55.0% +7.25% 7.63% $7,632
2 Ливерпуль -1.5 фора 2.25 48.0% +8.00% 6.40% $6,400
3 Реал Мадрид ТБ 2.5 1.80 60.0% +8.00% 10.00% $10,000
4 Бавария Мюнхен П1 1.50 71.0% +6.50% 13.00% $13,000
5 Победа «Интера» (бинарный исход) 1.75 62.0% +8.50% 11.33% $11,333

Масштабирование и точная оптимизация дают разные векторы. При заданной независимой модели рост эвристики равен 0.0120732581703, оптимизированный рост 0.0121349525481. Небольшой разрыв опровергает утверждение о точной оптимальности пропорционального сокращения. Сохранение 82% роста или снижение просадки на 60% здесь не установлено. Изменение зависимостей или вероятностей требует нового расчёта.

fscaled=(0.03155833,0.02646547,0.04135229,0.05375798,0.04686593)
fexact=(0.02944142,0.02809425,0.04485731,0.04272208,0.05488495)

7. Дробный Келли (Fractional Kelly) для портфелей

Из-за статистической погрешности оценки вероятностей реальные квант-фонды используют Половинный Келли (Half-Kelly, γ=0.50) или Четвертной Келли:

𝐟fractional=γ⋅𝐟∗,γ∈[0.25,0.50]

Результаты повторных раундов требуют стабильного распределения и интегрируемых логарифмических доходностей. Они не устанавливают превосходство на каждой траектории или единственный вектор при избыточных направлениях выплат. Доли роста Half/Quarter зависят от распределения;75%/43.75% возникают только в квадратичном разложении возле внутреннего оптимума. Для вероятности просадки нужны горизонт и определение фиксированной границы либо падения от пика. Приведённая программа эти вероятности не считает.

10. Регуляризация и дробные доли

Перед использованием коррелированной модели проверьте допустимость совместных вероятностей. Для двух бинарных индикаторов границы Фреше имеют вид max(0,p1+p2-1)≤p12≤min(p1,p2). В указанном примере это интервал от 0.07 до 0.52, поэтому выбранное p12=0.35 допустимо. Затем вероятности победа/победа, победа/проигрыш, проигрыш/победа и проигрыш/проигрыш равны соответственно 0.35,0.20,0.17,0.28. Их сумма равна единице; строки и столбцы возвращают заданные маргинальные вероятности. Средние чистые доходности равны 0.045 и0.066. Дисперсии отдельных доходностей равны 0.893475 и1.048944, поскольку для бинарной ставки Var(R)=O²p(1-p). Деление ковариации 0.24928 на корень из произведения этих дисперсий даёт корреляцию 0.25749576. Это проверка внутренней согласованности условной таблицы, а не эмпирическая оценка зависимости футбольных рынков. Передавать такие коррелированные исходы в опубликованный независимый генератор нельзя: произведение маргинальных вероятностей заменило бы заданную совместную таблицу другой моделью. Для расчёта нужен отдельный генератор состояний с перечисленными вероятностями и проверкой каждой выплаты.

Добавление lambda I к матрице вторых моментов или ковариации меняет её собственные значения по-разному. В общем случае это не эквивалентно умножению всех ставок на один коэффициент Half-Kelly или Quarter-Kelly. Байесовский вывод требует явных априорного распределения и правдоподобия; штраф ridge сам по себе является выбором модели. При неточной оценке преимущества меньшие доли могут помочь, но не гарантируют положительный рост. Точную цель следует пересчитать при правдоподобных изменениях вероятностей и зависимости.

8. Часто задаваемые вопросы

Полная реализация на Python и пошаговый анализ алгоритма

Для практического применения многомерного критерия Келли в алгоритмических ставках используется следующий оптимизационный модуль на Python с библиотеками numpy и scipy.optimize:

import numpy as np
from scipy.optimize import minimize

def solve_simultaneous_kelly(odds, true_probs, max_bankroll_fraction=0.25):
    """Illustrative exact state objective for at most 12 independent binary bets."""
    odds = np.asarray(odds, dtype=float)
    probs = np.asarray(true_probs, dtype=float)
    cap = float(max_bankroll_fraction)
    if (odds.ndim != 1 or probs.shape != odds.shape or not 1 <= odds.size <= 12
            or not np.all(np.isfinite(odds)) or np.any(odds <= 1)
            or not np.all(np.isfinite(probs)) or np.any((probs < 0) | (probs > 1))
            or not np.isfinite(cap) or not 0 <= cap < 1):
        raise ValueError("Require 1..12 binary bets, finite odds>1, p in [0,1], cap in [0,1).")
    n = odds.size
    states = ((np.arange(1 << n)[:, None] >> np.arange(n)) & 1).astype(float)
    weights = np.prod(np.where(states == 1, probs, 1-probs), axis=1)
    returns = states * odds - 1
    def loss(f):
        wealth = 1 + returns @ f
        if np.any(wealth <= 0):
            return np.inf
        return -float(weights @ np.log(wealth))
    def gradient(f):
        return -(weights / (1 + returns @ f)) @ returns
    scalar = np.maximum(0, (probs * odds - 1) / (odds - 1))
    total = scalar.sum()
    initial = scalar * min(1, cap / total) if total else scalar
    if cap == 0:
        return {"optimal_fractions": np.zeros(n), "total_allocation": 0.0,
                "expected_growth_rate_per_round": 0.0, "success": True}
    result = minimize(loss, initial, jac=gradient, method="SLSQP",
                      bounds=[(0, cap)] * n,
                      constraints=[{"type": "ineq", "fun": lambda f: cap-f.sum(),
                                    "jac": lambda f: -np.ones(n)}],
                      options={"ftol": 1e-13, "maxiter": 1000})
    if not result.success:
        raise RuntimeError("Optimizer did not converge.")
    f = np.asarray(result.x)
    if (not result.success or not np.all(np.isfinite(f))
            or np.min(f) < -1e-10 or f.sum() > cap + 1e-10
            or np.any(1 + returns @ f <= 0) or not np.isfinite(loss(f))):
        raise RuntimeError("Optimizer failed or returned an infeasible allocation.")
    return {"optimal_fractions": f, "total_allocation": float(f.sum()),
            "expected_growth_rate_per_round": -loss(f), "success": True}

Часто задаваемые вопросы

СВЯЗАННЫЕ ИССЛЕДОВАНИЯ

Перекрестные исследования

Сравните один и тот же рынок

Партнёрские ссылки

1win Sports: проверьте событие, коэффициент и правила расчёта

Что входит в цену → Перейти в 1win Sports 18+ · Условия на сайте

Stake Sportsbook: сравните то же событие, рынок и правила расчёта

Что входит в цену → Перейти в Stake 18+ · Условия на сайте

Проверьте текущую цену, конкретный рынок, правила расчёта и доступность в своей стране. Результат калькулятора зависит от допущений и не подтверждает доступную возможность для ставки.