CHAID 알고리즘 소개

나무를 구축하는 방식이 CART 와 흡사하나 데이터를 분할하는 방식에 차이가 있다.

다시 말해, 최적의 분할, 즉 최적의 예측변수를 선택하는데 있어 엔트로피나 지니 매트릭스 대신
통계학의 카이스퀘어 테스트를 사용한다.

따라서 이 방법은 범주형 자료에 대해서만 적용할 수 있다.
수치형 속성(나이 등) 범주형으로 변환한 후에 입력해야 한다. (10대, 20대, ... 등) 

< CHAID > : Chi-squared Automatic Interaction Detection (1980, KASS) 
CHAID 알고리즘은 Chi-suare검정 또는 F-검정을 이용하여 데이터를 분리하는 방법을 사용한다. (범주형의 속성에 대해서는 Chi-squre검정을 사용하고, 연속형 변수에 대해서는 F-검정을 사용한다.)
참고자료 : 사례로 배우는 데이터마이닝 [자유아카데미, 최종후/소선하] p.27 

 [논문] 의사결정트리 알고리즘의 성과 비교에 관한 연구 (광운대 경영정보학과 김신곤, 박성용)

2.1 CHAID(Chi-square Automatic Interaction Detection)

1975년 J.A. Hatigan에 의해 처음 발표된 CHAID 알고리즘은 카이제곱-검정 (이산형 목표변수) 또는 F-검정 (연속형 목표변수)을 이용하여 다지분리(Multiway Split)를 수행하는 알고리즘으로 1963년 J.A.Morgan과 J.N.Sonquist이 발표한 AID (Automatic Interaction Detection) 시스템에서 유래되었다. AID 에서 암시하고 있는 것과 같이 CHAID는 원래 변수들 간의 통계적 관계를 찾는 것이 그 목적이었다. 변수들 간의 통계적인 관계는 다시 의사결정트리를 통해 표현될 수 있었으므로, 이 방법은 분류기법(Classification Technique)으로써 사용할 수 있다[Thearling, 1995].
계속...


by 에이아이 2009. 7. 29. 19:08

CART 알고리즘은

1984년 스탠포드와 버클리 대학의 Leo Breiman, Jerome Friedman, Richard Olshen, Charles Stone 등에 의해 제안된 알고리즘이다. (저서: Classification And Regression Trees)

ID3 와 접근 방식은 동일하지만,
차이점은 속성 선택을 위한 기준으로 엔트로피의 변화를 사용한 것이 아니라
엔트로피 매트릭스를 사용한다.  

엔트로피 메트릭스는 1949년 Claude Shannon과 Warren Weaver의 정보이론 연구에서 제시된 개념이다.

또한 CART 알고리즘의 최대 강점은
후보 나무들을 여러 개 생성하고 그 중에서 최적의 나무를 찾아내는 방법을 사용하는 것이다.

데이터를 훈련용, 테스트 용으로 내부적으로 구분하여 사용함을 통해 과잉맞춤 문제를 해결한다.

Classification and Regression Trees (1984, Bresiman et al.)
CART 알고리즘은 지니 지수(Gini Index) 또는 분산의 감소량을 사용하여 나무의 가지를 이진(Binary) 분리한다. (범주형 변수에 대해서는 지니 지수를 사용하고, 연속형 변수에 대해서는 분산의 감소량을 사용한다.)
참고자료 : 사례로 배우는 데이터마이닝 [자유아카데미, 최종후/소선하] p.28


[의사결정트리 알고리즘의 성과 비교에 관한 연구] 논문의 설명
(광운대학교 경영정보학과 김신곤, 동양시스템즈 박성용 저)

2.2 CART(Classification And Regression Tree)

CART 알고리즘은 의사결정 트리 방법론 중 가장 잘 알려진 방법론 가운데 하나이다. 1984년 Brieman et. al 이 CART 기법을 발표한 이래로 기계 학습 실험의 필수기법이 되어왔다 [Berry and Linoff, 1997]. CART 기법은 전체 데이터셋을 갖고 시작하여 반복해서 두 개의 자식 노드(Child Node)를 생성하기 위해 모든 예측 변수(Predictor variables)를 사용하여 데이터 셋의 부분집합을 쪼갬으로써 의사결정트리를 생성한다 [Berry and Linoff, 1997, SPSS, 1998].

그 순수성은 다음과 같은 원리에 의하여 계산된다. 남자 500명중 응답자와 비응답자가 각각 100, 400 이라고 하자. 2번에 걸쳐 고객을 뽑을 때, 2번 모두 응답자일 확률은 (100/500)^2 = (1/5)^2 이고 마찬가지로 비응답자일 확률은 (400/500)^2 = (4/5)^2 이다. Gini Index는 최종적으로 다음과 같이 계산이 된다. [SAS, 1998].

Gini Index = 1 - (1/5)^2 - (4/5)^2

위에서 계산된 Gini Index는 모든 카테고리(응답/비응답)에 대하여 임의로 두개의 원소(고객)을 뽑을 때, 두 개의 원소가 각각 다른 카테고리에서 뽑힐 확률로 해석할 수 있다. 의사결정나무는 Gini Index 가 작아지는 방향으로 움직이며 Gini Index 값을 가장 많이 감소시켜 주는 변수가 영향을 가장 많이 끼치는 변수가 된다. 그리고 이 변수를 기준으로 의사결정나무의 가지가 만들어 진다. [SAS, 1998].

위 논문에서는 계속하여 CART 알고리즘의 진행 절차를 설명한다. (p.373-374)






by 에이아이 2009. 7. 29. 19:06

K-Means 알고리즘을 소개한 PPT 자료입니다.

예제를 사용하여 알고리즘의 절차를 쉽게 이해할 수 있도록 작성하였습니다.
(EM 알고리즘 소개 자료의 앞부분 내용과 동일합니다.)

파일을 첨부합니다.



아래는 작성한 소스코드 입니다. 참고하세요. 

package xminer.mining.clustering;

import xminer.core.*;
import java.util.Random;

public class KMeans {
  Dataset m_dataset;
  int m_clusterSize;
  int m_maxIteration;
  int m_recordCount;
  int m_fieldCount;
  int m_recordClusterIndex[];   // 각 레코드에 대하여 소속 군집번호
  int m_clusterCount[];            // 각 클러스터별 소속 개수
  Record m_cetroids[];

  public KMeans(Dataset ds, int clusterSize, int maxIteration) {
    m_dataset = ds;
    this.m_clusterSize = clusterSize;
    this.m_maxIteration = maxIteration;
    this.m_recordCount = ds.getRecordCount();
    this.m_fieldCount = ds.getAttrCount();
    this.m_recordClusterIndex = new int[ ds.getRecordCount() ];
    this.m_cetroids = new Record[ this.m_clusterSize ];
    this.m_clusterCount = new int[ this.m_clusterSize ];
  }

  public void learn(){
    // 초기 랜덤 시드 결정
    int i=0;
    init_centroid();
    this.print_centroid();

    while(true){
      //System.out.println( i + "번재 수행결과");

      reAssign_Step();
      findNewCentroid_Step();

      // System.out.println();
      // this.print_centroid();
      // this.print_state();

      // 최대반복횟수에 의한 학습 종료
      i++;
      if( i >= this.m_maxIteration){
        System.out.println("최대반복횟수에 도달하여 종료합니다. 반복횟수 : " + i);
        break;
      }

      // 중심점(Centroid)의 고정에 의한 학습 종료
      // -- 새로운 중심점의 계산
      // -- 이전 중심점과의 차이를 계산
      // -- 만약 중심점의 변화가 없으면 끝

    }
    System.out.println( i + "번재 수행결과");
    System.out.println();
    this.print_centroid();
    this.print_state();

  }

