Визначення найбільшого учасника групи


9

Я мало знаю про статистику, тож ведіть мене. Скажімо, у мене набір 1000 робітників. Я хочу розібратися, хто найважчий працівник, але я можу виміряти лише кількість роботи, яку виконують у групах по 1-100 за години роботи. Якщо припустити, що кожен працівник завжди виконує приблизно однакову кількість роботи, під час великої кількості випробувань і комбінацій я можу класифікувати своїх працівників за тим, хто працює важче?

Примітка: це лише метафора, тому не хвилюйтеся про те, що насправді виконуються тести, просто припускайте, що у мене вже є великий набір даних.

Редагувати: Коли я кажу "Припускаючи, що кожен працівник завжди виконує однакову кількість роботи", я маю на увазі, що кожен чоловік виконує приблизно однаковий обсяг роботи щодня. Отже, Джой робитиме близько 100 одиниць роботи щодня, а Грег - близько 50. Проблема полягає в тому, що я можу спостерігати лише кількість одиниць роботи, виконаної групою.

Більше редагувань: Що стосується кількості робітників, що працюють відразу, та частоти їх роботи. Одночасно може працювати будь-яка кількість працівників. Деякі працівники, ймовірно, закінчують роботу набагато більше, ніж інші, тобто можна припустити, що деякі працівники працюють майже 90% часу, а інші майже ніколи.

Я знаю, що це ускладнює, але у мене буде дуже великий набір даних, тому, сподіваюся, це полегшує його.

За кожну годину ми знаємо, які працівники працюють і скільки зроблено роботи. З цієї інформації я хочу з’ясувати, хто найбільше працює.

Якби дані були у форматі JSON, вони виглядали б приблизно так:

[
  {
    "work_done": 12345,
    "Workers": [ "andy", "bob", "cameron", "david" ]
  },
  {
    "work_done": 432,
    "Workers": [ "steve", "joe", "andy"]
  },
  {
    "work_done": 59042,
    "Workers": [ "bob", "aaron", "michelle", "scott", "henry" ]
  },
  ...
]

3
Чи є робоча добавка, наприклад, кількість якогось продукту? Потім можна використовувати лінійну регресію для оцінки внеску кожного робітника та сортування працівників за їх коефіцієнтами. Якщо це не добавка, то, можливо, ви хочете щось складніше.
Дуглас Заре

Якщо ви припускаєте, що знаєте, скільки роботи виконала кожна група, а також припускаєте, що робота рівномірно розподілена між учасниками кожної групи, ви можете просто розділити кількість роботи, виконаної групою, на кількість людей у ​​ній та суму добіг роботи, яку виконував кожен робітник у різних групах. Однак насправді це нічого не має зі статистикою.
Qnan

1
@DouglasZare Так, робота є додатковою
Грег Гуйда

1
Я думаю, що опис зрозумілий. Ви спостерігаєте лише за робочими групами і хочете зробити висновок про окремих працівників. Наприклад, скажіть, що у вас є 5 робітників, у перший день ви спостерігаєте за працівниками {1,2,3} разом, у другий день ви бачите працівників {1,4,5}, у третій день {2,3,4 } та ін., а ваші дані - це загальний обсяг випуску продукції кожного дня Тоді чи можете ви оцінити середній випуск кожного окремого працівника? Відповідь - так - якщо ви можете отримати розподіл суми робітників, тоді ви могли б записати ймовірність і максимізувати функцію окремих засобів.
Макрос

1
Що я пропускаю? Я все ще не бачу, де ви навіть отримаєте індивідуальні засоби. Чи завжди ми знаємо, які працівники знаходяться в окремі години даних? Чи загалом обсяг роботи за годину фіксований? Чи існує припущення, яке в визначенні проблеми зрозуміло, що я відсутній?
Майкл Р. Черник

Відповіді:


10

