توسعه دهنده نرم افزار
تحلیل داده های مدیریت عملکرد - همراه با کدهای مربوطه
بخش منابع انسانی چطور میتونه به سازمان زمان برگردونه؟ یه راه عالی برای صرفهجویی در زمان، حذف فرآیند رسمی مدیریت عملکرده. این ایدهها همیشه تو جلسات مدیریتی مطرح میشه و در واقع، چندتا شرکت هم همین روش رو پیش گرفتن.
به عنوان مثال درسازمانی حساب کردن کل کارای مربوط به مدیریت عملکرد برای هر کارمند، حدود ۱۰ ساعت برای مدیر و کارمند زمان میبره (شامل آمادهسازی، دو جلسه رسمی تو سال، تکمیل فرمهای آنلاین، جلسه با منابع انسانی برای بررسی نتایج و غیره). با سادهسازی فرآیند (بدون جلسات اجباری، فرم، جلسهی بررسی و فقط یه ارزیابی سالانه که مدیر برای هر کارمند ارسال میکنه)، منابع انسانی تونست زمان زیادی رو به سازمان برگردونه (که هم مدیران و هم کارمندان ازش خیلى راضی بودن).
حالا چطور میشه چنین تغییری رو تو یه سازمان اجرا کرد؟ تو این مورد، تجزیه و تحلیل ارزش سربار (OVA) میتونه به کمکمون بیاد. OVA یه تکنیک که برای پیدا کردن فرصتهای کاهش هزینههای سربار استفاده میشه .
این تکنیک مراحل زیر رو شامل میشه:
- مرحله ۱: ایجاد یه بستر اولیه: تو این مرحله، خروجی مورد نیاز، فعالیتهای الزامی و ارزیابی محصول نهایی تعریف میشه.
- مرحله ۲: لیستبندی مرتب فعالیتها و هزینهها: این مرحله شامل تخمین هزینههای ورودی/منابع، هزینههای فعالیتها و تخصیص هزینه به محصولات (معمولا با کمک حسابداری فعالیتمحور - ABC) میشه.
- مرحله ۳: ارزیابی خدمات و خروجی توسط مشتری: تو این مرحله، ضرورت (یعنی حیاتی، مطلوب یا غیرضروری)، کیفیت، کمیت و هزینه خروجی مورد بررسی قرار میگیره. از مشتریان خواسته میشه که هم خروجی فعلی رو ارزیابی کنن و هم پیشنهادهایی برای بهبود ارائه بدن. برای ارزیابی مشتری، هم از مصاحبه و هم از پرسشنامه استفاده میشه.
- مرحله ۴: شناسایی فرصتهای صرفهجویی در هزینه: تیم OVA باید بر اساس بهبودهای شناساییشده، فرصتهای صرفهجویی در هزینه رو پیدا کنه. این کار سازمان رو مجبور میکنه که در مورد اولویتهای خروجی و فعالیتهای مورد نیاز، تصمیمگیری کنه.
- مرحله ۵: اولویتبندی فرصتها: در این مرحله، با استفاده از چهار عنصر استفادهشده در ارزیابی مشتری، فرصتها اولویتبندی میشن:
- آیا فعالیت ارزش افزوده ایجاد میکنه؟
آیا کیفیت خروجی کافی هست؟
آیا کمیت خروجی کافی هست؟
آیا میشه با هزینهی معقول انجامش داد؟ - مرحله ۶: اجرای تغییرات: در نهایت، به عنوان یه پروژهی مستقل، آخرین مرحله اجرای مجموعهی تغییراتیه که در پنج مرحلهی قبلی مورد بحث و تصمیمگیری قرار گرفته.
تو ادامه، هزینه ارزیابی کارکنان (گام دوم تکنیک OVA) رو تحلیل میکنیم. بیایید نگاهی به سازمانی بندازیم که از چارچوب بهایابی بر اساس فعالیت (ABC) استفاده میکنه. سازمانی که در اون، زمان کارکنان به پروژهها و فعالیتهای مختلف اختصاص پیدا میکنه، از جمله زمانی که صرف ارزیابی کارکنان میشه.
تو این تحلیل فقط از کتابخونهی tidyverse استفاده خواهیم کرد.
library(tidyverse)
اول میریم سراغ وارد کردن یه سری داده در مورد زمانی که کارکنان خودشون اعلام کردن صرف ارزیابی کردن دیگران کردن
Time.spent.on.appraisals <- read_csv("Time.spent.on.appraisals.csv")
حدس میزنم میخوای بدونی الان با کدوم روش سر و کار داریم، درونیابی (interpolation) یا رگرسیون خطی (linear regression) ؟
درونیابی یه روشیه برای ساختن نقاط دادهی جدید بر اساس مجموعه نقاط شناختهشدهای که داریم. این نقاط جدید، بین همون نقاط شناختهشده قرار میگیرن.
رگرسیون خطی یه فرایند آماريه که برای تخمین رابطهی بین متغیرها به کار میره.
plot(Hours ~ Count.of.Appraisee, xlab="Number of appraisee", ylab="Hours", data=Time.spent.on.appraisals)
model <- lm(Hours ~ Count.of.Appraisee, data=Time.spent.on.appraisals)
abline(model, col = "red")
کاری انجام شد درواقع یه مدلسازی رگرسیون خطی هست که نمودار خروجیش در زیر نشون داده شده
برای نمایش ضرایب هم می تونیم از کد زیر استفاده کنیم
paste('y =', round(coef(model)[[2]], digits = 3), '* x', '+', round(coef(model)[[1]], digits = 3))
خروجی
[1] "y = 3.362 * x + 49.134"
فرمول y = 3.362 * x + 49.134" چه معنی دارد ؟
این اعداد نشون میدن که هر مدیر به طور میانگین ۴۹ ساعت صرف نظر از تعداد کارمندای تحت نظرش (برای خودارزیابی و به طور کلی فرآیند ارزیابی، مثل خوندن منابع، جلسات مدیریتی، دورههای بهروزرسانی نحوهی ارزیابی کارکنان و آموزش مجدد ابزارهای IT) زمان صرف میکنه. علاوه بر اون، هر مدیر به طور میانگین ۳ ساعت و ۲۰ دقیقه برای ارزیابی هر کارمند زیرمجموعهش، جلسهی اولیه با کارمند و بعد نوشتنِ خودِ ارزیابی، زمان میذاره.
با نگاه کردن به نمودار، به نظر میاد چندتا نقطه پرت (outlier) وجود داره. تو آمار، نقطهی پرت به دادهای گفته میشه که خیلی با بقیهی دادهها فاصله داره. اغلب به خاطر خطای اندازهگیری، نقاط پرت وجود دارن. بنابراین، یکی از مهمترین کارها تو تحلیل داده، شناسایی و در صورت لزوم حذف نقاط پرت است. ثبت زمان با دقت ۱۵ دقیقهای نیازمند توجه زیادی از طرف مدیر است.
در ادامه می خواهیم نقاط پرت را شناسایی و روش مناسبی برای برخورد با هاشون را انتخاب کنیم
m_dist <- mahalanobis(Time.spent.on.appraisals[,2:3], colMeans(Time.spent.on.appraisals[,2:3], na.rm = TRUE), cov(Time.spent.on.appraisals[,2:3], use="complete.obs"))
Time.spent.on.appraisals$m_dist <- round(m_dist, 2)
sort(Time.spent.on.appraisals$m_dist)
فاصلهی Mahalanobis (MD) فاصلهی بین دو نقطه در یک فضای چندمتغیره است. در یک فضای اقلیدسی معمولی، متغیرها (برای مثال x، y، z) توسط محورهایی نمایش داده میشن که با زاویهی قائمه نسبت به هم رسم شدهاند. فاصلهی بین هر دو نقطه رو میشه با خطکش اندازهگیری کرد. اما اگر دو یا چند متغیر همبسته باشند، دیگه محورها با زاویهی قائمه نیستن و اندازهگیری با خطکش غیرممکن میشه. علاوه بر این، اگر بیش از سه متغیر داشته باشید، اصلاً نمیتونید اونها رو تو فضای سهبعدی معمولی رسم کنید. فاصلهی Mahalanobis این مشکل اندازهگیری رو حل میکنه، چون فاصلهی بین نقاط، حتی نقاط همبسته برای چندین متغیر رو اندازهگیری میکنه.
تابع Mahalanobis مجذور فاصلهی Mahalanobis همهی سطرهای x و بردار mu = مرکز رو نسبت به Sigma = cov برمیگردونه. این (برای بردار x) به صورت زیر تعریف میشه:
D^2 = (x - μ)’ Σ^-1 (x - μ)
برای محاسبه و رسم فاصله Mahalanobis از کدهای زیر استفاده می نماییم
Time.spent.on.appraisals$outlier_maha <- "No"
Time.spent.on.appraisals$outlier_maha[Time.spent.on.appraisals$m_dist > 4] <- "Yes"
ggplot(Time.spent.on.appraisals, aes(x = Count.of.Appraisee, y = Hours, color = outlier_maha)) + geom_point(size = 5, alpha = 0.6, na.rm=TRUE) + xlim(0, 40) + ylim(0, 600) +labs(title = "Number of appraisees vs Hours", subtitle = "Outlier Detection in time spent on appraisals data - Using Mahalanobis Distances") +ylab("Hours") + xlab("Number of appraisees")
یکبار دیگه پس از حذف نقاط پرت مدلسازی انجام می دهیم
model_without_mahaoutliers <- lm(Hours ~ Count.of.Appraisee, data=Time.spent.on.appraisals[which(Time.spent.on.appraisals$outlier_maha== "No"),])
paste('y =', round(coef(model_without_mahaoutliers)[[2]], digits = 3), '* x', '+', round(coef(model_without_mahaoutliers)[[1]], digits = 3))
خروجی
[1] "y = 3.741 * x + 30.099"
حالا به نظر میرسه که هر مدیر به طور میانگین 30 ساعت صرف نظر از تعداد کارمندانی که باید ارزیابی کنه، زمان صرف میکنه و به طور جداگانه برای ارزیابی هر کارمند زیرمجموعهش، ۳ ساعت و ۴۷ دقیقه زمان میذاره.
حالا بیایید یه روش دیگه برای حذف نقاط پرت استفاده کنیم، این بار با استفاده از فاصلهی کوک.
Time.spent.on.appraisals <- read_csv("Time.spent.on.appraisals.csv")
plot(Hours ~ Count.of.Appraisee, xlab="Number of appraisee", ylab="Hours", data=Time.spent.on.appraisals)
model <- lm(Hours ~ Count.of.Appraisee, data=Time.spent.on.appraisals)
abline(model, col = "red")
cooksd <- cooks.distance(model)
sample_size <- nrow(Time.spent.on.appraisals)
plot(cooksd, pch="*", cex=2, main="Influential Obs by Cooks distance")
abline(h = 4/sample_size, col="red")
text(x=1:length(cooksd)+1, y=cooksd, labels=ifelse(cooksd>4/sample_size, names(cooksd),""), col="red")
حذف نقاط پرت و نمایش وضعیت قبل و بعد
influential <- as.numeric(names(cooksd)[(cooksd > (4/sample_size))])
Time.spent.on.appraisals_screen <- Time.spent.on.appraisals[-influential, ]
plot3 <- ggplot(data = Time.spent.on.appraisals, aes(x = Count.of.Appraisee, y = Hours)) +geom_point(size = 2, alpha = 0.6, na.rm=TRUE) + xlim(0, 40) + ylim(0, 600) +geom_smooth(method = lm, na.rm=TRUE) +ggtitle("Before")
plot4 <- ggplot(data = Time.spent.on.appraisals_screen, aes(x = Count.of.Appraisee, y = Hours)) + geom_point(size = 2, alpha = 0.6, na.rm=TRUE) + xlim(0, 40) + ylim(0, 600) + geom_smooth(method = lm, na.rm=TRUE) +ggtitle("After")
gridExtra::grid.arrange(plot3, plot4, ncol=2)
مدلسازی مجدد
model_screen <- lm(Hours ~ Count.of.Appraisee, data=Time.spent.on.appraisals_screen)
paste('y =', round(coef(model_screen)[[2]], digits = 3), '* x', '+', round(coef(model_screen)[[1]], digits = 3))
خروجی
[1] "y = 3.741 * x + 30.099"
حالا به نظر میرسه که هر مدیر به طور میانگین ۳۰ ساعت صرف نظر از تعداد کارمندانی که باید ارزیابی کنه، زمان صرف میکنه و به طور جداگانه برای ارزیابی هر کارمند زیرمجموعهش، ۳ ساعت و ۴۵ دقیقه زمان میذاره.
مطلبی دیگر از این انتشارات
رگرسیون خطی به زبان ساده (قسمت اول)
مطلبی دیگر از این انتشارات
هوش مصنوعی در منابع انسانی - قسمت اول
مطلبی دیگر از این انتشارات
هوش مصنوعی در منابع انسانی - قسمت دوم