2009-08-01 15 views
4

これは文字通りケーキを比較することです。私の友人は、マンハッタンで最高のカップケーキを決定するという目的でカップケーキパーティーをしています。実際、それよりもはるかに野心的です。読む。ケーキ比較アルゴリズム

27のパン屋、19人が参加しています(1つまたは2つのノーショーショーあり)。可能であれば、ステーキ(バニラ、チョコレート、赤いベルベット)を含む4つのカップケーキがあり、ワイルドカードフレーバーで4を丸めます。カップケーキを評価する4つの属性があります:味、しっとり感、プレゼンテーション(プリティー)、そして一般的な良さです。人々は、彼らがサンプリングする各カップケーキの各属性について、5点スケールで評価を提供する。最後に、各カップケーキを4つまたは5つに切断することができます。

質問は、各属性と各味(ワイルドカードを味として扱う)について、統計的に意味のあるランキングを考え出す手順は何ですか?具体的には、パンケーキを8回ランク付けしたい:それぞれのフレーバーについて、良さ(良さは属性の1つ)によってパンケーキをランク付けしたい、そしてすべてのフレーバーにわたってパンケーキをランク付けしたい各属性に対して(すなわち、フレーバーすなわち、すべてのフレーバーにわたって凝集する)。大賞は、優良性のためにトップランクのベーカリーに送られます。

これを一般化するためのボーナスポイントはもちろんです。

これは約12時間後に起こります。その間に誰も答えなければ、私たちがやったことは答えとして投稿します。

PS:ここではそれについてのポストパーティーのブログ記事です:http://gracenotesnyc.com/2009/08/05/gracenotes-nycs-cupcake-cagematch-the-sweetest-battle-ever/

+6

誰かが宿題だと思うと思っていたので、私はそのパーティーについて全話をしました。私は真剣に死んでいる。私たちは実際にこのパーティーを持っています! – dreeves

+0

これはプログラミングと何が関係していますか? –

+2

まあ、理想的な答えはそれを一般化し、個々の評価を取り、ランキングを出力し、さらには統計的有意水準を計算するプログラムとしてコード化します。それは楽しい小さな問題かもしれません! – dreeves

答えて

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[[email protected][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 = [email protected][[All, 1]] 

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

結果はhttp://etherpad.com/sugarorgyの一番下にあります。

0

あなたがSQLを書くことができた場合、あなたは少しのデータベースを作成し、いくつかのクエリを書くことができます。それは難しいことではありません。

ベーカリー、フレーバーでグループ化されたテーブルからの最終スコア(スコア)/カウント(スコア)を選択します。

1

問題をサブ問題に分割します。

カップケーキの価値は何ですか?基本的なアプローチは「スコアの平均」です。もう少しロバストなアプローチは、「スコアの加重平均」です。しかし、それ以上の合併症があるかもしれません...風味と良さが同じ重量であっても、3つの味と3つの味を持つカップケーキは5つの味と1つの良さを持つものより「良い」かもしれません(IOW、低いスコアは不均衡効果)。

サンプルカップケーキのスコア(具体的には、通常のシナリオといくつかの奇妙なものをカバーする)を作成し、理想的なアルゴリズムがあれば合理的な「全体的」スコアと思われるものを推測します。次に、そのデータを使用してアルゴリズムをリバースエンジニアリングします。

例えば、良4、味3、プレゼンテーション1及びしっとり感4とのカップケーキは良4、味2、プレゼンテーション5を有するものが、4全体に値するかもしれない、と湿り気4は、3

を評価するかもしれません

次に、ベーカリーと同じことをします。ある範囲のスコアを持つカップケーキを考えると、適切な格付けはどのようなものでしょうか?次に、そのデータを与える関数を見つけます。

「グッドネス」のランク付けは一般的な評価のように思えるので少し奇妙に思えるので、そこに全体的なスコアがあるので、全体のスコアを計算するのはなぜですか?

これに取り組む時間があれば、私はいつも生データをキャプチャし、それをより詳細な分析を行うための基礎として使用することをお勧めしますが、ここではそれは本当に重要ではないと思います。

+0

ありがとうございます。良いコメント!あなたは良さ評価について正しいです。それはすでにカップケーキの全体的な評価であることを意味しています。言い換えれば、個々のレーティングから総合レーティングへの関数を定義するのではなく、カップケーキを評価する人々に、その「グッドネス」レーティングを適用させるというものです。 生データをキャプチャするのは良い点です。私たちは確かにそれを行うでしょう。私は友人のブログ記事へのリンクを追加して、これがすべて終わったら完了です! – dreeves

2

おそらく約voting systemsの読書が役に立ちます。 PS:Wikipediaに書かれているものはどれも「良い魚」とはみなさないでください。私は先進的なトピックで事実上の誤りを発見しました。

+0

ええ、私はインセンティブをまったく心配するかどうかは決めることができません。私たちが「盲目」と評価するほどの問題ではないかもしれません(カップケーキがどのベーカリーから来たのかわからない)。 (Btw、私はイディオム "良い魚"を知らなかった、私は "福音としてそれを取ってはいけない"と言いました)。 – dreeves

+0

それはノルウェーのイディオムです...私はちょっとグーグルで表示されません英語のイディオム:/あなたはとにかくポイントを持っている:) – zvrba

1

おそらく、これはあなたにとっては一般的ですが、このタイプの問題は、コンジョイント分析(link text)を使用して調べることができます。これを実装するためのRパッケージはbayesm(link text)です。

関連する問題