Девід Гарріс дав чудову відповідь , але оскільки питання продовжує редагуватись, можливо, це допоможе розібратися в деталях його рішення. Основні моменти наступного аналізу:

  • Найменш зважені квадрати, ймовірно, більш доречні, ніж звичайні найменші квадрати.

  • Оскільки оцінки можуть відображати різницю в продуктивності, що не відповідає контролю будь-якої людини, будьте обережні, використовуючи їх для оцінки окремих працівників.


Для цього давайте створимо реалістичні дані за допомогою заданих формул, щоб ми могли оцінити точність рішення. Це робиться за допомогою R:

set.seed(17)
n.names <- 1000
groupSize <- 3.5
n.cases <- 5 * n.names  # Should exceed n.names
cv <- 0.10              # Must be 0 or greater
groupSize <- 3.5        # Must be greater than 0
proficiency <- round(rgamma(n.names, 20, scale=5)); hist(proficiency)

У цих початкових кроках ми:

  • Встановіть насіння для генератора випадкових чисел, щоб кожен міг точно відтворити результати.

  • Вкажіть, скільки там працівників n.names.

  • Сформулюйте очікувану кількість працівників на групу groupSize.

  • Вкажіть, скільки випадків (спостережень) доступні n.cases. (Пізніше деякі з них будуть ліквідовані, оскільки вони відповідають, як це відбувається випадково) жодному з працівників нашої синтетичної робочої сили.)

  • Упорядкуйте, щоб обсяги робіт були випадковими, ніж те, що було б передбачено, виходячи з суми роботи кожної групи "вміння". Значення cv- типова пропорційна зміна; Наприклад , наведений тут відповідає типовому 10% -ному варіанту (який може перевищувати 30% у кількох випадках).0.10

  • Створіть робочу силу людей із різними професійними рівнями. Наведені тут параметри для обчислень proficiencyстворюють діапазон понад 4: 1 між найкращими та найгіршими працівниками (що, на мій досвід, навіть може бути трохи вузьким для технологій та професійних завдань, але, можливо, є широким для звичайних виробничих робіт).

Маючи цю синтетичну робочу силу в роботі, давайте змоделюємо їхню роботу . Це означає створення групи кожного робітника ( schedule) для кожного спостереження (усунення будь-яких спостережень, в яких взагалі не задіяні робітники), підсумовування кваліфікацій працівників кожної групи та множення цієї суми на випадкове значення (в середньому рівно ) відобразити варіації, які неминуче відбудуться. (Якби взагалі не було варіацій, ми б передали це питання на сайт Математика, де респонденти могли б вказати, що ця проблема є лише набором одночасних лінійних рівнянь, які можна було б вирішити саме для знань.)1

schedule <- matrix(rbinom(n.cases * n.names, 1, groupSize/n.names), nrow=n.cases)
schedule <- schedule[apply(schedule, 1, sum) > 0, ]
work <- round(schedule %*% proficiency * exp(rnorm(dim(schedule)[1], -cv^2/2, cv)))
hist(work)

Я виявив, що зручно розміщувати всі дані робочої групи в одному кадрі для аналізу, але зберігати окремі робочі значення:

data <- data.frame(schedule)

Тут ми б почали з реальних даних: у нас групування робітників буде закодовано data(або schedule) та спостережувані результати роботи в workмасиві.

На жаль, якщо деякі робочі завжди парні, R«s lmпроцедура просто завершується з помилкою. Спершу слід перевірити наявність таких пар. Один із способів - знайти ідеально співвіднесених працівників у графіку:

correlations <- cor(data)
outer(names(data), names(data), paste)[which(upper.tri(correlations) & 
                                             correlations >= 0.999999)]

Результатом буде перераховано пари пар, що працюють завжди в парі: це можна використовувати для об'єднання цих робітників у групи, тому що принаймні ми можемо оцінити продуктивність кожної групи, якщо не окремих людей у ​​ній. Ми сподіваємось, що це просто випльовується character(0). Припустимо, це так і є.