  /**
   * 초기에 클러스터 개수만큼의 레코드를 선택하여 이들을 초기 군집 중심으로 합니다.
   * 이때 같은 레코드가 중복해서 다른 군집의 중심점이 되지 않도록 합니다.
   */

  public void init_centroid(){
    Random random = new Random();
    for(int c=0; c<this.m_clusterSize; c++){
      this.m_cetroids[c] = this.m_dataset.getRecord( random.nextInt(m_recordCount-1)).copy();
    }
  }

  /**
   * 군집의 중심을 새롭게 계산합니다.
   * 모든 레코드의 소속값을 고려하여 평균값을 정합니다.
   */

  public void findNewCentroid_Step(){
    // 초기화
    for(int c=0; c<this.m_clusterSize; c++){
      this.m_clusterCount[c] = 0;
      for(int f=0; f<this.m_fieldCount; f++){
       this.m_cetroids[c].add(f, 0.0);
      }
    }
    int c_num;
    // 클러스터별 소속 레코드 개수를 계산합니다.
    for(int r=0; r<this.m_recordCount; r++){
      c_num = this.m_recordClusterIndex[r];
      this.m_clusterCount[c_num]++;
    }
    // 클러스터별 중심을 계산합니다.
    for(int r=0; r<this.m_recordCount; r++){
      c_num = this.m_recordClusterIndex[r];
      Record record = this.m_dataset.getRecord(r).copy();
      for(int f=0; f<this.m_fieldCount; f++){
       this.m_cetroids[c_num].addOnPrevValue(f, record.getValue(f));
      }
    }
    for(int c=0; c<this.m_clusterSize; c++){
      //System.out.println("군집 " + c + "의 개수 : "  + this.m_clusterCount[c]);
      this.m_cetroids[c].multiply( 1.0/(double)this.m_clusterCount[c] );
    }
  }

  /**
   * 주어진 중심에 대하여 모든 레코드들을 지정(Assign)합니다.
   * 레코드와 각 군집중심과의 거리를 계산해보고 가장 거리가 가까운 군집에 지정합니다.
   */

  public void reAssign_Step(){
    int c_num;
    double min_dist = Double.POSITIVE_INFINITY;
    double distance;
    for(int r=0; r<this.m_recordCount; r++){
      Record record = this.m_dataset.getRecord(r).copy();
      c_num = 0;
      min_dist = 10000; //Double.POSITIVE_INFINITY;
      for(int c=0; c<this.m_clusterSize; c++){
        distance = this.m_dataset.getDistanceOfUclideanP(record, this.m_cetroids[c]);
        // 해당 레코드와 군집중심과의 거리를 계산합니다.
        if(distance < min_dist){ // 최소
          min_dist = distance;
          c_num = c;
        }
      }
      this.m_recordClusterIndex[r] = c_num;
    }
  }

  /**
   * 현재 중심점(Centroid)의 값을 출력합니다.
   */

  public void print_centroid() {
    for (int c = 0; c < this.m_clusterSize; c++) {
      System.out.println("군집[" + (c) + "]의 중심점 : " +  this.m_cetroids[c].toString());
    }
  }

  public void print_state(){
    for(int r=0; r<this.m_recordCount; r++){
      System.out.print("번호 "+ (r+1) + " : " );
      for(int f=0; f<this.m_fieldCount; f++){
        System.out.print( this.m_dataset.getRecord(r).getValue(f) + ", " );
      }
      System.out.println( this.m_recordClusterIndex[r] );
    }
  }

  public static void main(String[] args) {
    // 아이리스 원본 데이터
    Dataset ds = new Dataset("아이리스","D:\\ai-miner-test-data\\iris.csv",  

                       Dataset.FIRSTLINE_ATTR_NO_INFO, true);

    // 수치 필드만 있는 아이리스 데이터
    // Dataset ds = new Dataset("D:\\work\\(01) (입력모듈) Dataset\\datafile\\iris_4.csv",

                           Dataset.HAS_NOT_FIELD_NAME_LINE);

    ds.printDataInfo();
    KMeans km = new KMeans(ds, 3, 200); // 3개 군집, 최대 10번 반복, 종료변화값 0.01
    km.learn();
  }

}



더 참고할 만한 사이트

[1] http://adeuxist.egloos.com/971452

by 에이아이 2009. 7. 29. 18:57

협력적 여과 개념을 이용한 개인화 추천 방법 소개 자료립니다.
CF 알고리즘은 개인화 추천을 위해 매우 널리 사용되고 있는 알고리즘입니다.

2006년 1월 세미나 강의를 위해 준비한 자료입니다.
예제를 사용하여 개념 및 절차를 쉽게 이해할 수 있도록 작성하였습니다.

아래에 파일을 첨부하였습니다.

 
추가로 Youtube 에 공개된 CF 관련 강의 동영상을 추가하니 참고하세요.

by 에이아이 2009. 7. 29. 18:39

본 글에서는 SPSS 를 사용하여 데이터의 다중공선성 수치 VIF, 공차한계(Tolerance) 등을 계산하는 방법을 설명한다.

사용할 데이터 소개

실습을 위하여 간단한 데이터를 작성하였다. 데이터는 학생들의 성적에 대한 데이터로써 6개의 시험에 대한 점수로 구성되어 있다. 이 데이터에서 <수학, 과학, 영어, 독어, 체육> 은 입력변수로 사용하고, <모의수능>은 종속변수로 사용하고자 한다. 즉, 기존의 내신점수를 통해서 (모의)수능점수를 예측하는 것이 관심이다. (수능점수는 500점 만점이지만 여기서 모의수능은 100점 만점으로 가정하였다.)

이 데이터는 수학, 과학, 영어, 독어 의 4개의 변수가 다중공선성이 존재한다.
체육 변수 만 다중공선성이 없다. 데이터를 파일을 아래에 첨부하였다.





SPSS 에서 다중공선성 진단 방법

그럼, 이제 위 데이터를 입력하여 다중공선성을 계산해보자.
SPSS에서 다중공선성 진단을 위한 별도의 메뉴 (기능)은 존재하지 않는다.

다중공선성을 진단하려면 선형회귀분석을 수행해야 한다.
메뉴에서 [분석] - [회귀분석] - [선형] 을 클릭합니다.




옵션 설정 방법

위의 명령을 수행하면, 아래와 같은 창이 표시된다. 왼쪽에 6개의 변수가 표시된다.
[모의수능] 변수를 선택한 후 종속변수 로 이동시킨다.
나머지 모든 변수 5개를 선택한 후 독립변수 쪽으로 이동시킨다. (아래 그림에서는 독어, 체육 2개만 보이지만 가려진 것이고, 5개 모두가 입력되어 있는 상태이다.)




그리고 하단의 [통계량] 버튼을 클릭합니다.
[계속] 버튼을 클릭한 후, 이전 창이 보이면 [확인] 메뉴를 클릭합니다.



결과 해석 방법

위와 같이 수행하면 분석 후 결과 창이 나타난다. 결과의 내용 중 다중공선성과 관계된 부분들을 해석해보자.

결과 파일을 아래에 첨부하였다.

먼저 [계수] 라는 제목으로 된 표를 살펴보자. 이 표의 우측에 보면 <공선성 통계량>이라는 제목이 보인다.
공차한계(Tolerance)VIF(분산팽창계수) 의 값이 표시된다.

VIF 만 살펴보자. VIF 값이 10 이상이면 다중공선성의 존재하는 것으로 판단한다.
이런 기준으로 보면 <수학>, <과학> 이 다중공선성이 있음을 알 수 있다. 데이터에 보면 영어, 독어가 상관성이 높음으로 인해 다중공선성이 문제가 되어야 하는데 여기서는 이상하게도 그것이 표시되지 않음을 볼 수 있다.



