Xác định người đóng góp lớn nhất trong một nhóm


9

Tôi không biết nhiều về thống kê nên hãy đồng ý với tôi. Hãy nói rằng tôi có một bộ 1000 công nhân. Tôi muốn tìm ra ai là người làm việc chăm chỉ nhất nhưng tôi chỉ có thể đo lượng công việc được hoàn thành trong các nhóm 1-100 trong một giờ làm việc. Giả sử mỗi công nhân luôn làm cùng một khối lượng công việc, qua một số lượng lớn các thử nghiệm và kết hợp, tôi có thể xếp hạng công nhân của mình theo người làm việc chăm chỉ nhất không?

Lưu ý: đây chỉ là một phép ẩn dụ, vì vậy đừng lo lắng về việc thực sự chạy thử nghiệm, hãy giả sử rằng tôi đã có một bộ dữ liệu lớn.

Chỉnh sửa: Khi tôi nói "Giả sử mỗi công nhân luôn làm cùng một khối lượng công việc", ý tôi là mỗi cá nhân làm cùng một lượng công việc trên cơ sở hàng ngày. Vì vậy, Joey sẽ làm khoảng 100 đơn vị công việc mỗi ngày và Greg sẽ làm khoảng 50. Vấn đề là tôi chỉ có thể quan sát số lượng đơn vị công việc được thực hiện bởi nhóm.

Chỉnh sửa thêm: Liên quan đến số lượng công nhân làm việc cùng một lúc và tần suất họ làm việc. Có thể có bất kỳ số lượng công nhân làm việc cùng một lúc. Một số công nhân có thể sẽ làm việc nhiều hơn những người khác, có nghĩa là, chúng ta có thể cho rằng một số công nhân sẽ làm việc gần 90% thời gian và những người khác gần như không bao giờ.

Tôi biết điều đó làm cho nó khó khăn nhưng tôi sẽ có một bộ dữ liệu rất lớn vì vậy hy vọng điều đó làm cho nó dễ dàng hơn một chút.

Trong mỗi giờ, chúng tôi biết công nhân nào đang làm việc và bao nhiêu công việc đã được thực hiện. Từ thông tin đó tôi muốn tìm ra ai đang làm việc nhiều nhất.

Nếu dữ liệu ở định dạng JSON, nó sẽ trông giống như thế này:

