Je ne connais pas grand-chose aux statistiques, alors restez avec moi. Disons que j'ai un ensemble de 1000 travailleurs. Je veux savoir qui est le travailleur le plus acharné, mais je ne peux mesurer que la quantité de travail effectuée en groupes de 1 à 100 personnes sur une heure de travail. En supposant que chaque travailleur effectue toujours la même quantité de travail, sur un grand nombre d'essais et de combinaisons, puis-je classer mes travailleurs en fonction de ceux qui travaillent le plus?
Remarque: ce n'est qu'une métaphore, alors ne vous inquiétez pas de l'exécution des tests, supposez simplement que j'ai déjà un grand ensemble de données.
Edit: Quand je dis «en supposant que chaque travailleur effectue toujours la même quantité de travail», je veux dire que chaque individu effectue environ la même quantité de travail au jour le jour. Ainsi, Joey fera environ 100 unités de travail chaque jour et Greg en fera environ 50. Le problème est que je ne peux observer que le nombre d'unités de travail effectuées par le groupe.
Plus de modifications: en ce qui concerne le nombre de travailleurs travaillant simultanément et leur fréquence de travail. Il pourrait y avoir un nombre illimité de travailleurs travaillant en même temps. Certains travailleurs finiront probablement par travailler beaucoup plus que d'autres, c'est-à-dire que nous pouvons supposer que certains travailleurs travailleront presque 90% du temps et d'autres presque jamais.
Je sais que cela rend les choses difficiles, mais j'aurai un très grand ensemble de données, donc j'espère que cela le rendra un peu plus facile.
Pour chaque heure, nous savons quels travailleurs travaillent et combien de travail a été fait. À partir de ces informations, je veux savoir qui fait le plus de travail.
Si les données étaient au format JSON, cela ressemblerait à ceci:
[
{
"work_done": 12345,
"Workers": [ "andy", "bob", "cameron", "david" ]
},
{
"work_done": 432,
"Workers": [ "steve", "joe", "andy"]
},
{
"work_done": 59042,
"Workers": [ "bob", "aaron", "michelle", "scott", "henry" ]
},
...
]
la source
Réponses:
David Harris a fourni une excellente réponse , mais comme la question continue d'être modifiée, il serait peut-être utile de voir les détails de sa solution. Les points saillants de l'analyse suivante sont les suivants:
Les moindres carrés pondérés sont probablement plus appropriés que les moindres carrés ordinaires.
Étant donné que les estimations peuvent refléter des variations de productivité indépendantes de la volonté de tout individu, soyez prudent lorsque vous les utilisez pour évaluer des travailleurs individuels.
Pour ce faire, créons des données réalistes à l' aide de formules spécifiées afin d'évaluer la précision de la solution. Cela se fait avec
R
:Dans ces étapes initiales, nous:
Définissez une valeur de départ pour le générateur de nombres aléatoires afin que n'importe qui puisse reproduire exactement les résultats.
Précisez le nombre de travailleurs avec
n.names
.Déterminez le nombre prévu de travailleurs par groupe avec
groupSize
.Spécifiez le nombre de cas (observations) disponibles avec
n.cases
. (Plus tard, certains d'entre eux seront éliminés car ils ne correspondent, comme cela arrive au hasard, à aucun des travailleurs de notre main-d'œuvre synthétique.)cv
Créez une main-d'œuvre composée de personnes aux compétences professionnelles variées. Les paramètres donnés ici pour l'informatique
proficiency
créent une plage de plus de 4: 1 entre les meilleurs et les pires travailleurs (ce qui, selon mon expérience, peut même être un peu étroit pour les emplois technologiques et professionnels, mais peut-être est large pour les emplois de fabrication de routine).schedule
J'ai trouvé qu'il était pratique de mettre toutes les données du groupe de travail dans une seule trame de données pour l'analyse, mais de garder les valeurs de travail séparées:
C'est là que nous commencerions avec des données réelles: nous aurions le groupe de travailleurs encodé par
data
(ouschedule
) et les sorties de travail observées dans lework
tableau.Malheureusement, si certains travailleurs sont toujours jumelés,
R
lalm
procédure de échoue simplement avec une erreur. Nous devons d'abord vérifier ces appariements. Une façon consiste à trouver des travailleurs parfaitement corrélés dans le calendrier:La sortie listera des paires de travailleurs toujours appariés: cela peut être utilisé pour combiner ces travailleurs en groupes, car au moins nous pouvons estimer la productivité de chaque groupe, sinon les individus qui le composent. Nous espérons que ça crache
character(0)
. Supposons que ce soit le cas.Un point subtil, implicite dans l'explication qui précède, est que la variation du travail effectué est multiplicative et non additive. Ceci est réaliste: la variation de la production d'un grand groupe de travailleurs sera, sur une échelle absolue, plus grande que la variation dans des groupes plus petits. Par conséquent, nous obtiendrons de meilleures estimations en utilisant les moindres carrés pondérés plutôt que les moindres carrés ordinaires. Les meilleurs poids à utiliser dans ce modèle particulier sont les inverses des montants de travail. (Dans le cas où certains montants de travail sont nuls, je fausse ceci en ajoutant un petit montant pour éviter de diviser par zéro.)
Cela ne devrait prendre qu'une ou deux secondes.
Avant de continuer, nous devons effectuer des tests de diagnostic de l'ajustement. Bien que les discuter nous mènerait trop loin ici, une
R
commande pour produire des diagnostics utiles est(Cela prendra quelques secondes: c'est un grand ensemble de données!)
Bien que ces quelques lignes de code fassent tout le travail et génèrent des compétences estimées pour chaque travailleur, nous ne voudrions pas parcourir les 1000 lignes de sortie - du moins pas tout de suite. Utilisons graphiques pour afficher les résultats .
Le nuage de points (panneau inférieur droit de la figure) compare directement les compétences estimées aux compétences réelles. Bien sûr, cela ne serait pas disponible dans la réalité, car nous ne connaissons pas les compétences réelles: c'est là que réside la puissance de la simulation informatique. Observer:
S'il n'y avait pas eu de variation aléatoire dans le travail (définir
cv=0
et réexécuter le code pour le voir), le nuage de points serait une ligne diagonale parfaite. Toutes les estimations seraient parfaitement exactes. Ainsi, la dispersion observée ici reflète cette variation.Parfois, une valeur estimée est assez éloignée de la valeur réelle. Par exemple, il y a un point près (110, 160) où la compétence estimée est environ 50% supérieure à la compétence réelle. Cela est presque inévitable dans tout grand lot de données. Gardez cela à l'esprit si les estimations seront utilisées sur une base individuelle , par exemple pour évaluer les travailleurs. Dans l'ensemble, ces estimations peuvent être excellentes, mais dans la mesure où la variation de la productivité du travail est due à des causes indépendantes de la volonté de tout individu, alors pour quelques-uns des travailleurs, les estimations seront erronées: certaines trop élevées, d'autres trop faibles. Et il n'y a aucun moyen de dire précisément qui est touché.
Voici les quatre graphiques générés au cours de ce processus.
Enfin, notez que cette méthode de régression est facilement adaptée pour contrôler d'autres variables qui pourraient vraisemblablement être associées à la productivité du groupe. Il peut s'agir de la taille du groupe, de la durée de chaque effort de travail, d'une variable de temps, d'un facteur pour le responsable de chaque groupe, etc. Il suffit de les inclure comme variables supplémentaires dans la régression.
la source
results
): vous pouvez le trier par valeur estimée. Vous pouvez l'exporter vers une feuille de calcul, etc.Vous souhaitez configurer vos données comme ceci, 1 indiquant que la personne faisait partie de l'équipe qui a effectué le travail de cette ligne:
Ensuite, vous pouvez simplement faire une régression linéaire (en supposant que tout est additif, etc., comme vous l'avez mentionné dans les commentaires). Dans
R
, la commande seraitlm(work.done ~ . + 0, data = my.data)
La "formule"
work.done ~ . + 0
indique, en anglais, que la quantité de travail effectuée dépend de toutes les autres colonnes (c'est le ".") Et que les groupes sans travailleurs ne feraient aucun travail (c'est le "+ 0"). Cela vous donnera la contribution approximative de chaque travailleur à la production moyenne du groupe.Comme discuté dans les commentaires, si vous avez une paire de travailleurs qui sont toujours ensemble, le modèle ne fera pas la distinction entre les contributions des deux travailleurs et l'un d'eux obtiendra un "NA".
la source