Question

Il s’agit littéralement de comparer des gâteaux. Mon ami organise une fête de cupcakes dans le but de déterminer la meilleure cupcakery à Manhattan. En fait, c'est beaucoup plus ambitieux que cela. Continuez à lire.

Il y a 27 boulangeries et 19 personnes présentes (avec peut-être une ou deux défections). Il y aura 4 petits gâteaux de chaque boulangerie, y compris, si possible, les aliments de base - vanille, chocolat et velours rouge - et 4 parfaits pour compléter les 4 saveurs. Il y a 4 attributs sur lesquels évaluer les cupcakes: la saveur, l’humidité, la présentation (beauté) et la qualité générale. Les gens attribueront des cotes sur une échelle de 5 points pour chaque attribut de chaque cupcake échantillonné. Enfin, chaque cupcake peut être coupé en 4 ou 5 morceaux.

La question qui se pose est la suivante: quelle est la procédure à suivre pour établir un classement statistiquement significatif des boulangeries pour chaque attribut et pour chaque saveur (traiter le "caractère générique" comme une saveur)? Plus précisément, nous souhaitons classer les boulangeries à 8 reprises: pour chaque saveur, nous voulons classer les boulangeries par qualité (la qualité étant l'un des attributs) et pour chaque attribut, nous souhaitons classer les boulangeries parmi toutes les saveurs (c'est-à-dire, indépendamment de la saveur). , c’est-à-dire, agrégation sur toutes les saveurs). Le grand prix revient à la boulangerie la mieux classée pour l'attribut bonté.

Des points bonus pour la généralisation, bien sûr.

Cela se produit dans environ 12 heures, je vais donc poster comme réponse ce que nous avons fini par faire si personne ne répond entre-temps.

PS: Voici le billet de blog post-party à ce sujet: http://gracenotesnyc.com/2009/08/05/gracenotes-nycs-cupcake-cagematch-the-sweetest-battle-ever/

Était-ce utile?

La solution

Voici ce que nous avons fini par faire. J'ai créé une énorme table pour recueillir les notes de chacun à la http://etherpad.com/sugarorgy (Révision 25, uniquement). au cas où il serait vandalisé avec l’ajout de ce lien public), puis a utilisé le script Perl suivant pour analyser les données dans un fichier 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"; 
}

Ensuite, j'ai fait la moyenne et tout le reste dans 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]]&]

Les résultats sont au bas de http://etherpad.com/sugarorgy .

Autres conseils

Peut-être serait-il utile de lire sur les systèmes de vote . PS: ne prenez pas ce qui est écrit sur Wikipedia comme "bon poisson". J'ai trouvé des erreurs factuelles dans des sujets avancés ici.

Divisez le problème en sous-problèmes.

Quelle est la valeur d'un petit gâteau? Une approche de base est "la moyenne des scores". Une approche légèrement plus robuste peut être "la moyenne pondérée des scores". Mais il peut y avoir des complications au-delà de cela ... un gâteau avec 3 avantages et 3 saveurs peut être «meilleur» que celui avec 5 avantages et 1 bien, même si le goût et les avantages ont un poids égal (IOW, un score faible peut avoir un effet disproportionné effet).

Créez quelques exemples de scores de cupcake (détails! couvrez les scénarios normaux et quelques étranges), et estimez ce que vous pensez être un "ensemble" raisonnable. Le score serait si vous aviez un algorithme idéal. Ensuite, utilisez ces données pour procéder au reverse engineering de l’algorithme.

Par exemple, un petit gâteau avec la bonté 4, la saveur 3, la présentation 1 et l’humidité 4 pourrait mériter une note globale de 4, tandis qu’un gâteau avec la bonté 4, la saveur 2, la présentation 5 et l’humidité 4 pourrait ne donner qu’un 3. >

Ensuite, faites la même chose pour la boulangerie. Avec une série de cupcakes avec une gamme de scores, quelle note serait appropriée? Ensuite, déterminez la fonction qui vous donnera ces données.

La "bonté" " le classement semble un peu étrange, car il semble que ce soit une note générale, et donc l’avoir dans le tableau donne déjà le score global, alors pourquoi calculer un score global?

Si vous aviez le temps de travailler avec cela, je suggérerais toujours de capturer les données brutes et de vous en servir comme base pour une analyse plus détaillée, mais je ne pense pas que ce soit vraiment pertinent ici.

C’est peut-être trop général pour vous, mais ce type de problème peut être abordé à l’aide de l’analyse conjointe ( texte du lien ). Le package AR permettant de mettre cela en œuvre est bayesm ( le texte du lien ).

Si vous parvenez à écrire en SQL, vous pourriez créer une petite base de données et écrire des requêtes. Cela ne devrait pas être si difficile.

par exemple. sélectionnez sum (score) / count (score) comme résultat final, boulangerie, saveur à partir de tableaux où groupe par boulangerie, saveur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top