그룹에서 가장 큰 기여자를 결정


9

나는 통계에 대해 잘 모르므로 나와 함께 견뎌야합니다. 1000 명의 근로자가 있다고 가정 해 봅시다. 나는 가장 열심히 일하는 사람이 누구인지 알아 내고 싶지만, 1 시간에서 100 시간 동안 일한 그룹의 작업량 만 측정 할 수 있습니다. 각 근로자가 항상 같은 양의 작업을 수행한다고 가정하면, 많은 시련과 조합을 통해 가장 열심히 일하는 사람을 기준으로 근로자의 순위를 지정할 수 있습니까?

참고 : 이것은 은유 일뿐이므로 실제로 테스트를 실행하는 것에 대해 걱정하지 마십시오. 이미 큰 데이터 세트가 있다고 가정하십시오.

편집 : "각 직원이 항상 같은 양의 작업을 수행한다고 가정"이라고 말하면 각 개인이 매일 같은 양의 작업을 수행한다는 것을 의미합니다. 따라서 Joey는 매일 약 100 단위의 작업을 수행하고 Greg는 약 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
일부 제품의 양과 같은 작업 첨가제입니까? 그런 다음 선형 회귀를 사용하여 각 작업자의 기여도를 추정하고 해당 계수에 따라 작업자를 정렬 할 수 있습니다. 그것이 부가 적이 지 않으면 더 복잡한 것을 원할 것입니다.
Douglas Zare

각 그룹이 수행 한 작업량을 알고 있다고 가정하고 작업이 각 그룹의 참가자에게 균등하게 분배된다고 가정하면 그룹에서 수행 한 작업량을 그룹의 인원 수와 합계로 간단히 나눌 수 있습니다. 각 작업자가 다른 그룹에서 수행 한 작업을 그러나 이것은 실제로 통계와 관련이 없습니다.
Qnan

1
예 @DouglasZare, 작품 첨가제
그렉 GUIDA

1
나는 설명이 명확하다고 생각합니다. 그룹 내 근로자 만 관찰하고 개별 근로자에 ​​대해 추론하려고합니다. 예를 들어, 총 5 명의 근로자가 있다고 가정합니다. 첫째 날에는 근로자 {1,2,3}을 관찰하고 둘째 날에는 근로자 {1,4,5}, 셋째 날 {2,3,4를 보게됩니다. } 등의 데이터는 매일의 총 출력입니다. 그렇다면 각 근로자의 평균 산출량을 추정 할 수 있습니까? 대답은 '그렇다'입니다. 만약 노동자들의 합계 분포를 도출 할 수 있다면 가능성을 기록하고 개별 수단의 함수로서 최대화 할 수 있습니다.
Macro

1
내가 무엇을 놓치고 있습니까? 나는 아직도 당신이 개별적인 수단을 어디서 얻었는지 알지 못합니다. 우리는 항상 어떤 근로자가 특정 시간의 데이터를 가지고 있는지 알고 있습니까? 시간당 총 작업량은 어떻게 든 고정되어 있습니까? 내가 놓친 문제 정의에 명확한 가정이 있습니까?
Michael R. Chernick

답변:


10

David Harris는 큰 대답 을했지만 질문을 계속 편집 한 후 솔루션의 세부 정보를 보는 것이 도움이 될 것입니다. 다음 분석의 주요 내용은 다음과 같습니다.

  • 가중 최소 제곱이 아마도 일반 최소 제곱보다 더 적합 할 것입니다.

  • 추정치는 개인이 통제 할 수없는 생산성의 변화를 반영 할 수 있으므로 개별 작업자를 평가하는 데 신중하게 사용하십시오.


이를 수행하기 위해 솔루션의 정확성을 평가할 수 있도록 지정된 수식을 사용하여 현실적인 데이터만들어 보겠습니다 . 이것은 다음과 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일반적인 비례 변동입니다. 를 들어0.10 여기에 제시된 일반적인 10 % 변동 (일부 경우 30 %를 초과 할 수 있음)에 해당합니다.

  • 다양한 업무 능력을 가진 사람들의 인력을 만듭니다. 컴퓨팅을 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배열에 표시합니다.

