SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
HR Analytics 사례
: 직원의 퇴직가능성 예측 모델 수립
May 2018
Lee, Seong-Bok
HPE Korea
본 자료는 DataCamp의
“HR Analytics in Python: Predicting Employee Churn”
(https://www.datacamp.com/) 과정을 요약 정리한 것입니다.
상세 스크립트는 아래의 Github를 참조하세요.
https://github.com/seongboki/hr-analytics
2
Agenda
1. Dataset 준비하기
2. 직원 이직가능성 예측 모델 만들기
3. 직원 이직가능성 예측 모델 평가하기
4. 최적의 직원 퇴직가능성 예측 모델 선택하기
3
데이터 분석의 일반적인 절차
4
1. 문제 정의
2. 분석할 데이터
정의
3. 분석계획 수립과
표본데이터 수집
4. 데이터의 취득과
수집
5. 데이터 전처리와
정제
6. 탐색적 데이터
분석
관련 데이터 조사,
Null/이상치 제거 등
데이터 분포 확인(그림, 표 등),
시간분석, 지도분석 등
7. 분류 또는 예측
모델 수립
8. 예측작업 수행
Decision Tree, Deep
Learning …
직원의 퇴직가능성은
예측가능한가?
성과, 만족도, 근속기간,
급여 , 가족, 출퇴근시간 …
개인별 모델 적용
HRMS, 설문관리 …
1. Dataset 준비하기
표본 HR dataset을 준비하여 기본 통계정보를 확인하고 분석이
가능하도록 데이터를 변환 또는 조작
1) Dataset 불러오기
분석할 데이터셋을 불러온다
6
import pandas as pd
data = pd.read_csv("turnover.csv")
① 분석도구(pandas)와 분석할 데이터셋 불러오기 – “turnover.csv”
② 데이터셋의 헤더정보와 샘플 데이터 조회
data.head()
2) 데이터의 변환
분석을 가능하게 하고 의미있게 하기 위해서는 문자형 데이터를
숫자형으로 바꿔줄 필요
department와 salary는 문자형으로 되어 있는데, 이를 컴퓨터가
이해하기 쉬운 숫자형으로 변환하여 데이터 분석 수행
7
범주형 변수(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
■ 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
■ 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)
2. 직원 이직가능성 예측 모델 만들기
Decision tree라는 분류(classification) 기법을 사용하여 직원의
이직가능성을 예측하는 알고리즘(=모델)을 개발
3) 데이터 나누기
수집한 데이터의 전처리(데이터 변환, 가공 등)를 거쳐 분석할 데이터가 준비되었으면,
이제 모델을 만들기 위해 본격적인 작업에 들어간다.
목표(이직가능서 예측)을 위해 목표데이터를 정하고,
모델을 만들기 위한 “훈련(train) 데이터”와 “검증(test) 데이터”로 구분한다.
12
1) 목표(target) 데이터와 feature 데이터 구분
• 목표(target) 데이터 : left(퇴직)
• Feature 데이터 : 목표데이터를 설명해줄 나머지 데이터들
2) Train 데이터와 test 데이터의 분리
• Train 데이터: 모델을 만드는 데 사용하는 데이터
• Test 데이터: 모델을 검증하는 데 사용하는 데이터
• 목표 데이터(Target data)
= 예측하고자 하는 데이터
= dataset의 특정 컬럼
(여기서는 ‘left’ 컬럼)
• 변수 데이터(feature data)
= 목표 데이터를 설명하는
데이터들
= dataset에서 목표 데이터를
제외한 컬럼들(또는 그 일부)
데이터를 나누는 방법
13
Train Test
Target Target_train Target_test
Feature Feature_train Feature_test
• Precision(정밀도) 계산
• Recall(재현율) 계산
수립한 모델을 실제 퇴직자들에게 적용하면 어느
정도 똑같은 결과를 재현할 수 있나?(=진짜
퇴직자들 중 예측이 맞을 확률)
• Specificity(특이성) 계산
모델을 재직자들에게 적용하면 어느 정도 재현할
수 있나?
(재직할 것이라고 예측한 사람들 중 진짜로 재직한
사람을 예측할 확률)
모델 수립과 자체
테스트
수립한 모델을 테스트
데이터에 적용
• Accuracy(정확도) 계산
train 데이터를 가지고 개발한 모델을
test 데이터에 적용하면 얼마나
정확하게 예측할 수 있나?
(퇴직자 예측과 재직자 예측의 정확도)
■ 목표데이터와 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)
4) Fitting
15
Overfitting?
“train 데이터를 통해 개발한
모델이 train 데이터에서는
잘 작동하지만
train 데이터를 벗어난 test
데이터에서는 유용한 예측
결과를 내지 못하는 오류”
데이터 분류가 끝났으면 분류된 데이터를 fitting.
그런데 이 상태에서 그냥 fitting하면 overfitting이 발생
➔ Overfitting을 예방하면서 데이터를
분류(classification)하는 방법
• Logistic regression
• Support Vector Machines(SVM)
• Neural Networks
• Decision Tree → 본 실습에서 사용
• 기타 등등
■ 데이터 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’는 큰 의미 없음.
■ 예측정확도(accuracy) 점검
17
① train 데이터에 대한 예측결과의 정확성을 점수로 환산
model.score(features_train, target_train)*100
② test 데이터에 대한 예측결과의 정확성을 점수로 환산
model.score(features_test, target_test)*100
3. 직원 이직가능성 예측 모델 평가
개발한 모델을 어떻게 평가하여 그것이 ‘좋은’ 것인지를 어떻게 알까?
여러 decision tree를 비교하여 그 중에서 가장 최선의 모델을 선택할
수 있다.
5) 퇴직가능성 classifier 조정
19
이 overfitting을 없애거나 최소한으로 줄여서 (즉, 정확도를 높여서)
좀 더 나은 분류결과(=예측)을 얻기 위해서는 무엇을 조정해야 할까?
1) tree의 최대 단계 수를 제한(예, 5단계까지만 tree 생성)
2) 개별 단계(leaf 또는 node)의 크기를 제한(예, 노드별로 최대 150명만 포함)
앞의 예측정확도(accuracy) 점검 결과를 보면 아래와 같은 overfitting이 발생했다.
• training 데이터의 정확도 : 100%
• Testing 데이터의 정확도 : 97.65%
2.35%
■ 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
① 노드의 크기를 “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
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)
6) 정확도 외에 모델을 평가하는 지표의 필요성
23
confusion matrix 활용하여 Prediction error 계산
1) 퇴직자에 대한 정확도 평가 → Recall 점수 산정 : 퇴직자인데 퇴직자 아니라고 예측한 비율(FN) 계산
2) 재작자에 대한 정확도 평가 → Specificity 점수 산정 : 퇴직자 아닌데 퇴직자라고 예측한 비율(FP) 계산
지금까지는 정확도(accuracy)만을 계산했다. 그러나 정확도 지표 하나만으로는
최적의 모델을 찾는데 역부족.
왜냐고? 일반적인 Accuracy 점수는 분리된 데이터군(=class, 여기서는 재직자와
퇴직자군) 모두에 관한 정보를 보여줄 수 없기 때문(→ Prediction error 발생)
예) 재직자에 대한 76%의 정확도(accuracy) = "모두가 남아있을"거라는 예측의 정확도가 76%의 확률
Confusion Matrix
음과 양(또는 가/부)으로 나뉘는 이상적인 상황에 비해 현실 예측에서 벌어지는 상황
24
이진 분류 문제에서 양성과 음성 데이타를
가지고 있는 데이터가 있다고 하자.
그러나 실제 세계에서 예측할 때는 아래 그림과
같은 상황이 발생한다.
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
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
■ 정밀도(precision) 계산
𝑷𝒓𝒆𝒄𝒊𝒔𝒊𝒐𝒏 =
𝑻𝒓𝒖𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔
𝑻𝒓𝒖𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔 + 𝑭𝒂𝒍𝒔𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔
27
① 정밀도를 계산할 함수 호출
From sklearn.metrics import precision_score
② features 데이터를 이용해서 직원의 퇴직율 예측
prediction = model.predict(features_test)
③ target 데이터에 적용하여 정밀도 점수 계산
precision_score(target_test, prediction)
■ 재현율(recall = sensitivity) 계산
𝑹𝒆𝒄𝒂𝒍𝒍 =
𝑻𝒓𝒖𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔
𝑻𝒓𝒖𝒆 𝑷𝒐𝒔𝒊𝒕𝒊𝒗𝒆𝒔 + 𝑭𝒂𝒍𝒔𝒆 𝑵𝒆𝒈𝒂𝒕𝒊𝒗𝒆𝒔
28
① 재현율을 계산할 함수 호출
From sklearn.metrics import recall_score
② features 데이터를 이용해서 직원의 퇴직율 예측
prediction = model.predict(features_test)
③ target 데이터에 적용하여 정밀도 점수 계산
recall_score(target_test, prediction)
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를 동시에 고려하여 정확히 분류할 수 있도록 함
■ 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)
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의 정확도를 나타내는 점수
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>
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). 주로 양적 차이
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과 같은 절차를 통해 만들어 본다
■ 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))
4. 최적의 직원 퇴직가능성 예측 모델 선택하기
Training 데이터를 overfitting하는 것을 피할 수 있는
교차검증(cross-validation) 기법과 최적의 모델을 수립하는데
중요한 feature를 골라내는 방법
9) Hyperparameter tuning
37
지금까지는 ‘tree의 단계(max_depth)’나 ‘노드 수(min_samples_leaf)’ 같은 주요
파라미터에 대해 직접 선정해서 확인해 보았다. 하지만 모든 경우에 이렇게 일일이
파라미터들을 테스트해 볼 수는 없지 않는가?
최적의 모델을 찾는데 설정하게 되는 여러 개의 파라미터들을 어떻게 설정해야
최적값을 찾아낼 수 있을까?
■ Hyperparameter를 튜닝하는 방법
38
1) Grid Search :
Hyperparameter의 대략적인 범위를 지정하고, 일정한 간격으로 값을 선택하여 학습
2) Random Search :
Hyperparameter의 대략적인 범위를 지정하고 그 범위내에서 무작위로 값을 선택하여 학습
3) Bayesian optimization :
기존 학습결과로 Hyperparameter의 산전분포를 가정하고, 최적의 Hyperparameter로 가정되는
값의 학습결과를 얻은 후에 다시 사후분포를 결정하는 작업을 반복
※ Hyperparameter : 데이터를 학습시킬 때 사람이 직접 튜닝을 해 줘야 하는 변수들
■ 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
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
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}
10) Feature importance
42
거의 다 온 것 같다. 그런데 모든 feature를 가지고 분석하면,
1) 불필요한 feature(=컬럼)들이 포함되어 결과 왜곡 우려
2) 성능 저하 우려
그래서,
퇴직가능성을 설명할 수 있는 중요한 변수(= feature = 컬럼)를 몇 개만 선택하여 분석하는데,
이걸 feature importance라고 한다.
■ 중요도 높은 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)
■ feature importance 결과
44
각 featur별로 importance를 계산해 봤으면
이제 그 중에서 중요한 feature를 선택하여
‘train 데이터’와 ‘test 데이터’에 적용
예) importance > 0.1
■ 중요한 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)
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
■ 최적 모델의 정확도, 재현율, 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
감사합니다
seong-bok.lee@hpe.com
참고 자료
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)

