Data & Analytics

50 pages
268 views

HR Analytics - 퇴직가능성예측모델

of 50
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Share
Description
1. HR Analytics 사례 : 직원의 퇴직가능성 예측 모델 수립 May 2018 Lee, Seong-Bok HPE Korea 2. 본 자료는 DataCamp의 “HR Analytics in Python:…
Transcript
  • 1. HR Analytics 사례 : 직원의 퇴직가능성 예측 모델 수립 May 2018 Lee, Seong-Bok HPE Korea
  • 2. 본 자료는 DataCamp의 “HR Analytics in Python: Predicting Employee Churn” (https://www.datacamp.com/) 과정을 요약 정리한 것입니다. 상세 스크립트는 아래의 Github를 참조하세요. https://github.com/seongboki/hr-analytics 2
  • 3. Agenda 1. Dataset 준비하기 2. 직원 이직가능성 예측 모델 만들기 3. 직원 이직가능성 예측 모델 평가하기 4. 최적의 직원 퇴직가능성 예측 모델 선택하기 3
  • 4. 데이터 분석의 일반적인 절차 4 1. 문제 정의 2. 분석할 데이터 정의 3. 분석계획 수립과 표본데이터 수집 4. 데이터의 취득과 수집 5. 데이터 전처리와 정제 6. 탐색적 데이터 분석 관련 데이터 조사, Null/이상치 제거 등 데이터 분포 확인(그림, 표 등), 시간분석, 지도분석 등 7. 분류 또는 예측 모델 수립 8. 예측작업 수행 Decision Tree, Deep Learning … 직원의 퇴직가능성은 예측가능한가? 성과, 만족도, 근속기간, 급여 , 가족, 출퇴근시간 … 개인별 모델 적용 HRMS, 설문관리 …
  • 5. 1. Dataset 준비하기 표본 HR dataset을 준비하여 기본 통계정보를 확인하고 분석이 가능하도록 데이터를 변환 또는 조작
  • 6. 1) Dataset 불러오기 분석할 데이터셋을 불러온다 6 import pandas as pd data = pd.read_csv("turnover.csv") ① 분석도구(pandas)와 분석할 데이터셋 불러오기 – “turnover.csv” ② 데이터셋의 헤더정보와 샘플 데이터 조회 data.head()
  • 7. 2) 데이터의 변환 분석을 가능하게 하고 의미있게 하기 위해서는 문자형 데이터를 숫자형으로 바꿔줄 필요 department와 salary는 문자형으로 되어 있는데, 이를 컴퓨터가 이해하기 쉬운 숫자형으로 변환하여 데이터 분석 수행 7
  • 8. 범주형 변수(categorical variables)로 변환 1) Ordinal 순서 또는 순위를 매길 수 있는 2개 이상의 카테고리로 된 변수 예) 컬럼 : salary Values : low, medium, high 8 Salary Low Medium High Salary 0 1 2 Department Sales Accounting HR … IT RandID Accn’t HR Mgm’t Mktg … 0 0 0 0 0 1 0 2) Nominal 순서가 없는 2개 이상의 카테고리로 된 변수 예) 컬럼 : department Values: sales, accounting, hr, technical, support, management, IT, product_mng, marketing, RandD
  • 9. ■ Ordinal category로 변환 – “Salary” ① Salary 컬럼의 데이터 유형을 범주(category)로 바꾸기 9 data.salary = data.salary.astype('category') ② 범주 순서 지정하기 ③ 범주 값을 숫자(integer)로 바꾸기 data.salary = data.salary.cat.reorder_categories(['low', 'medium', 'high']) data.salary = data.salary.cat.codes
  • 10. ■ Nominal category로 변환 – “department” ① department를 위한 새로운 DataFrame 생성 10 department = pd.get_dummy(data.department) ② department DataFrame을 기존의 데이터셋(turnover)과 결합 data = data.join(departments) departments라는 새로운 DataFrame에는 10개의 컬럼(부서명)이 만들어졌다. 그러나 0,1의 값으로 10개의 부서를 표현하려면 9개의 컬럼만으로 충분하므로 임의의 컬럼 하나(여기서는 ‘technical’)는 불필요하므로 삭제(dummy trap) departments = departments.drop("technical", axis=1) 이제 기존의 ‘department’ 컬럼은 사용하지 않을 거니 삭제 data = data.drop("department", axis=1)
  • 11. 2. 직원 이직가능성 예측 모델 만들기 Decision tree라는 분류(classification) 기법을 사용하여 직원의 이직가능성을 예측하는 알고리즘(=모델)을 개발
  • 12. 3) 데이터 나누기 수집한 데이터의 전처리(데이터 변환, 가공 등)를 거쳐 분석할 데이터가 준비되었으면, 이제 모델을 만들기 위해 본격적인 작업에 들어간다. 목표(이직가능서 예측)을 위해 목표데이터를 정하고, 모델을 만들기 위한 “훈련(train) 데이터”와 “검증(test) 데이터”로 구분한다. 12 1) 목표(target) 데이터와 feature 데이터 구분 • 목표(target) 데이터 : left(퇴직) • Feature 데이터 : 목표데이터를 설명해줄 나머지 데이터들 2) Train 데이터와 test 데이터의 분리 • Train 데이터: 모델을 만드는 데 사용하는 데이터 • Test 데이터: 모델을 검증하는 데 사용하는 데이터 • 목표 데이터(Target data) = 예측하고자 하는 데이터 = dataset의 특정 컬럼 (여기서는 ‘left’ 컬럼) • 변수 데이터(feature data) = 목표 데이터를 설명하는 데이터들 = dataset에서 목표 데이터를 제외한 컬럼들(또는 그 일부)
  • 13. 데이터를 나누는 방법 13 Train Test Target Target_train Target_test Feature Feature_train Feature_test • Precision(정밀도) 계산 • Recall(재현율) 계산 수립한 모델을 실제 퇴직자들에게 적용하면 어느 정도 똑같은 결과를 재현할 수 있나?(=진짜 퇴직자들 중 예측이 맞을 확률) • Specificity(특이성) 계산 모델을 재직자들에게 적용하면 어느 정도 재현할 수 있나? (재직할 것이라고 예측한 사람들 중 진짜로 재직한 사람을 예측할 확률) 모델 수립과 자체 테스트 수립한 모델을 테스트 데이터에 적용 • Accuracy(정확도) 계산 train 데이터를 가지고 개발한 모델을 test 데이터에 적용하면 얼마나 정확하게 예측할 수 있나? (퇴직자 예측과 재직자 예측의 정확도)
  • 14. ■ 목표데이터와 feature데이터 정의 14 ① 목표데이터와 feature데이터 정의 department = pd.get_dummy(data.department) ② 데이터셋을 train 데이터와 test 데이터로 구분 • 목표데이터 : target_train, target_test • Feature데이터 : features_train, features_test • 테스트 샘플 데이터의 크기 : 전체의 25% Target = data.left Features = data.drop(“left”, axis=1) from sklearn.model_selection import train_test_split target_train, target_test, features_train, features_test = train_test_split(target, features, test_size=0.25)
  • 15. 4) Fitting 15 Overfitting? “train 데이터를 통해 개발한 모델이 train 데이터에서는 잘 작동하지만 train 데이터를 벗어난 test 데이터에서는 유용한 예측 결과를 내지 못하는 오류” 데이터 분류가 끝났으면 분류된 데이터를 fitting. 그런데 이 상태에서 그냥 fitting하면 overfitting이 발생 ➔ Overfitting을 예방하면서 데이터를 분류(classification)하는 방법 • Logistic regression • Support Vector Machines(SVM) • Neural Networks • Decision Tree → 본 실습에서 사용 • 기타 등등
  • 16. ■ 데이터 fitting 16 ① 먼저 Decision tree를 수행할 함수 호출 ② 모델 정의 from sklearn.tree import DecisionTreeClassifier ③ train 데이터의 fitting 작업 수행 model = DecisionTreeClassifier(random_state=42) model.fit(features_train, target_train) ※ 여기서 random_state값인 ’42’는 큰 의미 없음.
  • 17. ■ 예측정확도(accuracy) 점검 17 ① train 데이터에 대한 예측결과의 정확성을 점수로 환산 model.score(features_train, target_train)*100 ② test 데이터에 대한 예측결과의 정확성을 점수로 환산 model.score(features_test, target_test)*100
  • 18. 3. 직원 이직가능성 예측 모델 평가 개발한 모델을 어떻게 평가하여 그것이 ‘좋은’ 것인지를 어떻게 알까? 여러 decision tree를 비교하여 그 중에서 가장 최선의 모델을 선택할 수 있다.
  • 19. 5) 퇴직가능성 classifier 조정 19 이 overfitting을 없애거나 최소한으로 줄여서 (즉, 정확도를 높여서) 좀 더 나은 분류결과(=예측)을 얻기 위해서는 무엇을 조정해야 할까? 1) tree의 최대 단계 수를 제한(예, 5단계까지만 tree 생성) 2) 개별 단계(leaf 또는 node)의 크기를 제한(예, 노드별로 최대 150명만 포함) 앞의 예측정확도(accuracy) 점검 결과를 보면 아래와 같은 overfitting이 발생했다. • training 데이터의 정확도 : 100% • Testing 데이터의 정확도 : 97.65% 2.35%
  • 20. ■ tree의 단계 수(depth) 제한하여 정확도 조정 20 ① tree의 단계 수를 “5”개로 제한하고 모델을 fitting model_depth_5 = DecisionTreeClassifier(max_depth=5, random_state=42) model_depth_5.fit(features_train, target_train) ② train 데이터에 대한 예측결과의 정확성을 점수로 환산 model_depth_5.score(features_train, target_train)*100 ③ test 데이터에 대한 예측결과의 정확성을 점수로 환산 model_depth_5.score(features_test, target_test)*100
  • 21. ■ 노드 크기(=인원 수)를 제한하여 정확도 조정 21 ① 노드의 크기를 “200”명으로 제한하고 모델을 fitting model_sample_200 = DecisionTreeClassifier(min_samples_leaf=200, random_state=42) model_sample_200.fit(features_train, target_train) ② train 데이터에 대한 예측결과의 정확성을 점수로 환산 model_sample_200.score(features_train, target_train)*100 ③ test 데이터에 대한 예측결과의 정확성을 점수로 환산 model_sample_200.score(features_test, target_test)*100 ➔ 위와 같은 방식으로 하면 각각의 정확도는 떨어지지만 두 데이터셋 간의 차이(거리)는 줄어든다. 즉, overfitting이 줄어들면서 더 현실적인 예측모델이 된다.
  • 22. 정확도 결과 비교 22 Train data Test data 거리 기본 모델 (옵션 없음) 100 97.65 2.35 조정 1 (max_depth=5) 97.54 97.49 0.05 조정 2 (min_sample_leaf=200) 95.47 95.44 0.03 ■ 정확도(accuracy)
  • 23. 6) 정확도 외에 모델을 평가하는 지표의 필요성 23 confusion matrix 활용하여 Prediction error 계산 1) 퇴직자에 대한 정확도 평가 → Recall 점수 산정 : 퇴직자인데 퇴직자 아니라고 예측한 비율(FN) 계산 2) 재작자에 대한 정확도 평가 → Specificity 점수 산정 : 퇴직자 아닌데 퇴직자라고 예측한 비율(FP) 계산 지금까지는 정확도(accuracy)만을 계산했다. 그러나 정확도 지표 하나만으로는 최적의 모델을 찾는데 역부족. 왜냐고? 일반적인 Accuracy 점수는 분리된 데이터군(=class, 여기서는 재직자와 퇴직자군) 모두에 관한 정보를 보여줄 수 없기 때문(→ Prediction error 발생) 예) 재직자에 대한 76%의 정확도(accuracy) = "모두가 남아있을"거라는 예측의 정확도가 76%의 확률
  • 24. Confusion Matrix 음과 양(또는 가/부)으로 나뉘는 이상적인 상황에 비해 현실 예측에서 벌어지는 상황 24 이진 분류 문제에서 양성과 음성 데이타를 가지고 있는 데이터가 있다고 하자. 그러나 실제 세계에서 예측할 때는 아래 그림과 같은 상황이 발생한다.
  • 25. Confusion Matrix 25 TP : P인 것을 제대로 P로 예측 TF : N인 것을 제대로 N으로 예측 FP : P가 아닌 것을 P로 잘못 예측(N인데 P로 예측) FN : N이 아닌 것을 N으로 잘못 예측(P인데 N으로 예측) Confusion matrix를 표로 표시하면, Reality Positive(1) Negative(0) Predicted Positive(1) TP FP Negative(0) FN TN
  • 26. Classification 모델 평가지표 26 Accuracy • 전체 데이타중에서, 제대로 분류된 데이타의 비율 • ACC = (TP + TN) / (전체 데이타 수 = P + N) Error Rate • 전체 데이타 중에서 잘못 분류한 비율 • ERR = (FN+FP) / (전체 데이타수 = P+N) Sensitivity (민감도 = Recall;재현율) • 원래 Positive인데 Positive로 분류된 비율 예) 원본 데이타에 암 양성이 100개 있었는데, 모델에서 90개가 분류되었으면, Sensitive Rate = 0.9 • SN = TP / (TP+FN) Precision(정밀성) • Positive로 예측한 내용 중에, 실제 Positive의 비율 • PREC = TP / (TP+FP) Specificity (특이성) • Negative로 예측한 것 중에, 실제 Negative의 비율 • SP = TN / TN+FP False Positive rate • 원래는 Positive 값인데, Negative로 판단한 비율 • FPR = FP / N
  • 27. ■ 정밀도(precision) 계산 𝑷𝒓𝒆𝒄𝒊𝒔𝒊𝒐𝒏 = 𝑻𝒓𝒖𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔 𝑻𝒓𝒖𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔 + 𝑭𝒂𝒍𝒔𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔 27 ① 정밀도를 계산할 함수 호출 From sklearn.metrics import precision_score ② features 데이터를 이용해서 직원의 퇴직율 예측 prediction = model.predict(features_test) ③ target 데이터에 적용하여 정밀도 점수 계산 precision_score(target_test, prediction)
  • 28. ■ 재현율(recall = sensitivity) 계산 𝑹𝒆𝒄𝒂𝒍𝒍 = 𝑻𝒓𝒖𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔 𝑻𝒓𝒖𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔 + 𝑭𝒂𝒍𝒔𝒆 𝑵𝒆𝒈𝒂𝒕𝒊𝒗𝒆𝒔 28 ① 재현율을 계산할 함수 호출 From sklearn.metrics import recall_score ② features 데이터를 이용해서 직원의 퇴직율 예측 prediction = model.predict(features_test) ③ target 데이터에 적용하여 정밀도 점수 계산 recall_score(target_test, prediction)
  • 29. 7) 재현율(recall = sensitivity) 보완 29 여기서는 퇴직가능성을 예측하는 것이므로 퇴직자를 대상(목표)로 하는 recall 점수를 가지고 예측에 사용할 수 있으나, 하나의 분석 대상(class)으로 수립한 예측모델을 다른 분석 대상에 적용하면 예측의 정확도가 매우 떨어질 수 있으므로(퇴직자만 대상이면 recall 점수를, 재직자만 대상이면 specificity 점수만 활용해도 무난) ➔ 그래서 두 분석 대상(재직자, 퇴직자) 모두에 대해 좋은 예측력을 얻기 위해서는 AUC(Area Under Curve) 점수를 사용 AUC 점수 • Recall 점수와 specificity 점수를 동시에 최대화 한 점수로써, • 수직 축 = recall, 수평 축 = 1 – specificity로 하여 ROC라는 곡선을 그리고 • X=Y의 선을 기준선(baseline)으로 하여 기준선 위의 ROC 영역의 점수를 산정 ➔ 예측모델이 recall과 specificity를 동시에 고려하여 정확히 분류할 수 있도록 함
  • 30. ■ AUC 점수 계산 30 ① ROC와 AUC를 계산하는 함수 호출 From sklearn.metrics import roc_auc_score ② features 데이터를 이용해서 직원의 퇴직율 예측 prediction = model.predict(features_test) ③ target 데이터에 적용하여 ROC와 AUC 점수 계산 roc_auc_score(target_test, prediction)
  • 31. AUC 점수란? 31 그럼 ROC curve란? • 적중확률(Y축=알맞게 분류한 것=True Positive rate) 대 오류확률(X축=잘못 분류한 것=False Positive rate)의 그래프로 • 분류모델이 알맞게 예측했는지에 대한 그래프 • 분류모델에서는 결과가 Y일 확률 또는 점수를 계산하여, 점수가 특정 기준을 넘으면 Y로, 기준을 넘지 않으면 N으로 예측값을 출력 • 그래프가 위로 갈 수록 좋은 모델이고, 적어도 Y=X 그래프보다 위에 있어야 어느정도 쓸모 있는 모델 <출처: http://bcho.tistory.com/1206 [조대협의 블로그]> AUC 점수 = ROC curve의 정확도를 나타내는 점수
  • 32. ROC curve를 이용한 알고리즘 정확도 기준 32 ROC curve을 이용해 알고리즘의 정확도를 판단하려면 AUC(Area Under Curve)의 넓이를 알아야 함. AUC는 ROC에서 곡선의 아래부분 면적 옆의 그램에서 빗금 친 부분의 넓이가 AUC이고, 이것이 알고리즘 정확도를 판단하는 기준 • 0.9 ~ 1 → Excellent • 0.8 ~ 0.9 → Good • 0.7 ~ 0.8 → Normal • 0.6 ~ 0.7 → Poor • 0.5 ~ 0.6 → Fail <출처: http://blog.naver.com/PostView.nhn?blogId=tjdudwo93&logNo=221046150588>
  • 33. 8) Class Imbalance 33 그러나 지금까지의 분석은 이 class imbalance 상태에서 이루어진 것임 recall과 precision 점수의 차이에서 봤듯이, class imbalance는 예측결과에 심각한 영향을 미침 class imbalance 문제 해결 방법 • class별로 가중치를 달리 부여하여 균형을 맞춤 • over-sampling • under-sampling • Synthetic Minority Oversampling Technique(SMOTE) ※ Class Imbalance : 분석대상 대조군(class)간의 데이터 차이(imbalance). 주로 양적 차이
  • 34. 8) Class Imbalance 34 class들의 균형을 맞추기 위해서(Balancing classes), 1) 각각의 class(분석대상 군)에 가중치를 부여하고 : class_weight='balanced’ 2) Decision tree에서 불필요한 tree의 가지(=단계)를 줄이는 pruned tree를 사용하여 'balanced model'과 'imbalanced model'을 비교 (여기서는 max_depth=7로 조정) 이렇게 분석대상 데이터 군의 균형을 맞춘 상태에서 Employee attrition 모델의 비교 (즉, imbalanced model과 balanced model 비교) 1) imbalanced model : recall 점수와 ROC/AUC 점수를 통해 앞에서 만들어 본 것이 imbalaced model 2) balanced model : imbalanced model과 같은 절차를 통해 만들어 본다
  • 35. ■ Balanced class 모델 만들기 35 ① class balance를 위한 비교 모델 생성 - class_weight 사용 model_depth_7b = DecisionTreeClassifier(max_depth=7, class_weight='balanced', random_state=42) ② 새로운 모델(balanced model)을 train 데이터에 fitting model_depth_7b.fit(features_train,target_train) ③ test 데이터를 대상으로 예측 prediction_b = model_depth_7b.predict(features_test) ④새로운 recall score와 ROC/AUC score를 각각 출력 print(recall_score(target_test, prediction_b)) print(roc_auc_score(target_test, prediction_b))
  • 36. 4. 최적의 직원 퇴직가능성 예측 모델 선택하기 Training 데이터를 overfitting하는 것을 피할 수 있는 교차검증(cross-validation) 기법과 최적의 모델을 수립하는데 중요한 feature를 골라내는 방법
  • 37. 9) Hyperparameter tuning 37 지금까지는 ‘tree의 단계(max_depth)’나 ‘노드 수(min_samples_leaf)’ 같은 주요 파라미터에 대해 직접 선정해서 확인해 보았다. 하지만 모든 경우에 이렇게 일일이 파라미터들을 테스트해 볼 수는 없지 않는가? 최적의 모델을 찾는데 설정하게 되는 여러 개의 파라미터들을 어떻게 설정해야 최적값을 찾아낼 수 있을까?
  • 38. ■ Hyperparameter를 튜닝하는 방법 38 1) Grid Search : Hyperparameter의 대략적인 범위를 지정하고, 일정한 간격으로 값을 선택하여 학습 2) Random Search : Hyperparameter의 대략적인 범위를 지정하고 그 범위내에서 무작위로 값을 선택하여 학습 3) Bayesian optimization : 기존 학습결과로 Hyperparameter의 산전분포를 가정하고, 최적의 Hyperparameter로 가정되는 값의 학습결과를 얻은 후에 다시 사후분포를 결정하는 작업을 반복 ※ Hyperparameter : 데이터를 학습시킬 때 사람이 직접 튜닝을 해 줘야 하는 변수들
  • 39. ■ Cross-validation 39 GridSearch를 그대로 사용하면 overfitting의 위험성이 있음 ➔ 그래서 먼저, 테스트 데이터셋을 여러 개(=k개)로 분리하여 각각 번갈아 가며 훈련 데이터셋과 테스트 데이터셋으로 사용 from sklearn.model_selection import cross_val_score ① cross validation을 수행할 함수 호출 : cross_val_score print(cross_val_score(model, features, target, cv=10)) ② 데이터셋 갯수(k)를 10개(fold)로 했을 때 cross validation 점수를 구한다
  • 40. ■ 파라미터 딕셔너리를 만들기 40 depth = [i for i in range(5,21)] ① max_depth를 위한 값 생성 samples = [i for i in range(50,500,50)] ② minimum sample size를 위한 값 생성 ③ 위의 두 값을 파라미터로 사용할 딕셔너리 생성 parameters = dict(max_depth = depth, min_samples_leaf = samples)
  • 41. ■ 최적의 파라미터 값 찾기 41 from sklearn.model_selection import GridSearchCV param_search = GridSearchCV(model, parameters) ① GridSearch를 구현할 함수 호출하고 앞에서 작성한 기본 모델과 파라미터를 사용해서 'param_search' 함수 초기화 ② param_search를 훈련 데이터셋에 fitting param_search.fit(features_train, target_train) ③ 최적의 parameter 출력 print(param_search.best_params_) {'max_depth': 5, 'min_samples_leaf': 50}
  • 42. 10) Feature importance 42 거의 다 온 것 같다. 그런데 모든 feature를 가지고 분석하면, 1) 불필요한 feature(=컬럼)들이 포함되어 결과 왜곡 우려 2) 성능 저하 우려 그래서, 퇴직가능성을 설명할 수 있는 중요한 변수(= feature = 컬럼)를 몇 개만 선택하여 분석하는데, 이걸 feature importance라고 한다.
  • 43. ■ 중요도 높은 feature 찾기 43 feature_importances = model_best.feature_importances_ ① feature importance 계산 ② feature 목록 생성 feature_list = list(features) ③ 생성된 feature 목록을 DataFrame 안에 집어넣기 relative_importances = pd.DataFrame(index=feature_list, data = feature_importances, columns = ["importance"]) ④ feature importance 순서대로 보기 위해 DataFrame 정렬 relative_importances.sort_values(by="importance", ascending=False)
  • 44. ■ feature importance 결과 44 각 featur별로 importance를 계산해 봤으면 이제 그 중에서 중요한 feature를 선택하여 ‘train 데이터’와 ‘test 데이터’에 적용 예) importance > 0.1
  • 45. ■ 중요한 feature만 선택 적용 45 selected_features = relative_importances[relative_importances.importance > 0.01] ① relative_importance가 1% 이상인 feature만 선택 ② 선택된 feature들을 list로 만들기 selected_list = selected_features.index ③ 선택된 feature(selected_list)를 features_train 데이터와 features_test 데이터에 적용 features_train_selected = features_train[selected_list] features_test_selected = features_test[selected_list] ④ features_train 데이터 결과 출력 print(features_train_selected)
  • 46. 11) 최적의 모델 선택 46 이제 다 왔다. Hyperparameter를 어떻게 설정하고 어떤 feature를 가지고 분석을 할 지 결정되었다. 1. 앞의 model 평가에서 최적화된 파라미터로 선정된 것은 아래와 같다. • max_depth = 5, • min_samples = 150, • class_weight = "balanced" 2. 그리고 위에서 어떤 feature가 더 중요하고 덜 중요한지도 살펴봤다. • selected_list > 0.1 • 중요 feature : satisfaction_level, last_evaluation, number_project, average_montly_hours, time_spend_company
  • 47. ■ 최적 모델의 정확도, 재현율, ROC/AUC 점수 확인 47 model_best = DecisionTreeClassifier(max_depth=6, min_samples_leaf=150, class_weight="balanced", random_state=42) ① 앞의 1에서 확인한 파라미터로 best_model 초기화 model_best.fit(features_train_selected, target_train) ② 선택된 feature들로 훈련 데이터를 대상으로 best model을 fitting ③ 선택된 feature들로 테스트 데이터를 대상으로 예측 수행 prediction_best = model_best.predict(features_test_selected) ④ model의 정확도(accuracy) 점수, recall 점수, ROC/AUC 점수 출력 print(model_best.score(features_test_selected, target_test)*100) print(recall_score(prediction_best, target_test)*100) print(roc_auc_score(prediction_best, target_test)*100)
  • 48. 선택된 모델을 재직자들에게 개별로 적용하는 것은 다음 기회에… 48
  • 49. 감사합니다 seong-bok.lee@hpe.com
  • 50. 참고 자료 50 • HR Analytics in Python: Predicting Employee Churn, DataCamp (https://www.datacamp.com/) • “분류모델 (Classification)의 성능 평가”(http://bcho.tistory.com/1206 ), 조대협, 2017.12 • “ROC 커브를 이용한 모델 평가" (http://blog.naver.com/PostView.nhn?blogId=tjdudwo93&logNo=221046150588)
  • Related Documents
    View more...
    We Need Your Support
    Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

    Thanks to everyone for your continued support.

    No, Thanks