Bir gruptaki en büyük katılımcının belirlenmesi


9

İstatistikler hakkında fazla bir şey bilmiyorum, bu yüzden bana katlan. Diyelim ki 1000 kişilik bir işçim var. En zor çalışanın kim olduğunu bulmak istiyorum ama sadece bir saat değerinde 1-100 kişilik gruplar halinde yapılan iş miktarını ölçebilirim. Her bir işçinin her zaman aynı miktarda çalışma yaptığını varsayarsak, çok sayıda deneme ve kombinasyon boyunca işçilerimi en çok çalışanlar tarafından sıralayabilir miyim?

Not: Bu sadece bir metafor, bu yüzden testleri gerçekten yürütme konusunda endişelenmeyin, sadece zaten büyük bir veri setim olduğunu varsayın.

Düzenleme: "Her işçi her zaman aynı miktarda iş yapar" varsayalım demek her bireyin günlük olarak aynı miktarda iş yaptığı anlamına gelir. Joey her gün yaklaşık 100 ünite iş yapacak ve Greg de 50 civarında iş yapacak. Sorun şu ki, sadece grup tarafından yapılan iş sayısını gözlemleyebiliyorum.

Diğer düzenlemeler: Bir seferde çalışan işçi sayısı ve çalışma sıklığı açısından. Aynı anda çalışan çok sayıda işçi olabilir. Bazı işçiler muhtemelen diğerlerinden çok daha fazla çalışacaklar, yani bazı işçilerin zamanın neredeyse% 90'ını çalışacağını ve diğerlerinin neredeyse hiç çalışmadığını varsayabiliriz.

Bunun zorlaştığını biliyorum ama çok büyük bir veri setim olacak, umarım bu biraz daha kolaylaşır.

Her saat için hangi işçilerin çalıştığını ve ne kadar iş yapıldığını biliyoruz. Bu bilgilerden en çok işi kimin yaptığını öğrenmek istiyorum.

Veriler JSON biçiminde olsaydı şöyle bir şey olurdu:

