Domanda

Si tratta letteralmente di confrontare le torte. Il mio amico sta organizzando una festa per cupcake con l'obiettivo di determinare la migliore pasticceria a Manhattan. In realtà, è molto più ambizioso di così. Continua a leggere.

Ci sono 27 panetterie e 19 persone presenti (con forse uno o due no-show). Ci saranno 4 cupcake da ogni forno, se possibile includendo le graffette - vaniglia, cioccolato e velluto rosso - e completando il 4 con sapori jolly. Ci sono 4 attributi su cui valutare i cupcakes: sapore, umidità, presentazione (bellezza) e bontà generale. Le persone forniranno valutazioni su una scala di 5 punti per ogni attributo per ogni cupcake che campionano. Infine, ogni cupcake può essere tagliato in 4 o 5 pezzi.

La domanda è: qual è una procedura per elaborare una classifica statisticamente significativa delle panetterie per ciascun attributo e per ogni sapore (trattando "carattere jolly" come sapore)? In particolare, vogliamo classificare le panetterie 8 volte: per ogni sapore vogliamo classificare le panetterie per bontà (la bontà è uno degli attributi) e per ogni attributo vogliamo classificare le panetterie per tutti i gusti (cioè, indipendentemente dal sapore , cioè aggregando tutti i gusti). Il primo premio va alla panetteria di alto livello per l'attributo di bontà.

Punti bonus per generalizzare questo, ovviamente.

Questo accadrà tra circa 12 ore, quindi posterò come risposta quello che abbiamo fatto se nessuno rispondesse nel frattempo.

PS: ecco il post sul post-party al riguardo: http://gracenotesnyc.com/2009/08/05/gracenotes-nycs-cupcake-cagematch-the-sweetest-battle-ever/

È stato utile?

Soluzione

Ecco cosa abbiamo finito per fare. Ho creato un tavolo enorme per raccogliere le valutazioni di tutti su http://etherpad.com/sugarorgy (Revisione 25, solo nel caso venga vandalizzato con l'aggiunta di questo link pubblico ad esso) e quindi utilizzato il seguente script Perl per analizzare i dati in un file 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"; 
}

Poi ho fatto la media e quant'altro in 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]]&]

I risultati sono in fondo a http://etherpad.com/sugarorgy .

Altri suggerimenti

Forse leggere dei sistemi di voto sarà utile. PS: non prendere ciò che è scritto su Wikipedia come "buon pesce". Ho trovato errori fattuali in argomenti avanzati lì.

Suddividi il problema in sotto-problemi.

Qual è il valore di un cupcake? Un approccio di base è "la media dei punteggi". Un approccio leggermente più robusto può essere "la media ponderata dei punteggi". Ma potrebbero esserci delle complicazioni oltre a ciò ... un cupcake con 3 bontà e 3 sapori può essere "migliore" di uno con 5 sapori e 1 bontà, anche se sapore e bontà hanno lo stesso peso (IOW, un punteggio basso può avere un valore sproporzionato effetto).

Componi alcuni punteggi campione di cupcake (dettagli! Copri gli scenari normali e un paio di quelli strani) e stima ciò che ritieni ragionevole "complessivo" il punteggio sarebbe se avessi un algoritmo ideale. Quindi, utilizza questi dati per decodificare l'algoritmo.

Ad esempio, un cupcake con bontà 4, sapore 3, presentazione 1 e umidità 4 potrebbe meritare un 4 complessivo, mentre uno con bontà 4, sapore 2, presentazione 5 e umidità 4 potrebbe valutare solo un 3.

Quindi, fai la stessa cosa per la pasticceria. Dato un insieme di cupcakes con una gamma di punteggi, quale sarebbe una valutazione adeguata? Quindi, scopri la funzione che ti darà quei dati.

La "bontà" la classifica sembra un po 'strana, in quanto sembra una valutazione generale, e quindi averla lì è già presente il punteggio complessivo, quindi perché calcolare un punteggio complessivo?

Se avessi il tempo di lavorare con questo, suggerirei sempre di acquisire i dati grezzi e di usarli come base per fare analisi più dettagliate, ma non penso che sia davvero rilevante qui.

Forse questo è troppo generico per te, ma questo tipo di problema può essere affrontato usando Conjoint Analysis ( testo del link ). Il pacchetto AR per l'implementazione è bayesm ( testo del link ).

Se riesci a scrivere SQL, potresti creare un piccolo database e scrivere alcune query. Non dovrebbe essere così difficile.

es. seleziona somma (punteggio) / conta (punteggio) come Finalscore, Panetteria, Aroma dalle tabelle in cui raggruppa per Panetteria, Aroma

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top