일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ggplot()
- R ggplot2
- R 연습문제
- 의사결정나무
- 데이터 핸들링
- geom_errorbar
- 콕스비례모형
- Bias-Variance Tradeoff
- R
- 데이터핸들링
- 미국 선거데이터
- 생존그래프
- 이산형 확률분포
- ggplot2
- 확률실험
- R 결측치
- 강화학습 #추천서적 #강화학습인액션
- 카플란마이어
- ggsurvplot
- CrossValidation
- R mutate
- R문법
- R dplyr
- dplyr
- R filter
- 주식데이터시각화
- 교차타당성
- R select
- ISLR
- 생존분석
- Today
- Total
Must Learning With Statistics
데이터 마이닝이란 본문
데이터 마이닝(Data Mining)
데이터마이닝은 데이터내에서 패턴을 찾아가는 과정을 의미합니다. 효과적인 마이닝을 위해서는 기계학습, 통계학, 데이터베이스 등의 기술들을 다같이 활용해야 합니다. 제 개인적으로는 ’데이터마이닝’이라는 단어를 그렇게 좋아하지는 않습니다. 그 이유는 어떤 현장에서도 ’데이터 마이닝’을 해와라 라고 시키지는 않습니다. 대신에 SQL 쿼리를 짜와라, 예측 분석을 해라, 유사성비교를 해라 등의 지시가 내려옵니다. 즉, 데이터마이닝은 너무 방대한 개념입니다. 학부 통계학과의 입장에서는 다변량 자료분석이 데이터마이닝으로 자연스럽게 연결이 됩니다. 또한 이 데이터 마이닝은 기계학습과 자동으로 연결이 되며, 마지막으로 기게학습은 딥러닝과 연결이 됩니다. 마지막으로 딥러닝은 최적화 이론과 합쳐져 강화학습과 연결이 됩니다. 즉, 굳이 통계학, 데이터마이닝, 기계학습을 나누어서 생각할 필요는 크게 없다고 봅니다. 물론 통계학이 집중하는 분야와 데이터마이닝 그리고 기계학습이 집중하는 분야는 다릅니다.
- 통계학 : 모델의 통계적 해석 및 신뢰성 분석
- 데이터마이닝 & 기계학습 : 모델의 정확도 및 예측성
통계학에서는 기본적으로 선형모형을 선호합니다. 선형모형의 장점은 뛰어난 해석력에 있습니다. 다만 고정된 모형의 유연성으로 인하여 예측력은 부족하게 되는 단점이 있습니다. 반면 데이터마이닝은 예측에 목적이 있기 때문에 선형모형에 비해서는 높은 예측력을 가지게 됩니다. 하지만 분석 알고리즘의 해석은 매우 복잡합니다. 하나하나 설명하기에 너무 많이 섞여있거나, 혹은 아예 설명하기도 어려운 경우가 존재합니다. 대표적으로 통계학에서 대표적인 일반화선형모형과 기계학습에서 대표적인 의사결정나무의 모형을 통해 비교해보도록 하겠습니다.
일반화선형모형에 대한 더 자세한 내용은 다음 링크를 참고하시면 됩니다.
링크 : https://mustlearning.tistory.com/15
library(ggplot2)
library(dplyr)
library(reshape)
HR = read.csv("D:\\Dropbox\\DATA SET(Dropbox)\\HR_comma_sep.csv")
HR = HR %>%
mutate(left = as.factor(left),
promotion_last_5years = as.factor(promotion_last_5years),
Work_accident = as.factor(Work_accident),
salary = ifelse(salary == "high",3,
ifelse(salary == "medium",2,1)))
str(HR)
'data.frame': 14999 obs. of 10 variables:
$ satisfaction_level : num 0.38 0.8 0.11 0.72 0.37 0.41 0.1 0.92 0.89 0.42 ...
$ last_evaluation : num 0.53 0.86 0.88 0.87 0.52 0.5 0.77 0.85 1 0.53 ...
$ number_project : int 2 5 7 5 2 2 6 5 5 2 ...
$ average_montly_hours : int 157 262 272 223 159 153 247 259 224 142 ...
$ time_spend_company : int 3 6 4 5 3 3 4 5 5 3 ...
$ Work_accident : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ left : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ promotion_last_5years: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ department : Factor w/ 10 levels "accounting","hr",..: 8 8 8 8 8 8 8 8 8 8 ...
$ salary : num 1 2 2 1 1 1 1 1 1 1 ...
일반화 선형모형
\[ log(odds) = \beta_{0} + \beta_{1}x_{1}+\beta_{2}x_{2} + \cdots+\beta_{p}x_{p} \]
직원들의 이직여부(0: 이직 안함, 1: 이직 진행)을 예측하기 위한 모형을 만들도록하겠습니다.
GLM = glm(left ~ satisfaction_level + salary + time_spend_company + Work_accident,
family = binomial(link = "logit"), data = TRAIN)
summary(GLM)
Call:
glm(formula = left ~ satisfaction_level + salary + time_spend_company +
Work_accident, family = binomial(link = "logit"), data = TRAIN)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.8709 -0.6798 -0.4467 -0.1678 2.8074
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.34051 0.10887 12.31 <2e-16 ***
satisfaction_level -3.70294 0.10665 -34.72 <2e-16 ***
salary -0.68030 0.04428 -15.36 <2e-16 ***
time_spend_company 0.20979 0.01734 12.10 <2e-16 ***
Work_accident1 -1.44447 0.10291 -14.04 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 11574.4 on 10498 degrees of freedom
Residual deviance: 9367.1 on 10494 degrees of freedom
AIC: 9377.1
Number of Fisher Scoring iterations: 5
일반화선형모형의 결과는 매우 깔끔합니다. 결과값의 Estimate값이 기울기를 의미하며 양수(+)의 값을 가질 경우에는 이직을 할 가능성을 높여주는 것이고, 음수(-)일 경우에는 이직을 할 가능성을 낮추어주는 것입니다. satisfaction_level와 salary의 경우에는 값이 높을수록 이직할 \(log(odds)\)가 감소하는 것입니다. 다른 변수들에 대해서도 비슷하게 해석을 진행하면 됩니다.
의사결정나무
의사결정나무는 여러 알고리즘이 존재하지만 여기서는 Information Gain을 활용하도록 하겠습니다. 더 자세한 내용은 다음의 링크에서 확인할 수가 있습니다.
림크 : https://mustlearning.tistory.com/17
library(C50)
library(caret)
library(pROC)
library(ROCR)
FEATURE <- TRAIN[, c('satisfaction_level','salary','time_spend_company','Work_accident')]
RESPONSE <- TRAIN[, 7]
tree = C5.0(FEATURE, RESPONSE,
control = C5.0Control(noGlobalPruning = FALSE, minCases = 200),
trials = 10)
자, 이제 위 그림의 의사결정나무를 해석하시면 됩니다. 깔끔하게 설명하는 것은 매우 어려워 보입니다. 이게 바로 선형모형과 데이터마이닝(기계학습) 방법론의 가장 큰 차이 중 하나입니다. 그렇다면 모델의 예측정확도는 어떤지 확인을 해보도록 하겠습니다.
모델 정확도
GLM_Predict = predict(GLM,newdata = TEST,type = 'response')
GLM_Predict = ifelse(GLM_Predict > 0.22, 1, 0)
TREE_Predict = predict(tree, newdata = TEST)
- GLM 정확도
Confusion Matrix and Statistics
Reference
Prediction 1 0
1 802 1026
0 248 2424
Accuracy : 0.7169
95% CI : (0.7035, 0.73)
No Information Rate : 0.7667
P-Value [Acc > NIR] : 1
Kappa : 0.3708
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.7638
Specificity : 0.7026
Pos Pred Value : 0.4387
Neg Pred Value : 0.9072
Prevalence : 0.2333
Detection Rate : 0.1782
Detection Prevalence : 0.4062
Balanced Accuracy : 0.7332
'Positive' Class : 1
- tree 정확도
Confusion Matrix and Statistics
Reference
Prediction 1 0
1 958 100
0 92 3350
Accuracy : 0.9573
95% CI : (0.951, 0.9631)
No Information Rate : 0.7667
P-Value [Acc > NIR] : <2e-16
Kappa : 0.8811
Mcnemar's Test P-Value : 0.6134
Sensitivity : 0.9124
Specificity : 0.9710
Pos Pred Value : 0.9055
Neg Pred Value : 0.9733
Prevalence : 0.2333
Detection Rate : 0.2129
Detection Prevalence : 0.2351
Balanced Accuracy : 0.9417
'Positive' Class : 1
마지막으로 ROC 커브를 비교해보도록 하겠습니다.
GLM_Predict = predict(GLM,newdata = TEST,type = 'response')
TREE_Predict = predict(tree, newdata = TEST, type = 'prob')
Tree_Prob = TREE_Predict[,2]
GLM_ROC = roc(TEST$left, GLM_Predict)
TREE_ROC = roc(TEST$left, Tree_Prob)
plot.roc(GLM_ROC,
col="royalblue",
print.auc=TRUE,
max.auc.polygon=TRUE,
print.thres=TRUE, print.thres.pch=19, print.thres.col = "red",
auc.polygon=TRUE, auc.polygon.col="#D1F2EB")
plot.roc(TREE_ROC,
col="royalblue",
print.auc=TRUE,
max.auc.polygon=TRUE,
print.thres=TRUE, print.thres.pch=19, print.thres.col = "red",
auc.polygon=TRUE, auc.polygon.col="#D1F2EB")
결과를 확인하시면 Accuracy, Sensitivity, Specificity의 값들이 모두 Tree가 뛰어난 것을 확인할 수가 있습니다. 결국 이 모델 선택도 trade off 관계가 존재합니다. 해석이 중요한 컨설팅 분야에서는 일반화선형모형이 좀 더 선호되는 경향이 있으며, 예측이 중요한 현장에서는 기계학습 방법론이 좀 더 선호가 됩니다.
데이터마이닝에는 예측분석말고도, 유사성 분석, 차원감소 분석 등 많은 분석방법론이 존재합니다. 여기서 우리에게 중요한 것은 데이터마이닝 알고리즘을 공부하는 것이 아니라, 데이터 마이닝의 응용부분에 집중을 해야 됩니다. 위에 코드를 보셨다시피 데이터마이닝의 어려운 수식이론에 비해 구현하는 코드는 정말 간단합니다. 즉, 이론 내부를 하나하나 다 공부할 것이 아니라면 이 알고리즘들을 어떻게 활용할 수 있는가가 더 중요합니다. 앞으로 계속된 포스팅으로 데이터마이닝을 어떻게 응용할 수 있는지에 대해 다루어보도록 하겠습니다.
'데이터마이닝' 카테고리의 다른 글
의사결정나무 1 [CART] (0) | 2020.04.23 |
---|---|
Cross Validation 및 Bias Variance Trade off 시뮬레이션 (0) | 2020.03.17 |
선형, 비선형 회귀모형 적합방법과 Bias-variance Trade off 관계 (0) | 2020.03.16 |
지도학습과 비지도학습 (2) | 2020.03.16 |