Determinazione del contributo maggiore in un gruppo


9

Non so molto sulle statistiche quindi abbiate pazienza. Diciamo che ho un set di 1000 lavoratori. Voglio capire chi è il lavoratore più duro, ma posso solo misurare la quantità di lavoro svolto in gruppi di 1-100 in un'ora di lavoro. Supponendo che ogni lavoratore svolga sempre la stessa quantità di lavoro, su un gran numero di prove e combinazioni posso classificare i miei lavoratori per chi lavora di più?

Nota: questa è solo una metafora, quindi non preoccuparti di eseguire effettivamente i test, supponi solo che ho già un ampio set di dati.

Modifica: quando dico "Supponendo che ogni lavoratore svolga sempre la stessa quantità di lavoro" intendo che ogni individuo svolge circa la stessa quantità di lavoro giorno per giorno. Quindi Joey farà circa 100 unità di lavoro ogni giorno e Greg ne farà circa 50. Il problema è che posso solo osservare il numero di unità di lavoro fatte dal gruppo.

Altre modifiche: per quanto riguarda il numero di lavoratori che lavorano contemporaneamente e la frequenza con cui lavorano. Potrebbe esserci un numero qualsiasi di lavoratori che lavorano contemporaneamente. Alcuni lavoratori probabilmente finiranno per lavorare molto più di altri, vale a dire, possiamo supporre che alcuni lavoratori lavoreranno quasi il 90% delle volte e altri quasi mai.

So che lo rende difficile, ma avrò un set di dati molto grande, quindi spero che lo renda un po 'più facile.

Per ogni ora sappiamo quali lavoratori stanno lavorando e quanto lavoro è stato svolto. Da quelle informazioni voglio scoprire chi sta facendo più lavoro.

Se i dati fossero in formato JSON sarebbe simile a questo:

[
  {
    "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
Il lavoro è additivo, come la quantità di alcuni prodotti? Quindi è possibile utilizzare la regressione lineare per stimare il contributo di ciascun lavoratore e ordinare i lavoratori in base ai loro coefficienti. Se non è additivo, potresti voler qualcosa di più complicato.
Douglas Zare,

Se supponi di sapere quanto lavoro ha svolto ciascun gruppo e presumi anche che il lavoro sia distribuito uniformemente tra i partecipanti in ciascun gruppo, puoi semplicemente dividere la quantità di lavoro svolto dal gruppo per il numero di persone in esso e la somma le parti di lavoro che ciascun lavoratore ha svolto in diversi gruppi. Questo non ha davvero nulla con le statistiche, però.
Qnan,

1
@DouglasZare Sì, il lavoro è additivo
Greg Guida

1
Penso che la descrizione sia chiara. Osserva solo i lavoratori in gruppo e vuoi fare deduzione sui singoli lavoratori. Ad esempio, supponiamo di avere un totale di 5 lavoratori, il primo giorno osservi i lavoratori {1,2,3} insieme, il secondo giorno vedi i lavoratori {1,4,5}, il terzo giorno {2,3,4 }, ecc. e i tuoi dati rappresentano l'output totale ogni giorno. Quindi, puoi stimare l'output medio di ogni singolo lavoratore? La risposta è sì: se riesci a ricavare la distribuzione della somma dei lavoratori, allora potresti annotare la probabilità e massimizzare in funzione dei singoli mezzi.
Macro

1
Cosa mi sto perdendo? Non riesco ancora a vedere dove si trova l'individuo significa anche. Sappiamo sempre quali sono i lavoratori nell'ora dei dati separati? La quantità totale di lavoro all'ora è in qualche modo fissa? C'è un presupposto che è chiaro nella definizione del problema che mi manca?
Michael R. Chernick,

Risposte:


10

David Harris ha fornito un'ottima risposta , ma poiché la domanda continua a essere modificata, forse sarebbe d'aiuto vedere i dettagli della sua soluzione. I punti salienti della seguente analisi sono:

  • I minimi quadrati ponderati sono probabilmente più appropriati dei minimi quadrati ordinari.

  • Poiché le stime possono riflettere la variazione della produttività al di fuori del controllo di ogni individuo, sii cauto nell'utilizzarle per valutare i singoli lavoratori.


A tale scopo, creiamo alcuni dati realistici utilizzando le formule specificate in modo da poter valutare l'accuratezza della soluzione. Questo viene fatto con 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)

In questi passaggi iniziali, noi:

  • Imposta un seme per il generatore di numeri casuali in modo che chiunque possa riprodurre esattamente i risultati.

  • Specifica quanti lavoratori ci sono n.names.

  • Stabilire il numero previsto di lavoratori per gruppo con groupSize.

  • Specificare quanti casi (osservazioni) sono disponibili con n.cases. (Più tardi alcuni di questi saranno eliminati perché corrispondono, come accade a caso, a nessuno dei lavoratori della nostra forza lavoro sintetica.)

  • Organizzare che le quantità di lavoro differiscano casualmente da ciò che sarebbe previsto in base alla somma delle "competenze" del lavoro di ciascun gruppo. Il valore di cvè una variazione proporzionale tipica; Ad esempio , lo indicato qui corrisponde a una tipica variazione del 10% (che potrebbe variare oltre il 30% in alcuni casi).0.10

  • Creare una forza lavoro di persone con diverse competenze lavorative. I parametri qui forniti per il calcolo proficiencycreano un intervallo di oltre 4: 1 tra i lavoratori migliori e quelli peggiori (che nella mia esperienza potrebbe anche essere un po 'stretto per la tecnologia e i lavori professionali, ma forse è ampio per i normali lavori di produzione).

Con questa forza lavoro sintetica in mano, simuliamo il loro lavoro . Ciò equivale a creare un gruppo di ciascun lavoratore ( schedule) per ogni osservazione (eliminando qualsiasi osservazione in cui nessun lavoratore fosse coinvolto), sommando le competenze dei lavoratori in ciascun gruppo e moltiplicando tale somma per un valore casuale (media esattamente ) per riflettere le variazioni che inevitabilmente si verificheranno. (Se non ci fosse alcuna variazione, rimanderemmo questa domanda al sito di Matematica, dove gli intervistati potrebbero sottolineare che questo problema è solo un insieme di equazioni lineari simultanee che potrebbero essere risolte esattamente per le competenze.)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)

Ho trovato conveniente mettere tutti i dati del gruppo di lavoro in un singolo frame di dati per l'analisi, ma per mantenere separati i valori di lavoro:

data <- data.frame(schedule)

È qui che inizieremmo con dati reali: avremmo codificato il raggruppamento di lavoratori da data(o schedule) e gli output di lavoro osservati worknell'array.

Sfortunatamente, se alcuni lavoratori sono sempre accoppiati, Rla lmprocedura fallisce semplicemente con un errore. Dovremmo prima verificare tali accoppiamenti. Un modo è trovare lavoratori perfettamente correlati nel programma:

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

L'output elencherà le coppie di lavoratori sempre accoppiati: questo può essere usato per combinare questi lavoratori in gruppi, perché almeno possiamo stimare la produttività di ciascun gruppo, se non le persone al suo interno. Speriamo che sputi character(0). Supponiamo che lo faccia.

Un punto sottile, implicito nella precedente spiegazione, è che la variazione del lavoro svolto è moltiplicativa, non additiva. Ciò è realistico: la variazione nella produzione di un grande gruppo di lavoratori sarà, su scala assoluta, maggiore della variazione nei gruppi più piccoli. Di conseguenza, otterremo stime migliori utilizzando i minimi quadrati ponderati anziché i minimi quadrati ordinari. I pesi migliori da utilizzare in questo particolare modello sono i reciproci degli importi di lavoro. (Nel caso in cui alcuni importi di lavoro siano pari a zero, lo fondo aggiungendo un piccolo importo per evitare di dividere per zero.)

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

Questo dovrebbe richiedere solo uno o due secondi.

Prima di procedere dovremmo eseguire alcuni test diagnostici di adattamento. Anche se discutere di questi ci porterebbe troppo lontano qui, un Rcomando per produrre una diagnostica utile è

plot(fit)

(Questo richiederà alcuni secondi: è un set di dati di grandi dimensioni!)

Sebbene queste poche righe di codice facciano tutto il lavoro e sputino le competenze stimate per ciascun lavoratore, non vorremmo scansionare tutte le 1000 linee di output - almeno non subito. Usiamo la grafica per visualizzare i risultati .

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

L'istogramma (riquadro in basso a sinistra della figura in basso) rappresenta le differenze tra le competenze stimate e effettive , espresse come multipli dell'errore standard della stima. Per una buona procedura, questi valori saranno quasi sempre compresi tra e e saranno distribuiti simmetricamente attorno a . Con 1000 lavoratori coinvolti, tuttavia, ci aspettiamo di vedere alcune di queste differenze standardizzate che si estendono e anche lontano da2 0 3 4 0220340. Questo è esattamente il caso qui: l'istogramma è bello come si potrebbe sperare. (Ovviamente, una cosa potrebbe essere piacevole: questi sono dati simulati, dopo tutto. Ma la simmetria conferma che i pesi stanno facendo il loro lavoro correttamente. L'uso di pesi sbagliati tenderà a creare un istogramma asimmetrico.)

Il grafico a dispersione (riquadro in basso a destra della figura) confronta direttamente le competenze stimate con quelle effettive. Naturalmente questo non sarebbe disponibile nella realtà, perché non conosciamo le competenze effettive: qui sta il potere della simulazione al computer. Osservare:

  • Se non ci fosse stata alcuna variazione casuale nel lavoro (impostare cv=0e rieseguire il codice per vederlo), il diagramma a dispersione sarebbe una linea diagonale perfetta. Tutte le stime sarebbero perfettamente accurate. Pertanto, la dispersione vista qui riflette quella variazione.

  • Occasionalmente, un valore stimato è piuttosto lontano dal valore reale. Ad esempio, c'è un punto vicino (110, 160) in cui la competenza stimata è di circa il 50% superiore alla competenza effettiva. Questo è quasi inevitabile in qualsiasi grande lotto di dati. Tienilo a mente se le stime saranno utilizzate su base individuale , ad esempio per valutare i lavoratori. Nel complesso, queste stime possono essere eccellenti, ma nella misura in cui la variazione della produttività del lavoro è dovuta a cause al di fuori del controllo di ogni individuo, allora per alcuni lavoratori le stime saranno errate: alcune troppo alte, altre troppo basse. E non c'è modo di dire con precisione chi è interessato.

Ecco i quattro grafici generati durante questo processo.

Terreni

Infine, si noti che questo metodo di regressione si adatta facilmente al controllo di altre variabili che plausibilmente potrebbero essere associate alla produttività del gruppo. Questi potrebbero includere la dimensione del gruppo, la durata di ogni sforzo lavorativo, una variabile temporale, un fattore per il manager di ciascun gruppo e così via. Includili semplicemente come variabili aggiuntive nella regressione.


Wow, è molto da prendere in considerazione. Immagino di non essere sicuro di come posso dire chi sono i lavoratori che lavorano più duramente in queste classifiche.
Greg Guida,

I grafici sono per lavoratore?
Greg Guida,

Il pannello in basso a destra presenta tutte le 1.000 stime. Il più alto è di circa 200: appare completamente a destra. L'istogramma di competenza e l'istogramma residuo rappresentano anche risultati per 1.000 lavoratori. Il pannello in alto a destra, un istogramma di lavoro, mostra la quantità totale di lavoro per quasi 5.000 lavori.
whuber

Ok, ottengo il significato di ciascuno dei grafici ma non sono sicuro di come usarli per classificare i lavoratori.
Greg Guida,

Dall'alto verso il basso nel pannello in basso a destra. Il codice crea anche una tabella di questi risultati (chiamati results): puoi ordinarli per valore stimato. Puoi esportarlo in un foglio di calcolo, ecc.
whuber

7

Vorresti impostare i tuoi dati in questo modo, con 1 che indica che la persona faceva parte del team che ha svolto il lavoro di quella riga:

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

Quindi, puoi semplicemente fare una regressione lineare (supponendo che tutto sia additivo, ecc., Come hai menzionato nei commenti). In R, il comando sarebbe

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

La "formula" work.done ~ . + 0dice, in inglese, che la quantità di lavoro svolto dipende da tutte le altre colonne (questo è il ".") E che i gruppi senza lavoratori non farebbero alcun lavoro (questo è "+ 0"). Ciò fornirà il contributo approssimativo di ciascun lavoratore all'output medio del gruppo.

Come discusso nei commenti, se hai una coppia di lavoratori che sono sempre insieme, il modello non distinguerà i contributi dei due lavoratori l'uno dall'altro e uno di loro otterrà una "NA".


Importa che ci siano 1000 lavoratori? Cosa intende per gruppi di 1-100? Anche con i chiarimenti delle 2 modifiche non vedo dove ogni set di dati identifichi le persone nel gruppo? Tutto quello che so è che ogni persona lavora approssimativamente lo stesso importo ogni giorno. Dal momento che molti di voi pensano che ci sia una soluzione eventualmente attraverso la regressione esplicitamente quali sono i presupposti di base e come è identificabile il lavoro di una persona? Inoltre sono perplesso su tutta la discussione sul lavoro cooperativo. In nessun altro luogo si suppone altro che lavorare in modo indipendente.
Michael R. Chernick,

L'unico vincolo che vedo è che ogni persona riesce in qualche modo a fare lo stesso lavoro su un gran numero di prove? Sembra che stiamo cercando di tradurre questo inot in qualcosa di sensato. Ma è chiaro che questo è ciò che l'OP intendeva ??
Michael R. Chernick,

@MichaelChernick Non sono sicuro di aver capito la tua preoccupazione. È che lo stesso individuo potrebbe contribuire con importi diversi a prove diverse o c'è di più?
David J. Harris,

@DavidHarris Penso che tu abbia una buona soluzione se i tuoi presupposti sono giusti. Ma sono preoccupato per l'identificabilità per ogni persona con così tanti lavoratori. L'OP ritiene che l'ampia dimensione del campione sia di aiuto. Ma ci deve essere una struttura come quella che hai dato e alcune ipotesi di modellazione. Non penso che abbia specificato tutto ciò di cui abbiamo bisogno per risolvere il problema.
Michael R. Chernick,

@MichaelChernick Penso che se supponiamo che i lavoratori siano indipendenti, che un modello lineare sia piuttosto sicuro e che la linearità ci protegga anche da alcuni problemi che potremmo incontrare. whuber probabilmente ha ragione sulla ponderazione, il che aiuterebbe. Effetti casuali per lavoratori e gruppi potrebbero aiutare a mantenere sane le stime dei parametri in caso di problemi di identificabilità. Probabilmente ci sono altri miglioramenti che potrebbero essere fatti, ma penso ancora che sia sulla strada giusta, supponendo che i lavoratori siano essenzialmente indipendenti.
David J. Harris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.