이 표에 보면 <영어> 과목이 표시되지 않은 것 (제외된 것)을 볼 수 있다. 왜냐하면 다중공선성이 일정기준 이상으로 크면 SPSS 에서는 자동적으로 그 변수를 제외하기 때문에 그렇다. 즉, 원래는 <영어>, <독어> 가 모두 다중공선성이 크게 존재하는데 그 기준에 의해서 <영어> 변수가 제거된 것이다. 영어 가 제외되었기 때문에 <독어> 의 VIF는 8.233 으로 다중공선성이 약한 것으로 판단되는 것이다.

공차한계는 VIF 값의 역수이다. 따라서 공차한계를 별도로 고려할 필요는 없다.

이제 다음 표를 살펴보자.
위에서 설명했듯이 다중공선성의 기준으로 인해 <영어> 변수가 제거된 것이 표시된다.
공차한계가 0 으로 표시되있다. VIF 값은 점(.) 으로 되어있는데 이것은 무한대 값을 의미하는 것 같다.
즉, 영어 과목의 다중공선성이 VIF 가 <무한대>로 너무 커서 제외된 것으로 판단된다.




마지막 결과 표를 살펴보자. 이 표에서도 VIF 이외의 다른 다중공선성 척도를 보여준다.
< 상태지수(CN: Condition Number) > 라는 다중공선성 척도를 보여준다. 

<상태지수>는 <고유값>을 가지고 계산된다. 상태지수의 계산식과 해석방법은 나중에 추가해야 하겠다.




분석을 정리하자.

즉, 위의 분석 결과를 정리해보자. 다중공선성을 측정하는 척도로 <VIF>, <공차한계>, <상태지수> 등이 있는데 SPSS 의 선형회귀분석 기능을 통해서 이 값들을 얻을 수 있었다. 중간에 옵션에서 <다중공선성> 을 체크해야 했다.

간단한 예제 데이터를 통한 본 실험의 결과를 해석을 정리하면,

VIF 값을 통해 <수학>, <과학>이 다중공선성이 존재하는 것으로 판단되었다.
<영어>는 다중공선성의 정도가 커서 회귀분석 모델 생성시 제외되었다. 즉, 원래대로라면 <영어>, <독어>도 다중공선성이 존재하는 것으로 이해할 수 있다.
체육 변수는 다중공선성이 없는 것으로 판단할 수 있다.

by 에이아이 2009. 7. 27. 22:27

본 글에서는 SPSS를 사용하여 요인분석을 수행한 결과를 해석하는 방법에 대해서 설명한다.

만약 여러분이 SPSS 에서 해석하는 방법이 아니라,
SPSS 에서 요인 분석을 하는 방법, 절차를 알고 싶다면 여기 를 클릭하면 해당 글을 볼 수 있다. 
또는 요인분석이 무엇인지? 요인분석의 개념 및 이론이 궁금하다면 여기 를 클릭하면 해당 글을 볼 수 있다. 

분석 데이터의 설명

아래의 데이터를 SPSS 에 입력하여 요인분석을 수행하였다. 수행하는 방법(단계)은 이전 글 에서 설명하였으니 필요한 경우 참고하기 바란다.

우선 데이터를 다시 한번 살펴보자.
이해를 쉽게하기 위하여 간단한 예제 데이터를 사용하였다. 학생들의 성적데이터로써 [수학, 과학, 영어, 독어, 체육] 5과목의 시험 성적으로 구성되어 있다. 수학과 과학이 상관이 있으며, 영어와 독어가 관계가 있는 형태이다. 수리능력, 언어능력, 체력 의 3가지 요인으로 구성되었다는 것을 쉽게 생각할 수 있다.

   수학 과학  영어  독어  체육 
 학생1  90 100   30   40   80 
 학생2  80  90  80  90  40
 학생3  30  40  100  90  90
 학생4  40  45  30  40  60
 학생5  50  55  85  95  100

분석 결과의 예상

위 데이터에 대해서 요인분석을 수행하면 몇 개의 요인, 즉 잠재변수가 얻어질까?
이미 위에서 설명하였듯이 2개의 요인, 이름을 붙이자면 <수리계산능력>, <외국어능력> 이라는 2개의 요인이 도출될 것으로 예상된다. 체육 점수는 이 2개의 요인에 포함되지 않음으로 별도로 하나의 요인이 될 것이다. 그래서 정확히 말하면 데이터의 요인은 3개이다. 새롭게 만들어진 요인은 2개이다.


분석결과 화면

아래와 같은 분석 결과 화면을 볼 수 있다. 결과를 해석하는 것이 중요하다. 결과의 해석 또한 많은 설명이 필요하므로 다른 글을 통해서 설명해야 하겠다. 결과 파일을 아래에 첨부하였다.

주어진 데이터를 가지고 아래의 결과를 얻는 과정을 알고 싶다면 여기(SPSS 요인분석 절차) 를 클릭하자.




분석결과의 해석

전 단계에서 설명한 대로 세팅하고 실행하면 아래와 같은 분석들이 표시된다.
여기에서 가장 중요하게 보아야 할 것은

(1) 기술통계량

각 변수에 대한 평균, 표준편차의 기본 통계 정보를 표시한다.
요인분석과 밀접한 관계가 있는 분석은 분석에 앞서 이 정도의 간단한 통계는 살펴보는 것이 필요하겠다.



(2) 상관행렬

변수들간의 상관계수 값을 행렬로 표시한다. 대략 살펴보면, 수학과 과학이 0.996 으로 높은 상관성을 가지며, 영어와 독어가 0.967 로 높은 상관성을 가지는 것을 파악할 수 있다. 체육은 다른 과목들과 상관관계가 별로 없다. (우리가 이러한 의미로 데이터를 만들었기 때문에 이러한 결과는 당연하다.)

모든 변수들 간의 상관행렬을 구하고 싶다면 (SPSS 상관행렬 계산하는 별도의 메뉴는 없음으로)
이같이 요인분석의 옵션에서 상관행렬 을 체크하여 얻을 수 있다.  




(3) 공통성

공통성 표는 초기 값과 추출 값 두가지로 구성되어 있다.
초기는 항상 1이므로 별 의미는 없고, 추출 값만 보면된다. 추출 값은 0에서 1의 값을 갖는다.

추출 값의 의미는 무엇일까?
각 변수들이 나머지 다른 변수들에 얼마나 많이 영향을 받는가 (종속되어 있는가?) 를 측정한다.
각 변수에 대하여 너머지 변수들로 회귀분석을 수행했을 때 결정계수(R^2) 를 계산한 값이다. 따라서, 이 값이 1에 가까울 수록 다중공선성이 존재하고, 0에 가까울 수록 다중공선성의 정도가 없는 것으로 이해하면 된다.
즉, 각 변수의 다중공선성 수치 VIF 과 연관이 된다. (이미 알고있겠지만 다중공선성은 상관계수와 관계가 깊다. 물론 다중공선성과 상관계수는 차이가 있음으로 별도의 표로 계산한 것이다.) 

수학, 과학, 영어, 독어는 높은 값을 갖는 것을 볼 때 다중공선성이 크게 존재함을 알 수 있고,
체육의 경우는 0.356 이므로 다중공선성이 별로 없다고 판단할 수 있다.




(4) 설명된 총분산

표가 좀 복잡해서 무엇을 의미하는 지 파악이 힘들 수 있다.
잠재변수(요인)을 파악하기 위하여 주성분 분석을 사용했음이 표의 하단에 표시되어 있다.
주성분 분석을 사용하면 최대로 원래의 변수만큼의 주성분 즉, 요인을 찾을 수 있다. 이 데이터에서는 원래 변수가 5개 이므로 최대 주성분도 5개이다. (표의 왼편에 보면 성분이 1부터 5까지 되어있다.)

