سؤال

هذا يتعلق حرفيًا بمقارنة الكعك.يقيم صديقي حفلة كب كيك بهدف تحديد أفضل كب كيك في مانهاتن.في الواقع، الأمر أكثر طموحًا من ذلك بكثير.واصل القراءة.

هناك 27 مخبزًا و19 شخصًا يحضرون (مع عدم حضور واحد أو اثنين).سيكون هناك 4 كب كيك من كل مخبز، بما في ذلك المواد الأساسية - الفانيليا والشوكولاتة والريد فيلفيت إن أمكن - وتقريب الأربعة بنكهات البدل.هناك 4 سمات لتقييم الكعك:النكهة والرطوبة والعرض (الجمال) والخير العام.سيقدم الأشخاص تقييمات على مقياس مكون من 5 نقاط لكل سمة لكل كب كيك يختبرونه.وأخيرًا، يمكن تقطيع كل كب كيك إلى 4 أو 5 قطع.

السؤال هو:ما هو الإجراء المتبع للتوصل إلى تصنيف ذو معنى إحصائيًا للمخابز لكل سمة ولكل نكهة (معاملة "أحرف البدل" باعتبارها نكهة)؟وعلى وجه التحديد، نريد ترتيب المخابز 8 مرات:لكل نكهة نريد تصنيف المخبوزات حسب الجودة (الجودة هي إحدى السمات)، ولكل سمة نريد تصنيف المخبوزات عبر جميع النكهات (أي مستقلة عن النكهة، أي التجميع على جميع النكهات).الجائزة الكبرى تذهب إلى المخبز صاحب التصنيف الأعلى في صفة الخير.

نقاط المكافأة لتعميم هذا، بطبيعة الحال.

سيحدث هذا خلال 12 ساعة تقريبًا، لذا سأنشر كإجابة ما انتهى بنا الأمر إلى فعله إذا لم يجيب أحد في هذه الأثناء.

ملاحظة:إليك مشاركة مدونة ما بعد الحفلة حول هذا الموضوع: 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 فقط.

بعد ذلك، افعل نفس الشيء بالنسبة للمخبز.بالنظر إلى مجموعة من الكعك ذات نطاق من الدرجات، ما هو التقييم المناسب؟ثم اكتشف الوظيفة التي ستمنحك تلك البيانات.

يبدو تصنيف "الجودة" غريبًا بعض الشيء، حيث يبدو أنه تصنيف عام، لذا فإن وجوده هناك يمثل النتيجة الإجمالية بالفعل، فلماذا يتم حساب النتيجة الإجمالية؟

إذا كان لديك الوقت للعمل مع هذا، فأنا أقترح دائمًا التقاط البيانات الأولية، واستخدامها كأساس لإجراء تحليل أكثر تفصيلاً، لكنني لا أعتقد أن هذا مناسب حقًا هنا.

ولعل هذا هو عام جدا بالنسبة لك، ولكن هذا النوع من المشاكل يمكن تناول باستخدام تحليل الموحد (<لأ href = "http://en.wikipedia.org/wiki/Conjoint_analysis_٪28in_marketing٪29" يختلط = "نوفولو noreferrer "> ربط النص ). حزمة AR لتنفيذ ذلك هي bayesm ( ربط النص ).

إذا كنت يمكن أن يكتب SQL، هل يمكن أن تجعل قاعدة بيانات صغيرة وكتابة بعض الاستفسارات. لا ينبغي أن يكون ذلك صعبا.

ومنها مثلا. حدد مبلغ (النتيجة) / عدد (النتيجة) كما finalscore، والمخابز، ونكهة من الجداول حيث مجموعة من المخابز، ونكهة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top