Один тонкий момент, виразний у вищенаведеному поясненні, полягає в тому, що варіація виконуваних робіт є мультипликативною, а не адитивною. Це реально: коливання у виробництві великої групи працівників, в абсолютній шкалі, буде більше, ніж коливання у менших групах. Відповідно, ми отримаємо кращі оцінки, використовуючи найменш зважені квадрати, а не звичайні найменші квадрати. Найкращі ваги, що використовуються в цій конкретній моделі, - це зворотні суми робіт. (Якщо деякі обсяги роботи дорівнюють нулю, я підробляю це, додаючи невелику кількість, щоб уникнути ділення на нуль.)

fit <- lm(work ~ . + 0, data=data, weights=1/(max(work)/10^3+work))
fit.sum <- summary(fit)

Це займе лише одну-дві секунди.

Перш ніж продовжувати, нам слід провести деякі діагностичні тести придатності. Хоча обговорення цих питань перенесло б нас далеко далеко, одна Rкоманда для створення корисної діагностики є

plot(fit)

(Це займе кілька секунд: це великий набір даних!)

Хоча ці декілька рядків коду виконують всю роботу і випльовують орієнтовні знання для кожного працівника, ми не хотіли б просканувати всі 1000 рядків продукції - принаймні, не відразу. Давайте використовувати графіку для відображення результатів .

fit.coef <- coef(fit.sum)
results <- cbind(fit.coef[, c("Estimate", "Std. Error")], 
             Actual=proficiency, 
             Difference=fit.coef[, "Estimate"] - proficiency,
             Residual=(fit.coef[, "Estimate"] - proficiency)/fit.coef[, "Std. Error"])
hist(results[, "Residual"])
plot(results[, c("Actual", "Estimate")])

Гістограма (ліва нижня панель рисунку нижче) відрізняється між розрахованими та фактичними знаннями, вираженими у вигляді кратних стандартних помилок оцінки. Для гарної процедури ці значення майже завжди будуть лежати між ними-2 і 2 і бути симетрично розподіленими навколо 0. З 1000 зайнятих працівників, однак, ми сподіваємось побачити, що деякі з цих стандартизованих відмінностей будуть розширюватися3 і навіть 4 осторонь 0. Тут саме так: гістограма така гарна, як можна було сподіватися. (Можна, звичайно, це приємно. Зрештою, це симульовані дані. Але симетрія підтверджує, що ваги виконують свою роботу правильно. Використання неправильних ваг, як правило, створює асиметричну гістограму.)

Розсіювач (нижній правий панель рисунка) безпосередньо порівнює оцінені знання з фактичними. Звичайно, це було б недоступне насправді, оскільки ми не знаємо фактичних знань: у цьому полягає сила комп'ютерного моделювання. Дотримуйтесь:

  • Якби не було випадкових змін у роботі (встановіть cv=0і повторіть код, щоб побачити це), розсіювач був би ідеальною діагональною лінією. Усі оцінки були б абсолютно точними. Таким чином, розсіяний тут розкид відображає цю варіацію.

  • Інколи оцінене значення досить далеко від фактичного значення. Наприклад, є одна точка поблизу (110, 160), де орієнтовна кваліфікація приблизно на 50% більша від фактичної. Це майже неминуче в будь-якій великій партії даних. Майте це на увазі, якщо кошториси будуть використовуватися на індивідуальній основі, наприклад, для оцінки робітників. В цілому ці оцінки можуть бути чудовими, але наскільки різниця в продуктивності праці обумовлена ​​причинами, що не підлягають контролю будь-якої людини, то для деяких працівників оцінка буде помилковою: деякі занадто високі, а інші занадто низькі. І немає способу точно сказати, на кого це постраждало.

Ось чотири сюжети, згенеровані під час цього процесу.

Сюжети

Нарешті, зауважте, що цей метод регресії легко адаптується до контролю інших змінних, які, можливо, можуть бути пов'язані з груповою продуктивністю. Вони можуть включати розмір групи, тривалість кожного трудового зусилля, змінну часу, коефіцієнт для керівника кожної групи тощо. Просто включіть їх як додаткові змінні в регресію.


Вау, це багато, що можна взяти. Я думаю, я просто не впевнений, як я можу сказати, хто з цих діаграм найважчі робітники.
Грег Гуйда

Чи графіки на основі робітника?
Грег Гуйда