첫번째 칼럼(초기 고유값 중 전체)를 보자. 2.804, 1.414, ... 이 부분이다. 이 표에서 가장 중요한 부분이다.
모든 성분의 고유값의 합은 변수의 수와 같다. 즉, 여기서는 5가된다. 평균적으로 고유값은 1이다.
일반적으로 고유값이 1보다 크면 의미있는 요인으로 선택하게 된다.
(물론 이 기준은 분석가에 의도에 따라 변경될 수 있다. SPSS 옵션 창에서 변경 가능하다.)
따라서 여기서는 성분1, 성분2가 선택된다. 이 고유값은 해당 요인(잠재변수)의 중요성(설명력)의 정도를 의미한다. 즉, 각 성분(요인)의 주성분을 모든 고유값의 합(여기서는 5)으로 나누면 해당 변수의 전체 데이터에 대한 설명력 % 가 계산된다. 

즉, 1번째 성분(요인)은 2.804 / 5.0 = 0.451 (=45.1%) 로써 45%의 설명력을 가지고 
2번째 성분(요인)은 1.414 / 5.0 = 0.392 (=39.2%) 로써 39%의 설명력을 가진다. 

이 두 개의 새로운 성분만 사용해도 
전체 데이터의 84.367% 를 설명(예측)할 수 있음을 말해준다. 
계산식을 풀어쓰면 (2.804 + 1.414) / 5.0 = 0.84367 (=84.367%) 와 같다. 표의 맨 오른쪽에 누적 설명력(적재값)이 표시되고 있다. (적재값 이란 용어가 어색할 수 있는데 데이터에 대한 설명력[예측력]을 의미한다.) 
성분1과 성분2만 선택되었기 때문에 우측에는 두 개에 대해서만 값이 입력되어 있는 것이다.   




(5) 스크리 도표

스크리 도표를 사용하여 적절한 요인변수의 개수를 찾을 수 있다. 
실제 분석에서는 표를 보고 산정하는 것이 아니고, 고유값의 크기를 기준으로 산정하지만, 
스크리 도표는 사람이 직관적으로 적정한 요인수를 찾는데 도움을 준다. 

아래 그림에서보면 처음 2개의 요인 값의 고유값(Y축)이 1 이상의 값을 갖기 때문에 
2개를 선택하게 되는 것으로 판단할 수 있다. 기울기가 꺽이는 부분을 보고 선택하는 것이 아니고 Y축 값의 크기가 1 이상인가로 판단하는 것이다.  




(5) 성분행렬

이 부분이 중요하다.
몇 개의 인자들이 추출되었는지 알 수 있다. 그리고 이 인자들이 원변수들에 어느정도 영향을 받고 있는지 가중치를 보여준다. 이 부분을 잘 해석하는 것이 가장 중요한 관건이다.

요인적재량 계수가 나타난다.
3개의 인자를 끄집어 내고, 각 인자들이 원래의 변수들에 어느정도의 영향을 받고 있는지를 나타내는 수치(가중치)이다. * 이부분이 가장 중요한 부분이다. 이 수치가 의미가 있다.




(6) 회전된 성분행렬

(5)에서의 성분행렬 은 명확하게 구분하여 어렵다. 해석하기가 어렵다.
(5)를 이해하기 좋게 정렬하여 보여준다.



(7) 성분변환 행렬
고등학교 수학에서 배웠던 좌표 회전을 사용한 것이다. (고등학교 때 언제 배웠었지?? 기억이 전혀...)
베리맥스라는 방법을 썻다.



[8] 회전 공간의 성분 도표
3차원 좌표공간 상에 원래의 변수들을 점으로 표시한다.
<영어, 독어>가 가까운 위치에 존재하고, <수학, 과학>이 가까운 위치에 존재하는 것을 통해
영어, 독어가 유사한 의미를 가지며 하나의 요인(예를 들어, 언어적 능력)으로 묶일 수 있고,
수학, 과학이 유사한 의미를 가지며 하나의 요인(예를 들어, 수리계산 능력)으로 묶일 수 있음을 파악할 수 있다. 체육은 다른 과목들과의 연관성이 떨어지는 것도 파악할 수 있다.



[8] 성분점수 계수 행렬 

설명  



[8] 성분점수 공분산행렬

설명




추가내용

[고급분석 23장] 인자분석
 
인자분석 = 요인분석

목적1) 잠재변인을 찾는다. - 관측된 변수로부터 숨겨진 요인을 찾는다.
설문했을 때 이 설문이 몇 가지 특성을 측정하고 있는가? 검사한다.

설문지에 대한 정보가 없을 때
이 수 많은 항목들이 몇 개의 내용을 측정하고 있는가?
이에 포함되지 못하는 속성들을 제거하기 위해 사용된다.











by 에이아이 2009. 7. 27. 11:58
본 글에서는 SPSS를 사용하여 요인분석을 수행하고 그 결과를 해석하는 방법을 설명한다.

SPSS 의 버전은 12.0 을 사용하였다. 요즘 SPSS 17.0 버전까지 나와서 너무 오래된 내용이라 생각될 수도 있지만 버전에 따른 기본적인 기능은 차이는 거의 없다.

오히려 12 버전이 17 버전 보다 화면 구성이 깔끔하고 사용이 편리한 것 같다.

물론 추가적인 기능 등을 이용하려면 높은 버전을 사용해야하겠다.
 

데이터의 입력

요인분석을 수행하기 위하여 간단한 예제 데이터를 만들어서 연습해보자.

이해를 쉽게하기 위하여 간단한 예제 데이터를 사용하였다. 학생들의 성적데이터로써 [수학, 과학, 영어, 독어, 체육] 5과목의 시험 성적으로 구성되어 있다. 수학과 과학이 상관이 있으며, 영어와 독어가 관계가 있는 형태이다. 수리능력, 언어능력, 체력 의 3가지 요인으로 구성되었다는 것을 쉽게 생각할 수 있다.

   수학 과학  영어  독어  체육 
 학생1  90 100  30  40   80 
 학생2  80  90  80  90  40
 학생3  30  40  100  90  90
 학생4  40  45  30  40  60
 학생5  50  55  85  95  100

SPSS 를 실행한 후 아래와 같이 데이터를 입력해보자.



초기에는 변수명이 나타나지 않는다. 위와 같이 [수학, 과학, 영어, 독어, 체육] 의 표시되려면
아래의 [변수] 탭을 누른 후 아래와 같이 변수 명을 입력해 주면 된다.



자~ 이것으로 해서 요인분석을 수행할 간단한 데이터를 준비하였다.


요인 분석 수행 메뉴 

이제 가장 중요한 [요인분석] 메뉴를 찾아 실행해보자.

메뉴에서 [분석] -> [데이터 축소] - [요인분석] 을 실행한다.



세부 옵션 세팅
 
[변수의 선택] 

왼쪽 편의 박스에 처음에 모든 변수들이 표시된다.
분석에 사용하고자 하는 변수들을 선택한 후 화살표 버튼을 눌러 오른쪽으로 이동시킨다.
(모든 변수를 선택하여 이동시키면 된다.)
참고로, 요인분석에서는 설명변수, 종속변수를 구분하여 입력하지 않는다. 요인분석은 단지 잠재변수를 찾아내는 것이다. 인과관계를 고려하지 않는다.



[기술통계] 버튼을 눌러 알고 싶은 통계량 등을 체크한다.

일반적으로 [일변량 기술통계] 및 상관관계 를 체크해보자. 요인분석을 위해 꼭 필요한 (중요한) 부분은 아니지만 그냥 변수의 분포를 참고해보기 위해 체크한 것이다.




[요인추출] 버튼을 누름

보통 요인추출 방법으로 [주성분] 을 선택한다.
AMOS 구조방정식 모델을 구할때는 최대우도법 을 사용하기도 한다.
요인 수 추출 기준은 디폴트로 해두자. (고유값 1을 기준으로 하여 1 이상인 Factor를 선택한다.)



[요인회전] 버튼을 누름

