एक समूह में सबसे बड़ा योगदानकर्ता निर्धारित करना


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
क्या कार्य योगात्मक है, जैसे कि कुछ उत्पाद की मात्रा? फिर आप प्रत्येक कार्यकर्ता से योगदान का अनुमान लगाने के लिए रैखिक प्रतिगमन का उपयोग कर सकते हैं, और उनके गुणांकों द्वारा श्रमिकों को क्रमबद्ध कर सकते हैं। यदि यह additive नहीं है तो आप कुछ अधिक जटिल चाहते हैं।
डगलस जेरे

यदि आप मानते हैं कि प्रत्येक समूह ने कितना काम किया है और यह भी मान लें कि यह कार्य समान रूप से प्रत्येक समूह में प्रतिभागियों के बीच वितरित किया जाता है, तो आप समूह द्वारा किए गए कार्य की राशि को उसमें और लोगों की संख्या से विभाजित कर सकते हैं प्रत्येक कार्यकर्ता ने अलग-अलग समूहों में काम किया है। यह वास्तव में आँकड़ों के साथ कुछ भी नहीं है, यद्यपि।
21

1
@ डगलसजारे हां, यह काम योगात्मक है
ग्रेग गुइडा

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एक विशिष्ट आनुपातिक भिन्नता है; जैसे , द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सरणी में अवलोकित किए गए वर्क आउटपुट को समूहीकृत करने वाला वर्कर होगा ।

दुर्भाग्य से, यदि कुछ कार्यकर्ताओं हमेशा जोड़ा जाता है, Rकी 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")])

हिस्टोग्राम (नीचे दिए गए आंकड़े का निचला बायां पैनल) अनुमानित की वास्तविक त्रुटि के गुणकों के रूप में व्यक्त अनुमानित और वास्तविक दक्षता के बीच अंतर है । एक अच्छी प्रक्रिया के लिए, ये मूल्य लगभग हमेशा बीच में रहेंगे-2 तथा 2 और सममित रूप से चारों ओर वितरित किया जाए 0। हालांकि 1000 श्रमिकों को शामिल किया गया है, हम पूरी तरह से इनमें से कुछ मानकीकृत अंतरों को देखने की उम्मीद करते हैं3 और भी 4 से दूर 0। यह वास्तव में यहाँ मामला है: हिस्टोग्राम उतना ही सुंदर है जितना कोई उम्मीद कर सकता है। (एक बात यह अच्छी हो सकती है: ये नकली डेटा हैं, आखिरकार। लेकिन समरूपता पुष्टि करती है कि वज़न सही ढंग से अपना काम कर रहा है। गलत वज़न का उपयोग करने से एक असममित हिस्टोग्राम बन जाएगा।)

स्कैप्लॉट (आकृति का निचला दायां पैनल) सीधे वास्तविक लोगों की अनुमानित दक्षता की तुलना करता है। बेशक, यह वास्तविकता में उपलब्ध नहीं होगा, क्योंकि हम वास्तविक दक्षताओं को नहीं जानते हैं: इसमें कंप्यूटर सिमुलेशन की शक्ति निहित है। का निरीक्षण करें:

  • यदि कार्य में कोई यादृच्छिक भिन्नता नहीं थी ( cv=0इसे देखने के लिए कोड सेट करें और फिर से चलाएँ), तो स्कैप्लेट एक पूर्ण विकर्ण रेखा होगी। सभी अनुमान पूरी तरह से सही होंगे। इस प्रकार, यहाँ देखा गया बिखराव उस भिन्नता को दर्शाता है।

  • कभी-कभी, एक अनुमानित मूल्य वास्तविक मूल्य से बहुत दूर होता है। उदाहरण के लिए, वहाँ एक बिंदु (110, 160) के पास है जहाँ अनुमानित प्रवीणता वास्तविक प्रवीणता से लगभग 50% अधिक है। डेटा के किसी भी बड़े बैच में यह लगभग अपरिहार्य है। इसे ध्यान में रखें यदि अनुमानों का उपयोग व्यक्तिगत आधार पर किया जाएगा , जैसे श्रमिकों के मूल्यांकन के लिए। पूरे तौर पर ये अनुमान उत्कृष्ट हो सकते हैं, लेकिन किसी व्यक्ति के नियंत्रण से परे कारणों की वजह से कार्य उत्पादकता में भिन्नता है, तो कुछ श्रमिकों के लिए अनुमान गलत होंगे: कुछ बहुत अधिक, कुछ बहुत कम। और यह बताने का कोई तरीका नहीं है कि कौन प्रभावित हुआ है।

यहां इस प्रक्रिया के दौरान उत्पन्न चार भूखंड हैं।

भूखंड

अंत में, ध्यान दें कि इस प्रतिगमन विधि को आसानी से अन्य चर के लिए नियंत्रित करने के लिए अनुकूलित किया जाता है, जो संभवतः समूह उत्पादकता के साथ जुड़ा हो सकता है। इनमें समूह आकार, प्रत्येक कार्य प्रयास की अवधि, एक समय चर, प्रत्येक समूह के प्रबंधक के लिए एक कारक और इसी तरह शामिल हो सकता है। बस उन्हें प्रतिगमन में अतिरिक्त चर के रूप में शामिल करें।


