Определение крупнейшего участника в группе

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")])

Гистограмма (нижняя левая панель рисунка ниже) представляет собой разницу между оценочной и фактической квалификацией, выраженную в виде кратных стандартной ошибке оценки. Для хорошей процедуры эти значения будут почти всегда лежать между и и будут симметрично распределены вокруг . Однако при участии 1000 работников мы полностью ожидаем увидеть некоторые из этих стандартизированных различий, которые простираются от и даже до2 0 3 4 0220340, Это как раз тот случай: гистограмма настолько хороша, насколько можно было надеяться. (Конечно, это может быть приятно: в конце концов, это симулированные данные. Но симметрия подтверждает, что веса правильно выполняют свою работу. Использование неправильных весов приведет к асимметричной гистограмме.)

Диаграмма рассеяния (нижняя правая панель рисунка) напрямую сравнивает предполагаемые навыки с фактическими. Конечно, это не будет доступно в реальности, потому что мы не знаем фактических навыков: в этом заключается сила компьютерного моделирования. Заметим:

  • Если бы не было случайных изменений в работе (установите cv=0и повторите код, чтобы увидеть это), диаграмма рассеяния была бы идеальной диагональной линией. Все оценки будут совершенно точными. Таким образом, рассмотренный здесь разброс отражает эту вариацию.

  • Иногда оценочное значение довольно далеко от фактического значения. Например, есть одна точка рядом (110, 160), где предполагаемая квалификация примерно на 50% выше, чем фактическая квалификация. Это почти неизбежно в любой большой партии данных. Помните об этом, если оценки будут использоваться на индивидуальной основе, например, для оценки работников. В целом эти оценки могут быть превосходными, но в той степени, в которой изменение производительности труда обусловлено причинами, не зависящими от какого-либо лица, тогда для некоторых работников оценки будут ошибочными: некоторые слишком высоки, некоторые слишком низки. И нет никакого способа точно сказать, кто затронут.

Вот четыре графика, сгенерированные во время этого процесса.

Сюжеты

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

Whuber
источник
Ничего себе, это много, чтобы принять. Я думаю, я просто не уверен, как я могу определить, кто самые работающие работники из этих графиков, хотя.
Грег Гуйда
Диаграммы на основе работника?
Грег Гуида
В нижней правой панели представлены все 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, вероятно, прав насчет взвешивания, что поможет. Случайные эффекты для работников и групп могут помочь сохранить оценки параметров в здравом уме, если есть проблемы с идентификацией. Вероятно, можно сделать еще больше улучшений, но я все же думаю, что это на правильном пути, если предположить, что рабочие по существу независимы.
Дэвид Дж. Харрис