[베리맥스] 라는 방법을 선택한다. 이 외에도 여러가지 방법이 있으나 베리맥스가 일반적으로 가장 많이 사용된다. [적재값 도표] 도 체크한다. (로딩 팩터이다.)



[요인점수] 버튼을 누름

[변수로 저장] 을 체크한 후 [계속] 버튼을 누른다.



[옵션] 버튼을 누름  

계수 출력 형식을 [크기 순 정렬] 로 체크한다. 그렇게 중요한 내용은 아니지만 보기 좋게 표시되도록 선택한다.



[확인] 버튼을 누름

오른쪽 상단의 [확인] 버튼을 누르면 분석이 수행된다. 수행이 완료되면 결과를 보여준다.




분석결과 화면

아래와 같은 분석 결과 화면을 볼 수 있다. 결과를 해석하는 것이 중요하다. 결과의 해석 또한 많은 설명이 필요하므로 다른 글을 통해서 설명해야 하겠다.




참고 : 본 글은 SPSS고급강좌 23강을 참고하여 정리하였다.

이 글에서 작업하면서 생성한 SPSS 파일들입니다.






분석결과의 해석

분석을 수행하면 위 화면에서 보듯이 아래의 내용들이 표시된다.
결과를 해석하는 방법에 대해서는 다음 글 에서 설명하였다.
(다음 글을 클릭할 것 : 요인분석 결과 해석 자세하게 설명함)

(1) 기술통계량
(2) 상관행렬
(3) 공통성
(4) 설명된 총분산
(5) 성분행렬
(6) 회전된 성분행렬
(7) 성분변환 행렬
[8] 회전 공간의 성분 도표
by 에이아이 2009. 7. 24. 23:58

요인 분석 (Factor Analysis) 이란?

요인분석에 대해서 먼저 간단하게 설명해보면,
요인분석은 수많은 변수들 중에서 잠재된 몇 개의 변수(요인)을 찾아내는 것이다. 
이 설명만 듣고 이해가 된다면 아마도 천재가 아닐까?? 아래에서 예를 들어 설명해야겠다.

학생들의 시험 성적 데이터를 예를 들어 생각해보자.
이 데이터가 수학, 과학, 영어, 중국어, 독어, 작곡, 연주 의 점수(0점-100점)으로 구성되어 있다고 하면, 
수학, 과학은 상관관계가 있을 것이고 (수리계산능력) 
영어, 중국어, 독어 가 상관관계가 있을 것이고 (외국어능력) 
작곡, 연주 가 상관관계가 있을 것이다. (음악적능력, 음악적재능)
(위의 가정이 좀 이상할 수 있지만, 그냥 그렇다고 받아들이자...)

즉, 원래 7개의 변수(과목)으로 구성되어있지만, (그냥 봐서는 잘 모르지만 상관관계를 따져보면)
내부적으로는 3개의 잠재변수 즉, [수리계산능력], [외국어능력], [음악적재능] 으로 구성된 것으로 파악할 수 있다. 

이렇게 원래 많은 수(7개)의 변수들을 소수의 몇 개의(3개)의 잠재된 변수로 찾아내는 것을 요인분석이라고 한다. 감이 오겠지만 ... 요인분석은 데이터 축소(Data Reduction)과 관계가 있다.
이렇게 찾은 잠재변수를 영어로는 Latent Variable 이라고 부른다. 

이제 정리해보자.

요인분석(Factor Analysis)은 변수들 간의 상관관계를 고려하여 저변에 내재된 개념인 요인들을 추출해내는 분석방법이다. 다른 말로 하면, 요인분석은 변수들 간의 상관관계를 고려하여 서로 유사한 변수들 끼리 묶어주는 방법이다. 또 다른 말로 하면, 많은 변수로 구성된 데이터가 몇 개의 요인에 의해 영향을 받는가를 알아보는 것이라고도 할 수 있다.

좀 더 자세한 설명 및 정의를 보고 싶다면 위키피디아 백과사전을 참고해보자. 위키피디아 설명 보기


요인분석 용어 이해의 주의점

일반적으로 <영화흥행요인분석>, <효과적인교육효과의요인분석> 이라는 형식의 제목의 연구들이 존재한다.  
그러나 이들 제목에서 사용된 요인분석이라는 말과 우리가 이 글에서 사용하는 요인분석은 같지 않음을 주의해야 한다. 여기서 요인분석의 의미는 어떤 결과에 요인 원인(변수)가 무엇인가를 찾는 것이고, 이 글에서의 요인분석은 이미 충분히 얘기했듯이 데이터에 상관성이 높은 변수들을 묶어 잠재된 몇 개의 변수를 찾는 것이다.


요인분석 수행의 목적

요인분석이 무엇인지 대충 이해를 하였다. 그러면 요인분석이 왜 필요한지 어떠한 목적으로 사용되는지 생각해보도록 하자. 요인분석은 다양한 목적으로 사용될 수 있다. 아래에 요인분석의 목적을 구분하여 정리하였다.

[1] 입력변수들의 특성 파악
수많은 입력 변수들이 어떻게 서로 상관되어 지는지를 파악한다. 어떤 분석을 수행하기에 앞서 이런 탐색하여 데이터의 특성을 이해하는 데에 도움이 된다. (데이터 분석에 앞서서 데이터를 이해하는 과정이 필요하다.)  

[2] 새 변수의 생성 효과 (전처리 기능)  
원 데이터의 많은 수의 변수들을 차후의 분석(회귀분석, 결정트리 등)에 입력하기에 앞서, 본래의 변수보다 더 적절한 변수들을 생성해 준다. 원 데이터의 변수만을 사용하여 분석하는 것보다, 새로운 (잠재)변수를 추가하여 분석을 수행하게 되면 더 좋은 분석 결과(모델)를 얻을 수 있다.

[3] 데이터 축소 (Data Reduction)
즉, 이를 통한 데이터의 축소를 통하여 분석결과의 해석을 용이하게 한다. 예를 들어, 변수가 100개가 있다고 해보자. 결정트리 분석 또는 회귀분석을 수행하면 그 결과는 (트리의 모양, 수식의 형태)는 너무 복잡해서 이해하기가 너무 힘들 것이다. 해석이 안된다. 나름대로 이해를 해도 다른 사람에서 설명하기 힘들다.
그러나 몇 개의 축소된 (잠재)변수를 사용할 경우 결과 모델이 단순해지고 이해하고 설명하기가 쉬워진다.
모델이 단순화 되었다고 성능(분류율, 예측율)이 낮아지는 것이 아니다. 오히려 더 높은 성능을 갖게 되는 장점이 있다. (단순하면서도 더 좋은 성능 얼마나 좋은가? !)

[4] 다중공선성으로 인한 문제의 해결
많은 비모수적 통계 및 데이터마이닝 분석방법의 경우 입력데이터에 다중공선성이 존재할 경우 분석 결과 모델의 오류 또는 결과 해석에서의 오류가 발생할 우려가 높다. 따라서, 다중공선성의 상태를 고려하여 분석해야 한다. (그렇지 않으면, 잘못된 분석 결과를 내리게 된다.) 여러가지 해결방법이 있지만 그 중 하나가 요인분석을 사용하는 것이다. 다시 말하면, 요인분석을 사용하여 새로운 (잠재)변수를 만들어 추가한 후 분석을 수행하면 다중공선성의 문제를 해결할 수 있다.  

사실, 이 내용은 [1],[2]의 내용과 의미를 같이 한다. 즉, [1],[2]에 대한 부연설명이라고도 할 수 있다.
위 내용등을 어찌보면 같은 내용인데 이해를 돕기 위해서 여러가지 측면으로 설명했을 뿐이다.


요인분석 과 주성분분석의 관계는?