[
  {
    "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
Là phụ gia công việc, chẳng hạn như số lượng của một số sản phẩm? Sau đó, bạn có thể sử dụng hồi quy tuyến tính để ước tính đóng góp từ mỗi công nhân và sắp xếp các công nhân theo hệ số của họ. Nếu nó không phải là phụ gia thì bạn có thể muốn một cái gì đó phức tạp hơn.
Douglas Zare

Nếu bạn cho rằng bạn biết mỗi nhóm đã thực hiện bao nhiêu công việc và cũng cho rằng công việc được phân bổ đều giữa những người tham gia trong mỗi nhóm, bạn có thể chỉ cần chia số lượng công việc được thực hiện bởi nhóm cho số người trong đó và tổng các bit công việc mỗi công nhân đã làm trong các nhóm khác nhau. Điều này thực sự không có bất cứ điều gì với số liệu thống kê, mặc dù.
Q Nam

1
@DoumundZare Vâng, công việc là phụ gia
Greg Guida

1
Tôi nghĩ rằng mô tả là rõ ràng. Bạn chỉ quan sát các công nhân theo nhóm và muốn suy luận về từng công nhân. Ví dụ: giả sử bạn có tổng cộng 5 công nhân, vào ngày một bạn quan sát các công nhân {1,2,3} cùng nhau, vào ngày thứ hai bạn thấy các công nhân {1,4,5}, vào ngày thứ ba {2,3,4 }, v.v. và dữ liệu của bạn là tổng sản lượng mỗi ngày. Sau đó, bạn có thể ước tính sản lượng trung bình của từng công nhân? Câu trả lời là có - nếu bạn có thể rút ra phân phối tổng của các công nhân thì bạn có thể viết ra khả năng và tối đa hóa như một chức năng của các phương tiện riêng lẻ.
Macro

1
Tôi đang thiếu gì? Tôi vẫn không thấy bạn lấy phương tiện cá nhân ở đâu. Chúng ta có luôn biết công nhân nào đang ở trong giờ dữ liệu riêng biệt không? Là tổng số lượng công việc mỗi giờ bằng cách nào đó cố định? Có một giả định rõ ràng trong định nghĩa vấn đề mà tôi đang thiếu?
Michael R. Chernick

Câu trả lời:


10

David Harris đã cung cấp một câu trả lời tuyệt vời , nhưng vì câu hỏi tiếp tục được chỉnh sửa, có lẽ nó sẽ giúp xem chi tiết về giải pháp của anh ấy. Điểm nổi bật của phân tích sau đây là:

  • Bình phương tối thiểu có trọng số có lẽ phù hợp hơn bình phương tối thiểu thông thường.

  • Bởi vì các ước tính có thể phản ánh sự thay đổi về năng suất vượt quá mọi sự kiểm soát của từng cá nhân, hãy thận trọng khi sử dụng chúng để đánh giá từng công nhân.


Để thực hiện điều này, hãy tạo một số dữ liệu thực tế bằng các công thức được chỉ định để chúng tôi có thể đánh giá độ chính xác của giải pháp. Điều này được thực hiện với 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)

Trong các bước ban đầu này, chúng tôi:

  • Đặt hạt giống cho trình tạo số ngẫu nhiên để bất kỳ ai cũng có thể sao chép chính xác kết quả.

  • Chỉ định có bao nhiêu công nhân với n.names.

  • Quy định số lượng công nhân dự kiến ​​mỗi nhóm với groupSize.

  • Chỉ định có bao nhiêu trường hợp (quan sát) có sẵn với n.cases. (Sau đó, một vài trong số này sẽ bị loại vì chúng tương ứng, vì nó xảy ra ngẫu nhiên, không có công nhân nào trong lực lượng lao động tổng hợp của chúng tôi.)

  • cv0.10

  • Tạo ra một lực lượng lao động của những người có trình độ công việc khác nhau. Các tham số được đưa ra ở đây cho điện toán proficiencytạo ra một phạm vi hơn 4: 1 giữa những người lao động giỏi nhất và kém nhất (mà theo kinh nghiệm của tôi thậm chí có thể hơi hẹp đối với công việc công nghệ và chuyên nghiệp, nhưng có lẽ rộng đối với các công việc sản xuất thông thường).

schedule1

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)

Tôi đã thấy thuận tiện khi đặt tất cả dữ liệu của nhóm làm việc vào một khung dữ liệu duy nhất để phân tích nhưng để tách các giá trị công việc:

data <- data.frame(schedule)

Đây là nơi chúng ta sẽ bắt đầu với dữ liệu thực: chúng ta sẽ có nhóm công nhân được mã hóa bởi data(hoặc schedule) và các đầu ra công việc được quan sát trong workmảng.

Thật không may, nếu một số công nhân thường đi thành cặp, Rcủa lmthủ tục đơn giản không thành công với một lỗi. Chúng ta nên kiểm tra đầu tiên cho các cặp như vậy. Một cách là tìm công nhân tương quan hoàn hảo trong lịch trình:

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

Đầu ra sẽ liệt kê các cặp công nhân luôn được ghép nối: điều này có thể được sử dụng để kết hợp các công nhân này thành các nhóm, bởi vì ít nhất chúng ta có thể ước tính năng suất của từng nhóm, nếu không phải là các cá nhân trong đó. Chúng tôi hy vọng nó chỉ phun ra character(0). Hãy giả sử nó làm.

Một điểm tinh tế, tiềm ẩn trong lời giải thích đã nói ở trên, đó là sự khác biệt trong công việc được thực hiện là nhân, không phải là phụ gia. Điều này là thực tế: sự thay đổi sản lượng của một nhóm lớn công nhân sẽ, trên một quy mô tuyệt đối, sẽ lớn hơn sự khác biệt trong các nhóm nhỏ hơn. Theo đó, chúng ta sẽ có được ước tính tốt hơn bằng cách sử dụng bình phương tối thiểu có trọng số thay vì bình phương tối thiểu thông thường. Các trọng số tốt nhất để sử dụng trong mô hình cụ thể này là các đối ứng của số lượng công việc. (Trong trường hợp một số lượng công việc bằng 0, tôi làm mờ điều này bằng cách thêm một lượng nhỏ để tránh chia cho số không.)

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