Weitere ähnliche Inhalte

Was ist angesagt?

Power Query Online
Power Query OnlinePower Query Online
Power Query OnlineRyoma Nagata
 
BigQuery勉強会 Standard SQL Dialect
BigQuery勉強会 Standard SQL DialectBigQuery勉強会 Standard SQL Dialect
BigQuery勉強会 Standard SQL DialectKen Morishita
 
データ分析を支える技術 データ分析基盤再入門
データ分析を支える技術 データ分析基盤再入門データ分析を支える技術 データ分析基盤再入門
データ分析を支える技術 データ分析基盤再入門Satoru Ishikawa
 
Power BI Governance - Access Management, Recommendations and Best Practices
Power BI Governance - Access Management, Recommendations and Best PracticesPower BI Governance - Access Management, Recommendations and Best Practices
Power BI Governance - Access Management, Recommendations and Best PracticesLearning SharePoint
 
運用してわかったLookerの本質的メリット : Data Engineering Study #8
運用してわかったLookerの本質的メリット : Data Engineering Study #8運用してわかったLookerの本質的メリット : Data Engineering Study #8
運用してわかったLookerの本質的メリット : Data Engineering Study #8Masatoshi Abe
 
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편Seongyun Byeon
 
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことYoshitaka Kawashima
 
