Hacer apuestas grandes e inteligentes

16

He estado tratando de codificar un algoritmo para sugerir apuestas en juegos 1X2 (ponderados).

Básicamente, cada juego tiene un conjunto de partidos (equipos locales vs fuera):

  • 1: casa gana
  • X: dibujar
  • 2: visitante gana

Juego de apuestas BWin 1X2

Para cada coincidencia y símbolo ( 1, Xy 2), asignaré un porcentaje que represente las posibilidades / probabilidades de que ese símbolo sea el resultado correcto de la coincidencia. Aquí hay una matriz que representa la estructura:

$game = array
(
    'match #1' => array // stdev = 0.0471
    (
        '1' => 0.3,     // 30%     home wins
        'X' => 0.4,     // 40%     draw
        '2' => 0.3,     // 30%     away wins
    ),

    'match #2' => array // stdev = 0.4714
    (
        '1' => 0.0,     //   0%    home wins
        'X' => 0.0,     //   0%    draw
        '2' => 1.0,     // 100%    away wins
    ),

    'match #3' => array // stdev = 0.4027
    (
        '1' => 0.1,     //  10%    home wins
        'X' => 0.0,     //   0%    draw
        '2' => 0.9,     //  90%    away wins
    ),
);

También calculo la desviación estándar para cada apuesta (comentada en el fragmento anterior); las desviaciones estándar más altas representan una certeza más alta, mientras que los partidos con las desviaciones estándar más bajas se traducen en un mayor nivel de incertidumbre e, idealmente, deberían cubrirse con una apuesta doble o triple, si es posible.

El siguiente pseudo-algoritmo debe describir el flujo de trabajo general:

for each match, sorted by std. dev         // "uncertain" matches first
    if still can make triple bets
        mark top 3 symbols of match        // mark 3 (all) symbols
    else if still can make double bets
        mark top 2 symbols of match        // mark 2 (highest) symbols
    else if can only make single bets      // always does
        mark top symbol of match           // mark 1 (highest) symbol

Hasta ahora todo bien, pero necesito decirle al algoritmo cuánto quiero gastar. Digamos que una sola apuesta cuesta 1en cualquier moneda, la fórmula para calcular cuánto cuesta una apuesta múltiple es:

2^double_bets * 3^triple_bets * cost_per_bet (= 1)

Obviamente, el algoritmo debería tratar de asignar la mayor cantidad de dinero disponible en la sugerencia de apuesta (de lo contrario no tendría mucho sentido), y ahora es donde esto se vuelve más complicado ...

Digamos que quiero pagar un máximo de 4, enumerando todos los múltiplos posibles en PHP ( @ IDEOne ):

$cost = 1; // cost per single bet
$result = array();
$max_cost = 4; // maximum amount to bet

foreach (range(0, 3) as $double)
{
	foreach (range(0, 3) as $triple)
	{
		if (($double + $triple) <= 3) // game only has 3 matches
		{
			$bets = pow(2, $double) * pow(3, $triple); // # of bets

            $result[$bets] = array
            (
                'cost'      => $bets * $cost, // total cost of this bet
                'double'    => $double,
				'triple'    => $triple,
            );

            if ($result[$bets]['cost'] > $max_cost)
			{
				unset($result[$bets]);
            }
        }
    }
}

ksort($result);

Produce el siguiente resultado:

Array
(
    [1] => Array
        (
            [cost] => 1
            [double] => 0
            [triple] => 0
        )

    [2] => Array
        (
            [cost] => 2
            [double] => 1
            [triple] => 0
        )

    [3] => Array
        (
            [cost] => 3
            [double] => 0
            [triple] => 1
        )

    [4] => Array
        (
            [cost] => 4
            [double] => 2
            [triple] => 0
        )
)

El problema

Si elijo jugar la cantidad máxima de dinero disponible ( 4), tendría que apostar con dos dobles, si uso el pseudo-algoritmo que describí anteriormente, terminaría con la siguiente sugerencia de apuesta:

  • match #1 => X1
  • match #2 => 2
  • match #3 => 12

Lo que parece subóptimo en comparación con una apuesta triple que cuesta 3y cubre más incertidumbre:

  • match #1 => X12
  • match #2 => 2
  • match #3 => 2

El ejemplo anterior gana aún más relevancia si considera que las match #3probabilidades podrían ser:

$game['match #3'] = array // stdev = 0.4714
(
    '1' => 0.0,           //   0%    home wins
    'X' => 0.0,           //   0%    draw
    '2' => 1.0,           // 100%    away wins
);

En este caso estaría desperdiciando un doble sin una buena razón.

Básicamente, solo puedo elegir la apuesta más grande (posiblemente estúpida) y no la apuesta más inteligente y más grande .

