Matemáticas no tan básicas. Teorema de Bayes

El teorema de Bayes relaciona la probabilidad de ocurrencia de un suceso a partir de la constatación de un hecho (un "hecho cierto") cuya probabilidad de que ocurra está condicionado al primero. No se entiende muy bien, ¿verdad?

Otra forma de verlo: el suceso A depende de B, ¿cómo puedo precisar la probabilidad de A si ya sabemos que B ha ocurrido y conocemos en qué grado B depende A? Ojo, "B depende de A" (su grado de dependencia) es lo opuesto de lo que queremos calcular.

En la práctica y explicado de moda intuitiva: Bayes sirve para corregir una estimación (una probabilidad) con la información que vamos recopilando. En el caso del Poker, tenemos una estimación inicial que según avanza la mano podemos corregir con la información que vamos recibiendo.

ENUNCIADO Y DEMOSTRACIÓN MATEMATICA

(1) es la probabilidad de que los sucesos A y B ocurran. Su valor es la probabilidad de que ocurra A -P(A)- multiplicado por la probabilidad de "que ocurra B si A ha ocurrido -P(B|A)-". Esta igualdad es intuitiva y conmutativa.

(2.1) aplicamos (1) para despejar P(A|B).
(2.2) En el numerador volvemos a aplicar (1) y en el denominador sustituimos P(B) ("probabilidad de que ocurra B") por "la probabilidad de que ocurra B si ocurre A (según la probabilidad de A) y la probabilidad de B si no ocurre A (según la probabilidad de que no ocurra A)".
Esto último siempre es cierto (porque A siempre "o se cumple o no se cumple")

(3) Es la fórmula genérica de Bayes.


EJEMPLO PRÁCTICO
Ahora vamos a poner un ejemplo aplicado al poker. Imagina que recibes KQo y estás jugando HU contra el mejor jugador del mundo que, además, ha adivinado (o visto) tu jugada.
Tu rival, además de ser clarividente, se juega un 15% de faroles, es decir, hay un 15% de probabilidades de que no teniendo una jugada mejor que la de su rival haga una subida.
Por otra parte, tu rival hace slowplay el 10% de las veces, es decir, hay un 10% de probabilidades de que teniendo una jugada mejor que la de su rival no suba. O lo que es lo mismo, el 90% de las veces que tiene una buena jugada hace una apuesta por valor (value bet).
Fijaros que 15% (porcentaje de faroles) y 90% (porcentaje de value bets) no suman 100% ¿por qué? porque son dos sucesos independientes: nuestro rival puede aumentar su ratio de faroles sin cambiar el ratio de slowplay.
Vamos a suponer que hay un 11,8% de manos mejores que KQo (88,2% de las posibles manos serían peores).

Pues bien, tu rival sube y quieres saber cuál es la probabilidad de que tenga una jugada mejor que la tuya.

Datos de partida para poder aplicar Bayes:
- P(Raise|Jugada) = 90%. Probabilidad de que el villano haga raise si tiene jugada
- P(Raise|No_Jugada) = 15%. Idem si no tiene jugada (farol = bluff)
- P(Jugada) = 88,2%. Probabilidad de que tenga una jugada (mejor que la nuestra)
- P(No_Jugada) = 11,8%. Probabilidad de que no tenga jugada
- P(Jugada) + P(No_Jugada) = 1. La probabilidad de tener o no tener jugada son complementarias y suman 1.

¿qué queremos calcular?
Queremos conocer P(Jugada|Raise) que es "la probabilidad de que este cabrón tenga una jugada mejor que nosotros ahora que hemos visto que ha subido".

P(Jugada|Raise) = P(Raise|Jugada) * P(Jugada) / ( P(R|J)*P(J) + P(R|N)*P(N) ) = 0,44

Con estas condiciones el villano tiene una probabilidad de tener una jugada mejor que la nuestra de un 44%


Curioso, ¿no?
Como el villano hace value bet casi siempre (90%) y sólo hace faroles unas pocas veces (15%) parecería que casi siempre que apuesta debería tener una jugada y, sin embargo, el 56% de las veces que apuesta no tiene nada.



Referencias: El teorema de Bayes en Wikipedia

Elige: AKo, JTs o 22 ?

- ¿qué mano prefieres: AKo, JTs o 22?
- elige tú primero y luego te digo...

Es sólo un juego pero, comparando las probabilidades de éxito de cada jugada en las diferentes combinaciones posibles, llegamos a una conclusión ya conocida pero que conviene recordar de vez en cuando: la fuerza de nuestra jugada depende de las jugadas que tegan nuestros rivales

La tabla resume las probabilidades de victoria de cada mano dependiendo de la mano con la que se enfrente. AKo pierde frente a 22 y gana frente a JTs que, a su vez, gana a 22.