Điều này sẽ chỉ mất một hoặc hai giây.

Trước khi tiếp tục, chúng tôi phải thực hiện một số xét nghiệm chẩn đoán phù hợp. Mặc dù thảo luận về những điều đó sẽ đưa chúng ta đi quá xa ở đây, một Rlệnh để tạo ra chẩn đoán hữu ích là

plot(fit)

(Việc này sẽ mất vài giây: đó là một tập dữ liệu lớn!)

Mặc dù một vài dòng mã này thực hiện tất cả công việc và đưa ra mức độ thành thạo ước tính cho mỗi công nhân, chúng tôi sẽ không muốn quét qua tất cả 1000 dòng đầu ra - ít nhất là không ngay lập tức. Hãy sử dụng đồ họa để hiển thị kết quả .

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

220340. Đây chính xác là trường hợp ở đây: biểu đồ là đẹp như người ta có thể hy vọng. (Tất nhiên mọi thứ có thể rất hay: đó là những dữ liệu mô phỏng. Nhưng đối xứng xác nhận các trọng số đang thực hiện công việc của chúng một cách chính xác. Sử dụng các trọng số sai sẽ có xu hướng tạo ra một biểu đồ không đối xứng.)

Scatterplot (bảng dưới bên phải của hình) so sánh trực tiếp mức độ thành thạo ước tính với thực tế. Tất nhiên điều này sẽ không có sẵn trong thực tế, bởi vì chúng ta không biết những thành thạo thực tế: ở đây nằm ở sức mạnh của mô phỏng máy tính. Quan sát:

  • Nếu không có biến thể ngẫu nhiên trong công việc (đặt cv=0và chạy lại mã để thấy điều này), thì biểu đồ phân tán sẽ là một đường chéo hoàn hảo. Tất cả các ước tính sẽ hoàn toàn chính xác. Do đó, sự phân tán nhìn thấy ở đây phản ánh sự thay đổi đó.

  • Đôi khi, một giá trị ước tính là khá xa so với giá trị thực tế. Chẳng hạn, có một điểm gần (110, 160) trong đó mức độ thành thạo ước tính lớn hơn khoảng 50% so với mức độ thành thạo thực tế. Điều này là gần như không thể tránh khỏi trong bất kỳ lô dữ liệu lớn. Hãy ghi nhớ điều này nếu các ước tính sẽ được sử dụng trên cơ sở cá nhân , chẳng hạn như để đánh giá công nhân. Nhìn chung, các ước tính này có thể là tuyệt vời, nhưng ở mức độ khác nhau về năng suất làm việc là do các nguyên nhân nằm ngoài bất kỳ sự kiểm soát nào của từng cá nhân, thì đối với một số công nhân, các ước tính sẽ sai: một số quá cao, một số quá thấp. Và không có cách nào để nói chính xác ai bị ảnh hưởng.

Dưới đây là bốn lô được tạo ra trong quá trình này.

Lô đất

Cuối cùng, lưu ý rằng phương pháp hồi quy này dễ dàng thích nghi với việc kiểm soát các biến khác có thể liên quan đến năng suất của nhóm. Chúng có thể bao gồm quy mô nhóm, thời lượng của từng nỗ lực làm việc, biến thời gian, yếu tố cho người quản lý của mỗi nhóm, v.v. Chỉ cần bao gồm chúng như các biến bổ sung trong hồi quy.


Wow, đó là rất nhiều để tham gia. Tôi đoán tôi chỉ không chắc làm thế nào tôi có thể nói ai là người làm việc chăm chỉ nhất từ ​​các bảng xếp hạng này.
Greg Guida

Là các biểu đồ trên cơ sở mỗi công nhân?
Greg Guida

Bảng dưới bên phải trình bày tất cả 1.000 ước tính. Cái cao nhất là khoảng 200: nó xuất hiện ở bên phải. Biểu đồ thành thạo và biểu đồ dư cũng mô tả kết quả cho 1.000 công nhân. Bảng phía trên bên phải, biểu đồ công việc, hiển thị tổng số lượng công việc cho gần 5.000 công việc.
whuber