He estado golpeándome la cabeza contra la pared durante algunos días, esperando obtener algún tipo de epifanía, pero hasta ahora solo he podido encontrar dos soluciones a medias [malas]:


1) Dibuja una "línea"

Básicamente, diría que los partidos con un stdev más bajo que un valor específico serían triples, los partidos con un stdev mucho más alto serían apuestas dobles y el resto apuestas simples.

El problema con esto, por supuesto, es encontrar los límites específicos apropiados, e incluso si encuentro los valores perfectos para la apuesta "más inteligente", todavía no sé si tengo suficiente dinero para jugar la apuesta sugerida o si Podría hacer una apuesta aún más grande (también inteligente) ...


2) fuerza bruta

Se me ocurrió esta idea mientras escribía esta pregunta y sé que no tendrá mucho sentido en el contexto que describí, pero creo que podría hacer que funcione utilizando métricas algo diferentes. Básicamente, podría hacer que el programa sugiera apuestas (# de apuestas triples y dobles) por cada cantidad posible de dinero que pueda jugar (desde 1hasta 4en mi ejemplo), aplicando el pseudo-algoritmo que describí anteriormente y calculando un valor de clasificación global (algo como % of symbols * match stdev- Lo sé, no tiene sentido).

La apuesta con la clasificación más alta (cubriendo la incertidumbre) sería la apuesta sugerida. El problema con este enfoque (además del hecho de que todavía no tiene ningún sentido) es que los juegos con los que trabajará mi programa no se limitan a 3 partidos y el número de combinaciones de apuestas dobles y triples para esos partidos sería sustancialmente más alto.


Siento que hay una solución elegante, pero no puedo entenderla ...

Cualquier ayuda para resolver este problema es muy apreciada, gracias.


Parece haber cierta confusión con respecto a mi problema, ya he abordado esto en esta pregunta y también en los comentarios, pero la interpretación errónea todavía parece prevalecer, al menos para algunos.

Necesito saber cuántas apuestas triples, dobles y simples jugaré para un juego específico (todos los partidos). Ya sé qué símbolos quiero jugar mirando cada partido individualmente.

Alix Axel
fuente
44
La buena gente de math.stackexchange.com podría proporcionar una mejor comprensión del problema que está describiendo, lo que a su vez podría sugerir buenas maneras de implementarlo :)
1
@Lethargy: Una vez publiqué una pregunta aquí sobre el Triángulo de Pascal y los números primos que este último migró a las matemáticas. Recibí alrededor de 15 votos a favor (tanto en SO como en matemáticas. SE) muy rápidamente, pero la pregunta se cerró en menos de 30 minutos y ya no existe. No creo que les guste mucho este tipo de preguntas "simples".
Alix Axel
2
Si optimizamos para el número máximo de victorias, esto parece realmente fácil. El número promedio de victorias es simplemente la posibilidad de ganar de cada instancia agregada. Es decir, si establecemos una apuesta única en la oportunidad máxima, ganaremos 0.4 + 1 + 0.9 = 2.3 juegos en promedio. Entonces, si agregar 1 apuesta siempre fue igual de costoso, la solución sería simplemente clasificar las posibilidades de ganar y aprovechar las primeras posibilidades de COSTO (esto da el "mejor" resultado para el ejemplo). Si el costo es diferente al agregar un segundo frente a un tercero a algo, se vuelve más complicado (sin embargo, la fuerza bruta recursiva funciona) y creo que me quedaré a dormir.
2
Como matemático que no conoce php, me resultaría mucho más fácil atacar este problema si estuviera en notación matemática en lugar de código.
2
¿Has oído hablar del criterio de Kelly ? Si no, hay algo de lectura allí para ti.

Respuestas:

2

Creo que se me ocurrió una solución de fuerza bruta viable, es así:


  • 1) calcular todas las combinaciones posibles de apuestas múltiples que puedo hacer