많은 경우 (많은 사람들이) 요인분석과 주성분분석을 혼동한다.
두 용어를 같은 것으로 이해하는 사람들도 많다. ( 요인분석 = 주성분분석 ? ) 그러나 이것은 요인분석이나 주성분 분석을 잘 이해하지 못한 것이다. (참고는 요인분석은 Factor Analysis 이고, 주성분 분석은 Principle Component Analysis 이며 보통 PCA 라고 불린다.)

요인분석과 주성분분석은 물론 깊은 관계가 있다. 그러나 엄밀하게는 같은 것은 아니다.
요인분석을 수행하기 위해서 즉, 몇 개의 요인(잠재된 변수)들을 추출하기 위해서 여러 가지 방법이 사용될 수 있으나 그 중에 가장 많이 사용되는 방법이 <주성분 분석>이다. (그렇다고, 요인분석이 주성분분석의 상위 개념에 있는 것이라고 할 수는 없다. 집합으로 볼 때 포함 관계 아님)

* 공통점
[1] 모두 데이터를  축소한다. 
[2] 원래 데이터의 새로운 몇 개의 변수들로 만들어 낸다. ([1] 과 같은 말인데 그래도 다시 써봄)

* 차이점
(아래에 정리해보았다. 요인분석은 FA 로, 주성분분석은 PCA 로 표현하였다.)

[1] 생성되는 변수의 수
FA  : 몇 개라고 지정할 수 없다. 데이터의 의미에 따라 다르다. 3개가 될 수도 있고, 또는 4개도 있고, ...
데이터에 서로 성관성을 갖는 변수들의 군집의 개수로 나뉘어질 것이다.
PCA : 주성분이라고 하며, 보통 2개를 찾는다. 제1주성분, 제2주성분 이라고 불린다.

[2] 생성되는 변수의 의미 (이름)
FA : 위에서 학생들의 성적데이터를 가지고 설명했듯이 분석가가 적절한 이름을 붙일 수 있다. 자동적으로 이름을 만들어주지는 않는다.
PCA : 보통 2개의 변수를 채택한다. 첫번째 것은 제1주성분, 제2주성분 이라고 부른다. (원래 데이터의 입력변수가 p라고 하면, ... 제p주성분까지 만들수 있다. 그러나 보통 2개 정도만 사용한다. 이걸로 보통 충분하다.)
요인분석에서는 서로 상관있는 변수들의 이름을 지을 수 있으나 제n주성분의 경우는 그게 좀 힘들다. (의미 중심으로 묶였다기 보다는 분류 결정력이 높은 임의의 변수를 만든 것이기 때문이다.)

[3] 생성된 변수들의 관계
FA : 새 (잠재)변수들은 기본적으로 대등한 관계를 갖는다. 어떤 것이 더 중요하다 라는 의미는 요인분석에서는 없다. 단, 분류/예측에 그 다음 단계로 사용된 다면 그 때 중요성의 의미가 부여될 것이다.  
PCA : 제1주성분이 가장 중요하고, 그 다음 제2주성분이 중요하게 취급된다. 그 다음은 제3주성분 ... 이런 식이다. 즉, 변수들 간의 중요성의 순위가 존재한다.

[3] 분석방법의 의미
FA : 목표 필드를 고려하지 않는다. 그냥 데이터가 주어지면 변수들을 비슷한 성격들로 묶어서 새로운 [잠재]변수들을 만들어 낸다.
PCA : 목표 변수를 고려한다. 목표 변수를 잘 예측/분류하기 위하여 원래 변수들의 선형 결합으로 이루어진 몇 개의 주성분(변수)들을 찾아낸다.


SPSS 에서 <요인분석> 수행하는 방법 

대표적인 통계 프로그램인 SPSS Statistics 에서 <요인분석>을 수행하는 방법을 간단히 설명한다. 
프로그램을 수행한 후 메뉴에서 [분석] - [데이터 축소] - [요인분석] 을 클릭한다. 

그 다음 부터의 자세한 단계는 아래의 교재를 찾아 참고하기 바란다. 
차후에 정리해서 추가 글을 올려야겠다. 

[참고1] SPSS 평균비교와 데이터축소 (SPSS Korea 컨설팅 팀 저) part 2. 페이지 7에서부터 주욱~ 
[참고2] SPSS 12.0 통계자료분석 (한국사회조사연구소, 정영해 외, 2005년 2월) 

그 외에도 수많은 SPSS 사용법에 대한 책을 참고하면 되겠다.  


요인(Latent Variable) 즉, 잠재변수의 개수 결정 

요인의 개수를 결정하는 대표적인 방법으로 아래의 2가지가 있다. 

[1] 고유값을 사용한 요인의 개수 결정
일반적으로 고유값이 1이상인 잠재변수들을 선택한다.
(그런데 내 생각에는... 고유값이 원래 변수의 개수에 종속적이므로 좀 문제가 될 것 같다. 왜냐하면, 생성된 모든 잠재변수의 고유값을 다 더하면 입력변수의 수와 같은 값이 되기 때문...)  

[2] 스크리도표를 이용한 요인 개수 결정
그래프를 사용하여 결정하는 방법이다. 사람이 눈으로 (직관적으로) 결정하기에 좋다.
XY축으로 된 선 그래프인데 처음에는 기울기가 급격하게 줄다가 완만히 지게 되는 데, 완만해지게 되는 곳을 보고서 요인 개수를 결정한다.

아래의 블로그 글에 고유값을 사용하여 잠재변수를 결정하는 방법이 잘 설명되어있으니 참고하기 바란다.
http://blog.naver.com/seahawk00/130015880594


<요인분석> 의 절차  

요인분석은 일반적으로 아래의 절차 순으로 분석이 진행된다.

[1] 요인의 수를 결정한다. 
[2] 해석하기 쉽게 회전시킨다. 
[3] 요인적재량을 이용하여 요인을 이루는 항목들을 선택한다. 
[4] 새롭게 결정된 (생성된) 잠재변수에 이름(Label)을 부여한다. 
[5] 잠재변수에 값(점수)를 계산하여 입력한다.  
[6] 이제 몇 개의 잠재변수가 생성, 추가되었다. 이 데이터를 사용하여 추가적 분석을 수행한다.

요인분석을 수행하는 자세한 절차, 계산방식은 주로 주성분을 사용한다.
자세하게 설명하기에는 꽤 복잡하고 어렵다. 참고도서로 제시한 <만화로 쉽게 설명하는 요인분석>을 참고하기를 권한다. 아이겐벨유, 아이겐벡터를 계산할 줄도 알아야하고, 행렬계산을 사용하여 벡터값을 회전하는 계산도 할 줄 알아야 한다. 직접 프로그램을 짜기는 힘들고 (가능한 사람들도 있겠지만...) 인터넷에서 제공하고 있는 패키지를 사용하거나 그냥 SPSS를 사용하여 분서을 수행해야 할 것이다.

변수의 회전 방법

새로운 변수를 만들고 나서, 그 변수를 해석하기 쉽게 하기 위하여 이 변수들을 회전하는 단계가 필요하다.
변수의 회전은 크게 두 가지 <직각회전>과 <비직각회전>으로 구분된다.

- 직각회전(orthogonal rotation) : Varimax rotation, Quartimax rotation, Equimax rotation
- 비직각회전(oblique rotation) : Oblimin rotation, Covarimin rotation, Quartimin rotation


데이터마이닝에 어떻게 활용될 수 있을까?

다중공선성이 존재하는 데이터를 가지고 결정트리를 생성할 경우 분석 결과에 문제가 발생하는 것으로 알려져있다.

