質問

これは、文字通りケーキの比較に関するものです。私の友人は、マンハッタンで最高のカップケーキを決定することを目標にカップケーキパーティーを開催しています。実際、それよりもはるかに野心的です。読んでください。

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/

役に立ちましたか?

解決

これが私たちがやったことです。 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 の下部にあります。

他のヒント

投票システムについて読むと役立つでしょう。 PS:Wikipediaで「good fish」と書かれているものは何でも受け取らないでください。そこで高度なトピックで事実上のエラーを見つけました。

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

カップケーキの価値は何ですか?基本的なアプローチは「スコアの平均」です。もう少し堅牢なアプローチは、「スコアの加重平均」です。しかし、それを超える複雑さがあるかもしれません... 3つの良さと3つのフレーバーを持つカップケーキは、5つのフレーバーと1つの良さを持つカップケーキよりも「良い」場合があります。効果)。

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

たとえば、良さ4、フレーバー3、プレゼンテーション1および湿気4のカップケーキは全体で4に値しますが、良さ4、フレーバー2、プレゼンテーション5および湿気4のカップケーキは3のみを評価します。

次に、ベーカリーに対して同じことを行います。一連のスコアを持つカップケーキのセットを考えると、適切な評価は何でしょうか?次に、そのデータを提供する関数を見つけます。

"良さ"ランク付けは一般的な評価のように見えるので、少し奇妙に思えます。したがって、そこに含めると、すでに総合スコアが得られます。総合スコアを計算する理由は何ですか。

これで作業する時間があれば、生データをキャプチャし、それを基にしてより詳細な分析を行うことを常にお勧めしますが、ここでは特に関係ないと思います。

おそらくこれはあなたにとってあまりにも一般的ですが、このタイプの問題はConjoint Analysis(リンクテキスト)。これを実装するためのARパッケージは、bayesm(リンクテキスト)です。

SQLを作成できる場合は、小さなデータベースを作成し、いくつかのクエリを作成できます。そんなに難しくないはずです。

e.g。合計(スコア)/カウント(スコア)をファイナルスコア、ベーカリー、ベーカリーごとのグループ、フレーバーからのフレーバーとして選択します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top