Para el ejemplo y las cantidades que proporcioné en mi pregunta, esto sería:

  • 3 simples, 0 dobles, 0 triples = equivalente a 1 apuesta simple
  • 2 simples, 1 doble, 0 triple = equivalente a 2 apuestas simples
  • 2 simples, 0 dobles, 1 triple = equivalente a 3 apuestas simples
  • 1 simple, 2 dobles, 0 triples = equivalente a 4 apuestas simples

  • 2) calcule la desviación estándar de las probabilidades del símbolo para cada partido

             |    1    |    X    |    2    |  stdev  |
             |---------|---------|---------|---------|
    Match #1 |   0.3   |   0.4   |   0.3   |  0.047  |
             |---------|---------|---------|---------|
    Match #2 |   0.1   |   0.0   |   0.9   |  0.402  |
             |---------|---------|---------|---------|
    Match #3 |   0.0   |   0.0   |   1.0   |  0.471  |
    

  • 3) para cada combinación de apuestas múltiples ( paso 1 ) calcule una clasificación usando la fórmula:

    clasificación = (#n (x) [+ #n (y) [+ #n (z)]]) / stdev (#n)

Donde #nes una coincidencia específica y #n(x|y|z)es la probabilidad ordenada de los símbolos.

  • Las coincidencias se procesan de desviaciones estándar bajas a altas.
  • Los símbolos individuales en cada partido se procesan de probabilidades altas a bajas.

Prueba para 1 apuesta simple, 2 doble, 0 triple:

  • (#1(X) + #1(1)) / stdev(#1) = (0.4 + 0.3) / 0.047 = 14.89
  • (#2(2) + #2(1)) / stdev(#2) = (0.9 + 0.1) / 0.402 = 2.48
  • #3(2) / stdev(#3) = 1.0 / 0.471 = 2.12

Esta apuesta me da una clasificación global de 14.89 + 2.48 + 2.12 = 19.49.


Prueba para 2 apuestas simples, 0 dobles, 1 triple:

  • (#1(X) + #1(1) + #1(2)) / stdev(#1) = (0.4 + 0.3 + 0.3) / 0.047 = 21.28
  • #2(2) / stdev(#2) = 0.9 / 0.402 = 2.24
  • #3(2) / stdev(#3) = 1.0 / 0.471 = 2.12

Lo que me da una clasificación global de 21.28 + 2.24 + 2.12 = 25.64. :-)


Todas las apuestas restantes serán claramente inferiores, por lo que no tiene sentido probarlas.

Este método parece funcionar, pero se me ocurrió mediante prueba y error y, siguiendo mis instintos, me falta la comprensión matemática para juzgar si es correcto o incluso si hay una mejor manera ...

Cualquier puntero?

PD: Perdón por el mal formato, pero el analizador MD parece ser diferente de StackOverflow.

Alix Axel
fuente
¿Ha considerado la programación lineal ( en.wikipedia.org/wiki/Linear_programming ) para resolver este problema?
Victor Sorokin
1

¿Qué tal hacer una solución basada en el Método Simplex? Dado que la premisa para usar el método Simplex no se cumple, necesitamos modificar el método ligeramente. Llamo a la versión modificada "Walk the line".

Método:

Puedes medir la incertidumbre de cada partido. ¡Hazlo! Calcule la incertidumbre de cada partido con una apuesta simple o doble (para una apuesta triple no hay incertidumbre). Al agregar una apuesta doble o triple, elija siempre la que reduzca más la incertidumbre.

  1. Comience con el número máximo de apuestas triples. Calcular la incertidumbre total.
  2. Eliminar una triple apuesta. Agregue una o dos apuestas dobles, manteniéndolas por debajo del costo máximo. Calcular la incertidumbre total.
  3. Repita el paso 2 hasta que tenga el número máximo de apuestas dobles.

Elija la apuesta con la incertidumbre total más baja.

Klas Lindbäck
fuente
0

Lo que vengo de observar estas apuestas deportivas llegó a estas conclusiones.

Valor esperado
Digamos que tiene 3 apuestas con 1.29 5.5 and 10.3EV (última apuesta en la mesa) EV para apostar
EV = 1/(1/1.29+1/5.5+1/10.3) - 1 = -0.05132282687714185 si las probabilidades de que un ganador sobre otro se distribuyan como
1/1.29 : 1/5.5 : 1/10.3, entonces está perdiendo su dinero a largo plazo ya que su EV es negativo.
Solo puede obtener ganancias si puede determinar cuáles son las probabilidades de cada resultado y descubrir irregularidades.

Digamos que las verdaderas probabilidades son
0.7 : 0.2 : 0.1

Eso significa que las tasas deberían ser 1.43 \ 5.0 \ 10.0

Puede ver que, en este caso, la mejor recompensa es para el sorteo de apuestas, ya que le da
EV(0) = 5.5/5 - 1 = 0.1
dónde apostar en caso de pérdida
EV(2) = 10.2/10 - 1 = 0.02
y apostar para ganar en casa es incluso EV-
EV(1) = 1.29/1.43 - 1 = -0.10

ralu
fuente
No creo que hayas recibido mi pregunta. Ya sé en qué símbolos (y en qué orden en caso de una apuesta múltiple) apostar en cada partido individual. Mi problema es determinar la cantidad ideal de apuestas triples y dobles que debería jugar al observar todos los partidos (y sus respectivas posibilidades de símbolos) a nivel mundial .
Alix Axel