El caso paradigmático es la pareja menor (22 casi nunca es favorito) cuando se enfrenta a AK, una de las mejores manos iniciales. El jugador con AK hace shove y, cuando pierde frente al "pringao" de la pareja, se queja de su mala suerte.

A6o de mano. Mi peor pesadilla

Esto no tiene ninguna base científica pero creo que nos pasa a muchos jugadores. Hay jugadas de mano que de forma irracional resultan "irresistibles". En mi caso, cuando recibo A6o siempre intento jugarla, es la jugada que más fichas me cuesta con diferencia.



En los últimos tres días he recibido esta jugada 20 veces, la he jugado 18 veces (1 vez desde BB) y he perdido fichas todas las veces.

DoN super pasivo

Hay gente que comenta que los S&G DoN es el refugio de los jugadores más pasivos. Personalmente me gustan más los S&G "normales" donde puedes, si todo va bien, practicar en una misma partida situaciones de todo tipo: Full ring, Short Handed, Heads Up, Deep Stack, Antes, etc.

Anoche jugué una de las mesas más pasivas que recuerdo: el PFR medio por debajo del 10% y, si os fijáis en la imagen de las manos jugadas, comprobaréis que se vieron muy pocos flops.... 30 manos se resolvieron sin ver el flop (de un total de 57 manos).



He cargado la sesión en Weaktight:

Fuente: weaktight.com

Programación . Cálculo del ICM

ICM significa Independent Chip Model y, de forma muy resumida, es un modelo que sirve para calcular el valor de las fichas (chips) durante la disputa de un torneo (S&G o MTT). La idea detrás de ICM es que las decisiones en un torneo no se pueden basar, como en Cash, en el valor nominal de las fichas.

Intuitivamente esto ya lo sabíamos: en una mesa de Cash hay 300$ en el bote, la cantidad a subir o los pot odds para ver una apuesta de 10$ se pueden calcular directamente. Sin embargo, en un S&G, si sólo te quedan 10$ sólo los deberías jugar con un equity mayor de 0,5; otro ejemplo, si tienes 6.000$ y uno de los rivales tiene 290$ puedes hacerle shove con un rango bastante amplio porque 290$ de tu pila valen mucho menos que los últimos 290$ de su pila; un tercer ejemplo, sigues con 6.000$, tienes TT y un rival con más fichas hace shove, en este caso la intuición (del cash) te dice que es una buena oportunidad para ganar 6.000$ mientras que ICM te recuerda que perder 6.000$ significa perder el torneo y que deberías hacer fold. En ICM, 12.000$ nunca es el doble de 6.000$, es bastante menos

En el foro de Poker red Sergeon colgó una introducción a ICM a partir de varios artículos, a su vez, del foro 2+2.

Vamos a incorporar algunos cálculos basados en ICM a HHJReader (estupendo programa). De momento, hemos programado una calculadora de ICM en Excel. Aquí vemos el resultado y el código utilizado (traducido a VBA a partir de JAVA). Con este código cualquiera puede construirse su propia calculadora usando Excel o, directamente, en Visual Basic.



El código:

' Calculo de ICM en VBA para excel
' Autor (de la adaptación a VBA): Isabella70
' Fecha: 2009-06-10
' Fuente de las fórmulas en JAVA: http://pokerai.org/wiki/index.php/ICM_Equity_Calculator
'
' Uso:
' - la función recibe un número (1-n) que es id del jugador
' - "Payoffs" es un rango en el excel (una columna) que tiene los premios a repartir
' (pueden ser porcentajes o neto)
' - "Pilas" es otro rango del excel (otra columna) que contiene las pilas actuales
' de los jugadores

Function getEquity(i)
' la función recibe el jugador cuyo EV queremos calcular
currentPlayer = i
premios = Range("Payoffs")
pilas = Range("Pilas")

' calculamos el total de chips
Dim total As Double
total = 0
For Each chip In pilas
' hay tantos jugadores como pilas diferente de 0
If chip = 0 Then
Exit For
End If
total = total + chip
Next chip

' la función recursiva calcula el EV del jugador en cada nivel
' 1 si es el ganador, 2 si es el segundo, etc.
getEquity = getEquityRecursivo(premios, pilas, total, currentPlayer, 1)

End Function

Function getEquityRecursivo(payouts, stacks, total, player, depth)
Dim eq As Double

' los rangos son bidimensionales, en este caso siempre hay 1 columna
stack_player = stacks(player, 1)
payout_puesto = payouts(depth, 1)