PRD03 最近 Power BI が On-Premises と仲良くなってきておりまして
PRD03 最近 Power BI が On-Premises と仲良くなってきておりましてPRD03 最近 Power BI が On-Premises と仲良くなってきておりまして
PRD03 最近 Power BI が On-Premises と仲良くなってきておりましてYugo Shimizu
 
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbKoichiro Sumi
 
アサヒのデータ活用基盤を支えるデータ仮想化技術
アサヒのデータ活用基盤を支えるデータ仮想化技術アサヒのデータ活用基盤を支えるデータ仮想化技術
アサヒのデータ活用基盤を支えるデータ仮想化技術Denodo
 
『機械学習による故障予測・異常検知 事例紹介とデータ分析プロジェクト推進ポイント』
『機械学習による故障予測・異常検知 事例紹介とデータ分析プロジェクト推進ポイント』『機械学習による故障予測・異常検知 事例紹介とデータ分析プロジェクト推進ポイント』
『機械学習による故障予測・異常検知 事例紹介とデータ分析プロジェクト推進ポイント』The Japan DataScientist Society
 
リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介
リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介
リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介Recruit Technologies
 
Power BI Advance Modeling
Power BI Advance ModelingPower BI Advance Modeling
Power BI Advance ModelingCCG
 
