일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터분석
- 전자계산기 구조
- 준전문가
- 알트리아
- 미국 배당주
- ABBV
- 매수
- 분석기획
- 매도
- 서교공
- 미국주식
- 정보처리기사 필기
- 서울교통공사
- 정보처리기사 데이터베이스
- 도미노피자
- 배당주
- 스플렁크
- JNJ 주식
- 미국 주식
- It
- 자격증
- at&t
- 2019년
- 존슨앤존슨
- 분석
- 애브비
- 빅데이터
- 장기투자
- DPZ
- ADsP
- Today
- Total
My Log
[ADsP #11] 데이터 분석 3장 - 정형 데이터 마이닝(1) 본문
* 시작하기에 앞서 본 게시물에 포함된 내용은 한국데이터산업진흥원에서 발행한 [데이터 분석 전문가 가이드, 2019년 2월 8일 개정]
에 근거한 것임을 밝힙니다.
1. 데이터 마이닝 개요
1) 데이터 마이닝이란?
- 거대한 양의 데이터 속에서 쉽게 드러나지 않는 유용한 정보를 찾아내는 과정
- 기업이 보유한 고객, 거래, 상품데이터 등과 이외의 기타 외부 데이터를 기반으로 감춰진 지식, 새로운 규칙 등을 발견하고
이를 비즈니스 의사결정 등에 활용하는 일련의 작업
2) 데이터 마이닝의 기능
ㄱ. 분류(Classification)
- 새롭게 나타난 현상을 검토하여 기존의 분류, 정의된 집합에 배정하는 것
- 잘 정의된 분류기준과 선분류되어진 검증 집합이 필요
- 기법 : 의사결정나무, memory-based reasoning, link analysis 등
ㄴ. 추정(Estimation)
- '수입, 수준, 신용카드 잔고' 등 연속된 변수의 값을 추정하는 것
- 주어진 데이터를 활용해 알려지지 않은 결과값을 추정한다
- 기법 : 신경망 모형
ㄷ. 예측(Prediction)
- 분류와 추정과 유사하지만, 미래의 값이라는 차이가 있다
- 예측 작업의 정확성을 알아보는 방법은 기다리고 지켜보는 것 뿐이다.
- 기법 : 장바구니 분석, memory-based reasoning, 의사결정나무, 신경망 등이 모두 사용될 수 있음
(입력 데이터의 성격에 따라 기술의 사용이 결정된다.)
ㄹ. 연관 분석(Association Analysis)
- '같이 팔리는 물건'과 같이 아이템의 연관성을 파악하는 분석
- 기법 : 장바구니 분석
ㅁ. 군집(Clustering)
- 모집단을 동질성을 지닌 그룹으로 세분화하는 것
- 선분류 되어있는 기준에 의존하지 않는다는 점이 분류와의 차이
- 레코드 자체가 지니고 있는 다른 레코드와의 유사성에 의해 그룹화되고, 이질성에 의해 세분화된다.
- 주로 데이터 마이닝이나 모델링의 준비단계로서 사용됨
ㅂ. 기술(Description)
- 데이터가 가지고 있는 의미를 단순하게 기술하여, 의미를 파악할 수 있도록 함
- 데이터가 암시하는 바에 대해 설명이 가능해야 하며, 설명에 대한 답을 찾아낼 수 있어야 한다.
3) 데이터 마이닝 5단계
ㄱ. 목적 정의
- 데이터 마이닝을 통해 무엇을 왜 하는지 명확한 목적을 설정해야 함
- 이해 관계자 모두가 목적에 동의하고 이해할 수 있어야 함
- 1단계부터 전문가가 참여하여 목적에 맞는 데이터 마이닝 모델, 기법, 필요 데이터를 정의하는 것이 바람직
ㄴ. 데이터 준비
- 데이터 마이닝 수행에 필요한 데이터 수집
- IT부서와의 사전 협의, 일정 조율 필요
- 데이터 준비 -> 정제, 품질보증 -> 데이터 보강 등의 작업을 거친다.
ㄷ. 데이터 가공
- 모델링 목적에 따라 변수를 정의하고, 소프트웨어 적용에 적합하도록 데이터를 가공한다.
ㄹ. 데이터 마이닝 기법의 적용
- 데이터 마이닝 기법을 적용하는 단계
- 어떤 기법을 활용하고 어떤 값을 입력하느냐 등에 따라 성과가 달라지므로 데이터분석에 대한 전문성이 필요
ㅁ. 검증
- 추출된 정보를 검증하는 단계
- 테스트 마케팅이나 과거 데이터 활용
- 검증 후에는 자동화 방안을 협의하여 업무에 적용하도록 함
- 보고서 작성 및 경영진에게 기대효과(연간 추가수익, 투자대비성과(ROI) 등)를 알림
2. 분류 분석
- 알려진 다변량 자료를 이용하여 모형을 구축하고, 이를 통해 새로운 자료에 대한 예측 및 분류 수행이 목적
- 반응변수가 범주형인 경우 -> 새로운 자료에 대한 분류가 주목적
반응변수가 연속형인 경우 -> 새로운 자료에 대한 예측이 주목적
1) 로지스틱 회귀모형
- 반응변수가 범주형인 경우 적용
- 일반화선형모형의 특별한 경우로 로짓(logit) 모형으로도 불림
- 오즈(odds)의 관점에서 해석될 수 있다는 장점을 가짐
- 새로운 설명변수가 주어질 때, 반응변수의 각 범주에 속할 확률이 얼마인지 추정
- 설명변수가 한 개인 경우 회귀계수(β)의 부호에 따라 S자(β>0) 또는 역S자(β<0) 모양을 가짐
- 표준로지스틱 분포의 누적분포함수로 성공의 확률을 추정
- R에서의 로지스틱회귀모형 적용
ㄱ) glm() 함수를 이용한 로지스틱 회귀모형 수행
> a <- glm( Species~Sepal.Length, data=iris, family=binomial )
# glm() 함수 결과 제공되는 결과는 ls(), str() 함수를 통해 확인할 수 있다.
ㄴ) summary() 함수를 이용한 결과 확인
> summary(a)
# 회귀계수의 p-값을 통한 유의미 확인
# Null deviance 값으로 완전모형으로부터의 이탈도 확인
# Residual deviance 값으로 귀무가설 기각여부 확인
ㄷ) fitted() 함수를 통해 적합 결과 확인
> fitted(a) [ c(1:5, 96:100) ]
ㄹ) predict() 함수를 이용한 예측
> predict( a, newdata=a[c(1,50,51,100), ] , type="response" )
ㅁ) cdplot() 함수의 그래프를 이용한 탐색적 분석
> cdplot( Species~Sepal.Length, data=a )
# 설명변수 변화에 따른 반응변수의 조건부 분포를 보여준다.
2) 신경망 모형
- 동물의 뇌신경계를 모방하여 분류 또는 예측을 위해 만들어진 모형
- 가중치 W=(W1, ···, Wd)'는 의사결정 경계의 방향을 나타내는 모수
- 편의 W0는 의사결정 경계의 위치를 결정하는 모수
- 가중치와 편의는 학습을 통해 오차제곱합이 최소가 되는 방향으로 갱신된다.
- 은닉층의 수를 정할 때 고려사항
* 다층신경망은 단층신경망에 비해 훈련이 어렵다.
* 출력층 노드의 수는 출력 범주의 수로 결정
* 입력의 수는 입력 차원의 수로 결정
* 은닉층 노드의 수는 너무 적으면 의사결정 경계를 만들 수 없다.
* 은닉층 노드의 수가 너무 많으면 네트워크 일반화가 어렵다.
- 장점
* 변수의 수가 많거나, 입ㆍ출력 변수 간에 복잡한 비선형 관계가 존재할 때 유용
* 잡음에 민감하게 반응하지 않음
- 단점
* 결과에 대한 해석이 쉽지 않음
* 은닉층의 수와 은닉노드 수의 결정이 어려움
* 초기값에 따라 전역해가 아닌 지역해로 수렴할 수 있음
* 모형이 복잡하면 훈련과정에 많은 시간 소요
- R 패키지 {nnet}의 nnet() 함수를 이용한 분석
ㄱ) nnet() 함수를 이용한 신경망 모형 적합
> nn.iris <- nnet( Species~., data=iris, size=2, rang=0.1, decay=5e-4, maxit=200 )
ㄴ) summary() 함수를 통해 연결선의 방향과 가중치 확인
> summary(nn.iris) # 초기값을 별도로 지정하지 않으면 nnet() 함수 실행마다 다른 결과를 보임
ㄷ) 적합결과의 시각화
# plot.nnet() 함수(함수 사용을 위해 url로부터 파일을 가져오는 것이 선행되어야 함)
> plot.nnet(nn.iris)
# plot() 함수
> library(clusterGeneration)
> library(scales)
> library(reshape)
> plot(nn.iris)
ㄹ) 정오분류표 확인
> table( iris$Species, predict(nn.iris, iris, type="class") )
- R패키지 {neuralnet}의 neuralnet() 함수를 이용한 분석
ㄱ) neuralnet() 함수를 이용한 신경망 모형 적합
> net.infert <- neuralnet( case ~ age+parity+induced, data=infert, hidden=2, err.fct="ce",
linear.output=FALSE, likelihood=TRUE )
# neuralnet() 함수는 다양한 역전파 알고리즘을 통해 모형을 적합한다.
# hidden=2 : 2개의 은닉노드를 가지는 신경망 모형
ㄴ) plot() 함수를 이용한 시각화
> plot(net.infert)
ㄷ) compute() 함수를 이용한 예측
> compute(net.infert, test.data)
3) 의사결정나무 모형
- 의사결정 규칙을 트리구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류하거나 예측을 수행하는 분석 방법
- 하위 노드로 분기되는 매 단계마다 (분류변수, 분류기준값)의 선택이 중요
* 노드 내에서는 동질성이, 노드 간에는 이질성이 커지도록 선택
- 가지분할(split) : 하위노드로 뻗어가는 과정
가지치기(pruning) : 하위노드를 잘라내어 트리를 단순화하는 과정
- 목표변수가 이산형 → 분류나무
ㄱ) (분류변수, 분류기준값) 선택방법 : 카이제곱 통계량의 p-값, 지니 지수, 엔트로피 지수 등
* 노드 내 순수도 강화 : p-값 ↑, 지니 지수 ↓, 엔트로피 지수 ↓
목표변수가 연속형 → 회귀나무
ㄱ) (분류변수, 분류기준값) 선택방법 : F-통계량의 p-값, 분산의 감소량 등
* 노드 내 순수도 강화 : p-값 ↓, 분산의 감소량 ↑
- 알고리즘 : CHAID(카이제곱 통계량, F-통계량), CART(지니지수, 분산감소량), C4.5(엔트로피지수), C5.0, ID3 등
- 장점
* 구조가 단순하여 해석이 용이함
* 유용한 입력변수의 파악
* 예측변수간의 상호작용 및 비선형성을 고려한 분석 수행
* 선형성, 정규성, 등분산성 등의 수학적 가정이 불필요한 비모수적 모형
- 단점
* 분류기준값의 경계선 근방 자료값에 대해 오차가 클 수 있음(비연속성)
* 각 예측변수의 효과를 파악하기 어려움
* 새로운 자료에 대한 불안정한 예측
- 분석과정
단계1) 목표변수와 관련있는 설명변수들을 선택
단계2) 적절한 분리기준과 정지규칙을 정하여 의사결정 나무 생성
단계3) 부적절한 부분 가지치기(pruning)
단계4) 모형평가
단계5) 새로운 데이터에 대한 분류 및 예측
- R 패키지 {rpart}의 rpart() 함수를 이용한 분석
ㄱ) rpart() 함수를 이용한 분석 수행
> a <- rpart( Species ~. , data=iris )
# Species : 반응변수
# rpart() 결과 제공되는 a$cptable 값을 통해 교차타당성오차를 최소로 하는 트리 형성
ㄴ) plot() 또는 rpart.plot() 함수로 시각화
> plot( a, compress=T, margin=0.3 )
> library(rpart.plot)
> prp( a, type=4, extra=2 )
ㄷ) predict() 함수로 새로운 자료에 대한 예측 수행
> predict( a, newdata=iris, type="class" )
- R 패키지 {party}의 ctree() 함수를 이용한 분석
ㄱ) a <- ctree(Species ~. , data=iris)
ㄴ) plot(a)
ㄷ) predict(a)
4) 앙상블 모형
- 여러 개의 분류모형에 의한 결과를 종합하여 분류의 정확도를 높이는 방법
- 적절한 표본추출법으로 여러 개의 훈련용 데이터를 만들고, 훈련용 데이터마다 하나의 분류기를 만들어 앙상블하는 방법
- 데이터를 조절하는 방법
ㄱ) 배깅(bagging)
- 원 데이터 집합으로부터 크기가 같은 표본을 여러 번 단순 임의 복원추출하여
각 표본(붓스트랩 표본)에 대해 분류기를 생성한 후 그 결과를 앙상블하는 방법
- 반복추출 방법으로 동일한 데이터가 여러 번 추출될 수도 있고, 어떤 데이터는 한 번도 추출되지 않을 수 있다.
- R에서의 분석 수행
① bagging() 함수로 분류 수행
> iris.bagging <- bagging(Species~., data=iris, mfinal=10)
② plot() 함수로 분류 결과를 트리 형태로 그림
> plot(iris.bagging$trees[[10]])
③ predict() 함수를 통한 예측 수행
> pred <- predict(iris.bagging, newdata=iris)
④ table() 함수를 통한 분류 확인
> table(pred$class, iris[ , 5] )
ㄴ) 랜덤포레스트(random forest)
- 배깅에 랜덤 과정을 추가한 방법
- 붓스트랩 샘플을 추출하고 트리를 만들어가는 과정은 배깅과 유사
- 예측변수들을 임의로 추출하고, 추출된 변수 내에서 최적의 분할을 만들어나감
cf) 배깅 : 각 노드마다 모든 예측변수 안에서 최적의 분할을 선택
- 별도의 검증용 데이터를 사용하지 않더라도, 붓스트랩 샘플과정에서 제외된 자료를 통해 검증을 실시할 수 있다.
- R에서의 분석 수행
① randomForest() 함수로 분류 수행
> iris.rf <- randomForest(Species~., data=iris, ntree=100, proximity=TRUE)
② plot() 함수로 분류 결과를 트리 형태로 그림
> plot(iris.rf)
③ predict() 함수를 통한 예측 수행
> pred <- predict(iris.rf, newdata=testData)
④ table() 함수를 통한 분류 확인
> table(pred, iris$ploidy)
⑤ importance()와 varImpPlot() 함수로 각 변수의 중요성 확인
> importance(iris.rf)
> varImpPlot(iris.rf)
- R 패키지 {party}의 cforest() 함수를 이용한 분석 수행
① cf <- cforest(Species~., data=iris)
② cf.pred <- predict(cf, newdata=testData, OOB=TURE, type="response")
ㄷ) 부스팅(boosting)
- 배깅과 유사하나 붓스트랩 표본을 구성하는 재표본 과정에서 각 자료에 동일한 확률을 부여하지 않고,
분류가 잘못된 데이터에 더 큰 가중을 두어 표본을 추출한다.
- 붓스트랩 표본을 추출해 분류기 생성 → 각 데이터의 확률 조정 → 다음 붓스트랩 표본 추출 → 분류기 생성 → ···
- R 패키지 {adabag}의 boosting() 함수를 이용한 분석 수행
① boosting() 함수로 분류 수행
> boo.adabag <- boosting(Species~., data=iris, boos=TRUE, mfinal=10)
② plot() 함수로 분류 결과를 트리 형태로 그림
> plot(boo.adabag$trees[[10]])
③ predict() 함수를 통한 예측 수행
> pred <- predict(boo.bagging, newdata=iris)
④ table() 함수를 통한 분류 확인
> table(pred$class, iris[ , 5] )
- R 패키지 {ada}의 ada() 함수를 이용한 분석 수행
① ada() 함수로 분류 수행
> iris.ada <- ada(Species~., data=iris, iter=20, nu=1, type="discrete")
② plot() 함수로 분류 결과 그림
> plot(iris.ada, TRUE, TRUE) # 오차와 일치도를 나타내는 카파계수를 그려준다.
③ predict() 함수를 통한 예측 수행
> pred <- adatest(iris.ada, iris)
④ varplot() 함수를 통한 각 변수의 중요도 파악
> varplot(iris.ada)
⑤ pairs() 함수를 통한 예측변수 조합별 분류 결과
> pairs(iris.ada, iris, maxvar=4)
5) 분류 모형 평가
- 구축된 모형이 임의의 모형보다 더 우수한 분류 성과를 보이는지, 고려된 모형들 중 어느 것이 가장 우수한지 등을
비교 분석하는 과정
- 모형 평가의 기준
ㄱ) 일반화의 가능성
- 데이터를 확장하여 적용할 수 있는지에 대한 평가 기준
- 모집단 내의 다른 데이터에 적용해도 안정적인 결과를 제공하는 것을 의미
ㄴ) 효율성
- 얼마나 효과적으로 구축되었는지 평가
- 적은 입력변수를 필요로 할수록 효율적
ㄷ) 예측과 분류의 정확성
- 모형의 정확성 측면에서 평가
- 모형 평가 절차
① 전체 자료에서 훈련용 자료와 검증용 자료를 추출
- 훈련용 자료는 모형 구축용도, 검증용 자료는 모형 검증 용도
- 주어진 데이터에서만 성과를 보이는 과적합화를 해결하기 위한 단계
- 잘못된 가설을 가정하게 되는 2종 오류를 방지
- 데이터 추출방법
ㄱ) 홀드아웃(hold-out)
- 랜덤 추출 방식
- 훈련용, 검증용 데이터 비율을 7:3으로 함
- R에서 sample() 함수 사용
> sample( 2, nrow(iris), replace=TURE, prob=c(0.7, 0.3) )
ㄴ) 교차검증(cross-validation)
- 데이터를 k개로 나누어 k번 반복측정하고, 그 결과를 평균 내어 최종 평가로 사용
- 일반적으로 10-fold 교차 검증이 사용됨
- R에서 sample() 함수를 통해 k개의 하부집합을 구성
ㄷ) 붓스트랩(bootstrap)
- 교차검증과 유사하게 평가를 반복하지만, 훈련용 자료를 반복 재선정한다는 점에서 차이가 있음
- 관측치를 한번 이상 훈련용 자료로 사용하는 복원 추출법에 기반
- 전체 데이터의 양이 크지 않은 경우의 모형 평가에 가장 적합
② 모형 학습 및 성능 평가
- 훈련용 자료로 모형을 학습한 뒤, 검증용 자료를 사용해 모형의 분류 및 예측 정확도를 평가
- 분류 모형 평가에 사용되는 방법
ㄱ) 오분류표
- 정분류율 : ①+④/전체
- 오분류율 : ②+③/전체
- 재현율(민감도) : 예측치 True/실제값 True == ①/①+②
- 특이도 : 예측치 False/실제값 False == ④/③+④
- 정확도 : 실제값 True/예측치 True
- F1지표 : 재현율과 정확도의 조화평균(재현율과 정확도가 반비례할 높은 가능성을 보정하기 위한 지표)
- R에서 confusionMatrix() 함수를 사용한 오분류표 도출
> library(e1071)
> library(caret)
> confusionMatrix(pred, testData$Species)
ㄴ) ROC 그래프
- 비교 분석 결과를 가시화할 수 있다는 점에서 유용한 평가 도구
- X축에는 FP Ratio(1-특이도), Y축에는 민감도를 나타냄
- ROC 그래프의 밑부분 면적(AUC)이 넓을 수록 좋은 모형으로 평가
- 아래 그림의 경우 Test A가 더 높은 분류 성과를 가지는 것으로 판단
- R에서 ROC() 함수를 사용한 그래프 작성
> 각 모형 학습 및 검증(예측) 수행
> ROC(form=case~neuralnet_predict, data=testData, plot="ROC")
# 그래프의 AUC(Area Under the Curve)값을 확인한다.
ㄷ) 이익도표와 향상도 곡선
- 이익도표 : 분류된 관측치가 각 등급에 얼마나 분포하고 있는지 누적으로 연결한 도표
- 향상도 곡선 : 랜덤모델과 비교하여 해당 모델의 성과가 얼마나 향상되었는지 각 등급별로 파악하는 그래프
- R에서 perfomance() 함수를 이용해 향상도 곡선을 그릴 수 있다.(ROC()와 달리 여러 모형을 함께 나타내는 장점)
> perfomance(neuralnet_predict, "tpr", "fpr" )
# ROC graph for neural network, x-fase positive ratio, y-true positive ratio
> perfomance(neuralnet_predict, "lift", "rpp" )
# graph for neural network, x-rate of positive predictionso, y-lift value
'자격증 기록 > ADsP(데이터분석 준전문가)' 카테고리의 다른 글
빅데이터 분석기사 신설예정!! (0) | 2019.09.07 |
---|---|
[ADsP #12] 데이터 분석 3장 - 정형 데이터 마이닝(2) (0) | 2019.08.29 |
[ADsP #10] 데이터 분석 2장 - 통계 분석 (2) (0) | 2019.08.22 |
[ADsP #9] 데이터 분석 2장 - 통계 분석 (1) (0) | 2019.08.19 |
[ADsP #8] 데이터 분석 1장 - R 기초와 데이터마트(2) (0) | 2019.08.12 |