' EV: probabilidad de ganar por premio
' la probabilidad es la relación entre las fichas del jugador y todas las fichas en juego
eq = payout_puesto * stack_player / total
' sólo calculamos el EV de los puestos con premio, el resto es 0
If depth <= UBound(payouts) Then
For ist = 1 To UBound(stacks)
st = stacks(ist, 1)
If ist <> player And st > 0 Then
Dim c As Double
c = stacks(ist, 1)
stacks(ist, 1) = 0
' Debug.Print "+ Player: " & player & " depth: " & depth & " eq: " & eq
eq = eq + getEquityRecursivo(payouts, stacks, total - st, player, depth + 1) * st / total
' Debug.Print "- Player: " & player & " depth: " & depth & " eq: " & eq
stacks(ist, 1) = c
End If
Next ist
End If

getEquityRecursivo = eq
End Function


Existen en Internet muchas calculadoras de ICM, por ejemplo en, como no, ICM Poker.

El código en Java lo hemos sacado de POKERAI. ICM Equity Calculator (Pokerai).

Matemáticas no tan básicas. Riesgo de ruina

En la entrada anterior sobre la varianza demostramos mediante la simulación del resultado de torneos S&G que, conocida la distribución de los resultados, se puede calcular con bastante precisión la varianza de estos resultados. Podemos calcular la varianza pero eso no evita que las ganancias evolucionen de forma, aparentemente, caprichosa e imprevisible.

En esta entrada vamos a analizar el Riesgo de ruina (Risk of Ruin)

¿qué es el riesgo de ruina? es la probabilidad de que nuestro saldo llegue a 0 (bancarrota), considerando que partimos de un saldo inicial, que reinvertimos todas las ganancias, que las características del juego se mantienen constantes y que jugamos indefinidamente.

Las fórmulas están sacadas del excelente libro Mathematics of Poker, donde se demuestran los desarrollos y se profundiza bastante en otros aspectos (por ejemplo, cómo calcular el riesgo de ruina sin tener un winrate constante).

Las fórmulas que permiten calcular el Riesgo de ruina (RoR) son las siguientes:


En (1), vemos que el RoR depende de un factor constante (alfa) y de nuestro saldo inicial (B). El factor alfa está relacionado, de alguna manera, con el EV de nuestro juego. De manera que si el EV es negativo, el RoR es 1 (100%, seguro, indudable, incuestionable). Primera conclusión: lo primero que hay que hacer es ser ganador porque, si no, acabaremos arruinados "sí-o-sí".

La fórmula (2) permite calcular el RoR sin calcular previamente el factor alfa utilizando, en su lugar, la media y la desviación típica cuadrada (la varianza). Para usar esta fórmula necesitamos que los resultados de nuestro juego se ajustan a una distribución normal. Esta fórmula no se puede usar para calcular el RoR de tórneos cuyos resultados no se ajustan a una distribución normal. Ojo: los resultados de un jugador ganador en torneos no siguen una distribución normal, ya que son, necesariamente, asimétricos (y con curtosis).
Esta fórmula la pueden usar los jugadores de mesas NL que sí tienen una distribución normal de sus ganancias.


Simulaciones
He reproducido, lo más fielmente posible, el escenario de mi juego actual y he simulado 10.000 partidas (torneos) con los resultados que podéis ver al final.

Escenario
- Torneos S&G de 9 jugadores, 50,5$ de entrada y premios para los tres primeros (22,5$, 13,5$ y 9$).
- Resultados en forma de probabilidad de quedar en los tres primeros puestos: 0,10, 0,15 y 0,15. El resto de puestos (sin premio) se reparten el 0,6 restante. Estos son mis resultados en los últimos 100 torneos (aproximadamente).
- Entramos en premios en el 40% de los torneos.
- EV por torneo: 0,69$ (0,125). Positivo como debe ser.

Resultado
Calcular alfa requiere resolver la ecuación (1) para varios valores de B. Con excel se puede resolver la ecuación por métodos numéricos ("iSolver" lo llama Microsoft, "Análisis Y si" en español).
Para el escenario descrito alfa vale 0,00063397
Una vez calculado alfa podemos aplicar (1) para diferentes valores de B ("banca" o "saldo" inicial) y obtener una tabla como la que sigue:

Saldo   RoR
20 98,74%
50 96,87%
100 93,85%
250 85,34%
500 72,83%
1000 53,04%
Segunda conclusión: el RoR decrece exponencialmente. Para jugar tranquilos S&G de 5,5$ de entrada necesitaríamos 500$ (90 veces la entrada).


Recordemos que el RoR se cálcula sobre "infinitas" ejecuciones y no tiene en cuenta cambios de nivel, reintegros o nuevas aportaciones a nuestra cuenta que no sean los propios torneos ganados o perdidos.

A continuación se muestra el resultado de ejecutar la simulación con diferentes saldos iniciales.