続・PowerApps に Power BI を埋め込む
続・PowerApps に Power BI を埋め込む続・PowerApps に Power BI を埋め込む
続・PowerApps に Power BI を埋め込むTeruchika Yamada
 
데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력Youngjae Kim
 
技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャ技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャYugo Shimizu
 
Data Strategy Best Practices
Data Strategy Best PracticesData Strategy Best Practices
Data Strategy Best PracticesDATAVERSITY
 
LDM Webinar: Data Modeling & Business Intelligence
LDM Webinar: Data Modeling & Business IntelligenceLDM Webinar: Data Modeling & Business Intelligence
LDM Webinar: Data Modeling & Business IntelligenceDATAVERSITY
 
Big Data Architectural Patterns and Best Practices
Big Data Architectural Patterns and Best PracticesBig Data Architectural Patterns and Best Practices
Big Data Architectural Patterns and Best PracticesAmazon Web Services
 
데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스
데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스
데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스Minwoo Kim
 

Was ist angesagt? (20)

Power Query Online
Power Query OnlinePower Query Online
Power Query Online
 
BigQuery勉強会 Standard SQL Dialect
BigQuery勉強会 Standard SQL DialectBigQuery勉強会 Standard SQL Dialect
BigQuery勉強会 Standard SQL Dialect
 
データ分析を支える技術 データ分析基盤再入門
データ分析を支える技術 データ分析基盤再入門データ分析を支える技術 データ分析基盤再入門
データ分析を支える技術 データ分析基盤再入門
 
Power BI Governance - Access Management, Recommendations and Best Practices
Power BI Governance - Access Management, Recommendations and Best PracticesPower BI Governance - Access Management, Recommendations and Best Practices
Power BI Governance - Access Management, Recommendations and Best Practices
 
運用してわかったLookerの本質的メリット : Data Engineering Study #8
運用してわかったLookerの本質的メリット : Data Engineering Study #8運用してわかったLookerの本質的メリット : Data Engineering Study #8
運用してわかったLookerの本質的メリット : Data Engineering Study #8
 
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
 
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのこと
 
PRD03 最近 Power BI が On-Premises と仲良くなってきておりまして
PRD03 最近 Power BI が On-Premises と仲良くなってきておりましてPRD03 最近 Power BI が On-Premises と仲良くなってきておりまして
PRD03 最近 Power BI が On-Premises と仲良くなってきておりまして
 
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
 
アサヒのデータ活用基盤を支えるデータ仮想化技術
アサヒのデータ活用基盤を支えるデータ仮想化技術アサヒのデータ活用基盤を支えるデータ仮想化技術
アサヒのデータ活用基盤を支えるデータ仮想化技術
 
