Nie znam się na statystykach, więc trzymaj się mnie. Powiedzmy, że mam zestaw 1000 pracowników. Chcę dowiedzieć się, kto jest najcięższym pracownikiem, ale mogę tylko zmierzyć ilość pracy wykonywanej w grupach 1-100 w ciągu godziny pracy. Zakładając, że każdy pracownik zawsze wykonuje taką samą ilość pracy, czy w ramach dużej liczby prób i kombinacji mogę uszeregować moich pracowników według tego, kto najciężej pracuje?
Uwaga: to tylko metafora, więc nie martw się faktycznym uruchomieniem testów, po prostu załóż, że mam już duży zestaw danych.
Edycja: Kiedy mówię „Zakładając, że każdy pracownik zawsze wykonuje tę samą pracę”, mam na myśli, że każda osoba wykonuje tę samą pracę każdego dnia. Joey wykona więc około 100 jednostek pracy każdego dnia, a Greg wykona około 50 jednostek. Problem polega na tym, że mogę obserwować tylko liczbę jednostek pracy wykonanych przez grupę.
Więcej zmian: w odniesieniu do liczby pracowników pracujących jednocześnie i częstotliwości ich pracy. Jednocześnie może pracować dowolna liczba pracowników. Niektórzy pracownicy prawdopodobnie ostatecznie będą pracować dużo więcej niż inni, to znaczy możemy założyć, że niektórzy pracownicy będą pracować prawie 90% czasu, a inni prawie nigdy.
Wiem, że to utrudnia, ale będę miał bardzo duży zestaw danych, więc mam nadzieję, że to trochę ułatwi.
Co godzinę wiemy, którzy pracownicy pracują i ile pracy wykonano. Na podstawie tych informacji chcę dowiedzieć się, kto wykonuje najwięcej pracy.
Gdyby dane były w formacie JSON, wyglądałoby to mniej więcej tak:
[
{
"work_done": 12345,
"Workers": [ "andy", "bob", "cameron", "david" ]
},
{
"work_done": 432,
"Workers": [ "steve", "joe", "andy"]
},
{
"work_done": 59042,
"Workers": [ "bob", "aaron", "michelle", "scott", "henry" ]
},
...
]
źródło
Odpowiedzi:
David Harris udzielił świetnej odpowiedzi , ale ponieważ pytanie wciąż jest edytowane, być może pomogłoby to zobaczyć szczegóły jego rozwiązania. Najważniejsze cechy poniższej analizy to:
Ważone najmniejsze kwadraty są prawdopodobnie bardziej odpowiednie niż zwykłe najmniejsze kwadraty.
Ponieważ szacunki mogą odzwierciedlać różnice produktywności poza kontrolą jakiejkolwiek osoby, należy zachować ostrożność, używając ich do oceny poszczególnych pracowników.
Aby to zrobić, utwórzmy realistyczne dane przy użyciu określonych formuł, abyśmy mogli ocenić dokładność rozwiązania. Odbywa się to za pomocą
R
:W tych początkowych krokach:
Ustaw ziarno dla generatora liczb losowych, aby każdy mógł dokładnie odtworzyć wyniki.
Określ, ilu jest pracowników
n.names
.Podaj oczekiwaną liczbę pracowników w grupie z
groupSize
.Określ, ile przypadków (obserwacji) jest dostępnych
n.cases
. (Później kilka z nich zostanie wyeliminowanych, ponieważ odpowiadają przypadkowo żadnemu z pracowników naszej syntetycznej siły roboczej).Ustal, aby ilość pracy różniła się losowo od przewidywanej na podstawie sumy „umiejętności” każdej grupy. Wartość0,10
cv
jest typową odmianą proporcjonalną; Na przykład podana tutaj wartość odpowiada typowej 10% zmienności (która w niektórych przypadkach może przekraczać 30%).Stwórz siłę roboczą osób o różnych umiejętnościach pracy. Podane tutaj parametry obliczeniowe
proficiency
tworzą zakres ponad 4: 1 między najlepszymi i najgorszymi pracownikami (co z mojego doświadczenia może być nawet nieco wąskie dla prac technologicznych i zawodowych, ale być może jest szerokie dla rutynowych zadań produkcyjnych).Mając tę syntetyczną siłę roboczą pod ręką, symulujmy ich pracę . Sprowadza się to do utworzenia grupy każdego pracownika (1
schedule
) dla każdej obserwacji (eliminując wszelkie obserwacje, w których w ogóle nie uczestniczyli pracownicy), sumując umiejętności pracowników w każdej grupie i mnożąc tę sumę przez wartość losową (średnio dokładnie ) w celu odzwierciedlenia zmian, które nieuchronnie wystąpią. (Gdyby w ogóle nie było żadnych zmian, odesłalibyśmy to pytanie na stronę Matematyki, gdzie respondenci mogliby wskazać, że ten problem to tylko zestaw równań liniowych, które można rozwiązać dokładnie dla biegłości.)Odkryłem, że wygodnie jest umieścić wszystkie dane grupy roboczej w jednej ramce danych do analizy, ale zachować wartości pracy osobno:
W tym miejscu zaczęlibyśmy od rzeczywistych danych: grupowanie pracowników byłoby zakodowane przez
data
(lubschedule
), a obserwowane wyniki pracy wwork
tablicy.Niestety, jeśli niektórzy pracownicy są zawsze w parze,
R
jestlm
procedura po prostu nie powiedzie się z powodu błędu. Najpierw powinniśmy sprawdzić takie pary. Jednym ze sposobów jest znalezienie doskonale skorelowanych pracowników w harmonogramie:W wyniku wyszczególnione zostaną pary zawsze sparowanych pracowników: można tego użyć do połączenia tych pracowników w grupy, ponieważ przynajmniej możemy oszacować produktywność każdej grupy, jeśli nie poszczególnych osób w jej obrębie. Mamy nadzieję, że po prostu wypluje
character(0)
. Załóżmy, że tak.Jednym subtelnym punktem, wynikającym z powyższego wyjaśnienia, jest to, że zmienność wykonywanej pracy jest multiplikatywna, a nie addytywna. Jest to realistyczne: zróżnicowanie wydajności dużej grupy pracowników, w skali bezwzględnej, będzie większe niż zróżnicowanie w mniejszych grupach. W związku z tym uzyskamy lepsze oszacowania, stosując ważone najmniejsze kwadraty zamiast zwykłych najmniejszych kwadratów. Najlepszymi wagami do zastosowania w tym konkretnym modelu są odwrotności kwot pracy. (W przypadku, gdy niektóre kwoty pracy wynoszą zero, fałszuję to, dodając niewielką ilość, aby uniknąć dzielenia przez zero).
Powinno to zająć tylko jedną lub dwie sekundy.
Przed kontynuowaniem powinniśmy wykonać testy diagnostyczne dopasowania. Chociaż omawianie ich zabrałoby nas tutaj zbyt daleko, jedno
R
polecenie do stworzenia użytecznej diagnostyki to(Zajmie to kilka sekund: to duży zestaw danych!)
Chociaż te kilka wierszy kodu wykonuje całą pracę i wyrzuca szacunkowe biegłości dla każdego pracownika, nie chcielibyśmy skanować wszystkich 1000 wierszy wyników - przynajmniej nie od razu. Użyjmy grafiki do wyświetlenia wyników .
Histogram (lewy dolny panel na poniższym rysunku) przedstawia różnice między szacunkową a rzeczywistą biegłością, wyrażone jako wielokrotność standardowego błędu oszacowania. Dla dobrej procedury wartości te prawie zawsze będą zawierać się między a i będą symetrycznie rozmieszczone wokół . Jednak przy zaangażowaniu 1000 pracowników w pełni spodziewamy się, że kilka z tych standardowych różnic rozciąga się na a nawet na- 2 2) 0 3) 4 0 . Dokładnie tak jest w tym przypadku: histogram jest tak ładny, jak można by oczekiwać. (Można oczywiście powiedzieć, że to miłe: w końcu są to dane symulowane. Ale symetria potwierdza, że odważniki wykonują swoją pracę poprawnie. Użycie niewłaściwych odważników spowoduje tendencję do tworzenia asymetrycznego histogramu.)
Wykres rozrzutu (prawy dolny panel rysunku) bezpośrednio porównuje szacunkowe sprawności z rzeczywistymi. Oczywiście nie byłoby to możliwe w rzeczywistości, ponieważ nie znamy faktycznych biegłości: w tym tkwi siła symulacji komputerowej. Przestrzegać:
Gdyby nie było przypadkowych zmian w pracy (ustaw
cv=0
i ponownie uruchom kod, aby to zobaczyć), wykres rozproszenia byłby idealną ukośną linią. Wszystkie szacunki byłyby całkowicie dokładne. Widoczny tutaj rozproszenie odzwierciedla zatem tę zmianę.Czasami oszacowana wartość jest dość daleka od wartości rzeczywistej. Na przykład, istnieje jeden punkt w pobliżu (110, 160), w którym szacowana biegłość jest o około 50% większa niż faktyczna biegłość. Jest to prawie nieuniknione w przypadku dużej partii danych. Pamiętaj o tym, jeśli szacunki będą wykorzystywane indywidualnie , na przykład do oceny pracowników. Ogólnie rzecz biorąc, te szacunki mogą być doskonałe, ale w zakresie, w jakim zróżnicowanie wydajności pracy jest spowodowane przyczynami niezależnymi od jakiejkolwiek osoby, wówczas dla niektórych pracowników oszacowania będą błędne: niektórzy za wysoko, inni za nisko. I nie ma sposobu, aby dokładnie powiedzieć, kogo to dotyczy.
Oto cztery wykresy wygenerowane podczas tego procesu.
Na koniec zauważ, że ta metoda regresji jest łatwo przystosowana do kontrolowania innych zmiennych, które prawdopodobnie mogą być związane z produktywnością grupy. Mogą one obejmować wielkość grupy, czas trwania każdego wysiłku, zmienną czasową, czynnik dla kierownika każdej grupy i tak dalej. Wystarczy uwzględnić je jako dodatkowe zmienne w regresji.
źródło
results
): możesz sortować według wartości szacunkowej. Możesz go wyeksportować do arkusza kalkulacyjnego itp.Chcesz skonfigurować swoje dane w taki sposób, przy czym 1 oznacza, że dana osoba była częścią zespołu, który wykonał pracę w tym wierszu:
Następnie możesz po prostu wykonać regresję liniową (zakładając, że wszystko jest addytywne itp., Jak wspomniano w komentarzach). W
R
, polecenie byłobylm(work.done ~ . + 0, data = my.data)
„Formuła”
work.done ~ . + 0
mówi po angielsku, że ilość wykonanej pracy zależy od wszystkich pozostałych kolumn (to jest „.”) I że grupy bez pracowników nie wykonałyby żadnej pracy (to jest „+ 0”). To da ci przybliżony wkład każdego pracownika w średnią produkcję grupową.Jak omówiono w komentarzach, jeśli masz parę pracowników, którzy są zawsze razem, model nie będzie rozróżniał wkładów dwóch pracowników od siebie, a jeden z nich otrzyma „NA”.
źródło