불행하게도, 일부 근로자가 항상 짝을 이루면 Rlm절차는 단순히 오류와 함께 실패합니다. 먼저 이러한 페어링을 확인해야합니다. 한 가지 방법은 일정에서 완벽하게 상관 된 작업자를 찾는 것입니다.

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

결과는 항상 짝을 지어 일하는 근로자의 쌍을 나열합니다. 이것은 근로자를 그룹으로 결합하는 데 사용할 수 있습니다. 최소한 각 그룹 의 개인이 아닌 경우 각 그룹 의 생산성을 추정 할 수 있기 때문 입니다. 우리는 그것이 그냥 뱉어지기를 바랍니다 character(0). 그렇게 가정하자.

전술 한 설명에서 암시하는 하나의 미묘한 점은 수행되는 작업의 변화가 부가적인 것이 아니라 곱셈이라는 것이다. 이는 현실적입니다. 대규모 근로자 그룹의 생산량 변동은 절대 규모로 소규모 그룹의 변동량보다 클 것입니다. 따라서 일반 최소 제곱보다는 가중치 최소 최소 제곱 을 사용하여 더 나은 추정치를 얻을 수 있습니다. 이 특정 모델 에 사용하기 가장 적합한 가중치 는 작업량의 역수입니다. (일부 작업량이 0 인 경우 소량을 추가하여 0으로 나누지 않도록하십시오.)

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

이 과정은 1-2 초 밖에 걸리지 않습니다.

계속하기 전에 적합성 진단 테스트를 수행해야합니다. 이것에 대해 논의하면 여기에 너무 멀어 지지만 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")])

히스토그램 (아래 그림의 왼쪽 아래 패널)은 추정 된 표준 오차 와 실제 능숙도 간의 차이에 대한 것으로 추정 의 표준 오차의 배수로 표시됩니다. 좋은 절차를 위해 이러한 값은 거의 항상 사이에 있습니다.22 대칭 적으로 분산되어 있습니다 0. 그러나 1000 명의 근로자가 참여하면서 이러한 표준화 된 차이점 중 일부가 확대 될 것으로 예상됩니다.3 심지어 4 멀리 떨어져 0. 이것이 바로 여기에 해당합니다. 히스토그램은 원하는만큼 아름답습니다. (물론 이것은 좋은 일입니다. 결국 시뮬레이션 된 데이터입니다. 그러나 대칭은 가중치가 올바르게 작업을 수행하고 있음을 확인합니다. 잘못된 가중치를 사용하면 비대칭 히스토그램을 만드는 경향이 있습니다.)

산점도 (그림의 오른쪽 아래 패널)는 예상 능력을 실제 능력과 직접 비교합니다. 물론 실제 실력을 모르기 때문에 실제로는 사용할 수 없습니다. 여기에는 컴퓨터 시뮬레이션의 힘이 있습니다. 관찰 :

  • 작업에 임의의 변형이 없었 으면 ( cv=0코드를 설정 한 후 다시 실행하여) 산점도는 완전한 대각선이됩니다. 모든 추정치는 완벽하게 정확합니다. 따라서 여기에 보이는 산란은 그 변화를 반영합니다.

  • 때때로, 추정값이 실제 값과 거리가 멀다. 예를 들어, 예상 숙련도가 실제 숙련보다 약 50 % 더 큰 (110, 160) 근처에 한 지점이 있습니다. 이것은 대량의 데이터에서 거의 불가피합니다. 추정치가 근로자 평가와 같이 개별적 으로 사용될 경우이를 명심하십시오 . 전체적으로 이러한 추정치는 우수 할 수 있지만 작업 생산성의 변동이 개인의 통제 범위를 벗어난 원인으로 인한 정도까지는 일부 근로자의 경우 추정치가 잘못 될 수 있습니다. 누가 영향을 받는지 정확하게 알 수있는 방법이 없습니다.

