Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

데이터 분석 공부

[ADSP 정리] (과목 3) 제3장 정형 데이터 마이닝 본문

기타/ADSP

[ADSP 정리] (과목 3) 제3장 정형 데이터 마이닝

data-data-science 2020. 2. 11. 12:21

과목 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) 낮음
      • 불확실성 측정지표 
      • 지니지수와 엔트로피 지수 값의 범위는 다르나 해석은 유사 
  • 회귀나무인 경우 분류변수와 분류기준값의 선택 방법 
    • F-통계량의 p-값
      • 일원배치법에서 검정통계량 
      • 값이 클수록 오차의 변동에 의해 처리(treatment)의 변동이 큼 -> 자식 노드(처리들) 간 이질적 
      • 값이 커지는 방향으로 (p-값이 작아지는) 방향으로 가지분할 수행 
    • 분산의 감소량 (variance reduction) 등
      • 값이 최대화 되는 방향으로 가지분할 수행 
  • 의사결정나무의 분석과정
    • 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
  • 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)
      • 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% 관측치는 훈련용 자료로 사용 
        • 전체 데이터의 양이 크지 않은 경우 모형 평가에 적합 
  • 범주형 자료인 경우 평가 지표) 오분류표, 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
  • 정확도와 재현율을 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배 가중치 부여 
  • 패키지 {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) 방법 : 큰 군집에서 출발, 군집 분리
  • 계층적 군집의 결과는 덴드로그램 (dendrogram)으로 
    • 항목간의 거리, 군집간의 거리 알 수 있음
    • 군집 내 항목 간 유사정도 파악 -> 군집의 견고성 해석 가능 
  • 두 군집간의 거리 측정 방법 
    • 1) 최단연결법 또는 단일연결법 (single linkage method) : 각 군집에서 하나씩 관측값을 뽑았을 때 나타낼 수 있는 거리의 최소값으로 측정 
      • 사슬 모양 생길 수 있음 
      • 고립된 군집 찾는데 중점
    • 2) 최장연결법 또는 완전연결법 (complete linkage method) : 각 군집에서 하나씩 관측값 뽑았을 때 나타낼 수 있는 거리의 최대값으로 측정 
      • 같은 군집에 속하는 관측치는 알려진 최대 거리보다 짧음 
      • 군집들의 내부 응집성에 중점 
    • 3) 중심연결법 (centroid linkage) : 두 군집의 중심 간의 거리 측정 
      • 두 군집이 결합될 때 새로운 군집의 평균은 가중평균으로 
    • 4) 평균연결법 (average linkage) : 모든 항목에 대한 거리 평균 구하면서 군집화 진행, 계산량 불필요하게 많아질수도
    • 5) 와드연결법 (ward linkage) : 군집내의 오차제곱합 (error sum of square)에 기초하여 군집 수행 
      • 보통 두 군집이 합해지면 병합된 군집의 오차제곱합은 이전 각 군집의 오차제곱합의 합보다 커짐 
      • 증가량이 가장 작아지는 방향으로 군집 형성
      • 크기가 비슷한 군집끼리 병합하는 경향
  • 거리 정의 (모든 변수가 연속형인 경우)
    • 1) 수학적 거리
      • 유클리드 거리, 맨하튼 또는 시가 거리, 만코우스키 거리 
    • 2) 통계적 거리
      • 표준화 거리 : 변수의 측정단위를 표준화한 거리
      • 마할라노비스 거리 : 변수 표준화 + 변수 간의 상관성 (분포 형태) 고려 
    • 그 외) 체비세프 거리, 켄버라 거리, 유사성 측도인 코사인 거리, 상관계수 등 
  • 거리 정의 (모든 변수가 명목형인 경우) 
    • 개체 i와 j간의 거리 
      • d(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-형태)이 존재할 경우 성능 떨어짐 
  • kmean() : k-평균군집 수행
    • 임의 선택 초기값에 따라 결과 달라지는 것 방지하기 위해 set.seed() 사용
    • nstart=옵션 : 다중 (multiple)의 초기값에 대해 k-평균 군집 수행, 그 가운데 최적의 결과 제시 (nstart=25 추천) 
  • 군집의 수 미리 정해야 -> 패키지 {Nbclust}를 통해 적절한 군집의 수에 대한 정보 얻을 수 있음
    • 군집 수에 따른 집단 내 제곱합 (within-groups sum of squares)의 그래프 그려보는 것도 도움
      • nc : 고려할 군집의 최대 수, seed: 난수 발생 초기값
  • 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차원의 군집 그래프 그려줌, 군집의 반경과 관계까지 확인 가능
  • 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-단계) 
    • 갱신된 모수 추정치에 대해 위 과정 반복 -> 수렴하는 값 얻게됨, 최대가능도추정치로 사용
    • (정리) 
      • (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) 되어 있음
  • 각 학습 단계에서 입력층의 데이터 집합으로부터 하나의 표본 벡터 (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를 구매할 확률이 더 높음 -> 연관성 높
  • 최소 지지도를 정해 규칙을 도출
    • 처음에는 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) 결과가 나타남 - 무의미
        • -> 이를 방지하기 위해 지지도, 신뢰도 조정하여 규칙 발굴해야
    • 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)) : 연관규칙 관계도