Menentukan kontributor terbesar dalam suatu grup

9

Saya tidak tahu banyak tentang statistik jadi bersabarlah. Katakanlah saya memiliki 1000 pekerja. Saya ingin mengetahui siapa pekerja yang paling sulit, tetapi saya hanya bisa mengukur jumlah pekerjaan yang dilakukan dalam kelompok 1-100 selama satu jam kerja. Dengan asumsi setiap pekerja selalu melakukan pekerjaan dengan jumlah yang sama, selama sejumlah besar percobaan dan kombinasi dapatkah saya memberi peringkat pada pekerja saya dengan siapa yang bekerja paling keras?

Catatan: ini hanya metafora, jadi jangan khawatir untuk benar-benar menjalankan tes, anggap saja saya sudah memiliki set data yang besar.

Sunting: Ketika saya mengatakan "Dengan asumsi setiap pekerja selalu melakukan pekerjaan dengan jumlah yang sama" Maksud saya setiap individu melakukan pekerjaan dengan jumlah yang sama setiap hari. Jadi Joey akan mengerjakan sekitar 100 unit pekerjaan setiap hari dan Greg akan mengerjakan sekitar 50 unit. Masalahnya adalah saya hanya bisa mengamati jumlah unit pekerjaan yang dilakukan oleh grup.

Lebih banyak suntingan: Terkait jumlah pekerja sekaligus dan frekuensi mereka bekerja. Mungkin ada sejumlah pekerja yang bekerja pada saat yang sama. Beberapa pekerja mungkin akhirnya akan bekerja jauh lebih banyak daripada yang lain, artinya, kita dapat mengasumsikan beberapa pekerja akan bekerja hampir 90% dari waktu dan yang lain hampir tidak pernah.

Saya tahu itu menyulitkan tetapi saya akan memiliki dataset yang sangat besar sehingga mudah-mudahan itu membuatnya sedikit lebih mudah.

Untuk setiap jam kita tahu pekerja mana yang bekerja dan berapa banyak pekerjaan yang dilakukan. Dari informasi itu saya ingin mencari tahu siapa yang melakukan paling banyak pekerjaan.

Jika data dalam format JSON itu akan terlihat seperti ini:

[
  {
    "work_done": 12345,
    "Workers": [ "andy", "bob", "cameron", "david" ]
  },
  {
    "work_done": 432,
    "Workers": [ "steve", "joe", "andy"]
  },
  {
    "work_done": 59042,
    "Workers": [ "bob", "aaron", "michelle", "scott", "henry" ]
  },
  ...
]
Greg Guida
sumber
3
Apakah aditif kerja, seperti jumlah beberapa produk? Kemudian Anda dapat menggunakan regresi linier untuk memperkirakan kontribusi dari setiap pekerja, dan mengurutkan pekerja berdasarkan koefisien mereka. Jika itu bukan aditif maka Anda mungkin menginginkan sesuatu yang lebih rumit.
Douglas Zare
Jika Anda menganggap Anda tahu berapa banyak pekerjaan yang telah dilakukan masing-masing kelompok dan juga menganggap bahwa pekerjaan itu didistribusikan secara merata di antara para peserta di setiap kelompok, Anda dapat dengan mudah membagi jumlah pekerjaan yang dilakukan oleh kelompok dengan jumlah orang di dalamnya dan jumlah tingkatkan sedikit pekerjaan yang telah dilakukan setiap pekerja dalam kelompok yang berbeda. Ini tidak benar-benar memiliki apa pun dengan statistik.
Qnan
1
@DouglasZare Ya, karya ini adalah aditif
Greg Guida
1
Saya pikir uraiannya jelas. Anda hanya mengamati pekerja dalam kelompok dan ingin membuat kesimpulan tentang pekerja individu. Misalnya, Anda memiliki total 5 pekerja, pada hari pertama Anda mengamati pekerja {1,2,3} bersama-sama, pada hari kedua Anda melihat pekerja {1,4,5}, pada hari ketiga {2,3,4 }, dll. dan data Anda adalah total output setiap hari. Lalu, dapatkah Anda memperkirakan output rata-rata dari setiap pekerja individu? Jawabannya adalah ya - jika Anda dapat memperoleh distribusi jumlah pekerja maka Anda dapat menuliskan kemungkinan dan memaksimalkannya sebagai fungsi dari masing-masing cara.
Makro
1
Apa yang saya lewatkan? Saya masih tidak melihat dari mana Anda mendapatkan nilai individu. Apakah kita selalu tahu pekerja mana yang berada di jam data khusus? Apakah jumlah total pekerjaan per jam bagaimanapun tetap? Adakah asumsi yang jelas dalam definisi masalah yang saya lewatkan?
Michael R. Chernick