[1] 중요한 변수을 발견 못한다.  
하나의 변수가 노드의 구분에서 선택되어 사용되었다면 그 변수와 상관성이 있는 변수들이 모델에 나타나지 않는 문제가 생긴다. 이것은 모델을 해석할 때 중요한 변수를 놓치게 되는 잘못된 결론을 내리게 된다.
예를 들어, [A, B, C, D, E, F, G, H] 의 입력변수와 [T] 라는 종속변수로 구성된 데이터에 대하여 결정트리 분석을 한다고 하자. 변수 A, B, C, D 가 분류에 영향을 미치는 중요한 변수라고 하자. A, B, C는 서로 상관성이 높다. (즉, 다중공선성이 존재한다.) 그러면, 나무에서는 A, D만 나타나게 될 수 있다. 분석가는 T라는 변수를 결정하는데 A, D가 중요하다는 결론을 내리게 된다. 트리에 나타나지 않은 나머지 변수들 B, C, E, F, G, H 는 중요하지 않은 변수로 간주된다. 즉, B, C를 놓치게 되는 문제가 발생한다.

[2] 결과 모델의 성능(분류율)이 떨어진다.
결정트리는 나무 모델을 생성하는 과정에서 한 노드에서 한 변수만을 선택하여 데이터를 분류한다.
즉, 결정트리는 분석은 하나의 변수에 수직적으로 데이터가 잘 분리될 때 좋은 성능을 나타낼 수 있다.
그러나 변수들 간의 상관성이 존재한다는 것은 하나의 변수에 수직적이지 못하고 두개 이상의 변수에 걸쳐 기울어져 있는 상태를 의미한다. 즉, 어떤 변수를 선택한다고 하더라도 잘 구분될 수가 없다.

* 요인분석을 활용한 다중공선성 문제의 해결 방안 (아이디어)

아래의 문제를 해결하는 하나의 방법으로 <요인분석>이 사용될 수 있다. 요인분석을 통해 새변수 생성과 추가를 통해 다중공선성에 유연하고(견고하고) 성능이 좋은 모델을 생성할 수 있다. 여기서 성능이 좋다는 것은, 나무의 크기가 작고(구조가 단순하여 이해,설명하기 쉽고), 분류율도 좋다는 것을 뜻한다.


공부에 도움이 되는 도서 추천

[1] SPSS 12.0 통계자료분석 (한국사회조사연구소, 정영해 외, 2005년 2월)
요즘 SPSS가 17.0 버전이 출시되었으니 점 오래된 버전에 대한 책이지만 읽어보면 별 차이는 없다.
p.309 - p.321 (14장. 요인분석)에서 요인분석에 대하여 자세하게 설명하고 있다.

[2] SPSS 평균비교와 데이터축소 (SPSS Korea 컨설팅팀 저)
Part 2의 Page 7-8 그리고 9부터 주욱... 을 보면 요인분석에 대한 설명이 잘 되어 있다.
SPSS 활용에 연관하여서도 설명되어 있다.

[3] 만화로 쉽게 배우는 인자분석
인자분석 = 요인분석 이다. 이 책에서는 만화로 인자분석을 재미있게 그리고 자세하게 설명하고 있다.
필요한 수학적인 개념 및 풀이과정을 자세하게 설명하고 있는 좋은 책이다.
그리고 인자(요인)분석과 주성분분석과의 차이점에 대해서도 잘 설명하고 있다.


공부에 도움이 되는 인터넷 자료들 (블로그글, 사이트 등)

[0] http://6025.co.kr/statistics/yo.asp
통계 컨설팅 회사에서 제공하는 요인분석 기법 설명 (SPSS 사용법, 해석 등)

[1] http://blog.naver.com/seahawk00/130015880594
요인분석에 대하여 간단하게 잘 설명하고 있는 블로그글

[2] http://www.statsoft.com/textbook/stfacan.html
StatSoft 사의 <요인분석> 강좌글

[3] http://cafe.naver.com/bluematrix/410

[4] http://blog.daum.net/bomall/15938151

[5] http://blog.naver.com/nlboman?Redirect=Log&logNo=24061508

[6] http://blog.naver.com/seahawk00?Redirect=Log&logNo=130015880594
사회복지를 연구하시는 분의 블로그 논문을 위한 통계분석법들을 잘 정리해 둠.

[7] http://www.yorku.ca/ptryfos/f1400.pdf
회귀분석 파트의 강의자료 PDF 파일이다. 예제를 통하여 자세하게 설명하고 있다. 


공부에 도움이 되는 동영상 자료들

[1] 스탠포드 대학교의 공개 동영상 강좌 <Factor Analysis> 동영상 강좌 바로가기
Stanford University 에서는 많은 수의 강의를 인터넷을 통하여 공개하고 있다.
본 동영상 강좌는 CS229 기계학습(Machine Learning) 강좌의 일부이다. 요인분석이 통계학의 분석법이지만, 인공지능, 기계학습, 데이터마이닝 등의 분야에서 필요한 기술임을 알 수 있다.
Stanford CS229 - Machine Learning

[2] 에듀팜의 동영상 강좌 <SPSS 고급> 강좌 중 목차참고
유료강좌입니다. 수강해서 듣고 있는데 좋은 자료로 추천합니다. 
23번 [인자분석] 개요와 개념소개 + SPSS 설문예제 (25분)
24번 [인자분석] 인자모형의 개요와 설문분석 (55분)
25번 [인자분석] SPSS 실습강의 / 예제 (25분)


참고파일들

[1] 요인분석 정리 한글 파일



[2] http://www.yorku.ca/ptryfos/f1400.pdf 에서 받은 PDF 자료 (예제 통한 설명)


[3] 수강한 강좌에서의 <인자분석> 관련 파일들


[4] 내가 작성한 PPT 파일







by 에이아이 2009. 7. 24. 18:39

요인분석은 다양한 분야에서 다양한 목적으로 사용되고 있다.
요인분석 활용 목적의 하나로 설문지에 대한 평가항목 분석이 있다.

즉, 설문지가 잘 만들어졌는가?
설문지의 많은 질문들을 통하여 몇 개의 의미(내포된 개념)를 평가하고 있는가?
등을 평가할 수 있다. 아래의 예를 통해서 살펴보자.

아래의 항목들로 구성된 자아분석에 대한 설문지가 있다고 생각해보자.

                           평가항목  매우부정
     1
   부정
    2
   보통
    3
  긍정
    4
 매우긍정
      5
 1. 매사에 활동적인가?          
 2. 써클활동을 좋아하는가?          
 3. 쉽게 감동을 받는가?          
 4. 마음을 터놓고 대화를 즐기는가?          
 5. 슬픈 영화를 오래동안 기억하는가?          
 6. 개인보다 전체를 중요하게 여기는가?          
 7. 다른 사람들로 부터 외향적이라고 평가받는가?          
 8. 공동체의식이 강한사람이라고 평가받는가?          
 9. 감상적이라고 평가받는가?          

위의 9개의 항목으로 구성된 설문지는 대상자의 몇 가지 측면을 평가하고 있다고 생각되는가?
실제로 자아평가 질문에서는 비슷한 내용의 질문을 여러가지로 평가한다.

위의 설문지를 10명의 사람들로 부터 받은 후 엑셀 or SPSS 등에 입력했다고 하자.
위의 데이터는 9개의 변수로 구성된 데이터라고 볼 수 있다. 각 변수는 1에서 5의 값을 갖는다.

그럼 이 데이터를 요인분석을 수행해보자.
아래와 같은 형식으로 요인분석 결과를 도출할 수 있다.