Ok, tôi hiểu ý nghĩa của từng biểu đồ nhưng tôi không chắc cách sử dụng chúng để xếp hạng công nhân.
Greg Guida

Từ trên xuống dưới trong bảng dưới bên phải. Mã này cũng tạo một bảng các kết quả này (được gọi results): bạn có thể sắp xếp nó theo giá trị ước tính. Bạn có thể xuất nó sang một bảng tính, v.v.
whuber

7

Bạn muốn thiết lập dữ liệu của mình giống như thế này, với 1 chỉ ra rằng người đó là một phần của nhóm đã thực hiện công việc của hàng đó:

 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
 ...

Sau đó, bạn chỉ có thể thực hiện hồi quy tuyến tính (giả sử mọi thứ là phụ gia, v.v., như bạn đã đề cập trong các bình luận). Trong R, lệnh sẽ là

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

"Công thức" work.done ~ . + 0nói, bằng tiếng Anh, số lượng công việc được thực hiện phụ thuộc vào tất cả các cột khác (đó là ".") Và các nhóm không có công nhân sẽ không làm việc (đó là "+ 0"). Điều này sẽ cung cấp cho bạn sự đóng góp gần đúng từ mỗi công nhân vào đầu ra nhóm trung bình.

Như đã thảo luận trong các ý kiến, nếu bạn có một cặp công nhân luôn ở bên nhau, mô hình sẽ không phân biệt sự đóng góp của hai công nhân với nhau và một trong số họ sẽ nhận được "NA".


Có vấn đề gì khi có 1000 công nhân? Anh ta có ý nghĩa gì với các nhóm 1-100? Ngay cả với các làm rõ từ 2 lần chỉnh sửa tôi cũng không thấy mọi bộ dữ liệu xác định các cá nhân trong nhóm ở đâu? Tất cả những gì tôi biết là mỗi người làm việc với số tiền tương đương mỗi ngày. Vì một số bạn nghĩ rằng có một giải pháp có thể thông qua hồi quy một cách rõ ràng các giả định cơ bản là gì và công việc của một người có thể nhận dạng như thế nào? Ngoài ra tôi hoang mang về tất cả các cuộc thảo luận về công việc hợp tác. Không nơi nào là giả định ngoài việc làm việc độc lập.
Michael R. Chernick

Hạn chế duy nhất tôi thấy là mỗi người bằng cách nào đó quản lý để thực hiện cùng một lượng công việc trong một số lượng lớn các thử nghiệm? Có vẻ như chúng tôi đang cố gắng dịch cái gì đó không hợp lý. Nhưng rõ ràng đây là những gì OP dự định ??
Michael R. Chernick

@MichaelCécick Tôi không chắc tôi hiểu mối quan tâm của bạn. Có phải cùng một cá nhân có thể đóng góp số tiền khác nhau cho các thử nghiệm khác nhau, hoặc có nhiều hơn cho nó?
David J. Harris

@DavidHarris Tôi nghĩ bạn có một giải pháp tốt nếu giả định của bạn là đúng. Nhưng tôi lo lắng về khả năng nhận dạng cho mỗi người với rất nhiều công nhân. OP nghĩ rằng kích thước mẫu lớn giúp. Nhưng cần phải có cấu trúc như những gì bạn đã đưa ra và một số giả định mô hình hóa. Tôi chỉ không nghĩ rằng anh ấy đã chỉ định mọi thứ chúng tôi cần để giải quyết vấn đề.
Michael R. Chernick

@MichaelCécick Tôi nghĩ rằng nếu chúng ta giả sử công nhân là độc lập, thì mô hình tuyến tính khá an toàn và tuyến tính cũng bảo vệ chúng ta khỏi một số vấn đề chúng ta có thể gặp phải. whuber có lẽ là đúng về trọng số, sẽ giúp. Hiệu ứng ngẫu nhiên cho công nhân và các nhóm có thể giúp giữ cho các ước tính tham số lành mạnh nếu có vấn đề về nhận dạng. Có thể có nhiều cải tiến có thể được thực hiện, nhưng tôi vẫn nghĩ rằng điều này đang đi đúng hướng, giả sử các công nhân về cơ bản là độc lập.
David J. Harris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.