Ermittlung des größten Beitrags in einer Gruppe

9

Ich weiß nicht viel über Statistiken, also nimm sie mit. Nehmen wir an, ich habe 1000 Arbeiter. Ich möchte herausfinden, wer der härteste Arbeiter ist, aber ich kann nur den Arbeitsaufwand messen, der in Gruppen von 1 bis 100 Personen über eine Arbeitsstunde erledigt wird. Angenommen, jeder Arbeiter erledigt immer ungefähr die gleiche Menge an Arbeit. Kann ich meine Arbeiter in einer großen Anzahl von Versuchen und Kombinationen nach dem ordnen, der am härtesten arbeitet?

Hinweis: Dies ist nur eine Metapher. Machen Sie sich also keine Sorgen, dass die Tests tatsächlich ausgeführt werden. Nehmen Sie einfach an, ich habe bereits einen großen Datensatz.

Bearbeiten: Wenn ich sage "Angenommen, jeder Arbeiter erledigt immer ungefähr die gleiche Menge an Arbeit", meine ich, dass jeder Einzelne täglich ungefähr die gleiche Menge an Arbeit erledigt. Also wird Joey jeden Tag ungefähr 100 Arbeitseinheiten erledigen und Greg ungefähr 50. Das Problem ist, dass ich nur die Anzahl der von der Gruppe geleisteten Arbeitseinheiten beobachten kann.

Weitere Änderungen: In Bezug auf die Anzahl der gleichzeitig arbeitenden Arbeitnehmer und die Häufigkeit ihrer Arbeit. Es kann eine beliebige Anzahl von Arbeitnehmern gleichzeitig arbeiten. Einige Arbeitnehmer werden wahrscheinlich viel mehr arbeiten als andere, das heißt, wir können davon ausgehen, dass einige Arbeitnehmer fast 90% der Zeit arbeiten werden und andere fast nie.

Ich weiß, das macht es schwierig, aber ich werde einen sehr großen Datensatz haben, so dass es hoffentlich ein bisschen einfacher wird.

Für jede Stunde wissen wir, welche Arbeiter arbeiten und wie viel Arbeit geleistet wurde. Anhand dieser Informationen möchte ich herausfinden, wer am meisten arbeitet.

Wenn die Daten im JSON-Format wären, würde es ungefähr so ​​aussehen:

