데이터 분석 공부
[ADSP 정리] (과목 3) 제3장 정형 데이터 마이닝 본문
과목 3 데이터 분석
제 3장 정형 데이터 마이닝
제 1절 데이터 마이닝 개요
- 데이터 마이닝 (data mining) : 거대한 양의 데이터 속에서 쉽게 드러나지 않는 유용한 정보를 찾아내는 과정
-
데이터 마이닝의 6가지 기능
1. 분류 (Classification)
- 분류 : 새롭게 나타난 현상을 검토, 기존의 분류, 정의된 집합에 배정하는 것
- 분류기준과 선분류(preclassified)되어진 검증 집합에 의해 완성
- 의사결정나무(decision tree), memory-based reasoning
- link analysis에 사용
2. 추정 (Estimation)
- 추정 : 주어진 입력 데이터를 사용, 알려지지 않는 결과의 값(연속적) 추정
- 신경망 모형 (neural networks)
3. 예측 (Prediction)
- 예측 : 미래 양상, 값을 예측
- 분류와 추정의 경우 기존 결과와 비료 통해 정확성 파악
- 예측은 기다리고 지켜봐야
- 장바구니 분석 (market basket analysis), memory-based reasoning, 의사결정나무, 신경망 등
- 입력 데이터 성격따라 다르게 적용
4. 연관 분석 (Association Analysis)
- 연관 분석 : 연관성 파악
- 예) 같이 팔리는 물건
- 장바구니 분석의 결과 -> 연관 규칙 (association rules)
5. 군집 (Clustering)
- 군집 : 이질적인 모집단을 동질성을 지닌 그룹 별로 세분화
- 선분류 되어있는 기준에 의존 X -> 레코드 자체가 지니고 있는 다른 레코드와의 유사성에 의해 그룹화, 이질성에 의해 세분화
- 주로 데이터 마이닝이나 모델링의 준비단계로 사용
6. 기술 (Description)
- 기술 : 데이터가 가지고 있는 의미를 기술
- 데이터가 암시하는 바에 대해 설명 가능해야, 설명에 대한 답을 찾아낼 수 있어야 함
- 예) 장바구니 분석에 의해 나타내는 규칙들
데이터 마이닝의 6가지 기능을 추진하기 위해서 적절한 환경 구축한 후 5단계를 수행함
가. 목적 정의
- 데이터 마이닝의 도입 목적을 분명히 하는 단계
- 목적을 이해 관계자 모두가 동의하고 이해해야
- 가능하면 마이닝 모델과 필요한 데이터 정의해야
나. 데이터 준비
- 데이터 마이닝 수행에 필요한 데이터를 수집하는 단계
- 가능하면 다른 서버에 저장
- 데이터 정제를 통해 품질 보장
- 필요시 보강 작업 거쳐 충분히 확보
다. 데이터 가공
- 수집된 데이터를 가공
- 목적 변수 정의, 데이터 마이닝 소프트웨어에 적용할 수 있도록 적합한 형식으로 가공
- 예) 분류 모델링 위해 CRM 데이터 마트 형식으로 가공
- 개발 환경의 구축 선행되어야
라. 데이터 마이닝 기법의 적용
- 데이터 마이닝 기법 적용
- 목적하는 정보 추출
- 데이터 마이닝 기법은 1단계에 미리 결정하는 것이 바람직
- 데이터 마이닝 모델 선택, 소프트웨어 사용에 필요한 값 지정하는 단계
- 데이터 분석 전문가의 전문성 필요 - 적절 소프트웨어와 기법 선정
마. 검증
- 추출한 정보를 검증하는 단계
- 테스트 마케팅 ≠ 모델링
- 이후 자동화 방안을 IT 부서와 협의 -> 업무 적용
- 보고서 작성 -> 경영진에게 연간 추가수익과 투자대비성과(ROI) 등으로 기대효과 알려야
제 2절 분류 분석
- 분류 분석 : 반응변수(종속변수)가 알려진 다변량 자료를 이용하여 모델 구축, 새로운 자료에 대한 예측 및 분류를 수행
- 분류 (classification) : 반응변수가 범주형
- 예측 (prediction) : 반응변수가 연속형
- 로지스틱회귀, 신경망, 의사결정나무, 앙상블, 규칙 기반 분류, 사례기반 분류, 인접이웃 분류모형, 베이즈 분류모형, 서포트벡터기계, 유전자 알고리즘 등
1. 로지스틱 회귀모형
- 로지스틱회귀 (logistic regression) 모형 : 반응변수가 범주형인 경우 회귀분석 모형
- 설명변수(또는 예측변수)의 값이 주어질 때 반응변수의 각 범주에 속할 확률이 얼마인지 추정(예측 모형) -> 추정 확률을 기준치에 따라 분류 (분류모형)
- 사후확률 (posterior probability) : 모형의 적합을 통해 추정된 확률
- 오즈(odds)의 관점에서 해석 가능
- exp(베타1) = 나머지 변수가 주어질 때 x1이 한 단위 증가할 때마다 성공의 오즈가 몇 배가 증가하는지 나타내는 값
- 파이(x)에 관한 식이 가지는 두 가지 의미
- 1) 다중로지스틱함수에 해당, 설명변수가 한 개(x1)인 경우 해당 회귀계수 베타1의 부호에 따라 S자 모양(양수) 또는 역 S자 모양(음수) 을 가진다.
- 2) 표준로지스틱 분포의 누적분포함수로 성공의 확률 설명(또는 추정)한다는 의미
- 로지스틱회귀모형과 유사한 프로빗(probit) 모형 : 표준정규분포의 누적함수로 성공의 확률을 모형화한 것
- 분류 목적에서 사용될 경우 기준값보다 크면 Y=1인 집단, 작으면 Y=0인 집단으로 분류
- 분류기준값의 결정
- 사전정보 또는 손실함수 이용
- 정분류율(accuracy), 민감도(sensitivity), 특이도(specificity)을 동시 고려 방법
- b <- glm(Species~Sepal.Length, data=a, family=binomial) : 로지스틱 회귀모형 수행
- family=binomial과 family=binomial(logit) 동일
- summary(b) : 결과 확인
- Null deviance : 절편만 포함하는 모형 (H0: 베타=0 하의 모형)의 완전모형(또는 포화 모형)으로부터의 이탈도 (deviance)
- Residual deviance : 예측변수가 추가된 적합 모형의 이탈도
- confint(b, parm="Sepal.Length") : 회귀계수 베타의 신뢰구간
- exp(confint(b, parm="Sepal.Length")) : 오즈의 증가량 exp(베타)에 대한 신뢰구간
- fitted() 함수로 적합 결과 확인
- predict() : 새로운 자료에 대한 예측 수행
- cdplot(Species~Sepal.Length, data=a) : 연속형 변수(Sepal.Length)의 변화에 따른 범주형 변수의 조건부 분포 보여줌, 로지스틱회귀의 탐색적 분석에 유용
- anova(glm.vs, test="Chisq") : 모형의 적합(변수가 추가되는) 단계별로 이탈도의 감소량과 유의성 검정 결과 제시
- 일반화선형모형 (generalized linear model)의 특별한 경우, 로짓 (logit) 모형으로 불림
- 반응변수의 범주가 3개 이상인 경우, 범주의 유형 (명목/순서)에 따라 다양한 다범주 (multi-category) 로짓모형 적합 가능
2. 신경망 모형
- 인공신경망 (artificial neural networks) : 동물의 뇌신경계 모방, 분류 또는 예측을 위해 만들어진 모형
- 신호의 강도가 기준치 초과 경우 활성화, 신경 돌기 통해 신호 방출
- 입력(inputs)=시냅스, 개별신호의 강도에 따라 가중(weights), 활성함수(activation function)은 출력 (outputs) 계산
- 학습(learning or training) 통해 오차가 작아지는 방향으로 가중치 조정
- 단층신경망 (single-layer neural network) 또는 퍼셉트론 (perceptron) : 입력층이 은닉층을 거치지 않고 직접 출력층에 연결되는 네트워크 구조
- 가중치 w : 의사결정 경계 (decision boundary) 방향 나타내는 모수
- 편의 (bias) : 의사결정 경계의 위치 (position) 결정하는 모수
- 가중치와 편의는 학습을 통해 오차제곱합이 최소가 되는 방향으로 갱신 (update)
- 최종 목표값은 비선형 활성함수 (activation function) 적용하여 구해짐
- 1) 부호 (sign) 또는 threshold 함수 : 결과는 이진형 (-1 또는 1)
- 2) 계단 (step) 함수 : 결과는 이진형 (0 또는 1)
- 3) 시그모이드 (sigmoid) 함수 : 결과는 연속형, 0<=y<=1
- 4) Softmax 함수 : 표준화지수 또는 일반화로지스틱 함수로 불림, 출력값이 여러 개로 주어지고, 목표치가 다범주인 경우 각 범주에 속할 사후 확률 제공
- 5) tanh 함수 : 결과는 연속형, -1<=y<=1
- 6) 가우스(Gauss) 함수 : 결과는 연속형, 0<=y<=1
- nn.iris <- nnet(Species~, data=iris, size=2, rang=0.1, decay=5e=4, maxit=200) : 신경망 모형 적합
- 초기값 별도 지정하지 않으면 실행될 때마다 결과 달라짐
- plot.nnet(nn.iris) : 적합결과 시각화
- 선의 굵기는 연결선의 가중치(weight)에 비례
- 아니면 clusterGeneration, scales, reshape 패키지 인스톨 후 plot(nn.iris)
- table(iris$Species, predict(nn.iris, iris, type='class') : 신경망 모형에 대한 정오분류표(confusion matrix)
- net.infert <- neuralnet(case~age+parity+induced, data=infert, hidden=2, err.fct="ce", linear.output=FALSE, likelihood=TRUE) : 패키지 {neuralnet}의 neuralnet() 함수 통해 신경망 모형 적용
- 다양한 역전파 (back-propagation) 알고리즘 이용
- plot(net.infert) : 수행 결과 시각화
- names(net.infert) : 수행 결과의 추가적인 정보 확인
- net.infert$result.matrix : 결과 행렬 정보
- 전체자료는 $data에 저장
- 모형 적합에 사용된 자료는 $covariate와 $response 통해 확인 가능
- 적합값은 $net.result에 제공
- 가중치의 초기값과 적합값은 $startweights와 $weights에 제공
- $generalized.weights : 일반화가중치 -> 각 공변량들의 효과 나타냄, 로지스틱 회귀모형에서의 회귀계수와 유사하게 해석 (각 공변량이 로그-오즈(log-odds)에 미치는 기여도 나타냄)
- 로지스틱회귀와 달리, 일반화가중치는 다른 모든 공변량에 의존 -> 각 자료점에서 국소적인 기여도 나타냄
- 모든 자료에 대한 일반화가중치의 분포는 특정 공변량의 효과가 선형적인지 여부 나타냄
- 작은 분산 -> 선형효과, 큰 분산 -> 관측치 공간상 변화가 심함, 비-선형적인 효과
- compute() : 각 뉴런의 출력값 계산 -> 이를 이용하여 새로운 공변량 조합(또는 결측 조합)에 대한 예측값 구할 수 있음
- confidence.interval() : 가중치들에 대한 신뢰구간
- 다층신경망
- 입력층 (input layer) : 자료벡터 또는 패턴 받아드림
- 은닉층 (hidden layer) : 한 개 또는 여러 개, 이전층(previous layer)으로부터 출력을 받아 가중 취한 후 비선형의 활성함수로 넘김
- 출력층 (output layer) : 최종 은닉층으로부터 결과를 받아 비선형적으로 결과 넘겨 목표값 (target value) 제공
- 가중치는 학습과정에서 오차의 역전파 (back-propagation) 알고리즘 통해 갱신
- 은닉층의 수 정할 때 고려 -> 다층신경망은 단층신경망에 비해 훈련 어려움
- 각 층의 노드 수 (units) 결정은 다음을 고려
- 출력층 노드 (output units)의 수는 출력 범주의 수로 결정
- 입력 (inputs)의 수는 입력 차우너의 수로 결정
- 은닉층 노드 (hidden units)의 수는 다음 고려
- 너무 적으면 네트워크 복잡한 의사결정 경계 만들 수 없음
- 너무 많으면 네트워크 일반화 어려움
- 패키지 {neuralnet}의 neuralnet() 함수로 다층신경망 모형 적용
- net.sqrt <- neuralnet(Output~Input, train.data, hidden=10, threshold=0.01) : threshold 옵션은 오차함수의 편미분에 대한 값, 정지규칙(stopping rule)로 사용 / hidden=c(10,8) : 은닉층 2개, 각 은닉 노드 수는 10개 8개
- plot(net.sqrt) : 다층신경망 시각화
- test.out <- compute(net.sqrt, test.data) : 자료를 compute() 함수를 통해 신경망 모형에 적용
- 장점
- 1) 변수의 수가 많거나 입, 출력 변수 간에 복잡한 비선형 관계가 존재할 때 유용
- 2) 잡음에 대해서 민감하게 반응 X
- 단점
- 1) 결과에 대한 해석 쉽지 X
- 2) 은닉층의 수와 은닉노드 수 결정이 어려움
- 3) 초기값에 따라 전역해가 아닌 지역해로 수렴할 수 있음
- 4) 모형 복잡하면 훈련과정에서 시간 많이 소요될 수도
3. 의사결정나무 모형
- 의사결정나무 (decision tree) 또는 나무(tree) 모형 : 의사결정 규칙을 나무 구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류 or 예측 수행하는 분석방법
- 분류변수와 분류기준값의 선택이 중요
- 분기되는 하위노드에서 노드(집단) 내에서는 동질성이, 노드(집단) 간에는 이질성이 가장 커지도록 선택해야
- 나무 모형의 크기는 과대적합(또는 과소적합) 되지 않도록 적절히 조절
- 뿌리 마디(root node) : 맨 위의 마디-> 분류(또는 예측) 대상이 되는 모든 자료집단
- 상위 마디를 부모마디(parent node), 하위 마디를 자식 마디(child node)
- 더 이상 분기되지 않는 마디를 최종 마디(terminal node)
- 가지분할(split) : 나무의 가지를 생성하는 과정
- 가지치기(pruning) : 생성된 가지를 잘라내어 모형을 단순화하는 과정
- 목표변수가 이산형이면 분류나무(classification tree), 연속형이면 회귀나무(regression tree)
- 분류나무인 경우 가지분할 수행할 경우 분류(기준)변수와 분류기준값의 선택 방법
- 카이제곱 통계량(Chi-Square statistic)의 p-값
- 값이 작을수록 자식 노드내의 불확실성(이질성)이 큼
- 지니 지수(Gini index), 엔트로피 지수(entropy index) 등
- 값이 클수록 자식노드 내의 이질성이 큼 -> 값들이 작아지는 방향으로 가지분할 수행
- 지니 지수의 값이 클수록 이질적, 순수도(purity) 낮음
- 불확실성 측정지표
- 지니지수와 엔트로피 지수 값의 범위는 다르나 해석은 유사
- 카이제곱 통계량(Chi-Square statistic)의 p-값
- 회귀나무인 경우 분류변수와 분류기준값의 선택 방법
- F-통계량의 p-값
- 일원배치법에서 검정통계량
- 값이 클수록 오차의 변동에 의해 처리(treatment)의 변동이 큼 -> 자식 노드(처리들) 간 이질적
- 값이 커지는 방향으로 (p-값이 작아지는) 방향으로 가지분할 수행
- 분산의 감소량 (variance reduction) 등
- 값이 최대화 되는 방향으로 가지분할 수행
- F-통계량의 p-값
- 의사결정나무의 분석과정
- 1) 목표변수와 관계가 있는 설명변수들의 선택
- 2) 분석목적과 자료의 구조에 따라 적절한 분리기준과 정지규칙 정하여 의사결정 나무 생성
- 정지규칙 : 더이상 분리가 일어나지 않고 현재 마디가 끝마디가 되도록 하는 여러 규칙, 최대 나무의 깊이, 자식마디의 최소 관측치 수, 카이제곱 통계량, 지니 지수, 엔트로피 지수 등
- 3) 부적절한 나뭇가지는 제거 : 가지치기
- 가지치기 : 끝마디가 너무 많으면 모형이 과대 적합된 상태, 분류된 관측치의 비율 또는 MSE(Mean Squared Error) 등을 고려한 수준의 가지치기 규칙 제공
- 4) 이익(gain), 위험(risk), 비용(cost) 등 고려하여 모형평가
- 5) 분류(classification) 및 예측 (prediction)
이산형 목표변수 | 연속형 목표변수 | |
CHAID (다지분할) | 카이제곱 통계량 | ANOVA F-통계량 |
CART (이진분할) | 지니지수 | 분산감소량 |
C4.5 | 엔트로피지수 |
- c <- rpart(Species~., data=iris) : 패키지 {rpart}의 rpart() 함수 이용하여 의사결정나무 분석 수행
- plot(c, compress=T, margin=0.3) : 적합된 트리모형의 시각화
- predict(c, newdata=iris, type="class") : 새로운 자료에 대한 예측 수행
- 패키지 {rpart.plot} 이용하여 여러 방식으로 시각화 가능
- prp(c, type=4, extra=2)
- $cptable : 트리의 크기에 따른 비용-복잡도 모수(cost-complexity parameter) 제공, 교차타당성오차(cross-validation error) 제공
- prune() 또는 rpart.control() 함수에서 가지치기와 트리의 최대 크기를 조절하기 위한 옵션으로 사용
- plotcp(c) : cp값을 그림으로
- tree <- ctree(ploidy~ ., data=trainData) : 패키지 {party}의 ctree() 함수 이용하여 의사결정나무모형 적용
- plot(tree) : 최종노드의 막대그래프 (barplot)은 반응변수의 각 범주별 비율 나타냄
- testPred = predict(tree, newdata=testData) : 검증용 자료에 적합모형 적용
- 최종마디는 *로 표시됨
- 연속형 반응변수에 대한 예측값은 최종 마디에 속한 자료들의 평균값이 제공 (predict() 사용)
- predict(airct, data=airq, type="node") : 해당 최종마디의 번호 출력할 때는 type="node" 옵션 사용
- where(airct)의 결과와 동일
- 장점
- 1) 구조가 단순하여 해석이 용이
- 2) 유용한 입력변수의 파악
- 3) 예측변수간의 상호작용 및 비선형성을 고려하여 분석 수행
- 4) 선형성, 정규성, 등분산성 등의 수학적 가정이 불필요한 비모수적 모형
- 단점
- 1) 분류기준값의 경계선 근방의 자료값에 대해서 오차가 클 수 있음 (비연속성)
- 2) 로지스틱회귀와 같이 각 예측변수의 효과를 파악하기 어려움
- 3) 새로운 자료에 대한 예측이 불안정할 수도
4. 앙상블 모형
- 앙상블 (ensemble) 모형 : 여러 개의 분류모형에 의한 결과 종합, 분류의 정확도 높이는 방법
- 여러 개의 훈련용 데이터 집합을 만들어 각각의 데이터 집합에서 하나의 분류기 만들어 앙상블
- 데이터 조절하는 방법 : 배깅(bagging), 부스팅(boosting)
- 랜덤포레스트(random forest) : 배깅 + feature(또는 변수)의 임의 선택 (random selection)
가. 배깅
- 배깅(bagging) : bootstrap aggregating, 원 데이터 집합으로부터 크기가 같은 표본을 여러 번 단순 임의 복원추출하여 각 표본(붓스트랩 표본)에 대해 분류기(classifiers)를 생성, 그 결과를 앙상블하는 방법
- 반복추출 방법 -> 같은 데이터가 여러번 or 아예 추출 X
- iris.bagging <- bagging(Species~., data=iris, mfinal=10) : 배깅을 이용하여 분류 수행
- plot(iris.bagging$trees[[10]])
- predict() : 새로운 자료에 대한 분류(예측) 수행
나. 부스팅
- 부스팅 (boosting) : 부스트랩 표본을 구성하는 재표본 (re-sampling) 과정에서 각 자료에 동일한 확률 부여 X, 분류가 잘못된 데이터에 더 큰 가중을 주어 표본을 추출
- 붓스트랩 표본을 추출하여 분류기 만들기 -> 분류 결과 이용, 각 데이터가 추출될 확률을 조정 -> 다음 붓스트랩 표본을 추출하는 과정을 반복
- 아다부스팅 (AdaBoosting : adaptive boosting) : 가장 많이 사용되는 부스팅 알고리즘
- boo.adabag <- boosting(Species~., data=iris, boos=TRUE, mfinal=10) : 패키지 {adabag}, 부스팅 이용하여 분류 수행
- plot(boo.adabag$trees[[10]]) : 분류 결과를 트리 형태로 나타냄
- pred <- predict(boo.adabag, newdata=iris) : 새로운 자료에 대한 분류/예측
- tb <- table(pred$class, irirs[,5] : 결과 확인
- gdis <- ada(Species~., data=iris[trind,], iter=20, nu=1, type='discrete') : 아다부스팅 수행
- gdis <- addtest(gdis, iris[teind, -5], iris[teind,5]) : 검증용 자료에 대한 분류
- gdis : 결과 확인 가능
- plot(gdis, TRUE, TRUE) : 오차와 일치도를 나타내는 카파 (kappa) 계수 그려줌, 두 개의 TRUE 옵션은 훈련용, 검증용 자료에 대한 그림 그리기 여부
- varplot(gdis) : 변수의 중요도를 나타내는 그림 제공
- pairs(gdis, iris[trind, -5], maxvar=4) : 두 예측변수의 조합별로 분류된 결과, maxvar=옵션을 통해 변수의 수(중요도가 높은 상위 변수의 수) 지정 가능
다. 랜덤포레스트
- 랜덤포레스트 (random forest) : 배깅 + 랜덤과정
- 원 자료로 부터 붓스트랩 샘플 추출, 각 붓스트랩 샘플에 대해 트리를 형성 -> 배깅과 유사
- 각 노드마다 모든 예측변수 안에서 최적의 분할 (split) 선택하는 방법 X
- -> 예측변수들을 임의로 추출, 추출한 변수 내에서 최적의 분할 만들어 나가는 방법
- 새로운 자료에 대한 예측) 분류 -> 다수결, 회귀 -> 평균 (다른 앙상블 모형과 동일)
- rf <- randomForest(ploidy~ ., data=trainData, ntree=100, proximity=TRUE)
- 정오분류표 (confusion matrix)와 오류율에 대한 OOB(out-of-bag) 추정치 제공
- 별도의 검증용 데이터 제공하지 않더라도 붓스트랩 샘플 과정에서 제외된 (out-of-bag) 자료 활용하여 검증 실시
- plot(rf) : 트리 수에 따른 종속변수의 범주별 오분류율 나타냄
- importance(rf) 또는 varImpPlot()로 변수의 중요성 파악 가능
- varImpPlot() : 각 변수의 중요도 나타내는 그림, 해당 변수로 부터 분할이 일어날 때 불순도 (impurity)의 감소가 얼마나 일어나는지 나타내는 값 (불순도의 감소가 클 수록 순수도가 증가)
- 지니 지수 (Gini index) : 노드의 불순도 나타내는 값
- 회귀 경우 잔차 제곱합(residual sum of square)을 통해 측정
- rf.pred <- predict(rf, newdata=testData)
- plot(margins(rf)) : 훈련용 자료값의 마진 나타냄
- 마진 (margins) : 랜덤포레스트 분류기 (classifiers) 가운데 정분류를 수행한 비율에서 다른 클래스로 분류한 비율의 최대치를 뺀 값 -> 양의 마진 = 정확한 분류, 음 = 정확 X
- varImpPlot() : 각 변수의 중요도 나타내는 그림, 해당 변수로 부터 분할이 일어날 때 불순도 (impurity)의 감소가 얼마나 일어나는지 나타내는 값 (불순도의 감소가 클 수록 순수도가 증가)
- cf <- cforest(ploidy ~., data=trainData) : 패키지 {party}의 cforest() 이용하여 랜포 가능
5. 모형 평가
- 분류 분석 모형의 평가 : 구축된 모형이 임의의 모형 (random model)보다 더 우수한 분류 성과를 보이는지, 고려된 모형들 중 가장 우수한 성과를 보유하는 것을 비교 분석하는 과정
- 모형 평가의 기준
- 1) 일반화의 가능성 : 같은 모집단 내의 다른 데이터에 적용하는 경우에도 안정적인 결과를 제공, 데이터를 확장하여 적용할 수 있는지?
- 2) 효율성 : 얼마나 효과적으로 구축되었는지 평가, 적은 입력변수를 필요로 할 수록 효율성이 높음
- 3) 예측과 분류의 정확성 : 구축된 모형의 정확성 측면에서 평가, 실제 문제에 적용했을 때 정확한 결과를 양산하는지
- 먼저 전체 자료 (raw data)에서 모형 구축을 위한 훈련용 자료 (training data)와 모형 성과 검증을 위한 검증용 자료 (test data) 추출
- -> 모형의 과적합화 (overfitting) 문제 해결, 잘못된 가설을 가정하게 되는 2종 오류의 발생 방지
- 대표적 : 홀드아웃 방법 (Holdout method), 교차검증 (cross-validation), 붓스트랩 (boostrap)
- 1) 홀드아웃 방법 : 주어진 원천 데이터를 랜덤하게 두 분류로 분리, 교차 검증 실시
- 하나는 모형 학습 및 구축을 위한 훈련용 자료, 다른 하나는 성과 평가를 위한 검증용 자료
- 일반적으로 70%를 훈련용, 나머지는 검증용
- 검증용 자료의 결과는 분석 모형에 영향 X, 성과 측정만
- idx <- sample(2, nrow(iris), replace=TRUE, prob=c(0.7, 0.3))
- 2) 교차검증 : 반복적으로 성과를 측정하여 결과를 평균한 것, 분류 분석 모형 평가
- c-fold 교차검증 : 전체 데이터를 사이즈가 동일한 k개의 하부 집합 (subset)으로 나누고, k번째 하부집합을 검증용 자료로, 나머지 k-1개의 하부집합을 훈련용 자료로 -> k번 반복 측정 -> 각각의 결과를 평균 낸 값을 최종 평가로 사용
- 일반적으로 c=10
- 하부집합 분포에 따라 적절한 k 설정 필요
- folds <- cut(seq(1, nrow(iris)), breaks=k, labels=FALSE)
- c-fold 교차검증 : 전체 데이터를 사이즈가 동일한 k개의 하부 집합 (subset)으로 나누고, k번째 하부집합을 검증용 자료로, 나머지 k-1개의 하부집합을 훈련용 자료로 -> k번 반복 측정 -> 각각의 결과를 평균 낸 값을 최종 평가로 사용
- 3) 붓스트랩 : 평가 반복 (교차검증과 유사)
- 관측치를 한번 이상 훈련용 자료로 사용하는 복원 추출법 (Sampling with replacement) 기반
- 일반적 0.632 붓스트랩
- 예) d개의 관측치 있는 데이터 존재, 각 관측치가 훈련용 자료로 선정될 확률 = 1/d, X= 1-1/d
- -> 훈련용 자료 선정 d번 반복, 하나의 관측치가 선정 X 확률 = (1-1/d) * d
- d가 크다고 가정할 경우, 확률은 e-1=0.368로 수렴
- -> 36.8% 관측치는 훈련용 집합으로 선정 X, 검증용 자료로 사용
- 나머지 63.2% 관측치는 훈련용 자료로 사용
- 전체 데이터의 양이 크지 않은 경우 모형 평가에 적합
- 1) 홀드아웃 방법 : 주어진 원천 데이터를 랜덤하게 두 분류로 분리, 교차 검증 실시
- 범주형 자료인 경우 평가 지표) 오분류표, ROC, 이익 도표의 향상도 곡선
가. 오분류표 (confusion matrix)
- 대부분 분류 분석 모형 예측 결과는 분류 범주로 나타남 -> 일반적으로 오분류표가 사용
예측치 | 합계 | |||
True | False | |||
실제값 | True | TP | FN | P |
False | FP | TN | N | |
합계 | P' | N' | P+N |
- 오분류표 설명
- TP (True Positives) : 실제값과 예측치 모두 True인 빈도
- TN (True Negatives) : 실제값과 예측치 모두 False인 빈도
- FP (False Positives) : 실제값은 False이나 True로 예측한 빈도
- FN (False Negatives) : 실제값은 True이나 False로 예측한 빈도
- 정분류율 (accuracy, recognition rate) : 전체 관측치에서 실제값과 예측치가 일치한 정도
- 범주의 분포가 균형을 이룰 때 효과적인 평가 지표
- accuracy = (TP + TN) / (P+N)
- 오분류율 (error rate, misclassification rate) : 전체 관측치 중 실제값과 예측치가 다른 정도, 1-accuracy
- error rate = (FP + FN) / (P+N) = 1 - accuracy = 1 - (TP + TN) / (P+N)
- 범주 불균형 문제 (class imbalance problem)을 가지고 있는 데이터의 평가지표는 중요한 분류범주만 다루어야
- 예) 암환자 분류모형
- 1) 민감도 (sensitivity) : 실제값이 True인 관측치 중 예측치가 적중한 정도
- sensitivity = TP / P
- 2) 특이도 (specificity) : 실제값이 False인 관측치 중 예측치가 적중한 정도
- specificity = TN / N
- 오분류표를 사용한 평가지표
- 1) 정확도 (precision) : True로 예측한 관측치 중 실제값이 True 인 정도를 나타내는 정확성 (exactness) 지표
- Precision = TP / TP + FP
- 2) 재현율 (Recall) : 실제값이 True인 관측치 중 예측치가 적중한 정도를 나타냄, 민감도와 동일, 완전성 (completeness) 지표
- Recall = TP / (TP + FN) = TP / P
- 1) 정확도 (precision) : True로 예측한 관측치 중 실제값이 True 인 정도를 나타내는 정확성 (exactness) 지표
- 정확도와 재현율을 trade-off 관계 -> F1 지표 (F1 score), F베타 지표
- 1) F1 = 2 * Precision * Recall / (Precision + Recall)
- 정확도와 재현율의 조화평균
- 정확도와 재현율에 같은 가중치 부여, 평균
- 2) F베타 = (1+베타^2) * Precision * Recall / (베타^2 * Precision + Recall)
- 베타는 양수, 베타의 값 만큼 재현율에 가중치 주어 평균
- 예) F2 : 재현율에 정확도의 2배만큼 가중치 부여, F0.5 : 정확도에 2배 가중치 부여
- 1) F1 = 2 * Precision * Recall / (Precision + Recall)
- 패키지 {caret}의 confusionMatrix() : 오분류표 도출, 반드시 install.package('e1071') 하기
- accuracy <- c(nn_con$overall['Accuracy'], dt_con$overall['Accuracy'])
- precision <- c(nn_con$byClass['Pos Pred Value'], dt_con$byClass['Pos Pred Value'])
- recall<- c(nn_con$byClass['Sensitivity], dt_con$byClass['Sensitivity'])
- f1 <- 2 * ((precision * recall) / (precision + recall))
나. ROC 그래프
- ROC (Receiver Operating Characteristic)
- x축에는 FP Ratio(1-특이도), y축은 민감도
- 평가 기준 : ROC 그래프의 밑부분 면적 (Area Under the ROC Curve, AUC)가 넓을수록 좋은 모델로 평가
- x축, y축 모두 0인 경우 -> 모두 False로 분류
- x축, y축 모두 1인 경우 -> 모두 True로 분류
- 이상적으로 완벽히 분류한 모형 : x축 0, y축 1 -> AUC가 1로 도출
- -> 1에 가까울수록 좋은 모형
- neural_ROC <- ROC(form=case~net_pred, data=testData, plot='ROC') : 패키지 {Epi}의 ROC() 함수
- Area under the curve : (AUC 값)
다. 이익도표와 향상도 곡선
- 이익(gain) : 목표 범주에 속하는 객체들이 각 등급에 얼마나 분포하는지 나타내는 값
- 이익 도표 (gain chart) : 해당 등급에 따라 계산된 이익값을 누적으로 연결한 도표
- 분류 분석 모형을 사용하여 분류된 관측치가 각 등급별로 얼마나 포함되는지 나타냄
- 향상도 곡선 (lift curve) : 랜덤 모델과 비교, 해당 모델의 성과가 얼마나 향상되었는지 각 등급별로 파악
- 상위 등급의 향상도가 매우 크고 하위 등급으로 갈 수록 향상도가 감소 -> 예측력 적절
- 등급 관계 없이 향상도 차이 X -> 예측력 좋지 않음
- 모델들 간 향상도 곡선 비교 평가에는 패키지 {ROCR} 사용
- {Epi} 패키지의 ROC() 함수는 두 그래프 같이 나타내기 어려움
- library(ROCR)
- n_p <- performance(n_r, 'tpr', 'fpr') # ROC graph for neural network
- d_p <- performance(d_r, 'tpr', 'fpr') # ROC graph for decision tree
- n_lift <- performance(n_r, 'lift', 'rpp')
- plot(n_lift, col='red')
- abline(v=0.2) -> 상위 20% 집단에 대해 랜덤모델과의 비교
제 3절 군집 분석
- 군집 분석 (cluster analysis) : 각 개체에 대해 관측된 여러 개의 변수 값들로부터 n개의 개체를 유사한 성격을 가지는 몇 개의 군집으로 집단화, 형성된 군집들의 특성을 파악하여 군집들 사이의 관계 분석하는 다변량분석 기법
- 반응변수 X, 개체들 간의 유사성 (similarity)에만 기초
- 이상값 탐지에 사용
1. 계층적 군집
- 계층적군집 (hierarchical clustering) : 가장 유사한 개체를 묶어 나가는 과정 반복, 원하는 개수의 군집 형성 방법
- 계통도 또는 덴드로그램(dendrogram)의 형태로 결과 주어짐
- 각 개체는 하나의 군집에만 속함
- 유사성에 다양한 정의 O
- 군집간의 연결법에 따라 결과 달라질수도
- 계층적군집 형성 방법
- 1) 병합적 (agglomerative) 방법 : 작은 군집에서 출발, 군집 병합
- 한 개의 항목에서 시작
- 형성 매 단계마다 모든 그룹 쌍 간의 거리 계산하여 가까운 순으로 병합 수행
- 한 개 그룹만 남을 때까지 혹은 종료 조건 될 때까지 반복
- 항목간 상대적 거리가 가까울수록 유사성 (similarity) 높음
- 2) 분할적 (divisive) 방법 : 큰 군집에서 출발, 군집 분리
- 1) 병합적 (agglomerative) 방법 : 작은 군집에서 출발, 군집 병합
- 계층적 군집의 결과는 덴드로그램 (dendrogram)으로
- 항목간의 거리, 군집간의 거리 알 수 있음
- 군집 내 항목 간 유사정도 파악 -> 군집의 견고성 해석 가능
- 두 군집간의 거리 측정 방법
- 1) 최단연결법 또는 단일연결법 (single linkage method) : 각 군집에서 하나씩 관측값을 뽑았을 때 나타낼 수 있는 거리의 최소값으로 측정
- 사슬 모양 생길 수 있음
- 고립된 군집 찾는데 중점
- 2) 최장연결법 또는 완전연결법 (complete linkage method) : 각 군집에서 하나씩 관측값 뽑았을 때 나타낼 수 있는 거리의 최대값으로 측정
- 같은 군집에 속하는 관측치는 알려진 최대 거리보다 짧음
- 군집들의 내부 응집성에 중점
- 3) 중심연결법 (centroid linkage) : 두 군집의 중심 간의 거리 측정
- 두 군집이 결합될 때 새로운 군집의 평균은 가중평균으로
- 4) 평균연결법 (average linkage) : 모든 항목에 대한 거리 평균 구하면서 군집화 진행, 계산량 불필요하게 많아질수도
- 5) 와드연결법 (ward linkage) : 군집내의 오차제곱합 (error sum of square)에 기초하여 군집 수행
- 보통 두 군집이 합해지면 병합된 군집의 오차제곱합은 이전 각 군집의 오차제곱합의 합보다 커짐
- 증가량이 가장 작아지는 방향으로 군집 형성
- 크기가 비슷한 군집끼리 병합하는 경향
- 1) 최단연결법 또는 단일연결법 (single linkage method) : 각 군집에서 하나씩 관측값을 뽑았을 때 나타낼 수 있는 거리의 최소값으로 측정
- 거리 정의 (모든 변수가 연속형인 경우)
- 1) 수학적 거리
- 유클리드 거리, 맨하튼 또는 시가 거리, 만코우스키 거리
- 2) 통계적 거리
- 표준화 거리 : 변수의 측정단위를 표준화한 거리
- 마할라노비스 거리 : 변수 표준화 + 변수 간의 상관성 (분포 형태) 고려
- 그 외) 체비세프 거리, 켄버라 거리, 유사성 측도인 코사인 거리, 상관계수 등
- 1) 수학적 거리
- 거리 정의 (모든 변수가 명목형인 경우)
- 개체 i와 j간의 거리
- d(i, j) = (개체 i와 j에서 다른 값을 가지는 변수의 수) / (총변수의 수)
- 유사성 측도인 단순 일치 계수, 자카드 계수 등
- 순서형 자료인 경우 순위 상관 계수 이용
- 개체 i와 j간의 거리
- 유사성 (similarity)와 거리 (distance)는 반대 개념
- 병합적 방법 -> hclust{stats 패키지}와 {cluster} 패키지의 agnes(), mclust() 함수
- 분할적 방법 -> {cluster} 패키지의 diana(), mona() 함수
- d <- dist(USArrests, method='euclidean') : dist()는 거리(또는 비유사성) 행렬 제공 합수, method=옵션 통해 다양하게 거리 정의 할 수 있음 (euclidean, maximum, manhattan, binary, minkowski 등)
- fit <- hclust(d, method='ave') : 계층적 군집 분석 수행, method=옵션을 통해 병합(또는 연결) (ward, single, complete, average, centroid)
- plot(fit) : 덴드로그램으로 시각화
- groups <- cutree(fit, k=6) : 계층적군집의 결과를 이용하여 tree의 높이(h)나 그룹의 수(k)를 옵션으로 지정하여 원하는 수의 그룹 나눌 수 있음
- rect.hclust(fit, k=6, border='red') : 각각의 그룹을 사각형으로 구분지어 나타낼 수 있음
- rect.hclust(hca, h=50, which=c(2,7), border=3:4) : 그룹수 (k)를 이용하여 그룹 시각화, tree의 높이(h)와 위치(which)를 이용하여 그룹의 전체 또는 일부 나타냄
- agn1 <- agnes(USArrests, metric='manhattan', stand=TRUE) : 패키지 {cluster}, 병합적 방법 사용, metric=옵션을 통해 euclidean, manhattan 등의 거리 지정, method=옵선을 통해 병합(또는 연결) 방법 지정
- agn2 <- agnes(daisy(USArrests), diss=TRUE, method='complete') : metric 옵션 X, daisy() 이용하여 거리 계산 가능, 데이터 관측치 사이의 거리를 계산
- 자료의 형태가 수치형일 필요 X -> dist() 함수보다 유연
- 옵션에는 euclidean, manhattan, gower 등
- 계층적군집의 특징
- 1) 매 단계에서 지역적 (local) 최적화를 수행해 나가는 방법 사용 -> 결과가 전역적 (global) 최적해라 볼 수 X
- 2) 병합적 방법에서 한 번 군집 형성, 군집에 속한 개체는 다른 군집으로 이동 X
- 3) 중심연결법, 와드연결법 등은 군집의 크기에 가중 두어 병합 시도 -> 크기가 큰 군집과의 병합이 유도될수도
2. k-평균 군집
- k-평균군집 (k-means clustering) : 원하는 군집 수만큼 (k개) 초기값을 지정, 각 개체(데이터)를 가까운 초기값에 할당하여 군집 형성, 각 군집의 평균을 재계산하여 초기값을 갱신
- 알고리즘
- 1) 초기 (군집의) 중시므올 k개의 객체를 임의 선택
- 2) 각 자료를 가장 가까운 군집 중심에 할당
- 자료들의 군집의 중심점(평균)으로부터의 오차제곱합이 최소가 되도록 각 자료 할당
- 3) 각 군집 내의 자료들의 평균을 계산, 군집의 중심을 갱신 (update)
- 4) 군집 중심의 변화가 거의 없을 때 (또는 최대 반복수)까지 단계2와 단계3을 반복
- 알고리즘
- 군집의 수 (k)는 미리 정해주어야
- k-개의 초기 중심값은 임의로 선택 가능, 그러나 무작위 선택이 편리
- 초기 중심점들을 서로 멀리 떨어져 있는 것이 바람직
- 초기값에 따라 군집 결과가 달라질수도
- 군집의 매 단계마다 군집 중심으로부터의 오차제곱합을 최소화하는 방향으로 군집 형성 (부분 최적화)
- -> 탐욕적 (greedy) 알고리즘으로 간주
- 안정된 군집은 보장
- 전체적으로 최적이라는 보장 X
- 단순, 빠르게 수행, 계층적 군집보다 많은 양의 자료 다룰 수 있음
- 평균 등 거리 계산 기반 -> 모든 변수가 연속적이어야
- 단점
- 1) 잡음이나 이상값에 영향 많이 받음 (군집 중심 계산 과정에서)
- 대신 매 단계마다 중앙값을 사용하는 k-중앙값(k-medoids) 군집 사용할 수 있음 (pam())
- k-평균군집 수행 전 탐색적 자료분석을 통해 이상값 미리 제거
- 2) 볼록한 형태가 아닌 (non-convex) 군집 (예 U-형태)이 존재할 경우 성능 떨어짐
- 1) 잡음이나 이상값에 영향 많이 받음 (군집 중심 계산 과정에서)
- kmean() : k-평균군집 수행
- 임의 선택 초기값에 따라 결과 달라지는 것 방지하기 위해 set.seed() 사용
- nstart=옵션 : 다중 (multiple)의 초기값에 대해 k-평균 군집 수행, 그 가운데 최적의 결과 제시 (nstart=25 추천)
- 군집의 수 미리 정해야 -> 패키지 {Nbclust}를 통해 적절한 군집의 수에 대한 정보 얻을 수 있음
- 군집 수에 따른 집단 내 제곱합 (within-groups sum of squares)의 그래프 그려보는 것도 도움
- nc : 고려할 군집의 최대 수, seed: 난수 발생 초기값
- 군집 수에 따른 집단 내 제곱합 (within-groups sum of squares)의 그래프 그려보는 것도 도움
- df <- scale(wine[-1]) : 변수의 측정 단위(또는 범위)가 다르므로 scale() 함수를 이용해 표준화 수행
- wssplot(df) : 적절한 군집 수 정하기 위한 그래프 그리기
- 오차제곱합이 크게 감소된 군집수 지점 선택
- nc <- NbClust(df, min.nc=2, max.nc=15, method='kmeans') : Nbclust{Nbclust} 이용, 군집수 결정, 예제에서는 3을 최적의 군집수로 투표(majority voting)한 결과 보여줌
- fit.km <- kmeans(df, 3, nstart=25) : 군집수 3으로 kmeans() 수행
- plot(df, col=fit.km$cluster) : 군집 결과 시각화
- aggregate(wine[-1], by=list(cluster=fit.km$cluster), mean) : 각 군집별로 변수의 요약값을 측정단위의 척도로 나타냄
- ct.km <- table(wine$Type, fit.km$cluster) : k-평균군집의 결과에 대한 정오분류표 제시
- randIndex(ct.km) : 실제 값과 군집간의 일치도 (agreement) 나타내는 수정된 순위 지수 (adjusted rank index) 구할 수 있음
- '수정된' = 우연에 의해 발생되는 경우를 고려한 값
- -1 (no agreement)와 1(perfect agreement) 사이의 값을 가짐
- c1 <- kcca(Nclus, k=4, family=kccaFamily('kmeans')) : 패키지 {flexclust}의 kcca() 함수 이용하여 k-평균군집 수행
- 패키지 {flexclust}는 다양한 시각화 기능 제공
- image(c1)
- points(Nclus)
- barplot(c1) : 각 군집의 (변수별) 중심이 전체 군집의 중심 (상자 안의 막대)으로부터 얼마나 벗어나 있는지 나타냄
- stripes(c1) : 줄무늬 이용, 각 군집내의 자료들이 해당 군집의 평균으로부터 얼마나 떨어져 있는지 나타냄
- kcca() 함수 : k-중심군집 수행, family=옵션을 이용하여 kmeans, kmedians, angle, jaccard 또는 ejaccard 방법 이용 가능
- 적용 결과는 image{graphics}, barplot{graphics}, barchart{lattice}, stripes{flexclust} 함수 등으로 시각화 가능
- c1.1 <- cclust(Nclus, 4, 20, method='kmeans') : 패키지 {cclust}, cclust()는 convex clustering 수행 함수, 패키지 {flexclsut}에 동일 기능 동일 기능 함수 있음
- method=옵션에는 kmeans, hardcl, neuralgas
- kmeans : MacQueen의 고전적인 kmeans 알고리즘 사용
- hardcl : hard competitive learning 방법 사용
- neuralgas : neural gas 알고리즘 사용
- clusplot(Nclus, c1.1$cluster) : 패키지 {cluster}의 clusplot() 함수는 2차원의 군집 그래프 그려줌, 군집의 반경과 관계까지 확인 가능
- method=옵션에는 kmeans, hardcl, neuralgas
- k-평균 군집 수행 함수
- kmeans{stats}
- kcca{flexclust}
- cclust{flexclust}
- cclust{cclust}
- Kmeans{amap} : kmeans와 사용법 유사
- pam() 함수 : k-중앙값군집 (k-medoids clustering) 수행
- pam = partitioning around medoids
3. 혼합 분포 군집
- 혼합분포군집 (mixture distribution clustering) : 모형-기반 (model-based) 군집 방법
- 데이터가 k개의 모수적 모형 (흔히 정규분포 or 다변량 정규분포 가정)의 가중합으로 표현되는 모집단 모형으로부터 나왔다는 가정
- 모수와 함께 가중치를 자료로부터 추정하는 방법 사요ㅛㅇ
- k개의 각 모형 = 군집
- 각 데이터는 추정된 k개의 모형 중 어느 모형으로부터 나왔을 확률이 높은지에 따라 군집의 분류가 이루어짐
- 흔히 모수와 가중치의 추정 (최대가능도추정)에는 EM 알고리즘 사용
- 예) 다봉형의 형태, 여러 개의 이변량 정규분포의 결합
- 매우 복잡한 형태의 자료라도 충분한 개수의 정규분포를 고려하면 모집단 분포를 잘 근사해낼 수 있음
- 혼합모형 (mixture model) : M개의 분포(성분)의 가중합으로 표현
- = ∑(혼합 모델을 이루는 단일 확률밀도함수) * (i번째 군집이 혼합모형에서 차지하는 중요도 또는 가중치)
- 혼합분포에서의 모수 추정은 가능도함수에 기초한 최대가능도추정이 쉽지 X
- 가능도함수(또는 로그-가능도 함수)의 표현식이 복잡 -> 미분 통한 이론적 전개 쉽지 않음
- 따라서 EM 알고리즘 사용
- EM 알고리즘
- 가정) 모집단을 구성하는 각 집단의 분포는 정규분포 따름
- 각 자료가 어느 집단에 속하는지에 대한 정보를 가지는 잠재변수 (latent variable) Z 도입
- 모수에 대한 초기값이 주어져 있다면 (즉, 초기 분포를 안다면) 각 자료가 어느 집단에서 나올 확률이 높은지에 대한 추정 가능 (E-단계)
- 각 자료에 대한 Z의 조건부분포 (어느 집단에 속할 지에 대한)로부터 조건부 기댓값 구하기
- -> 관측변수 X와 잠재변수 Z를 포함하는 (X, Z)에 대한 로그-가능도함수 (보정된 augmented 로그-가능도함수)
- Z 대신 상수값인 Z의 조건부 기댓값 대입
- -> 로그-가능도함수를 최대로 하는 모수를 찾을 수 있음 (M-단계)
- -> 관측변수 X와 잠재변수 Z를 포함하는 (X, Z)에 대한 로그-가능도함수 (보정된 augmented 로그-가능도함수)
- 갱신된 모수 추정치에 대해 위 과정 반복 -> 수렴하는 값 얻게됨, 최대가능도추정치로 사용
- (정리)
- (1) E-단계 : 잠재변수 Z의 기대치 계산
- (2) M-단계 : 잠재변수 Z의 기대치를 이용, 파라미터 추정
- 정규혼합분포의 추정과 군집화 : 패키지 {mixtools}, {mclust}, {nor1mix}, {HDclassif}, {EMcluster}
- 패키지 {mixtools}의 normalmixEM() 함수 이용하여 혼합분포군집 수행
- wait1 <- normalmixEM(waiting, lamba=.5, mu=c(55,80), sigma=5)
- plot(wait1, density=TRUE, cex.axis=1.4, cex.lab=1.4 ~~ ) : 시각화
- 패키지 {mclust}의 Mclust() 함수 이용
- mc <- Mclust(iris[, 1:4], G=3)
- plot.Mclust(mc) : 시각화
- str(mc) : 각 개체가 어느 그룹으로 분류되었는지 파악
- predict(mc, data=)
- 혼합분포군집모형의 특징
- 1) k-평균군집의 절차와 유사하나, 확률분포를 도입하여 군집을 수행하는 모형-기반의 군집 방법
- 2) 군집은 몇 개의 모수로 표현 가능, 서로 다른 크기나 모양의 군집 찾을 수 있음
- 3) EM 알고리즘을 이용한 모수 추정에서 데이터가 커지면 수렴하는데 시간이 걸릴 수 있음, 군집의 크기가 너무 작으면 추정 정도가 떨어지거나 어려울 수도
- 4) k-평균군집과 마찬가지로 이상값 자료에 민감 -> 사전 조치 필요
4. SOM (Self-Organizing Maps)
- SOM (Self-organizing maps, 자기조직화지도) 알고리즘, 코호넨 맵 (Kohonen Maps)
- 비지도 신경망 (unsupervised neural network)
- 고차원의 데이터를 이해하기 쉬운 저차원의 뉴런으로 정렬, 지도 (map) 형태로 형상화
- 입력 변수의 위치 관계를 그대로 보존
- 실제 공간 가까이 -> 지도상 가까이
- 입력 변수의 정보와 그들의 관계가 지도상에 그대로 나타남
- 두 개의 인공신경망 층으로 구성
- 1) 입력층 (input layer : 입력벡터를 받는 층)
- 입력 변수의 개수와 동일하게 뉴런 수 존재
- 2) 경쟁층 (competitive layer)
- 2차원 격차 (grid)로 구성
- 입력 벡터의 특성에 따라 벡터가 한 점으로 클러스터링 되는 층
- 사용자가 미리 정해놓은 군집의 수만큼 뉴런 수 존재
- 입력층의 자료는 학습을 통해 경쟁층에 정렬 -> 지도 (map)
- 입력층의 각 뉴런은 경쟁층의 각 뉴런과 연결 -> 완전 연결 (fully connected) 되어 있음
- 1) 입력층 (input layer : 입력벡터를 받는 층)
- 각 학습 단계에서 입력층의 데이터 집합으로부터 하나의 표본 벡터 (sample vector) x가 임의로 선택
- -> 프로토타입 벡터 (prototype vector, 경쟁층의 각 뉴런)와의 거리를 유클리드 거리에 의해 계산, 비교
- -> 입력층의 표본 벡터에 가장 가까운 프로토타입 벡터를 선택, BMU (Best-Matching Unit)이라 명명
- -> 코호넨의 승자 독점의 학습 규칙에 따라 BMU와 위상학적 이웃 (topological neighbors)에 대한 연결 강도 조정
- 경쟁 학습으로 각 뉴런이 입력 벡터와 얼마나 가까운가를 계산, 연결 강도 (connection weight)를 반복적으로 재조정하여 학습
- -> 연결강도는 입력 패턴과 가장 유사한 경쟁층 뉴런이 승자
- -> 승자 독식 구조로 승자 뉴런만 나타남, 승자와 유사한 연결 강도를 갖는 입력 패턴이 동일한 경쟁 뉴런으로 배열
- 역전파 X -> 단 하나의 전방 패스 (feed-forward flow) 사용
- 수행 속도 빠름 -> 잠재적으로 실시간 학습 처리 가능
- 특징
- 1) 고차원 -> 저차원 지도 형태로, 시각적으로 이해 쉬움
- 2) 입력 변수의 위치 관계를 그대로 보존 -> 실제 데이터가 유사하면 지도상에 가깝게 표현
- -> 패턴 발견, 이미지 분석 등에 뛰어난 성능
- wine.som <- som(data=wines.sc, grid = somgrid(5,4,'hexagonal'), rlen=100, alpha=c(0.05, 0.01), toroidal=False, keep.data=TRUE) : 5 * 4 SOM 군집 분석 수행
- plot(wine.som, main='Wine data') : 시각화, 범례의 크기 이용하여 해석
- summary(wine.som) : 군집 분석 결과 요약 표시
- plot.kohnene의 SOM 플롯은 그리드 형식 및 색상 변형을 위한 다양한 형식 지원
- dists <- unit.distances(wine.som$grid, toroidal=FALSE) : 유니트 사이의 거리 계산법
- 패키지 {ggplot2 이용하여 SOM 그리드를 SPSS Modeler와 유사하게 도식화
- p <- ggplot(wines.sc, aes(clusterX, clusterY))
제 4절 연관 분석
1. 연관규칙
가. 연관규칙의 개념
- 연관규칙 (association rule) : 항목들 간의 '조건-결과식'으로 표현되는 유용한 패턴
- 연관 분석 (association analysis) : 연관규칙을 발견해내는 것, 장바구니분석 (market basket analysis)
- 마케팅 분야에서 많이 사용, 장바구니 (market basket) 데이터 사용
- 트랜잭션 (transaction) : 장바구니 하나에 해당하는 정보
- 장바구니 데이터는 주로 트랜잭션 사이의 연관성 살펴보는 것, 빈번한 규칙 찾기
- 연관 규칙은 일반적으로 잘 알려진 사실이 아니라, 분명하고 유용해야 함
- 'If-A then B" (조건과 반응)으로 표현되는 규칙을 연관규칙이라고 함
- 모든 규칙이 유용하지 않을수도
나. 연관규칙의 측정지표
- 도출된 연관규칙이 얼마나 유의미 평가지표
- 1) 지지도 (support) : 전체 거래 중 품목 A, B가 동시에 포함되는 거래의 비율
- 지지도 = P(A∩B) = (A와 B가 동시에 포함된 거래수) / (전체 거래수)
- 전체 구매 경향 파악 가능
- 연관규칙이 적용성이 있는지 판단 가능, 불필요한 분석 대폭 줄일 수 있음
- 얼마나 빈번하게 나타나는 경우인지 설명하는 상대적인 값
- cf) 전체 트랜잭션 = POS 데이터에서는 영수증번호, 카드사에서는 카드전표 1장
- 여러 품목이 하나의 POS 트랜잭션에 연결
- 2) 신뢰도 (confidence) : 품목 A가 포함된 거래 중 품목 A, B를 동시에 포함하는 거래일 확률
- 신뢰도 = P(A∩B) / P(A) = (A와 B가 동시에 포함된 거래수) / (A를 포함하는 거래수)
- 연관성의 정도 파악
- A -> B로 표현 (B-> A는 아님)
- 3) 향상도 (lift) : 품목 B를 구매한 고객 대비 품목 A을 구매한 후 품목 B를 구매하는 고객에 대한 확률
- 향상도 = P(B|A) / P(B) = P(A∩B) / P(A)P(B) = (A와 B를 포함하는 거래수) / (A를 포함하는 거래수*B를 포함하는 거래수)
- 연관규칙 A -> B
- 품목 A와 품목 B의 구매가 서로 관련 없는 경우 P(B|A) = P(B) --> 향상도는 1
- 향상도가 1보다 크면 이 규칙을 결과 예측 우수
- 1보다 작으면 우연적 기회보다 도움이 되지 않음
- 향상도 = 1 : 두 품목간에 연관성이 없는 서로 독립적인 관계
- 향상도 < 1 : 음의 관계, 품목 A와 품목 B는 연관성이 없음
- 향상도 > 1 : 양의 관계, 품목 B를 구매할 확률보다 품목 A를 구매한 후에 품목 B를 구매할 확률이 더 높음 -> 연관성 높
- 1) 지지도 (support) : 전체 거래 중 품목 A, B가 동시에 포함되는 거래의 비율
- 최소 지지도를 정해 규칙을 도출
- 처음에는 5% 정도로 임의 설정해 산출
- 계산 속도와 의미가 현실적인지, 규칙은 충분히 도출되었는지에 따라 지지도 조절, 다양한 시도
- 지지도를 높은 값에서 낮은 값으로 10, 5, 1, 0.1% 낮추어가며 실행해야 효율적
다. 연관 분석 절차
- 최소 지지도를 갖는 연관규칙을 찾는 대표적 방법 : Apriori 알고리즘
- 최소 지지도보다 큰 집합만을 대상으로 높은 지지도를 갖는 품목 집합을 찾는 것
- 분석 절차
- 1) 최소 지지도 설정
- 2) 개별 품목 중에서 최소 지지도를 넘는 모든 품목 찾기
- 3) 찾은 개별 품목만을 이용하여 최소 지지도를 넘는 2가지 품목 집합 찾기
- 4) 찾은 품목 집합을 결합하여 최소 지지도를 넘는 3가지 품목 집합 찾기
- 5) 반복 수행해 최소 지지도가 넘는 빈발품목 집합 찾기
라. 연관 분석의 장점
- 1) 탐색적 기법 : 조건 반응(if-then)으로 표현, 결과 이해 쉬움
- 2) 강력한 비목적성 분석기법 : 분석 방향이나 목적이 없는 경우 목적변수가 없으므로 유용
- 3) 사용이 편리한 분석 데이터의 형태 : 데이터 변환 없이 그 자체로 사용 가능
- 4) 계산의 용이성 : 간단
마. 연관규칙의 단점
- 1) 상당한 수의 계산과정 : 품목수 증가, 계산 늘어남
- 2) 적절한 품목의 결정 : 너무 세분화된 품목을 가지고 연관규칙 찾으면 의미 없는 분석 결과가 나올 수도
- 3) 품목의 비율차이 : 상대적으로 거래량 적은 품목은 포함된 거래수 적을 것, 규칙 발견시 제외하기 쉬움
바. 순차패턴
- 고객의 시간에 따른 구매 정보 활용하여 연관규칙 발견하기도
- 구매 순서가 고려 -> 상품 간의 연관성 측정, 유용한 연관규칙 찾는 기법
- 구매시점에 대한 정보 필요
2. 실습
- as(Adult, 'data.frame') : 트랜잭션 데이터를 원하는 형태의 데이터 형식 (데이터 프레임) 으로
- rules <- apriori(Adult) : 연관분석, arules 패키지 사용
- inspect(head(rules) : apriori 함수를 통해 발굴한 규칙 보여줌
- 결과에서 lhs(left hand side)에 해당 항목 없는 경우 rhs(right hand side) 결과가 나타남 - 무의미
- -> 이를 방지하기 위해 지지도, 신뢰도 조정하여 규칙 발굴해야
- 결과에서 lhs(left hand side)에 해당 항목 없는 경우 rhs(right hand side) 결과가 나타남 - 무의미
- adult.rules <- apriori(Adult, parameter=list(support=0.1, confidence=0.6), appearance=list(rhs=c('income=small', 'income=large'), default='lhs'), control=list(verbose=F)) : 지지도와 신뢰도 값 지정, 좀더 유의미한 결과 나올 수 있도록, 또한 rhs를 income 변수에 대해 small 인지 large인지에 대한 규칙 나올 수 있도록 하여 income 변수에 대한 연관 규칙 출력
- 발굴 연관규칙 시각화 패키지 {arulesViz}
- plot(adult.rules.sorted, method='scatterplot') : 연관규칙 산점도
- plot(adult.rules.sorted, method='graph', control=list(type='items', alpha=0.5)) : 연관규칙 관계도
- inspect(head(rules) : apriori 함수를 통해 발굴한 규칙 보여줌
'기타 > ADSP' 카테고리의 다른 글
[ADSP 정리] (과목 3) 제 2장 통계 분석 (0) | 2020.02.06 |
---|---|
[ADSP 정리] (과목 3) 제1장 R 기초와 데이터 마트 (1) | 2020.02.05 |
[ADSP 정리] (과목 2) 제 2장 분석 마스터 플랜 (0) | 2020.01.21 |
[ADSP 정리] (과목 2) 제 1장 - 제 4절 분석 프로젝트 관리 방안 (0) | 2020.01.21 |
[ADSP 정리] (과목 2) 제 1장 - 제 3절 분석 과제 발굴 (0) | 2020.01.21 |