Jawaban:

10

David Harris telah memberikan jawaban yang bagus , tetapi karena pertanyaannya terus diedit, mungkin akan membantu untuk melihat rincian solusinya. Sorotan dari analisis berikut adalah:

  • Kuadrat terkecil tertimbang mungkin lebih tepat daripada kuadrat terkecil biasa.

  • Karena perkiraan dapat mencerminkan variasi dalam produktivitas di luar kendali individu, berhati-hatilah dalam menggunakannya untuk mengevaluasi pekerja individu.


Untuk melakukan ini, mari kita buat beberapa data realistis menggunakan rumus yang ditentukan sehingga kita dapat mengevaluasi keakuratan solusi. Ini dilakukan dengan 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)

Dalam langkah-langkah awal ini, kami:

  • Tetapkan seed untuk generator angka acak sehingga siapa pun dapat mereproduksi hasilnya.

  • Tentukan berapa banyak pekerja yang ada n.names.

  • Menetapkan jumlah pekerja yang diharapkan per kelompok groupSize.

  • Tentukan berapa banyak kasus (pengamatan) yang tersedia n.cases. (Kemudian beberapa dari ini akan dihilangkan karena mereka sesuai, seperti yang terjadi secara acak, tidak ada pekerja di tenaga kerja sintetis kami.)

  • Atur jumlah pekerjaan agar berbeda secara acak dari yang diperkirakan berdasarkan pada jumlah "keahlian" masing-masing kelompok. Nilai cvadalah variasi proporsional yang khas; Misalnya , diberikan di sini sesuai dengan variasi 10% khas (yang dapat berkisar di luar 30% dalam beberapa kasus).0,10

  • Buat tenaga kerja orang-orang dengan berbagai keahlian kerja. Parameter yang diberikan di sini untuk komputasi proficiencymenciptakan kisaran lebih dari 4: 1 antara pekerja terbaik dan terburuk (yang menurut pengalaman saya mungkin sedikit sempit untuk teknologi dan pekerjaan profesional, tetapi mungkin lebar untuk pekerjaan manufaktur rutin).

Dengan tenaga kerja sintetis ini, mari kita simulasikan pekerjaan mereka . Ini sama dengan menciptakan kelompok masing-masing pekerja ( schedule) untuk setiap pengamatan (menghilangkan pengamatan di mana tidak ada pekerja sama sekali terlibat), menjumlahkan kemahiran para pekerja di setiap kelompok, dan mengalikan jumlah itu dengan nilai acak (rata-rata tepat ) untuk mencerminkan variasi yang pasti akan terjadi. (Jika tidak ada variasi sama sekali, kami akan merujuk pertanyaan ini ke situs Matematika, di mana responden dapat menunjukkan masalah ini hanya seperangkat persamaan linear simultan yang dapat diselesaikan tepat untuk kemahiran.)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)

Saya merasa nyaman untuk menempatkan semua data kelompok kerja ke dalam satu kerangka data tunggal untuk dianalisis tetapi untuk menjaga nilai kerja tetap terpisah:

data <- data.frame(schedule)

Di sinilah kita akan mulai dengan data nyata: kita akan memiliki pengelompokan pekerja dikodekan oleh data(atau schedule) dan hasil kerja yang diamati dalam workarray.

Sayangnya, jika beberapa pekerja selalu dipasangkan, R's lmprosedur hanya gagal dengan kesalahan. Kita harus memeriksa dulu untuk pasangan semacam itu. Salah satu caranya adalah dengan menemukan pekerja berkorelasi sempurna dalam jadwal:

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

Outputnya akan mencantumkan pasangan pekerja yang selalu berpasangan: ini dapat digunakan untuk menggabungkan pekerja ini ke dalam kelompok, karena setidaknya kita dapat memperkirakan produktivitas masing-masing kelompok, jika tidak individu di dalamnya. Kami harap itu hanya dimuntahkan character(0). Mari kita anggap itu benar.

