Pregunta

Esto se trata literalmente de comparar pasteles. Mi amigo está teniendo una fiesta de magdalenas con el objetivo de determinar la mejor magdalena en Manhattan. En realidad, es mucho más ambicioso que eso. Sigue leyendo.

Hay 27 panaderías y 19 personas que asisten (con quizás uno o dos no-shows). Habrá 4 cupcakes de cada panadería, si es posible, incluidos los alimentos básicos (vainilla, chocolate y terciopelo rojo) y completarán los 4 con sabores comodín. Hay 4 atributos para calificar los cupcakes: sabor, humedad, presentación (belleza) y bondad general. Las personas proporcionarán calificaciones en una escala de 5 puntos para cada atributo para cada cupcake que prueben. Finalmente, cada cupcake se puede cortar en 4 o 5 piezas.

La pregunta es: ¿cuál es un procedimiento para llegar a una clasificación estadísticamente significativa de las panaderías para cada atributo y para cada sabor (tratando `` comodín '' como sabor)? Específicamente, queremos clasificar las panaderías 8 veces: para cada sabor queremos clasificar las panaderías por bondad (la bondad es uno de los atributos), y para cada atributo queremos clasificar las panaderías en todos los sabores (es decir, independientemente del sabor , es decir, agregando sobre todos los sabores). El gran premio es para la panadería mejor clasificada por el atributo de bondad.

Puntos de bonificación por generalizar esto, por supuesto.

Esto está sucediendo en aproximadamente 12 horas, así que publicaré como respuesta lo que terminamos haciendo si nadie responde mientras tanto.

PD: Aquí está la publicación del blog posterior a la fiesta al respecto: http://gracenotesnyc.com/2009/08/05/gracenotes-nycs-cupcake-cagematch-the-sweetest-battle-ever/

¿Fue útil?

Solución

Esto es lo que terminamos haciendo. Hice una tabla enorme para recopilar las calificaciones de todos en http://etherpad.com/sugarorgy (Revisión 25, solo en caso de que me destrocen agregando este enlace público) y luego use el siguiente script de Perl para analizar los datos en un archivo CSV:

#!/usr/bin/env perl
# Grabs the cupcake data from etherpad and parses it into a CSV file.

use LWP::Simple qw(get);

$content = get("http://etherpad.com/ep/pad/export/sugarorgy/latest?format=txt");
$content =~ s/^.*BEGIN_MAGIC\s*//s;
$content =~ s/END_MAGIC.*$//s;
$bakery = "none";
for $line (split('\n', $content)) {
  next if $line =~ /sar kri and deb/;
  if ($line =~ s/bakery\s+(\w+)//) { $bakery = $1; }
  $line =~ s/\([^\)]*\)//g; # strip out stuff in parens.
  $line =~ s/^\s+(\w)(\w)/$1 $2/;
  $line =~ s/\-/\-1/g;
  $line =~ s/^\s+//;
  $line =~ s/\s+$//;
  $line =~ s/\s+/\,/g;
  print "$bakery,$line\n"; 
}

Luego hice el promedio y otras cosas en Mathematica:

data = Import["!~/svn/sugar.pl", "CSV"];

(* return a bakery's list of ratings for the given type of cupcake *)
tratings[bak_, t_] := Select[Drop[First@Select[data, 
                        #[[1]]==bak && #[[2]]==t && #[[3]]=="g" &], 3], #!=-1&]

(* return a bakery's list of ratings for the given cupcake attribute *)
aratings[bak_, a_] := Select[Flatten[Drop[#,3]& /@ 
                        Select[data, #[[1]]==bak && #[[3]]==a&]], #!=-1&]

(* overall rating for a bakery *)
oratings[bak_] := Join @@ (tratings[bak, #] & /@ {"V", "C", "R", "W"})

bakeries = Union@data[[All, 1]]

SortBy[{#, oratings@#, Round[Mean@oratings[#], .01]}& /@ bakeries, -#[[3]]&]

Los resultados se encuentran en la parte inferior de http://etherpad.com/sugarorgy .

Otros consejos

Quizás sea útil leer sobre sistemas de votación . PD: no tome lo que está escrito en Wikipedia como "buen pescado". Encontré errores de hecho en temas avanzados allí.

Divida el problema en subproblemas.

¿Cuál es el valor de un pastelito? Un enfoque básico es "el promedio de los puntajes". Un enfoque un poco más robusto puede ser "el promedio ponderado de los puntajes". Pero puede haber complicaciones más allá de eso ... un pastelito con 3 bondades y 3 sabores puede ser 'mejor' que uno con 5 sabores y 1 bondad, incluso si el sabor y la bondad tienen el mismo peso (IOW, un puntaje bajo puede tener un valor desproporcionado efecto).

Haga algunos ejemplos de puntajes de magdalenas (¡detalles! Cubra los escenarios normales y un par de extraños), y calcule lo que considera razonable "en general". la puntuación sería si tuvieras un algoritmo ideal. Luego, use esos datos para aplicar ingeniería inversa al algoritmo.

Por ejemplo, un pastelito con bondad 4, sabor 3, presentación 1 y humedad 4 podría merecer un 4 en general, mientras que uno con bondad 4, sabor 2, presentación 5 y humedad 4 solo podría calificar un 3.

Luego, haz lo mismo para la panadería. Dado un conjunto de pastelitos con un rango de puntajes, ¿cuál sería una calificación adecuada? Luego, descubra la función que le dará esos datos.

La "bondad" la clasificación parece un poco extraña, ya que parece que es una calificación general, por lo que tenerla allí ya es la puntuación general, entonces, ¿por qué calcular una puntuación general?

Si tuviera tiempo para trabajar con esto, siempre sugeriría capturar los datos sin procesar y usarlos como base para hacer un análisis más detallado, pero no creo que sea realmente relevante aquí.

Quizás esto sea demasiado general para usted, pero este tipo de problema puede abordarse utilizando el Análisis Conjunto ( texto del enlace ). El paquete AR para implementar esto es bayesm ( texto del enlace ).

Si puede escribir SQL, podría hacer una pequeña base de datos y escribir algunas consultas. No debería ser tan difícil.

p. seleccione sum (score) / count (score) como puntaje final, panadería, sabor de las tablas donde se agrupa por panadería, sabor

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top