У нижній правій панелі представлено всі 1000 оцінок. Найвища - близько 200: вона з'являється аж до правої сторони. Гістограма кваліфікації та залишкова гістограма також відображають результати для 1000 робітників. У правій верхній панелі, гістограмі роботи, відображаються загальні обсяги роботи майже для 5000 робочих місць.
whuber

Гаразд, я розумію кожну з графіків, але я не впевнений, як їх використовувати для ранжирування працівників.
Грег Гуйда

Зверху вниз у правій нижній панелі. Код також створює таблицю цих результатів (називається results): ви можете її сортувати за оцінним значенням. Ви можете експортувати його в електронну таблицю тощо
whuber

7

Ви хочете налаштувати свої дані приблизно так, а 1 означає, що людина була частиною команди, яка виконувала роботу цього ряду:

 work.done Alice Bob Carl Dave Eve Fred Greg Harry Isabel
 1.6631071     0   1    1    0   1    0    0     0      0
 0.7951651     1   1    0    0   0    0    0     1      0
 0.2650049     1   1    1    0   0    0    0     0      0
 1.2733771     0   0    0    0   1    0    0     1      1
 0.8086390     1   0    1    0   0    0    0     0      1
 1.7323428     1   0    0    0   0    0    1     0      1
 ...

Тоді ви можете просто робити лінійну регресію (якщо припустити, що все є добавкою тощо), як ви згадували в коментарях). В R, команда була б

lm(work.done ~ . + 0, data = my.data)

"Формула" work.done ~ . + 0говорить англійською мовою, що кількість виконаної роботи залежить від усіх інших стовпців (це ".") І що групи без робітників не будуть робити жодної роботи (це "+ 0"). Це дасть вам приблизний внесок кожного працівника у середню групу.

Як було обговорено в коментарях, якщо у вас є пара робітників, які завжди разом, модель не буде відрізняти внески двох працівників один від одного, і один з них отримає "NA".


Чи не має значення, що є 1000 працівників? Що він розуміє під групами по 1-100? Навіть з роз'ясненнями з 2 редагувань я не бачу, де кожен набір даних ідентифікує осіб у групі? Все, що я знаю, це те, що кожна людина працює приблизно однакову кількість щодня. Оскільки декілька з вас думають, що існує рішення, можливо, шляхом регресії явно, які основні припущення та як можна визначити роботу людини? Також я спантеличений усією дискусією спільної роботи. Ніде нічого не передбачається, крім роботи самостійно.
Майкл Р. Черник

Єдине обмеження, яке я бачу, полягає в тому, що кожній людині якимось чином вдається виконати однаковий обсяг роботи протягом великої кількості випробувань? Схоже, ми намагаємось перекласти цю іноту щось розумне. Але чи зрозуміло, що саме це задумала ОП ??
Майкл Р. Черник

@MichaelChernick Я не впевнений, що розумію вашу стурбованість. Це те, що одна і та ж особа могла внести різні суми за різні випробування, чи є в них більше?
Девід Дж. Харріс

@DavidHarris Я думаю, у вас є гарне рішення, якщо ваші припущення є правильними. Але мене хвилює ідентифікація кожної людини з такою кількістю працівників. ОП вважає, що великий розмір вибірки допомагає. Але має бути така структура, як те, що ви дали, і деякі припущення щодо моделювання. Я просто не думаю, що він уточнив усе, що потрібно для вирішення проблеми.
Майкл Р. Черник

@MichaelChernick Я думаю, що якщо ми вважаємо, що працівники незалежні, лінійна модель є досить безпечною, а лінійність також захищає нас від деяких проблем, з якими ми можемо зіткнутися. whuber, мабуть, має рацію щодо зважування, яке б допомогло. Випадкові ефекти для робітників та груп можуть допомогти зберегти оцінку параметрів здоровими, якщо є проблеми з ідентифікацією. Напевно, можна вдосконалити більше, але я все ж думаю, що це на вірному шляху, якщо припустити, що працівники по суті є незалежними.
Девід Дж. Харріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.