『機械学習による故障予測・異常検知 事例紹介とデータ分析プロジェクト推進ポイント』
『機械学習による故障予測・異常検知 事例紹介とデータ分析プロジェクト推進ポイント』『機械学習による故障予測・異常検知 事例紹介とデータ分析プロジェクト推進ポイント』
『機械学習による故障予測・異常検知 事例紹介とデータ分析プロジェクト推進ポイント』
 
リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介
リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介
リクルートのビッグデータ活用基盤とビッグデータ活用のためのメタデータ管理Webのご紹介
 
Power BI Advance Modeling
Power BI Advance ModelingPower BI Advance Modeling
Power BI Advance Modeling
 
続・PowerApps に Power BI を埋め込む
続・PowerApps に Power BI を埋め込む続・PowerApps に Power BI を埋め込む
続・PowerApps に Power BI を埋め込む
 
데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력
 
技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャ技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャ
 
Data Strategy Best Practices
Data Strategy Best PracticesData Strategy Best Practices
Data Strategy Best Practices
 
LDM Webinar: Data Modeling & Business Intelligence
LDM Webinar: Data Modeling & Business IntelligenceLDM Webinar: Data Modeling & Business Intelligence
LDM Webinar: Data Modeling & Business Intelligence
 
Big Data Architectural Patterns and Best Practices
Big Data Architectural Patterns and Best PracticesBig Data Architectural Patterns and Best Practices
Big Data Architectural Patterns and Best Practices
 
데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스
데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스
데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스
 

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

생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작DACON AI 데이콘
 
파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트itproman35
 
5.model evaluation and improvement
5.model evaluation and improvement5.model evaluation and improvement
5.model evaluation and improvementHaesun Park
 
Machine learning bysogood
Machine learning bysogoodMachine learning bysogood
Machine learning bysogoodS.Good Kim
 
Function approximation as supervised learning
Function approximation as supervised learningFunction approximation as supervised learning
Function approximation as supervised learningSunggon Song
 
Azure ml studio_fraud_detection
Azure ml studio_fraud_detectionAzure ml studio_fraud_detection
Azure ml studio_fraud_detectionTIMEGATE
 
Azure ml studio_fraud_detection
Azure ml studio_fraud_detectionAzure ml studio_fraud_detection
Azure ml studio_fraud_detectionSeung-Woo Kang
 
2017 빅콘테스트
2017 빅콘테스트2017 빅콘테스트
2017 빅콘테스트Sanghyun Kim
 
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptxDonghwan Lee
 
5.model evaluation and improvement(epoch#2) 2
5.model evaluation and improvement(epoch#2) 25.model evaluation and improvement(epoch#2) 2
5.model evaluation and improvement(epoch#2) 2Haesun Park
 
데이터분석의 길 5: “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)
데이터분석의 길 5:  “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)데이터분석의 길 5:  “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)
데이터분석의 길 5: “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)Jaimie Kwon (권재명)
 
타지키스탄 세관 신고 데이터 기반 위법물 탐지 서비스
타지키스탄 세관 신고 데이터 기반 위법물 탐지 서비스타지키스탄 세관 신고 데이터 기반 위법물 탐지 서비스
타지키스탄 세관 신고 데이터 기반 위법물 탐지 서비스정재 전
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트S.O.P.T - Shout Our Passion Together
 
Ch.5 machine learning basics
Ch.5  machine learning basicsCh.5  machine learning basics
Ch.5 machine learning basicsJinho Lee
 
파이썬으로 익히는 딥러닝 기본 (18년)
파이썬으로 익히는 딥러닝 기본 (18년)파이썬으로 익히는 딥러닝 기본 (18년)
파이썬으로 익히는 딥러닝 기본 (18년)SK(주) C&C - 강병호
 

Ähnlich wie HR Analytics - 퇴직가능성예측모델 (20)

생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작
 
S.M.Lee, Invited Talk on "Machine Learning-based Anomaly Detection"
S.M.Lee, Invited Talk on "Machine Learning-based Anomaly Detection"S.M.Lee, Invited Talk on "Machine Learning-based Anomaly Detection"
S.M.Lee, Invited Talk on "Machine Learning-based Anomaly Detection"
 
파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트
 
5.model evaluation and improvement
5.model evaluation and improvement5.model evaluation and improvement
5.model evaluation and improvement
 
Ml
MlMl
Ml
 