즉, 원래 9개의 평가항목은 3개의 잠재 요인으로 파악될 수 있다. 물론 여기서 요인명은 자동적으로 추출된 것은 아니고 이해를 위해여 직접 정한 것이다.
요인분석을 통하여 9개의 변수를 3개의 변수로 요약하는 효과를 나타내었다.

 요인명 평가항목(변수명)  Factor1           Factor2         Factor3   신뢰성 지수
 
  활동적 성향


 매사에 활동적인가?
 마음을 터놓고 대화하는가?
 외향적이라고 평가받는가?

  0.86442         -0.21283        0.29404
  0.85704         -0.06908        0.27578
  0.84777         -0.28987        0.30340
     0.9203
 
  감상적 성향


 감상적이라고 평가받는가?
 슬픈 영화를 오래 기억하는가?
 쉽게 감동을 받는가?

 -0.27700         0.83755       -0.01126
 -0.11400         0.82671       -0.15980
 -0.09165         0.80210       -0.33037
     0.8160

  사회적 성향


 개인보다 전체를 중히 여기나?
 써클활동을 좋아하는가?
 공동체의식 좋다 평가받는가?

 0.30764         -0.19296        0.84597
 0.54257         -0.22829        0.66616
 0.57441         -0.20678        0.64786
     0.8710

  요약

 Eigen Value
 Pct of Var
 Cum Pct
 5.20618          1.46073         1.011365
     57.8               16.2                6.8
     57.8               74.1               80.9
     0.8710


신뢰성 지수(Cronbach's α)

동일한 개념을 측정하기 위해 여러개의 항목을 이용하는 경우, 신뢰도를 저해하는 항목을 찾아내어 측정도구에서 제외시킴으로써 측정도구의 신뢰도를 높이기 위한 방법. 즉, 내적일관도(internal consistency reliability)를 측정하는 방법, Cronbach's α 계수 이용

Cronbach's α 평가

"초기연구단계에서 α가 0.5∼0.6수준이면 비교적 양호하고, 0.7 이상이면 대체로 채택가능(acceptable)하다". Nunnally, Jun C., Psychometric Theory, McGraw-Hill Inc., 1976.

"신뢰계수 α의 가장 큰 문제점은 아직까지 모든 연구자가 수용할만한 신뢰계수의 기준에 대해 정확한 값이 없다는 점이다. 그러나 일반적으로 사회과학에서는 α = 0.70 을 기준으로 한다". 이영준, [SPSS/PC+를 이용한 다변량분석], 석정출판사, 1991.

보고서(논문) 작성시 참고사항

고려사항

- 목적 / 방법 구체적으로 기술
- Eigen value, Cum % 등 통계량이 의미하는 바 설명
- 변수와 요인명의 내용 및 타당성 관련사항 설명
- 신뢰성 지수 α에 대한 설명
- 의미해석 : 시사점,특이사항,문제점 등 주관적 소견 간단히 기술(단정적 표현 자제)

작성 예

개인적 성향을 측정하기 위해 만들어진 총9개의 변수들을 같은 개념군끼리 뚜렷하게 분류함과 동시에 변수의 수를 줄이기 위하여 요인분석기법중 요인간 상호독립성을 강조하는 Varimax 직각회전방식을 이용, 고유치(Eigen value) 1.0을 기준으로하여 요인을 재구성해 본 결과, <표12>와 같이 3개의 요인이 구성되었으며, 각 요인의 고유치는 최고 5.21부터 1.01까지 나타났고, 3개의 요인이 전체변수를 설명하는 비율은 80.9%로 나타났다.

각 요인명과 세부변수들의 내용을 되새겨보면, 각 변수들이 뚜렷하게 구분되고 있음을 알 수 있다. 즉, 개인적 성향은 크게 3가지로 분류되었는데, 매사에 활동적이며 외향적 성격인 활동적 성향, 감상적이고 쉽게 감동받는 체질인 감상적 성향, 개인보다 전체를 중요시하고 공동체의식이 강한 사회적 성향이 그것이다. 한편, 요인분석결과로 비추어 볼 때, 측정도구에 있어서의 내용타당성, 그리고 구조타당성중 수렴타당성과 판별타당성이 충분히 지지를 받고 있다고 판단되며, 아울러 Cronbach's α값이 0.92∼0.87까지 나타났는 바, 측정도구의 신뢰성중 내적일관성이 충분하다고 사료된다. 따라서, 각 요인에 포함된 변수들의 합산평균값을 추후분석에서 사용하는 것이 의미해석에 큰 무리를 주지 않고 무난하다고 보여진다.

자료출처 : 바로가기

by 에이아이 2009. 7. 24. 18:38

VIF 를 사용한 다중공선성의 진단과 판단기준

다중공선성을 판단하기 위해 VIF 가 가장 많이 사용된다. VIF 수식의 값이 10 이상 이면 해당 변수가 다중공선성이 존재하는 것으로 판단한다. (반대로, 1 에서 10 미만의 값이면 다중공선성이 별 문제가 되지 않는 것으로 판단한다. 참고로 VIF 값은 1에서 무한대의 값의 범위를 갖는다.)

다중공선성을 SPSS 프로그램을 사용하여 측정할 수 있다. 만약, SPSS 에서 다중공선성(VIF, Tolerance, CN) 을 계산하는 방법을 알고 싶다면 여기 를 클릭하면 설명을 볼 수 있다.

VIF 수식의 의미는 아래에 자세하게 설명하였다.
 

VIF 에 대한 설명


데이터의 다중공선성을 진단하는 방법 중 가장 많이 사용되고 있는 VIF 에 대해서 설명한다.

VIF 는 'Variation Inflation Factor' 의 줄임말이다.
한글로는 '분산 확대 인자' 또는 '분산 팽창 계수' 또는 '분산 팽창 요인' 등으로 불린다.

VIFk 는 k 번째 변수의 다중공선성의 정도를 의미한다. 즉, VIF 는 입력 데이터 전체의 다중공선성 정도를 하나의 수치로 제시하는 것이 아니라, 각각의 입력 변수들을 대상으로 계산된다.

VIFk 의 계산 방식을 설명하겠다.

설명에 앞서 먼저 입력 데이터의 구성을 아래와 같이 약속하자.
분석에 사용될 데이터가 입력변수 n개와 종속변수 1개로 구성된다고 하자. 총 변수는 n+1 이다.
이 데이터의 변수들은 모두 수치형(양적) 변수이어야 한다.

그럼, VIFk 는 (여기서, 1<= k <= n 의 관계)
변수 k를 종속변수로 지정하고, 나머지 n-1 개의 입력변수를 입력변수로 지정하여 회귀분석을 수행한다.
즉, 이 회귀분석에서 종속변수 Y는 제외시킨다. 왜냐하면, 다중공선성은 입력변수들 간의 상관관계를 측정하는 것이기 때분이다.

위 수행된 회귀분석에서의 결정계수 Rj2 을 구한 후 아래의 수식으로 VIFk 를 구한다.

VIFk = 1 / (1 - Rj2)

VIFk 는 k번째 변수의 VIF 값을 의미한다.

결정계수 Rj2 값은 0에서 1의 값을 가지므로 VIF 값은 1에서 무한대의 범위를 갖는다.
(1) 결정계수 Rj2 값이 0에 가깝다는 것은 입력변수 k가 다른 입력변수들과 상관성이 거의 없다는 것을 의미하고, (2) 결정계수 Rj2 값이 1에 가깝다는 것은 입력변수 k가 다른 입력변수들과 상관성, 즉 다중공선성이 크다는 것을 의미한다.

다시 얘기하면,
VIF 값이 1 에 가까울수록 다중공선성의 정도가 작은 것이며, 반대로 값이 커질수록 다중공선성의 정도가 큰 것을 의미한다.

값의 범위가 1에서 무한대이기 때문에, 어느정도 커야 다중공선성이 있다라고 판단할 것인가에 대한 기준값이 필요하다. 보통 VIF 값이 10 이상인 경우 해당 변수가 다중공선성이 있다고 판단한다.


생각해볼 문제.

항목1. VIF 수식은 회귀분석에만 사용될 수 있다. 즉, 수치형으로 구성된 데이터에 대해서만 적용가능하다. 결정트리 알고리즘에 적용하기 위한 데이터의 다중공선성 진단에는 적용할 수 없는가? 수치형 뿐 아니라 범주형도 섞여있는 데이터으므로 적용이 안되지 않는가?





by 에이아이 2009. 7. 20. 21:38
| 1 2 3 4 5 6 |