4

这实际上是关于比较蛋糕。我的朋友正在举办一个纸杯蛋糕派对,目的是确定曼哈顿最好的纸杯蛋糕店。实际上,它比这更雄心勃勃。继续阅读。

有 27 家面包店,有 19 人参加(可能有一到两次没有出现)。每个面包店将有 4 个纸杯蛋糕,如果可能的话,包括主食——香草、巧克力和红色天鹅绒——并用通配符口味四舍五入。有 4 个属性可以对纸杯蛋糕进行评分:风味、湿润度、外观(漂亮)和一般品质。人们将为他们采样的每个纸杯蛋糕的每个属性提供 5 分制评分。最后,每个纸杯蛋糕可以切成 4 或 5 块。

问题是:为每个属性和每种风味(将“通配符”视为风味)得出具有统计意义的面包店排名的程序是什么?具体来说,我们想要对面包店进行 8 次排名:对于每种口味,我们希望按好坏对面包店进行排名(好是属性之一),对于每个属性,我们希望对所有口味的面包店进行排名(即,独立于风味,即聚合所有口味)。大奖授予善良属性排名第一的面包店。

当然,概括这一点的奖励积分。

这将在大约 12 小时内发生,因此如果在此期间没有人回答,我将发布我们最终会做的事情作为答案。

PS:这是关于它的派对后博客文章:http: //gracenotesnyc.com/2009/08/05/gracenotes-nycs-cupcake-cagematch-the-sweetest-battle-ever/

4

5 回答 5

3

这就是我们最终要做的事情。我在http://etherpad.com/sugarorgy做了一个巨大的表格来收集每个人的评分(修订版 25,以防它被我添加这个公共链接破坏)然后使用以下 Perl 脚本将数据解析为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"; 
}

然后我在 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]]&]

结果在http://etherpad.com/sugarorgy的底部。

于 2009-08-03T04:25:43.397 回答
2

也许阅读有关投票系统的信息会有所帮助。PS:不要把维基百科上写的东西当成“好鱼”。我在那里的高级主题中发现了事实错误。

于 2009-08-01T07:56:07.287 回答
1

将问题分解为子问题。

一个纸杯蛋糕的价值是多少?一个基本的方法是“分数的平均值”。更稳健的方法可能是“分数的加权平均值”。但除此之外可能还有一些并发症......一个具有 3 种风味和 3 种风味的纸杯蛋糕可能比具有 5 种风味和 1 种风味的纸杯蛋糕“更好”,即使风味和风味具有相同的权重(IOW,低分可能不成比例)影响)。

制作一些示例纸杯蛋糕分数(具体内容!涵盖正常场景和一些奇怪的场景),并估计如果您有理想的算法,您认为合理的“总体”分数将是多少。然后,使用该数据对算法进行逆向工程。

例如,质量为 4、风味为 3、外观为 1 和湿度为 4 的纸杯蛋糕可能应该得到 4 的整体评分,而质量为 4、风味为 2、外观为 5 和湿度为 4 的纸杯蛋糕可能只能评分为 3。

接下来,为面包店做同样的事情。给定一组具有一系列分数的纸杯蛋糕,合适的评分是多少?然后,找出将为您提供该数据的函数。

“好”的排名好像有点奇怪,好像是一个综合评分,放在那里已经是总分了,为什么还要计算总分呢?

如果你有时间处理这个问题,我总是建议捕获原始数据,并以此为基础进行更详细的分析,但我认为这在这里并不重要。

于 2009-08-01T07:26:39.343 回答
1

也许这对您来说太笼统了,但是可以使用联合分析(链接文本)来解决此类问题。用于实现这一点的 AR 包是bayesm(链接文本)。

于 2009-08-03T02:10:25.593 回答
0

如果你会写 SQL,你可以创建一个小数据库并编写一些查询。它不应该那么困难。

例如,选择 sum(score) / count(score) 作为 finalscore、 bakery、flavor from tables where group by bakery、flavor

于 2009-08-01T07:00:40.863 回答