[
  {
    "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
quelle
3
Ist Arbeit additiv, wie die Menge eines Produkts? Anschließend können Sie mithilfe der linearen Regression den Beitrag jedes Arbeitnehmers schätzen und die Mitarbeiter nach ihren Koeffizienten sortieren. Wenn es nicht additiv ist, möchten Sie vielleicht etwas Komplizierteres.
Douglas Zare
Wenn Sie davon ausgehen, dass Sie wissen, wie viel Arbeit jede Gruppe geleistet hat, und auch davon ausgehen, dass die Arbeit gleichmäßig auf die Teilnehmer jeder Gruppe verteilt ist, können Sie den Arbeitsaufwand der Gruppe einfach durch die Anzahl der Personen und die Summe teilen die Arbeit, die jeder Arbeiter in verschiedenen Gruppen geleistet hat. Dies hat jedoch nichts mit Statistiken zu tun.
Qnan
1
@DouglasZare Ja, die Arbeit ist additiv
Greg Guida
1
Ich denke die Beschreibung ist klar. Sie beobachten die Arbeiter nur in Gruppen und möchten Rückschlüsse auf die einzelnen Arbeiter ziehen. Angenommen, Sie haben insgesamt 5 Arbeiter, am ersten Tag beobachten Sie die Arbeiter {1,2,3} zusammen, am zweiten Tag sehen Sie Arbeiter {1,4,5}, am dritten Tag {2,3,4 } usw. und Ihre Daten sind die Gesamtausgabe an jedem Tag. Können Sie dann die durchschnittliche Leistung jedes einzelnen Arbeitnehmers schätzen? Die Antwort lautet ja - wenn Sie die Verteilung der Summe der Arbeiter ableiten können, können Sie die Wahrscheinlichkeit aufschreiben und in Abhängigkeit von den einzelnen Mitteln maximieren.
Makro
1
Was vermisse ich? Ich sehe immer noch nicht, woher du die individuellen Mittel überhaupt bekommst. Wissen wir immer, welche Mitarbeiter sich in einer bestimmten Datenstunde befinden? Ist der Gesamtarbeitsaufwand pro Stunde irgendwie festgelegt? Gibt es eine Annahme, die in der Problemdefinition klar ist, dass ich vermisse?
Michael R. Chernick

Antworten:

10

David Harris hat eine großartige Antwort geliefert , aber da die Frage weiterhin bearbeitet wird, wäre es vielleicht hilfreich, die Details seiner Lösung zu sehen. Höhepunkte der folgenden Analyse sind:

  • Gewichtete kleinste Quadrate sind wahrscheinlich geeigneter als gewöhnliche kleinste Quadrate.

  • Da die Schätzungen möglicherweise Produktivitätsschwankungen widerspiegeln, die außerhalb der Kontrolle eines Einzelnen liegen, sollten Sie vorsichtig sein, wenn Sie sie zur Bewertung einzelner Arbeitnehmer verwenden.


Um diesen heraus zu tragen, lassen Sie sich einige realistischen Daten erstellen mit bestimmten Formeln , so dass wir für die Richtigkeit der Lösung auswerten können. Dies geschieht mit 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 diesen ersten Schritten haben wir:

  • Legen Sie einen Startwert für den Zufallszahlengenerator fest, damit jeder die Ergebnisse exakt reproduzieren kann.

  • Geben Sie an, mit wie vielen Mitarbeitern es gibt n.names.

  • Geben Sie die erwartete Anzahl von Arbeitnehmern pro Gruppe mit an groupSize.

  • Geben Sie an, mit wie vielen Fällen (Beobachtungen) verfügbar sind n.cases. (Einige davon werden später beseitigt, weil sie zufällig keinem der Arbeiter in unserer synthetischen Belegschaft entsprechen.)

  • Sorgen Sie dafür, dass sich der Arbeitsaufwand zufällig von dem unterscheidet, was auf der Grundlage der Summe der Arbeitsfähigkeiten jeder Gruppe vorhergesagt wird. Der Wert von cvist eine typische proportionale Variation; Zum Beispiel , die gegeben entspricht dabei eine typische 10% Variation (die über 30% in wenigen Fällen reichen könnte).0.10

  • Schaffen Sie eine Belegschaft von Menschen mit unterschiedlichen Arbeitsfähigkeiten. Die hier angegebenen Parameter für die Berechnung proficiencyerzeugen einen Bereich von über 4: 1 zwischen den besten und den schlechtesten Arbeitnehmern (was meiner Erfahrung nach für Technologie- und Berufsjobs sogar etwas eng sein kann, für Routinefertigungsjobs jedoch möglicherweise weitreichend ist).

Lassen Sie uns mit dieser synthetischen Belegschaft ihre Arbeit simulieren . Dies bedeutet, schedulefür jede Beobachtung eine Gruppe von jedem Arbeiter ( ) zu erstellen (wobei alle Beobachtungen eliminiert werden, an denen überhaupt keine Arbeiter beteiligt waren), die Fähigkeiten der Arbeiter in jeder Gruppe zu summieren und diese Summe mit einem zufälligen Wert zu multiplizieren (Mittelwert genau ), um die unvermeidlichen Abweichungen widerzuspiegeln. (Wenn es überhaupt keine Variation gäbe, würden wir diese Frage auf die Mathematik-Website verweisen, wo die Befragten darauf hinweisen könnten, dass dieses Problem nur ein Satz simultaner linearer Gleichungen ist, die genau für die Fähigkeiten gelöst werden könnten.)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)

Ich habe festgestellt, dass es praktisch ist, alle Arbeitsgruppendaten zur Analyse in einem einzigen Datenrahmen zusammenzufassen, aber die Arbeitswerte getrennt zu halten:

data <- data.frame(schedule)

Hier würden wir mit realen Daten beginnen: Wir würden die Worker-Gruppierung durch data(oder schedule) und die beobachteten Arbeitsausgaben im workArray codieren lassen .

Leider, wenn einige Arbeiter immer gepaart sind, Rist lmProzedur fehlschlägt einfach mit einem Fehler. Wir sollten zuerst nach solchen Paarungen suchen. Eine Möglichkeit besteht darin, perfekt korrelierte Mitarbeiter im Zeitplan zu finden:

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

In der Ausgabe werden Paare von immer gepaarten Arbeitern aufgelistet: Dies kann verwendet werden, um diese Arbeiter zu Gruppen zusammenzufassen, da wir zumindest die Produktivität jeder Gruppe schätzen können , wenn nicht die Einzelpersonen darin. Wir hoffen, es spuckt einfach aus character(0). Nehmen wir an, dass dies der Fall ist.

Ein subtiler Punkt, der in der vorstehenden Erklärung impliziert ist, ist, dass die Variation in der durchgeführten Arbeit multiplikativ und nicht additiv ist. Dies ist realistisch: Die Variation der Leistung einer großen Gruppe von Arbeitnehmern wird im absoluten Maßstab größer sein als die Variation in kleineren Gruppen. Dementsprechend erhalten wir bessere Schätzungen, wenn wir gewichtete kleinste Quadrate anstelle gewöhnlicher kleinster Quadrate verwenden. Die besten Gewichte für dieses Modell sind die Kehrwerte der Arbeitsbeträge. (Für den Fall, dass einige Arbeitsbeträge Null sind, fummele ich dies durch Hinzufügen eines kleinen Betrags, um eine Division durch Null zu vermeiden.)

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

Dies sollte nur ein oder zwei Sekunden dauern.

Bevor wir fortfahren, sollten wir einige diagnostische Tests der Passform durchführen. Obwohl die Erörterung dieser Fragen uns hier zu weit führen würde, ist ein RBefehl zur Erstellung nützlicher Diagnosen

plot(fit)

(Dies dauert einige Sekunden: Es ist ein großer Datensatz!)

Obwohl diese wenigen Codezeilen die ganze Arbeit erledigen und die geschätzten Fähigkeiten für jeden Mitarbeiter ausspucken, möchten wir nicht alle 1000 Ausgabezeilen durchsuchen - zumindest nicht sofort. Verwenden wir Grafiken, um die Ergebnisse anzuzeigen .

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

Das Histogramm (unteres linkes Feld in der Abbildung unten) zeigt die Unterschiede zwischen den geschätzten und tatsächlichen Fähigkeiten, ausgedrückt als Vielfache des Standardschätzungsfehlers. Für eine gute Prozedur liegen diese Werte fast immer zwischen und und sind symmetrisch um . Bei 1000 beteiligten Arbeitnehmern erwarten wir jedoch, dass einige dieser standardisierten Unterschiede und sogar von2 0 3 4 0220340. Genau das ist hier der Fall: Das Histogramm ist so hübsch, wie man es sich erhoffen kann. (Eines könnte natürlich schön sein: Es handelt sich schließlich um simulierte Daten. Die Symmetrie bestätigt jedoch, dass die Gewichte ihre Arbeit korrekt ausführen. Die Verwendung der falschen Gewichte führt tendenziell zu einem asymmetrischen Histogramm.)

Das Streudiagramm (unteres rechtes Feld der Abbildung) vergleicht die geschätzten Fähigkeiten direkt mit den tatsächlichen. Natürlich wäre dies in der Realität nicht verfügbar, da wir die tatsächlichen Fähigkeiten nicht kennen: Hierin liegt die Leistungsfähigkeit der Computersimulation. Beobachten:

  • Wenn es keine zufällige Variation in der Arbeit gegeben hätte (setzen Sie cv=0den Code und führen Sie ihn erneut aus, um dies zu sehen), wäre das Streudiagramm eine perfekte diagonale Linie. Alle Schätzungen wären vollkommen genau. Somit spiegelt die hier gezeigte Streuung diese Variation wider.

  • Gelegentlich ist ein geschätzter Wert ziemlich weit vom tatsächlichen Wert entfernt. Zum Beispiel gibt es einen Punkt in der Nähe von (110, 160), an dem die geschätzte Befähigung etwa 50% höher ist als die tatsächliche Befähigung. Dies ist bei großen Datenmengen fast unvermeidlich. Denken Sie daran, wenn die Schätzungen individuell verwendet werden, z. B. zur Bewertung von Arbeitnehmern. Im Großen und Ganzen mögen diese Schätzungen ausgezeichnet sein, aber in dem Maße, in dem die Variation der Arbeitsproduktivität auf Ursachen zurückzuführen ist, die außerhalb der Kontrolle eines Einzelnen liegen, sind die Schätzungen für einige der Arbeitnehmer falsch: einige zu hoch, andere zu niedrig. Und es gibt keine Möglichkeit, genau zu sagen, wer betroffen ist.

Hier sind die vier Diagramme, die während dieses Vorgangs erstellt wurden.

Grundstücke

Beachten Sie schließlich, dass diese Regressionsmethode leicht an die Steuerung anderer Variablen angepasst werden kann, die plausibel mit der Gruppenproduktivität verbunden sein könnten. Dies können die Gruppengröße, die Dauer jedes Arbeitsaufwands, eine Zeitvariable, ein Faktor für den Manager jeder Gruppe usw. sein. Fügen Sie sie einfach als zusätzliche Variablen in die Regression ein.

whuber
quelle
Wow, das ist eine Menge zu beachten. Ich glaube, ich bin mir nicht sicher, wie ich anhand dieser Diagramme erkennen kann, wer die am härtesten arbeitenden Arbeiter sind.
Greg Guida
Sind die Diagramme pro Mitarbeiter?
Greg Guida
Das untere rechte Feld zeigt alle 1.000 Schätzungen. Der höchste Wert liegt bei 200: Er erscheint ganz rechts. Das Kompetenzhistogramm und das Resthistogramm zeigen auch die Ergebnisse für 1.000 Arbeitnehmer. Das obere rechte Feld, ein Histogramm der Arbeit, zeigt die Gesamtarbeitsmenge für fast 5.000 Jobs an.
whuber
Ok, ich verstehe die Bedeutung der einzelnen Diagramme, bin mir aber nicht sicher, wie ich sie verwenden soll, um die Arbeiter einzustufen.
Greg Guida
Von oben nach unten im unteren rechten Bereich. Der Code erstellt auch eine Tabelle dieser Ergebnisse (aufgerufen results): Sie können sie nach dem geschätzten Wert sortieren. Sie können es in eine Tabelle usw.
exportieren
7

Sie möchten Ihre Daten wie folgt einrichten, wobei 1 angibt, dass die Person Teil des Teams war, das die Arbeit dieser Zeile ausgeführt hat:

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

Dann können Sie einfach eine lineare Regression durchführen (vorausgesetzt, alles ist additiv usw., wie Sie in den Kommentaren erwähnt haben). In Rwäre der Befehl

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

Die "Formel" work.done ~ . + 0besagt auf Englisch, dass der Umfang der geleisteten Arbeit von allen anderen Spalten abhängt (das ist das ".") Und dass Gruppen ohne Arbeiter keine Arbeit machen würden (das ist das "+ 0"). Dies gibt Ihnen den ungefähren Beitrag jedes Arbeitnehmers zur durchschnittlichen Gruppenleistung.

Wie in den Kommentaren erläutert, unterscheidet das Modell die Beiträge der beiden Mitarbeiter nicht voneinander, wenn Sie zwei Mitarbeiter haben, die immer zusammen sind, und einer von ihnen erhält eine "NA".

David J. Harris
quelle
Ist es wichtig, dass es 1000 Arbeiter gibt? Was meint er mit Gruppen von 1-100? Selbst mit den Klarstellungen aus den 2 Änderungen sehe ich nicht, wo jeder Datensatz die Personen in der Gruppe identifiziert? Ich weiß nur, dass jede Person jeden Tag ungefähr die gleiche Menge arbeitet. Da einige von Ihnen der Meinung sind, dass es eine Lösung gibt, die möglicherweise explizit durch Regression erfolgt, was sind die zugrunde liegenden Annahmen und wie ist die Arbeit einer Person identifizierbar? Ich bin auch verwirrt über die Diskussion über kooperative Arbeit. Nirgendwo wird etwas anderes angenommen, als unabhängig zu arbeiten.
Michael R. Chernick
Die einzige Einschränkung, die ich sehe, ist, dass jede Person es irgendwie schafft, über eine große Anzahl von Versuchen die gleiche Menge an Arbeit zu erledigen? Es scheint, als würden wir versuchen, das nicht in etwas Vernünftiges zu übersetzen. Aber ist es klar, dass dies das ist, was das OP beabsichtigt hat?
Michael R. Chernick
@ MichaelChernick Ich bin nicht sicher, ob ich Ihr Anliegen verstehe. Ist es so, dass dieselbe Person unterschiedliche Beträge für verschiedene Studien beitragen könnte, oder steckt mehr dahinter?
David J. Harris
@ DavidHarris Ich denke, Sie haben eine gute Lösung, wenn Ihre Annahmen richtig sind. Aber ich mache mir Sorgen um die Identifizierbarkeit jeder Person mit so vielen Arbeitnehmern. Das OP glaubt, dass die große Stichprobengröße hilft. Aber es muss eine Struktur geben, wie Sie sie angegeben haben, und einige Modellannahmen. Ich glaube einfach nicht, dass er alles spezifiziert hat, was wir brauchen, um das Problem zu lösen.
Michael R. Chernick
@MichaelChernick Ich denke, wenn wir davon ausgehen, dass die Arbeiter unabhängig sind, ist ein lineares Modell ziemlich sicher, und die Linearität schützt uns auch vor einigen Problemen, auf die wir stoßen könnten. whuber hat wohl recht mit der gewichtung, was helfen würde. Zufällige Effekte für Arbeiter und Gruppen könnten dazu beitragen, die Parameterschätzungen bei Problemen mit der Identifizierbarkeit vernünftig zu halten. Es gibt wahrscheinlich weitere Verbesserungen, die vorgenommen werden könnten, aber ich denke immer noch, dass dies auf dem richtigen Weg ist, vorausgesetzt, die Arbeitnehmer sind im Wesentlichen unabhängig.
David J. Harris