분석6기 4조
분석6기 4조분석6기 4조
분석6기 4조
 
Machine learning bysogood
Machine learning bysogoodMachine learning bysogood
Machine learning bysogood
 
Function approximation as supervised learning
Function approximation as supervised learningFunction approximation as supervised learning
Function approximation as supervised learning
 
Azure ml studio_fraud_detection
Azure ml studio_fraud_detectionAzure ml studio_fraud_detection
Azure ml studio_fraud_detection
 
Azure ml studio_fraud_detection
Azure ml studio_fraud_detectionAzure ml studio_fraud_detection
Azure ml studio_fraud_detection
 
2017 빅콘테스트
2017 빅콘테스트2017 빅콘테스트
2017 빅콘테스트
 
Rdatamining
Rdatamining Rdatamining
Rdatamining
 
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
★강의교재_데이터 분석을 위한 통계와 확률_v2.pptx
 
시종설 1조
시종설 1조시종설 1조
시종설 1조
 
5.model evaluation and improvement(epoch#2) 2
5.model evaluation and improvement(epoch#2) 25.model evaluation and improvement(epoch#2) 2
5.model evaluation and improvement(epoch#2) 2
 
데이터분석의 길 5: “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)
데이터분석의 길 5:  “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)데이터분석의 길 5:  “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)
데이터분석의 길 5: “고수는 큰자료를 두려워하지 않는다” (클릭확률예측 상편)
 
타지키스탄 세관 신고 데이터 기반 위법물 탐지 서비스
타지키스탄 세관 신고 데이터 기반 위법물 탐지 서비스타지키스탄 세관 신고 데이터 기반 위법물 탐지 서비스
타지키스탄 세관 신고 데이터 기반 위법물 탐지 서비스
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
 
Ch.5 machine learning basics
Ch.5  machine learning basicsCh.5  machine learning basics
Ch.5 machine learning basics
 
파이썬으로 익히는 딥러닝 기본 (18년)
파이썬으로 익히는 딥러닝 기본 (18년)파이썬으로 익히는 딥러닝 기본 (18년)
파이썬으로 익히는 딥러닝 기본 (18년)
 

Mehr von Seong-Bok Lee

소화설비_수원과 소화약제량.pdf
소화설비_수원과 소화약제량.pdf소화설비_수원과 소화약제량.pdf
소화설비_수원과 소화약제량.pdfSeong-Bok Lee
 
소화설비_작동순서.pdf
소화설비_작동순서.pdf소화설비_작동순서.pdf
소화설비_작동순서.pdfSeong-Bok Lee
 
소화설비_계통도.pdf
소화설비_계통도.pdf소화설비_계통도.pdf
소화설비_계통도.pdfSeong-Bok Lee
 
정보공학(IE) 방법론.pptx
정보공학(IE) 방법론.pptx정보공학(IE) 방법론.pptx
정보공학(IE) 방법론.pptxSeong-Bok Lee
 
CBD 개발방법론.pptx
CBD 개발방법론.pptxCBD 개발방법론.pptx
CBD 개발방법론.pptxSeong-Bok Lee
 
Mapping 절차와 방법.pptx
Mapping 절차와 방법.pptxMapping 절차와 방법.pptx
Mapping 절차와 방법.pptxSeong-Bok Lee
 
To-Be 설계 절차와 방법.pptx
To-Be 설계 절차와 방법.pptxTo-Be 설계 절차와 방법.pptx
To-Be 설계 절차와 방법.pptxSeong-Bok Lee
 
As-Is 분석 절차와 방법.pptx
As-Is 분석 절차와 방법.pptxAs-Is 분석 절차와 방법.pptx
As-Is 분석 절차와 방법.pptxSeong-Bok Lee
 
ERP프로젝트 중요산출물 ERD.pptx
ERP프로젝트 중요산출물 ERD.pptxERP프로젝트 중요산출물 ERD.pptx
ERP프로젝트 중요산출물 ERD.pptxSeong-Bok Lee
 
ERP 프로젝트 수행방법론-SAP_v1.2.pptx
ERP 프로젝트 수행방법론-SAP_v1.2.pptxERP 프로젝트 수행방법론-SAP_v1.2.pptx
ERP 프로젝트 수행방법론-SAP_v1.2.pptxSeong-Bok Lee
 