Satu poin halus, tersirat dalam penjelasan di atas, adalah bahwa variasi dalam pekerjaan yang dilakukan adalah multiplikatif, bukan aditif. Ini realistis: variasi dalam output kelompok besar pekerja, pada skala absolut, akan lebih besar daripada variasi dalam kelompok-kelompok kecil. Karenanya, kami akan mendapatkan taksiran yang lebih baik dengan menggunakan kuadrat terkecil berbobot daripada kuadrat terkecil biasa. Bobot terbaik untuk digunakan dalam model khusus ini adalah kebalikan dari jumlah pekerjaan. (Dalam hal beberapa jumlah pekerjaan adalah nol, saya memperdaya ini dengan menambahkan sedikit untuk menghindari pembagian dengan nol.)

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

Ini seharusnya hanya membutuhkan satu atau dua detik.

Sebelum melanjutkan, kita harus melakukan beberapa tes diagnostik kecocokan. Meskipun membahas itu akan membawa kita terlalu jauh ke sini, satu Rperintah untuk menghasilkan diagnostik yang bermanfaat adalah

plot(fit)

(Ini akan memakan waktu beberapa detik: itu set data besar!)

Meskipun beberapa baris kode ini melakukan semua pekerjaan, dan mengeluarkan perkiraan kemahiran untuk setiap pekerja, kami tidak ingin memindai melalui semua 1000 jalur output - setidaknya tidak segera. Mari kita gunakan grafik untuk menampilkan hasilnya .

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. Inilah yang terjadi di sini: histogramnya secantik yang bisa diharapkan. (Mungkin satu hal yang tentu saja bagus: ini adalah data simulasi. Bagaimanapun, simetri ini mengkonfirmasi bobot melakukan pekerjaan mereka dengan benar. Menggunakan bobot yang salah akan cenderung membuat histogram asimetris.)

Plot sebar (panel kanan bawah gambar) langsung membandingkan perkiraan keahlian dengan yang sebenarnya. Tentu saja ini tidak akan tersedia dalam kenyataan, karena kita tidak tahu kemahiran yang sebenarnya: di sinilah letak kekuatan simulasi komputer. Mengamati:

  • Jika tidak ada variasi acak dalam pekerjaan (set cv=0dan jalankan kembali kode untuk melihat ini), scatterplot akan menjadi garis diagonal yang sempurna. Semua perkiraan akan sangat akurat. Jadi, pencar yang terlihat di sini mencerminkan variasi itu.

  • Terkadang, nilai yang diestimasikan cukup jauh dari nilai sebenarnya. Misalnya, ada satu titik dekat (110, 160) di mana kemahiran yang diperkirakan sekitar 50% lebih besar dari kemahiran yang sebenarnya. Ini hampir tidak bisa dihindari dalam kumpulan data yang besar. Ingatlah ini jika perkiraan akan digunakan secara individual , seperti untuk mengevaluasi pekerja. Secara keseluruhan perkiraan ini mungkin sangat baik, tetapi sejauh variasi dalam produktivitas kerja disebabkan oleh sebab-sebab di luar kendali individu, maka bagi beberapa pekerja perkiraan tersebut akan keliru: beberapa terlalu tinggi, beberapa terlalu rendah. Dan tidak ada cara untuk mengatakan dengan tepat siapa yang terpengaruh.

Berikut adalah empat plot yang dihasilkan selama proses ini.

Plot

Akhirnya, perhatikan bahwa metode regresi ini mudah diadaptasi untuk mengendalikan variabel lain yang mungkin terkait dengan produktivitas kelompok. Ini dapat mencakup ukuran kelompok, durasi setiap upaya kerja, variabel waktu, faktor untuk manajer setiap kelompok, dan sebagainya. Cukup sertakan mereka sebagai variabel tambahan dalam regresi.

