Una forma bayesiana de elegir un restaurante

Una manera bayesiana para elegir un restaurante

Recientemente estaba buscando un nuevo y buen restaurante. Google Maps me destacó 2 opciones: restaurante A con 10 reseñas, todas de 5 estrellas, y restaurante B con 200 reseñas y una calificación promedio de 4. Me tenté a elegir el restaurante A, pero el bajo número de reseñas me preocupó. Por otro lado, muchas reseñas del restaurante B me dieron confianza en su calificación de 4 estrellas, pero no prometían nada excelente. Así que quería comparar los restaurantes y elegir el mejor descartando las reseñas o la falta de reseñas. Gracias a Bayes, hay una manera.

Imagen creada por el autor.

El marco bayesiano permite asumir algo sobre la distribución inicial de las calificaciones y luego actualizar la creencia inicial en función de los datos observados.

Establecer creencias iniciales / prior

  • Inicialmente no sabemos nada sobre las probabilidades de cada calificación (de 1 a 5 – estrellas). Así que, antes de cualquier reseña, todas las calificaciones son igualmente probables. Esto significa que comenzamos con la distribución uniforme que puede expresarse como una distribución Dirichlet (generalización de Beta).
  • Nuestra calificación promedio será simplemente (1+2+3+4+5)/5 = 3, donde se concentra la mayor probabilidad.
# estimaciones de probabilidad anterior a partir de la muestra tamaño muestra = 10000p_a = np.random.dirichlet(np.ones(5), size=sample_size)p_b = np.random.dirichlet(np.ones(5), size=sample_size)# calificaciones previas medias basadas en las probabilidades muestreadasratings_support = np.array([1, 2, 3, 4, 5])prior_reviews_mean_a = np.dot(p_a, ratings_support)prior_reviews_mean_b = np.dot(p_b, ratings_support)
Imagen creada por el autor.

Actualizar creencias

  • Para actualizar las creencias iniciales, necesitamos multiplicar las creencias previas por la probabilidad de observar los datos con las creencias previas.
  • Los datos observados se describen naturalmente por una distribución Multinomial (generalización de Binomial).
  • Resulta que la distribución Dirichlet es una prior conjugada para la verosimilitud Multinomial. En otras palabras, nuestra distribución posterior también es una distribución Dirichlet con parámetros que incorporan los datos observados.
Imagen creada por el autor.
# datos observadosreviews_a = np.array([0, 0, 0, 0, 10])reviews_b= np.array([21, 5, 10, 79, 85])# estimaciones posteriores de las probabilidades de calificaciones basadas en lo observadosample_size = 10000p_a = np.random.dirichlet(reviews_a+1, size=sample_size)p_b = np.random.dirichlet(reviews_b+1, size=sample_size)# calcular medias de calificaciones posterioresposterior_reviews_mean_a = np.dot(p_a, ratings_support)posterior_reviews_mean_b = np.dot(p_b, ratings_support)
  • La calificación promedio posterior de A está ahora en algún punto intermedio entre el 3 previo y el 5 observado. Pero la calificación promedio de B no cambió mucho porque el gran número de reseñas compensó las creencias iniciales.
Imagen creada por el autor.

Entonces, ¿cuál es mejor?

  • Volviendo a nuestra pregunta original, “mejor” significa la probabilidad de que una clasificación promedio de A sea mayor que una clasificación promedio de B, es decir, P(E(A|datos)>E(B|datos)).
  • En mi caso, obtengo una probabilidad del 85% de que el restaurante A sea mejor que el restaurante B.
# P(E(A)-E(B)>0)posterior_rating_diff = posterior_reviews_mean_a-posterior_reviews_mean_bp_posterior_better = sum(posterior_rating_diff>0)/len(posterior_rating_diff)
Imagen realizada por el autor.

La actualización bayesiana nos permite incorporar creencias previas que son especialmente valiosas en caso de tener un pequeño número de reseñas. Sin embargo, cuando el número de reseñas es grande, las creencias iniciales no impactan significativamente las creencias posteriores.

El código está disponible en mi github y voy al restaurante A.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Ciencia de Datos

Gestionando los costos de almacenamiento en la nube de aplicaciones de Big Data

Con la creciente dependencia de cantidades cada vez mayores de datos, las empresas de hoy en día dependen más que nun...

Inteligencia Artificial

Por qué la NASA está enviando secretos nacionales a la Luna

NASA trabajará con la startup Lonestar y la Isla de Man para enviar una carga de datos a la Luna el próximo febrero, ...

Inteligencia Artificial

Línea Open-Sources ‘japanese-large-lm’ Un modelo de lenguaje japonés con 3.6 mil millones de parámetros

Desde noviembre de 2020, LINE se ha embarcado en un viaje transformador de investigación y desarrollo para crear y ap...