이 과정에서 생성 된 4 가지 플롯이 있습니다.

줄거리

마지막으로,이 회귀 방법은 그룹 생산성과 관련이있을 수있는 다른 변수를 제어하는 ​​데 쉽게 적용 할 수 있습니다. 여기에는 그룹 규모, 각 작업 기간, 시간 변수, 각 그룹 관리자의 요인 등이 포함될 수 있습니다. 회귀 분석에 추가 변수로 포함 시키면됩니다.


와우, 그것은 많이 걸릴 것입니다. 그러나 나는이 차트에서 가장 열심히 일하는 노동자들이 누구인지 어떻게 알 수 있는지 잘 모르겠습니다.
Greg Guida

차트는 일인당 기준입니까?
Greg Guida

오른쪽 하단 패널에는 1,000 개의 추정치가 모두 표시됩니다. 가장 높은 것은 약 200입니다. 오른쪽 끝까지 나타납니다. 숙련도 히스토그램 및 잔차 히스토그램도 1,000 명의 근로자에 ​​대한 결과를 나타냅니다. 히스토그램 작업의 오른쪽 상단 패널에는 거의 5,000 개의 작업에 대한 총 작업량이 표시됩니다.
whuber

좋아, 나는 각 차트의 의미를 얻지 만 어떻게 그것들을 사용하여 노동자의 순위를 매기는 지 확실하지 않습니다.
Greg Guida

오른쪽 아래 패널의 위에서 아래로. 이 코드는 이러한 결과 테이블 (이라고도 함 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 명의 그룹이 무엇을 의미합니까? 두 가지 편집 내용의 설명으로도 모든 데이터 세트가 그룹의 개인을 식별하는 위치를 보지 못합니까? 내가 아는 것은 각 사람이 매일 거의 같은 양으로 일한다는 것입니다. 여러분 중 몇몇은 회귀를 통한 해결책이 있다고 생각하기 때문에 근본적인 가정은 무엇이며 개인의 작업은 어떻게 식별 될 수 있습니까? 또한 나는 협동 작업에 대한 모든 토론에 당황합니다. 독립적으로 일하는 것 이외의 다른 것은 어디에도 없습니다.
Michael R. Chernick

내가 볼 수있는 유일한 제약은 각 사람이 어떻게 든 많은 시험에서 동일한 양의 작업을 수행한다는 것입니다. 우리가 그 의미있는 것을 번역하려고하는 것 같습니다. 그러나 이것이 OP가 의도 한 것임이 분명합니까?
Michael R. Chernick

@MichaelChernick 나는 당신의 우려를 이해하지 못합니다. 같은 개인이 다른 시련에서 다른 금액을 기부 할 수 있습니까, 아니면 더 많은 것이 있습니까?
David J. Harris

@DavidHarris 당신의 가정이 옳다면 좋은 해결책이 있다고 생각합니다. 그러나 직원 수가 많은 각 개인의 식별 가능성이 걱정됩니다. OP는 큰 표본 크기가 도움이된다고 생각합니다. 그러나 당신이 준 것과 같은 구조와 모델링 가정이 필요합니다. 나는 그가 문제를 해결하는 데 필요한 모든 것을 지정했다고 생각하지 않습니다.
Michael R. Chernick

@MichaelChernick 작업자가 독립적이라고 가정하면 선형 모델은 매우 안전하며 선형성은 우리가 겪을 수있는 몇 가지 문제로부터 우리를 보호한다고 생각합니다. whuber는 아마도 가중치에 대해 맞을 것입니다. 작업자와 그룹에 대한 임의의 효과는 식별 가능성 문제가있는 경우 모수 추정값을 제대로 유지하는 데 도움이 될 수 있습니다. 더 많은 개선이 이루어질 수 있지만, 노동자들이 본질적으로 독립적이라는 가정하에 여전히 올바른 방향으로 가고 있다고 생각합니다.
David J. Harris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.