2009-08-01 4 views
4

이것은 말 그대로 케이크 비교에 관한 내용입니다. 내 친구는 맨해튼에서 최고의 컵케익을 결정한다는 목표로 컵케익 파티를하고 있습니다. 실제로, 그것은 그것보다 훨씬 야심적입니다. 읽어.케이크 비교 알고리즘

27 개의 빵집이 있으며, 19 명이 참석합니다 (1 ~ 2 번의 무소식). 가능한 경우 스테이플 (바닐라, 초콜렛 및 빨간 벨벳)을 포함하여 각 빵집에서 4 컵 케이크가 제공되며 와일드 카드 맛을 사용하여 4를 버립니다. 컵 케이크를 평가할 4 가지 속성이 있습니다 : 맛, 촉촉함, 표현 (예쁘기) 및 일반적인 장점. 사람들은 샘플링하는 각 컵 케이크의 각 속성에 대해 5 점 척도로 등급을 제공합니다. 마지막으로 각 컵 케익을 4 개 또는 5 개로자를 수 있습니다.

질문은 다음과 같습니다. 각 속성에 대한 통계적으로 의미있는 순위를 제시하고 각 향미에 대해 (와일드 카드를 향미료로 처리하는) 절차는 무엇일까요? 특히, 우리는 빵집 순위를 8 번 정하고 싶습니다 : 각 향미에 대해 우리는 선함 (선량은 속성 중 하나임)에 대해 빵집의 순위를 매기고 모든 속성에 대해 빵집의 순위를 매기기를 원하는 (즉, 향미와 무관합니다 , 즉, 모든 맛에 걸쳐 집계). 대상은 선량 속성에 대해 최상위 순위의 빵집으로 이동합니다.

물론 이것을 일반화하기위한 보너스 포인트.

약 12 ​​시간 후에 발생합니다. 그동안 아무도 응답하지 않으면 우리가 한 일에 대한 답으로 게시 할 것입니다.

PS : 여기에 대한 포스트 자 블로그 게시물 : 당신은 SQL을 쓸 수있는 경우 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"; 
} 

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

, 당신은 약간의 데이터베이스를 만들고 일부 쿼리를 작성할 수 있습니다. 그것은 그렇게 어렵지 않아야합니다.

베이커리, 풍미에 의한 그룹

1

하위 문제로 문제를 해결하십시오. 테이블에서 풍자, 빵집, 풍미로 합계 (점수)/개수 (점수)를 선택하십시오.

컵 케잌의 가치는 무엇입니까? 기본적인 접근 방식은 "점수의 평균"입니다. 약간 더 강력한 접근법은 "점수의 가중 평균"일 수 있습니다. 그러나 그 이상으로 합병증이있을 수 있습니다 ... 3 가지 맛과 3 가지 맛을 가진 컵케잌은 맛과 선량이 동등한 체중 (IOW, 낮은 점수는 불균형을 가질 수 있음)이 있더라도 5 가지 맛과 1 가지 장점을 가진 음식보다 '더 좋을'수 있습니다. 효과).

이상적인 알고리즘이 있다면 합당한 "전반적인"점수라고 생각하는 것을 견적하고, 몇 가지 샘플 컵 케이크 점수 (자세한 내용은 일반적인 시나리오와 이상한 것들을 다룹니다)를 계산하십시오. 그런 다음 해당 데이터를 사용하여 알고리즘을 리버스 엔지니어링하십시오. 4 만 3

평가 수 장점 4 맛 2 프레젠테이션 5 및 보습 하나 예를 들어

, 4 전체 자격 수도 장점 4 향기 (3), 프레젠테이션 1 보습 4 먹고,

다음으로 빵집에 대해 동일한 작업을 수행하십시오. 일정 범위의 컵 케이크 세트가 주어지면 적절한 등급은 무엇입니까? 그런 다음 해당 데이터를 제공 할 함수를 찾습니다.

"우수성"순위는 일반적인 평가와 같이 약간 이상하게 보입니다. 따라서 전체 점수가 이미 있으므로 전체 점수를 계산하는 이유는 무엇입니까?

이 작업을 할 시간이 있다면, 나는 항상 원시 데이터를 캡처하고 더 자세한 분석을 수행하기위한 기초로 사용하는 것이 좋겠지 만 여기서는 그다지 관련이 없다고 생각합니다.

+0

감사합니다. 좋은 의견! 당신은 선량 평가에 대해 옳습니다. 그것은 이미 컵 케이크의 전반적인 등급이 될 예정입니다. 즉, 개별 등급에서 전체 등급으로 기능을 정의하는 대신, 우리는 컵 케이크를 평가하는 사람들이 "우수성"등급을 사용하여 등급을 매기도록 할 것입니다. 원시 데이터를 캡처하는 좋은 점; 우리는 확실히 그것을 할 것입니다. 모든 것이 끝나고 완료되면 내 친구의 블로그 게시물에 대한 링크를 추가 할 것입니다! – dreeves

2

아마도 voting systems에 대한 정보가 도움이 될 것입니다. 추신 : 위키 피 디아에 쓰여진 내용을 "좋은 물고기"라고 생각하지 마십시오. 나는 고급 주제에 사실적인 오류가 있음을 발견했다.

+0

그래, 나는 인센티브에 대해 전혀 걱정할지를 결정할 수 없다. 우리가 "장님"이라고 평가할 때와 같은 이슈가 아닐 수도 있습니다. (컵케잌이 어떤 베이커리인지 알지 못합니다.) (Btw, 나는이 관용구를 "좋은 물고기"로 알지 못했다. 나는 "복음으로 받아 들여서는 안된다."라고 말했을 것이다.) – dreeves

+0

노르웨이어 관용어이다. 나는 조금 봤는데 그것도 보이지 않는다. 영어 관용어가 되라./어쨌든 요점을 알아 냈어. :) – zvrba

1

아마도이 방법은 너무 일반적이지만 문제는 Conjoint Analysis (link text)를 사용하여 해결할 수 있습니다. 이를 구현하기위한 R 패키지는 bayesm (link text)입니다.