वाह, अंदर लेने के लिए बहुत कुछ। मुझे लगता है मुझे यकीन नहीं है कि मैं कैसे बता सकता हूं कि सबसे कठिन काम करने वाले श्रमिक इन चार्ट से हैं।
ग्रेग गिडा

क्या चार्ट प्रति कार्यकर्ता आधार पर हैं?
ग्रेग गिडा

निचला दायाँ पैनल सभी 1,000 अनुमान प्रस्तुत करता है। उच्चतम 200 के आसपास है: यह दाईं ओर सभी तरह से दिखाई देता है। प्रवीणता हिस्टोग्राम और अवशिष्ट हिस्टोग्राम भी 1,000 श्रमिकों के लिए परिणाम दर्शाते हैं। ऊपरी दायां पैनल, काम का एक हिस्टोग्राम, लगभग 5,000 नौकरियों के लिए काम की कुल मात्रा प्रदर्शित करता है।
व्हिबर

ठीक है, मुझे प्रत्येक चार्ट का अर्थ मिलता है, लेकिन मुझे यकीन नहीं है कि श्रमिकों को रैंक करने के लिए उनका उपयोग कैसे करें।
ग्रेग गिडा

निचले दाएं पैनल में ऊपर से नीचे तक। कोड इन परिणामों की एक तालिका भी बनाता है (कहा जाता है 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") है। यह आपको प्रत्येक कार्यकर्ता से औसत समूह उत्पादन में अनुमानित योगदान देगा।

जैसा कि टिप्पणियों में चर्चा की गई है, यदि आपके पास ऐसे श्रमिकों की एक जोड़ी है जो हमेशा एक साथ रहते हैं, तो मॉडल दो श्रमिकों के योगदान को एक दूसरे से अलग नहीं करेगा, और उनमें से एक को "एनए" मिलेगा।


क्या फर्क पड़ता है कि 1000 कार्यकर्ता हैं? 1-100 के समूहों द्वारा उसका क्या मतलब है? यहां तक ​​कि 2 संपादन से स्पष्टीकरण के साथ मैं यह नहीं देखता कि समूह में प्रत्येक डेटा सेट व्यक्तियों की पहचान कहां करता है? मुझे पता है कि प्रत्येक व्यक्ति प्रत्येक दिन लगभग एक ही राशि का काम करता है। चूंकि आप में से कई लोग सोचते हैं कि संभवतया प्रतिगमन के माध्यम से एक समाधान है जो स्पष्ट रूप से अंतर्निहित धारणाएं हैं और किसी व्यक्ति के काम की पहचान कैसे है? इसके अलावा, सहकारिता के काम की सभी चर्चा से मैं हैरान हूं। कहीं भी कुछ भी स्वतंत्र रूप से काम करने के अलावा नहीं माना जाता है।
बजे माइकल आर। चेरिक ऑक्ट

एकमात्र बाधा मुझे दिखाई देती है कि प्रत्येक व्यक्ति किसी भी तरह से बड़ी संख्या में परीक्षणों पर एक ही काम करने का प्रबंधन करता है? ऐसा लगता है कि हम उस सूझबूझ का अनुवाद करने की कोशिश कर रहे हैं जो कुछ समझदार हो। लेकिन क्या यह स्पष्ट है कि यह ओपी का इरादा है ??
माइकल आर। चेरिक

@MichaelChernick मुझे यकीन नहीं है कि मैं आपकी चिंता को समझता हूं। क्या यह है कि एक ही व्यक्ति अलग-अलग परीक्षणों पर अलग-अलग मात्रा में योगदान दे सकता है, या इसके लिए अधिक है?
डेविड जे। हैरिस

@DavidHarris मुझे लगता है कि आपके पास एक अच्छा उपाय है अगर आपकी धारणा सही है। लेकिन मैं इतने सारे श्रमिकों वाले प्रत्येक व्यक्ति के लिए पहचान की चिंता कर रहा हूं। ओपी को लगता है कि बड़े नमूने का आकार मदद करता है। लेकिन संरचना की जरूरत है जैसे आपने क्या दिया और कुछ मॉडलिंग धारणाएं। मुझे नहीं लगता कि उन्होंने समस्या को हल करने के लिए हमें जो कुछ भी निर्दिष्ट किया है, वह निर्दिष्ट किया है।
बजे माइकल आर

@MichaelChernick मुझे लगता है कि अगर हम श्रमिकों को स्वतंत्र मानते हैं, तो यह है कि एक रैखिक मॉडल बहुत सुरक्षित है, और रैखिकता हमें कुछ समस्याओं से भी बचाती है जो हम में चला सकते हैं। वाउबर शायद वेटिंग के बारे में सही है, जो मदद करेगा। श्रमिकों और समूहों के लिए यादृच्छिक प्रभाव पहचान की समस्या होने पर पैरामीटर अनुमानों को समझदार रखने में मदद कर सकता है। संभवत: इसमें और सुधार किए जा सकते हैं, लेकिन मुझे अभी भी लगता है कि यह सही रास्ते पर है, यह मानते हुए कि श्रमिक अनिवार्य रूप से स्वतंत्र हैं।
डेविड जे। हैरिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.