El escrutinio múltiple

 En esta entrada voy a hacer una propuesta que puede ser o no exacta, pero que no deja de dar mejores resultados en su aproximación que una estimación de escrutinio tradicional.

En la primera entrada del blog había hablado de la distribución binomial de Poisson, y de cómo se podía emplear para realizar estimaciones sobre los premios finales de una determinada jornada. A partir de esa base voy a realizar una ampliación dada la dificultad en ciertas jornadas extremas para que la estimación coincida con el escrutinio final.

Las anteriores se trata de jornadas en que la columna ganadora, bien se va a signos muy apostados, o bien se va a signos muy jugados por su rentabilidad.

Se me ocurrió esta semana la posibilidad de disponer de dos tablas de apostados. Una para el quinielista medio, que juega signos muy favoitos, y otra para jugadas rentables muy concentradas en combinaciones rentables. 

Un criterio para diferenciar las jugadas rentables de las que no lo son es el CR o coeficiente de rentabilidad. Para qel que no lo conozca, el CR se calcula como el producto (de los catorce signos) del cociente del porcentaje real y el porcentaje apostado para dicho signo. Normalmente se considera rentable un límite de entre 1'82 a 2'1 de CR, que es el necesario para compensar el payout en el juego de La Quiniela (100 / 55 = 1'82 o bien 100 / 47'5 = 2'1 si consideramos el payout sin el pleno). También es común definir como rentable el CR de 1 para expresar que una combinación paga más de lo que merece por su probabilidad, para eso siempre hay opiniones diversas, aunque siempre debiendo conocer el origen de cada cifra.

Tal vez el CR no sea el criterio más acertado para establecer una distinción entre ambos grupos de jugadores, ya que siempre hay matices. De hecho en los resultados finales hay carencias respecto a lo que se pretende conseguir con el método propuesto, pero era muy sencillo de implementar de esta manera.

En el siguente enlace se puede descargar una hoja de Google Sheets en la que desarrollo el método de escrutinio que propongo en este caso.

https://docs.google.com/spreadsheets/d/12bNFRr9VdhLEvXpcDXynGRTAS8uYohhvSKYvSsJQNY8/edit?usp=sharing

Como iba diciendo la idea es dividir el escrutinio, o mejor dicho, su estimación por la distribución binomial de Poisson, en varias estimaciones con distintos porcentajes apostados, para luego sumar el número de acertantes de todas las divisiones que hagamos.

La primera duda que puede surgir está en cómo obtener los porcentajes apostados para ambos grupos. Para ello lo que he hecho es escribir el siguiente código an Apps Script.


function run() {
  var reales = SpreadsheetApp.getActiveSheet().getRange("Panel!A3:C16").getValues();
  var apostados = SpreadsheetApp.getActiveSheet().getRange("Panel!D3:F16").getValues();
  var simulaciones = SpreadsheetApp.getActiveSheet().getRange("Panel!N5").getValue();
  var rentables = initGrid();
  var noRentables = initGrid();
  var contRent = 0;
  var contNoRent = 0;
  var mediana = medianaCR(simulaciones, reales, apostados);
  for(var i = 0; i < simulaciones; i++) {
    var col = simularColumna(apostados);
    var cr = getCR(col, reales, apostados);
    if(cr < mediana) {
      contNoRent++;
      for(var j = 0; j < col.length; j++) {
        noRentables[j][col[j]]++;
      }
    }
    else {
      contRent++;
      for(var j = 0; j < col.length; j++) {
        rentables[j][col[j]]++;
      }
    }
  }
  for(var i = 0; i < 14; i++) {
    for(var j = 0; j < 3; j++) {
      rentables[i][j] /= (contRent / 100.0);
      noRentables[i][j] /= (contNoRent / 100.0);
    }
  }
  SpreadsheetApp.getActiveSheet().getRange("Panel!N8").setValue(mediana);
  SpreadsheetApp.getActiveSheet().getRange("Panel!H17").setValue(contNoRent / simulaciones);
  SpreadsheetApp.getActiveSheet().getRange("Panel!K17").setValue(contRent / simulaciones);
  SpreadsheetApp.getActiveSheet().getRange("Panel!G3:I16").setValues(noRentables);
  SpreadsheetApp.getActiveSheet().getRange("Panel!J3:L16").setValues(rentables);
}

function initGrid() {
  var out = [];
  for(var i = 0; i < 14; i++) {
    out.push([0, 0, 0]);
  }
  return out;
}

function medianaCR(simulaciones, reales, apostados) {
  var array = [];
  for(var i = 0; i < simulaciones; i++) {
    var col = simularColumna(apostados);
    var cr = getCR(col, reales, apostados);
    array.push(cr);
  }
  array.sort(function(a, b) {return a - b;});
  var out = array[array.length * 0.5];
  return out;
}

function simularSigno(array1x2) {
  var alea = Math.random() * 100.0;
  if(alea < array1x2[0]) return 0;
  else if(alea < array1x2[0] + array1x2[1]) return 1;
  else return 2;
}

function simularColumna(porcentajesArray) {
  var columna = [];
  for(var i = 0; i < porcentajesArray.length; i++) {
    var signo = simularSigno(porcentajesArray[i]);
    columna.push(signo);
  }
  return columna;
}

function getCR(columna, reales, apostados) {
  var cr = 1.0;
  for(var i = 0; i < columna.length; i++) {
    cr *= (reales[i][columna[i]] / apostados[i][columna[i]]);
  }
  return cr;
}

El código anterior siempre puede revisarse en la propia hoja de Google en el editor de código de Apps Script. No está todo, el resto corresponde a lo ya expuesto en la entrada de la distribución binomial de Poisson.

El objetivo del anterior bloque de código es emplear una serie de simulaciones para hallar dos bloques de porcentajes apostados. La simulación se genera por porcentajes empleando los apostados finales tradicionales. Primeramente se calcula la mediana del CR jugada por todo el conjunto de apostantes LAE. Normalmente esa mediana ronda el 0'6, aunque se calcula su valor en todo caso por la anterior simulación. Posteriormente se vuelve a simular y se van acumulando en los dos bloques propuestos en función de si la combinación generada es mayor o menor a esa mediana.

Hay que recalcar que en un Montecarlo tradicional se simula con los porcentajes relaes en lugar de los apostados, pero en este caso el objeto de estudio son los propios apostados.

Para emplear la hoja debemos primero rellenar los datos de origen. Los reales de la jornada, los apostados finales de partida, recaudación y columna ganadora. Luego, pulsando en el recuadro 'Run' correremos el código que tenemos en Apps Script.

Lo primero que veremos es que nos ha dividido los apostados en dos bloque iguales en número de apuestas. Me he tomado la licencia de nombrarlas como "rentables" y "no rentables" aunque eso no sea correcto dado que estamos en una mediana de CR de 0'6 que es la frontera establecida.

En la siguiente imagen tenemos un escutinio hecho con esta estimación "doble" para la jornada 34.

La 34 fue una jornada que destacó por ser muy favorable para la EM. Ésto se tradujo en un desplome en el escrutinio oficial respecto a las estimaciones. Lo vemos en la estimación que se hacía para esa jornada para los mismos datos de entrada siguiendo el método tradicional.


Así, el escrutinio doble ha conseguido sobreestimar el número de acertantes que resultan de la suma de acertantes de los dos bloque de la primera imagen. En el escrutinio final resultó no haber acertantes de 13 aciertos, si bien el método considera que debería haber 3. El número de acertantes de 12 resultó en 29 y la nueva estimación consideró 45.

No es perfecto. Incluso si nos vamos a otra jornada favorable al quinielista medio, como fue la 28, veremos que el método en ese caso sobreestimará correctamente los acertantes de 14 respecto a la estimación tradicional, aunque fallará en categorías inferiores quedándose inluso corta, y por bastante.

Podemos no quedarnos solamente en hacer dos divisiones, y hacer más grupos. Eso lo doy hecho en esta nueva hoja de cálculo:

https://docs.google.com/spreadsheets/d/1XXAXSmJWsNzVR4XrziRQr6HnfsgVfj-Y-m6CKAiHJKM/edit?usp=sharing

Aunque no comparto el nuevo código, recuerdo que se puede revisar sacando copia al Drive personal y entrando en el editor de Apps Script de la copia realizada. 

En esta ocasión analizo la última jornada 35 y establezco 10 divisiones. Esta jornada resultó en mayores premios de lo estimado debido a un menor número de acertantes finales. Vemos en la siguiente captura los acertantes por 10 divisiones (o percentiles de CR), y por el método normal.


Si tomamos como referencia las categorías de 12 y 13 aciertos (que resultaron finalmente en 494 y 37 acertantes respectivamente), vemos que el método de divisiones múltiples por CR redujo correctamente el número final de acertantes, si bien no afina todo lo que nos gustaría.

Lo que quiero transmitir con esta entrada del blog, es que para expresar correctamente la estimación de acertantes, debemos considerar distintos grupos de apostantes, y expresarlos con sus propios porcentajes apostados. El escrutinio múltiple es el camino correcto, si bien la división propuesta por CR es muy discutible. Si a alguien se le ocurre una división (viable y concreta) para poder simular así los grupos de apostados de una manera más acertada, puede dejar un comentario en este blog. Estaré encantado de leeros y compartir ideas.

Saludos y hasta la próxima entrada.

Comentarios

Entradas populares de este blog

Herramienta de análisis

La distribución binomial de Poisson y el cálculo del escrutinio

La regresión logística y el cálculo de porcentajes apostados