[
  {
    "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
Bazı ürün miktarı gibi iş katkı maddesi var mı? Sonra her bir işçinin katkısını tahmin etmek için doğrusal regresyon kullanabilir ve işçileri katsayılarına göre sıralayabilirsiniz. Katkı maddesi değilse, daha karmaşık bir şey isteyebilirsiniz.
Douglas Zare

Her grubun ne kadar iş yaptığını bildiğinizi ve ayrıca çalışmanın her gruptaki katılımcılar arasında eşit olarak dağıtıldığını varsayarsanız, grup tarafından yapılan iş miktarını gruptaki kişi sayısına ve toplamına bölebilirsiniz. her bir işçinin farklı gruplarda yaptığı işin bitlerini. Bununla birlikte, istatistiklerle gerçekten bir şey yok.
Qnan

1
@DouglasZare Evet, iş katkı maddesi
Greg Guida

1
Bence açıklama açık. İşçileri yalnızca gruplar halinde gözlemlersiniz ve bireysel çalışanlar hakkında çıkarım yapmak istersiniz. Örneğin, toplam 5 işçiniz olduğunu, ilk gün işçileri {1,2,3} birlikte gözlemlediğinizi, ikinci gün işçileri {1,4,5}, üçüncü gün {2,3,4 }, vb. verileriniz her günkü toplam çıktıdır. O halde, her bir işçinin ortalama çıktısını tahmin edebilir misiniz? Cevap evet - eğer işçilerin toplamının dağılımını türetebilirseniz, olasılığı yazabilir ve bireysel araçların bir fonksiyonu olarak en üst düzeye çıkarabilirsiniz.
Makro

1
Neyi kaçırıyorum? Hala bireysel araçları nereden aldığını göremiyorum. Hangi çalışanların belirli bir saatlik verilerde olduğunu her zaman biliyor muyuz? Saat başına toplam iş miktarı bir şekilde sabit midir? Sorun tanımında eksik olduğumun açık olduğu varsayımı var mı?
Michael R.Chernick

Yanıtlar:


10

David Harris harika bir cevap verdi , ancak soru düzenlenmeye devam ettiğinden, belki de çözümünün ayrıntılarını görmeye yardımcı olacaktır. Aşağıdaki analizin önemli noktaları şunlardır:

  • Ağırlıklı en küçük kareler muhtemelen normal en küçük karelerden daha uygundur.

  • Tahminler üretkenlikteki herhangi bir kişinin kontrolünün ötesindeki farklılıkları yansıtabileceğinden, bunları bireysel çalışanları değerlendirmek için kullanma konusunda dikkatli olun.


Bunu gerçekleştirmek için , çözümün doğruluğunu değerlendirebilmemiz için belirtilen formülleri kullanarak bazı gerçekçi veriler oluşturalım . Bu aşağıdakilerle yapılır 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)

Bu ilk adımlarda:

  • Rastgele sayı üreteci için bir tohum ayarlayın, böylece herkes sonuçları tam olarak çoğaltabilir.

  • Orada kaç işçi bulunduğunu belirtin n.names.

  • İle grup başına beklenen işçi sayısını belirtin groupSize.

  • Kaç vakaya (gözlemlere) sahip olduğunuzu belirtin n.cases. (Daha sonra bunlardan birkaçı ortadan kaldırılacaktır, çünkü rastgele olduğu gibi sentetik iş gücümüzdeki hiçbir işçiye karşılık gelmezler.)

  • Her bir grubun çalışma "yeterlilikleri" toplamına dayanarak, iş miktarlarının tahmin edilenden rastgele farklı olmasını sağlayın. Değeri cvtipik bir oransal varyasyon; Örneğin , burada verilen tipik bir% 10 varyasyona karşılık gelir (birkaç durumda% 30'un ötesinde olabilir).0.10

  • Farklı iş yeterliliklerine sahip kişilerin işgücünü oluşturun. Bilgi işlem proficiencyiçin burada verilen parametreler , en iyi ve en kötü çalışanlar arasında 4: 1'in üzerinde bir aralık oluşturur (bu da benim deneyimime göre teknoloji ve profesyonel işler için biraz dar olabilir, ancak rutin üretim işleri için belki de geniştir).

Elindeki bu sentetik işgücü ile işlerini simüle edelim . Bu schedule, her bir gözlem için (hiçbir işçinin dahil olmadığı gözlemleri ortadan kaldırarak) her bir işçiden bir grup ( ) oluşturmak, her bir gruptaki işçilerin yeterliliklerini toplamak ve bu toplamı rastgele bir değerle çarpmaktır (tam olarak ortalama ) kaçınılmaz olarak gerçekleşecek varyasyonları yansıtmaktır. (Hiç bir varyasyon olmasaydı, bu soruyu, yanıtlayanların bu sorunun sadece yeterlilikler için tam olarak çözülebilecek bir dizi eşzamanlı doğrusal denklem olduğunu belirtebileceği Matematik sitesine yönlendireceğiz.)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)

Tüm çalışma grubu verilerini analiz için tek bir veri çerçevesine koymak, ancak çalışma değerlerini ayrı tutmak uygun bulduk:

data <- data.frame(schedule)

Burası gerçek verilerle başlayacağımız yerdi: işçi gruplamasını data(veya schedule) ve workdizideki gözlemlenen iş çıktılarını kodlamış oluruz .

Bazı işçiler hep eşleştirilmiş Maalesef, R'ın lmprosedür sadece bir hata ile sonlandı. Önce bu tür eşleşmeleri kontrol etmeliyiz. Bunun bir yolu, çizelgede mükemmel korelasyonlu işçiler bulmaktır:

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

Çıktı, her zaman eşleştirilmiş işçi çiftlerini listeleyecektir: bu, bu çalışanları gruplar halinde birleştirmek için kullanılabilir, çünkü en azından içindeki grupların olmasa da her grubun verimliliğini tahmin edebiliriz . Umarız sadece tükürür character(0). Diyelim ki öyle.

Yukarıdaki açıklamada örtük olan ince bir nokta, yapılan çalışmadaki varyasyonun katkı değil , çarpımsal olmasıdır . Bu gerçekçi: büyük bir işçi grubunun üretimindeki değişim, mutlak bir ölçekte, daha küçük gruplardaki değişimden daha büyük olacaktır. Buna göre, normal en küçük kareler yerine ağırlıklı en küçük kareler kullanarak daha iyi tahminler alacağız . Bu modelde kullanılacak en iyi ağırlıklar , çalışma miktarlarının karşılıklılarıdır. (Bazı iş miktarlarının sıfır olması durumunda, sıfıra bölmekten kaçınmak için küçük bir miktar ekleyerek bunu geçiştiririm.)

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

Bu sadece bir veya iki saniye sürmelidir.

Devam etmeden önce uyumun bazı teşhis testlerini yapmalıyız. Bunları tartışmak bizi çok uzağa götürse de, Ryararlı teşhis üretmek için bir komut

plot(fit)

(Bu birkaç saniye sürecektir: büyük bir veri kümesi!)

Bu birkaç kod satırı tüm işi yapmasına ve her işçi için tahmini yeterlilikleri tüketmesine rağmen, en azından hemen değil, 1000 satırın tamamını taramak istemeyiz. Sonuçları görüntülemek için grafikleri kullanalım .

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

Histogram (aşağıdaki şeklin sol alt paneli), standart tahmin hatasının katları olarak ifade edilen tahmini ve gerçek yeterlilikler arasındaki farklardır . İyi bir prosedür için, bu değerler neredeyse her zaman ve arasında olacaktır ve civarında simetrik olarak dağıtılacaktır . 1000 işçi katılan ile olsa da, tam olarak germek için bu standartlaştırılmış farklılıkların birkaç görmeyi bekleyebilirsiniz ve hatta uzağa220340. Burada tam olarak durum böyle: histogram umduğu kadar güzel. (Tabii ki iyi olabilir: sonuçta bunlar simüle edilmiş verilerdir. Ancak simetri, ağırlıkların işlerini doğru bir şekilde yaptığını doğrular. Yanlış ağırlıkları kullanmak asimetrik bir histogram oluşturma eğilimindedir.)

Dağılım grafiği (şeklin sağ alt paneli) tahmini yeterlilikleri doğrudan gerçek yeterliliklerle karşılaştırır. Elbette bu gerçekte mevcut olmayacaktır, çünkü gerçek yeterlilikleri bilmiyoruz: işte bilgisayar simülasyonunun gücü yatıyor. Gözlemek:

  • Çalışmada rastgele bir değişiklik olmasaydı ( cv=0bunu görmek için kodu ayarlayın ve yeniden çalıştırın), dağılım grafiği mükemmel bir çapraz çizgi olurdu. Tüm tahminler mükemmel doğrudur. Böylece, burada görülen dağılım bu varyasyonu yansıtır.

  • Bazen, tahmini bir değer gerçek değerden oldukça uzaktır. Örneğin, tahmini yeterliliğin gerçek yeterlilikten yaklaşık% 50 daha fazla olduğu bir noktaya (110, 160) yakın bir nokta vardır. Bu büyük veri yığınlarında neredeyse kaçınılmazdır. Tahminler, işçileri değerlendirmek gibi bireysel bir temelde kullanılacaksa bunu aklınızda bulundurun . Genel olarak bu tahminler mükemmel olabilir, ancak iş verimliliğindeki farklılığın herhangi bir kişinin kontrolünün ötesindeki nedenlerden kaynaklandığı ölçüde, o zaman birkaç işçi için tahminler hatalı olacaktır: bazıları çok yüksek, bazıları çok düşük. Ve kimin etkilendiğini kesin olarak anlatmanın bir yolu yok.

İşte bu işlem sırasında üretilen dört grafik.

Arsalar

Son olarak, bu regresyon yönteminin kolayca grup üretkenliği ile ilişkilendirilebilecek diğer değişkenleri kontrol etmeye uyarlandığını unutmayın. Bunlar arasında grup büyüklüğü, her çalışma çabasının süresi, zaman değişkeni, her grubun yöneticisi için bir faktör vb. Sayılabilir. Bunları regresyona ek değişkenler olarak eklemeniz yeterli.


Vay canına, içeri girmesi gereken çok şey.
Greg Guida

Grafikler işçi başına mı?
Greg Guida

Sağ alt panel 1000 tahminin tümünü sunar. En yüksek olanı 200 civarında: sağa kadar görünüyor. Yeterlilik histogramı ve artık histogram da 1000 işçi için sonuçları göstermektedir. Bir histogram olan sağ üst panel, yaklaşık 5.000 iş için toplam iş miktarını görüntüler.
whuber

Tamam, her bir çizelgenin anlamını alıyorum ama işçileri sıralamak için bunları nasıl kullanacağımdan emin değilim.
Greg Guida

Sağ alt panelde yukarıdan aşağıya. Kod ayrıca bu sonuçların (çağrılan results) bir tablosunu oluşturur : tahmini değere göre sıralayabilirsiniz. Bir e-tabloya vb. Dışa aktarabilirsiniz.
whuber

7

Verilerinizi böyle bir şey ayarlamak istersiniz, 1 kişi bu satırın çalışmasını yapan ekibin bir parçası olduğunu gösterir:

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

Ardından, lineer regresyon yapabilirsiniz (yorumlarda belirttiğiniz gibi her şeyin katkı maddesi olduğunu varsayarak, vb.). İçinde R, komut

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

"Formül" work.done ~ . + 0İngilizce olarak, yapılan iş miktarının diğer tüm sütunlara (".") Bağlı olduğunu ve işçiliği olmayan grupların hiçbir iş yapamayacağını söylüyor ("+ 0"). Bu size her çalışandan ortalama grup çıktısına yaklaşık katkı sağlayacaktır.

Yorumlarda tartışıldığı gibi, her zaman birlikte olan bir çift işçiniz varsa, model iki işçinin katkılarını birbirinden ayırt etmeyecek ve bunlardan biri "NA" alacak.


1000 işçi olması önemli mi? 1-100 kişilik gruplar tarafından ne anlama geliyor? 2 düzenlemenin açıklamalarıyla bile, her veri kümesinin gruptaki bireyleri nerede tanımladığını görmüyorum? Tek bildiğim, her insanın her gün yaklaşık aynı miktarda çalıştığıdır. Birçoğunuz açıkça regresyon yoluyla bir çözüm olduğunu düşündüğünden, altta yatan varsayımlar nelerdir ve bir kişinin çalışması nasıl tanımlanabilir? Ayrıca, işbirlikçi çalışmanın tüm tartışmaları hakkında şaşkınım. Bağımsız çalışmak dışında hiçbir şey varsayılmaz.
Michael R.Chernick

Gördüğüm tek kısıtlama, her bireyin bir şekilde çok sayıda denemede aynı miktarda işi yapmayı başarması mı? Görünüşe göre bu inotu mantıklı bir şeyi tercüme etmeye çalışıyoruz. Ancak OP'nin amaçladığı bu mu?
Michael R.Chernick

@MichaelChernick Endişenizi anladığımdan emin değilim. Aynı kişi farklı davalarda farklı miktarlarda katkıda bulunabilir mi yoksa daha fazlası var mı?
David J. Harris

@DavidHarris Bence varsayımlarınız doğru ise güzel bir çözümünüz var. Ama çok fazla çalışanı olan her bir insanın tanımlanabilirliği konusunda endişeliyim. OP, büyük numune boyutunun yardımcı olduğunu düşünüyor. Ancak verdikleriniz ve bazı modelleme varsayımları gibi bir yapı olması gerekir. Sorunu çözmek için ihtiyacımız olan her şeyi belirttiğini sanmıyorum.
Michael R.Chernick

@MichaelChernick İşçilerin bağımsız olduğunu varsayarsak, doğrusal bir modelin oldukça güvenli olduğunu ve doğrusallığın da bizi karşılaşabileceğimiz bazı sorunlardan koruduğunu düşünüyorum. whuber muhtemelen yardımcı olacak ağırlık hakkında haklı. İşçiler ve gruplar için rastgele etkiler, belirlenebilirlik problemleri varsa parametre tahminlerinin aklı başında kalmasına yardımcı olabilir. Muhtemelen yapılabilecek daha fazla gelişme var, ancak işçilerin aslında bağımsız olduklarını varsayarak, bunun doğru yolda olduğunu düşünüyorum.
David J. Harris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.