whuber
sumber
Wow, itu banyak yang bisa diterima. Saya kira saya tidak yakin bagaimana saya bisa tahu siapa pekerja yang paling sulit dari grafik ini.
Greg Guida
Apakah grafik tersebut berdasarkan per-pekerja?
Greg Guida
Panel kanan bawah menyajikan semua 1.000 perkiraan. Yang tertinggi adalah sekitar 200: muncul jauh ke kanan. Histogram kecakapan dan histogram residual juga menggambarkan hasil untuk 1.000 pekerja. Panel kanan atas, histogram pekerjaan, menampilkan jumlah total pekerjaan selama hampir 5.000 pekerjaan.
whuber
Ok, saya mendapatkan arti dari masing-masing grafik tetapi saya tidak yakin bagaimana menggunakannya untuk memberi peringkat pekerja.
Greg Guida
Dari atas ke bawah di panel kanan bawah. Kode juga membuat tabel hasil ini (disebut results): Anda dapat mengurutkannya berdasarkan nilai yang diperkirakan. Anda dapat mengekspornya ke spreadsheet, dll.
whuber
7

Anda ingin mengatur data Anda seperti ini, dengan 1 menunjukkan bahwa orang tersebut adalah bagian dari tim yang melakukan pekerjaan baris itu:

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

Kemudian, Anda bisa melakukan regresi linier (dengan asumsi semuanya aditif, dll, seperti yang Anda sebutkan di komentar). Di R, perintahnya adalah

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

"Formula" work.done ~ . + 0mengatakan, dalam bahasa Inggris, bahwa jumlah pekerjaan yang dilakukan tergantung pada semua kolom lainnya (itulah ".") Dan bahwa kelompok tanpa pekerja tidak akan melakukan pekerjaan (itulah "+ 0"). Ini akan memberi Anda perkiraan kontribusi dari masing-masing pekerja untuk output kelompok rata-rata.

Seperti yang dibahas dalam komentar, jika Anda memiliki sepasang pekerja yang selalu bersama, model tidak akan membedakan kontribusi kedua pekerja dari satu sama lain, dan salah satu dari mereka akan mendapatkan "NA".

David J. Harris
sumber
Apakah penting bahwa ada 1000 pekerja? Apa yang dia maksud dengan kelompok 1-100? Bahkan dengan klarifikasi dari 2 suntingan saya tidak melihat di mana setiap set data mengidentifikasi individu dalam kelompok? Yang saya tahu adalah bahwa setiap orang bekerja dengan jumlah yang sama setiap hari. Karena beberapa dari Anda berpikir ada solusi mungkin melalui regresi secara eksplisit apa asumsi yang mendasari dan bagaimana pekerjaan seseorang dapat diidentifikasi? Saya juga bingung tentang semua diskusi tentang kerja sama koperasi. Tidak ada yang diasumsikan selain bekerja secara mandiri.
Michael R. Chernick
Satu-satunya kendala yang saya lihat adalah bahwa setiap orang entah bagaimana berhasil melakukan jumlah pekerjaan yang sama selama sejumlah besar cobaan? Sepertinya kita sedang berusaha menerjemahkan sesuatu yang tidak masuk akal itu. Tapi apakah ini jelas yang dimaksud OP itu ??
Michael R. Chernick
@MichaelChernick Saya tidak yakin saya mengerti masalah Anda. Apakah individu yang sama dapat menyumbangkan jumlah yang berbeda pada uji coba yang berbeda, atau ada yang lebih dari itu?
David J. Harris
@ Davidvidar Saya pikir Anda punya solusi yang bagus jika asumsi Anda benar. Tetapi saya khawatir tentang identifikasi untuk setiap orang dengan begitu banyak pekerja. OP berpendapat ukuran sampel yang besar membantu. Tetapi harus ada struktur seperti apa yang Anda berikan dan beberapa asumsi pemodelan. Aku hanya berpikir dia tidak menentukan semua yang kita butuhkan untuk menyelesaikan masalah.
Michael R. Chernick
@MichaelChernick Saya pikir jika kita menganggap pekerja independen, bahwa model linier cukup aman, dan linearitas juga melindungi kita dari beberapa masalah yang mungkin kita hadapi. whuber mungkin benar tentang pembobotan, yang akan membantu. Efek acak untuk pekerja dan kelompok dapat membantu menjaga perkiraan parameter tetap waras jika ada masalah pengidentifikasian. Mungkin ada lebih banyak perbaikan yang dapat dilakukan, tetapi saya masih berpikir ini berada di jalur yang benar, dengan asumsi para pekerja pada dasarnya mandiri.
David J. Harris