Frage

Dies geht buchstäblich um den Vergleich von Kuchen. Mein Freund veranstaltet eine Cupcake -Party mit dem Ziel, die beste Cupcakery in Manhattan zu bestimmen. Eigentlich ist es viel ehrgeiziger als das. Weiter lesen.

Es gibt 27 Bäckereien und 19 Personen, die anwesend sind (mit vielleicht einem oder zwei No-Shows). Wenn möglich, werden 4 Cupcakes von jeder Bäckerei bestehen, einschließlich der Grundnahrungsmittel - Vanille, Schokolade und roter Samt - und die 4 mit Wildcard -Aromen abrunden. Es gibt 4 Attribute, auf denen die Cupcakes bewertet werden kann: Geschmack, Feuchtigkeit, Präsentation (Schönheit) und allgemeine Güte. Die Menschen werden für jedes Attribut für jeden Cupcake, den sie probieren, Bewertungen auf einer 5-Punkte-Skala bereitstellen. Schließlich kann jeder Cupcake in 4 oder 5 Stück geschnitten werden.

Die Frage ist: Was ist ein Verfahren, um ein statistisch aussagekräftiges Ranking der Bäckereien für jedes Attribut und für jeden Geschmack (Behandlung "Wildcard" als Geschmack) zu entwickeln? Insbesondere möchten wir die Bäckereien 8 Mal einstufen: Für jeden Geschmack möchten wir die Bäckereien nach Güte (Güte als eines der Attribute) einstufen, und für jedes Attribut möchten wir die Bäckereien über alle Geschmacksrichtungen hinweg einstufen (dh unabhängig von Geschmack , dh, aggregieren Sie über alle Geschmacksrichtungen). Der Hauptpreis geht an die oberste Bäckerei, um das Güteattribut zu erhalten.

Bonuspunkte für die Verallgemeinerung dies natürlich.

Dies geschieht in ungefähr 12 Stunden, also werde ich als Antwort veröffentlichen, was wir am Ende getan haben, wenn in der Zwischenzeit niemand antwortet.

PS: Hier ist der Post-Party-Blog-Beitrag darüber: http://gracenotesnyc.com/2009/08/05/grazenotes-nyc-cupcake-cagematch-the-sweetst-battle-ever/

War es hilfreich?

Lösung

Folgendes haben wir am Ende gemacht. Ich habe einen riesigen Tisch gemacht, um die Bewertungen aller zu sammeln http://therpad.com/sugarorgy (Revision 25, nur für den Fall, dass ich diesen öffentlichen Link zum Hinzufügen dieses öffentlichen Links verwüstet hat) und dann das folgende Perl -Skript verwendet, um die Daten in eine CSV -Datei zu analysieren:

#!/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"; 
}

Dann habe ich die Mittelung und so weiter in Mathematica gemacht:

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]]&]

Die Ergebnisse liegen am Ende http://therpad.com/sugarorgy.

Andere Tipps

Vielleicht lesen Wahlsysteme wird hilfreich sein. PS: Nehmen Sie nicht, was auf Wikipedia als "guter Fisch" geschrieben ist. Ich habe dort sachliche Fehler in fortgeschrittenen Themen gefunden.

Brechen Sie das Problem in Unterprobleme auf.

Was ist der Wert eines Cupcake? Ein grundlegender Ansatz ist "der Durchschnitt der Punktzahlen". Ein etwas robusterer Ansatz kann "der gewichtete Durchschnitt der Ergebnisse" sein. Darüber hinaus kann es Komplikationen geben ... einen Cupcake mit 3 Güte und 3 Aroma kann „besser“ sein als einer mit 5 Geschmack und 1 Güte, auch wenn Geschmack und Güte gleiches Gewicht haben (IOW kann eine niedrige Punktzahl eine unverhältnismäßige haben Wirkung).

Machen Sie einige Cupcake -Bewertungen von Beispielen (Einzelheiten! Decken Sie die normalen Szenarien und ein paar seltsame Szenarien ab) und schätzen Sie, was Sie für eine vernünftige "Gesamt" -Sache für einen idealen Algorithmus halten würden. Verwenden Sie dann diese Daten, um den Algorithmus umzukehren.

Zum Beispiel könnte ein Cupcake mit Güte 4, Aroma 3, Präsentation 1 und Feuchtigkeit 4 insgesamt einen 4 verdienen, während einer mit Güte 4, Geschmack 2, Präsentation 5 und Feuchtigkeit 4 nur 3 bewerten kann.

Als nächstes tun Sie dasselbe für die Bäckerei. Was wäre eine angemessene Bewertung angesichts einer Reihe von Cupcakes mit einer Reihe von Punktzahlen? Finden Sie dann die Funktion heraus, die Ihnen diese Daten gibt.

Das "Güte" -Ranking scheint ein bisschen seltsam zu sein, da es sich als allgemein anscheinend um eine allgemeine Bewertung handelt, und wenn Sie es darin haben, ist es bereits die Gesamtpunktzahl. Warum also eine Gesamtpunktzahl berechnen?

Wenn Sie Zeit hatten, damit zu arbeiten, würde ich immer empfehlen, die Rohdaten zu erfassen und diese als Grundlage für detailliertere Analysen zu verwenden, aber ich denke nicht, dass dies hier wirklich relevant ist.

Vielleicht ist dies für Sie zu allgemein, aber diese Art von Problem kann mithilfe der Conjoint -Analyse angegangen werden (Link Text). AR -Paket für die Implementierung dies ist Bayesm (Link Text).

Wenn Sie SQL schreiben können, können Sie eine kleine Datenbank erstellen und einige Abfragen schreiben. Es sollte nicht so schwierig sein.

zB Select Sum Summe (Punktzahl) / Count (Punktzahl) als Finalcore, Bäckerei, Geschmack aus Tischen, in denen Gruppen nach Bäckerei, Geschmack, Geschmack

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top