Вопрос

Это буквально сравнение тортов.Мой друг устраивает вечеринку с кексами, целью которой является определение лучшей кондитерской на Манхэттене.На самом деле, все гораздо амбициознее.Читайте дальше.

Здесь 27 пекарен, и их посещают 19 человек (возможно, один или два неявившихся).В каждой пекарне будет по 4 кекса, по возможности включая основные продукты - ванильный, шоколадный и красный бархатный - и дополняя эти 4 кексами с подстановочными вкусами.Есть 4 атрибута, по которым можно оценить кексы:вкус, влажность, товарный вид (привлекательность) и общее качество.Пользователи будут выставлять оценки по 5-балльной шкале для каждого атрибута каждого кекса, который они попробуют.Наконец, каждый кекс можно разрезать на 4 или 5 частей.

Вопрос в том,:какова процедура составления статистически значимого рейтинга пекарен по каждому атрибуту и для каждого вкуса (рассматривая "подстановочный знак" как вкус)?В частности, мы хотим ранжировать пекарни в 8 раз:для каждого вкуса мы хотим ранжировать пекарни по качеству (качество является одним из атрибутов), и для каждого атрибута мы хотим ранжировать пекарни по всем вкусам (т. е. независимо от вкуса, т. е. агрегируя по всем вкусам).Главный приз достается пекарне, занявшей первое место за атрибут goodness.

Бонусные баллы за обобщение этого, конечно.

Это произойдет примерно через 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: не принимайте все, что написано в Википедии, как «хорошая рыба». Там я обнаружил фактические ошибки в расширенных темах.

Разбейте проблему на подзадачи.

Какова ценность кекса? Базовый подход - это «среднее из баллов». Немного более надежным подходом может быть «средневзвешенная оценка». Но могут быть и другие осложнения ... кекс с 3 вкусностями и 3 вкусами может быть «лучше», чем с 5 вкусами и 1 вкусом, даже если вкус и вкус имеют одинаковый вес (IOW, низкий балл может иметь непропорциональный эффект).

Составьте несколько примеров оценки кексов (особенности! Покройте обычные и несколько странных сценариев) и оцените то, что вы считаете разумным "общим". оценка была бы, если бы у вас был идеальный алгоритм. Затем используйте эти данные для обратной разработки алгоритма.

Например, кекс с добротой 4, вкусом 3, представлением 1 и влажностью 4 может заслуживать 4 балла в целом, в то время как один с добротой 4, вкусом 2, представлением 5 и влажностью 4 может получить только 3 балла.

Затем сделайте то же самое для пекарни. Учитывая набор кексов с диапазоном оценок, какой будет соответствующая оценка? Затем выясните функцию, которая даст вам эти данные.

"Доброта" ранжирование кажется немного странным, так как кажется, что это общий рейтинг, и поэтому наличие его уже имеет общий балл, так зачем рассчитывать общий балл?

Если бы у вас было время поработать с этим, я всегда предлагал бы собирать необработанные данные и использовать их в качестве основы для более подробного анализа, но я не думаю, что это действительно уместно здесь.

Возможно, это слишком общая проблема для вас, но к этому типу проблем можно обратиться с помощью совместного анализа ( текст ссылки ). Пакетом AR для реализации этого является bayesm ( текст ссылки ).

Если вы умеете писать SQL, вы могли бы создать небольшую базу данных и написать несколько запросов.Это не должно быть так сложно.

например ,выберите сумму (оценка) / count (количество баллов) в качестве итоговой оценки по выпечке, вкусу из таблиц, где группируются по выпечке, вкусу

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top