금융It시스템의 이해 2편
금융It시스템의 이해 2편금융It시스템의 이해 2편
금융It시스템의 이해 2편Seong-Bok Lee
 
금융It시스템의 이해 1편 202201
금융It시스템의 이해 1편 202201금융It시스템의 이해 1편 202201
금융It시스템의 이해 1편 202201Seong-Bok Lee
 
비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술Seong-Bok Lee
 
블록체인적용사례-해운물류
블록체인적용사례-해운물류블록체인적용사례-해운물류
블록체인적용사례-해운물류Seong-Bok Lee
 
비트코인 채굴과정
비트코인 채굴과정비트코인 채굴과정
비트코인 채굴과정Seong-Bok Lee
 
통계 기초 용어1
통계 기초 용어1통계 기초 용어1
통계 기초 용어1Seong-Bok Lee
 
Intro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sIntro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sSeong-Bok Lee
 
Cloud migration pattern[한글]
Cloud migration pattern[한글]Cloud migration pattern[한글]
Cloud migration pattern[한글]Seong-Bok Lee
 
Cloud migration pattern using microservices
Cloud migration pattern using microservicesCloud migration pattern using microservices
Cloud migration pattern using microservicesSeong-Bok Lee
 

Mehr von Seong-Bok Lee (19)

소화설비_수원과 소화약제량.pdf
소화설비_수원과 소화약제량.pdf소화설비_수원과 소화약제량.pdf
소화설비_수원과 소화약제량.pdf
 
소화설비_작동순서.pdf
소화설비_작동순서.pdf소화설비_작동순서.pdf
소화설비_작동순서.pdf
 
소화설비_계통도.pdf
소화설비_계통도.pdf소화설비_계통도.pdf
소화설비_계통도.pdf
 
정보공학(IE) 방법론.pptx
정보공학(IE) 방법론.pptx정보공학(IE) 방법론.pptx
정보공학(IE) 방법론.pptx
 
CBD 개발방법론.pptx
CBD 개발방법론.pptxCBD 개발방법론.pptx
CBD 개발방법론.pptx
 
Mapping 절차와 방법.pptx
Mapping 절차와 방법.pptxMapping 절차와 방법.pptx
Mapping 절차와 방법.pptx
 
To-Be 설계 절차와 방법.pptx
To-Be 설계 절차와 방법.pptxTo-Be 설계 절차와 방법.pptx
To-Be 설계 절차와 방법.pptx
 
As-Is 분석 절차와 방법.pptx
As-Is 분석 절차와 방법.pptxAs-Is 분석 절차와 방법.pptx
As-Is 분석 절차와 방법.pptx
 
ERP프로젝트 중요산출물 ERD.pptx
ERP프로젝트 중요산출물 ERD.pptxERP프로젝트 중요산출물 ERD.pptx
ERP프로젝트 중요산출물 ERD.pptx
 
ERP 프로젝트 수행방법론-SAP_v1.2.pptx
ERP 프로젝트 수행방법론-SAP_v1.2.pptxERP 프로젝트 수행방법론-SAP_v1.2.pptx
ERP 프로젝트 수행방법론-SAP_v1.2.pptx
 
금융It시스템의 이해 2편
금융It시스템의 이해 2편금융It시스템의 이해 2편
금융It시스템의 이해 2편
 
금융It시스템의 이해 1편 202201
금융It시스템의 이해 1편 202201금융It시스템의 이해 1편 202201
금융It시스템의 이해 1편 202201
 
비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술
 
블록체인적용사례-해운물류
블록체인적용사례-해운물류블록체인적용사례-해운물류
블록체인적용사례-해운물류
 
비트코인 채굴과정
비트코인 채굴과정비트코인 채굴과정
비트코인 채굴과정
 
통계 기초 용어1
통계 기초 용어1통계 기초 용어1
통계 기초 용어1
 
Intro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sIntro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_s
 
Cloud migration pattern[한글]
Cloud migration pattern[한글]Cloud migration pattern[한글]
Cloud migration pattern[한글]
 
Cloud migration pattern using microservices
Cloud migration pattern using microservicesCloud migration pattern using microservices
Cloud migration pattern using microservices
 

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

  • 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
  • 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)