Posts List

[빅분기] PART2. 빅데이터 탐색 - 데이터 전처리 - 분석 변수 처리 (출제빈도 : 중)

     * 본문은 이기적에서 발행한 빅데이터분석기사 수험서를 공부하면서 작성된 글입니다. 시험 대비한 공부로, 암기가 필요한 부분을 요약/정리합니다.

PART2. 빅데이터 탐색

1. 데이터 전처리

1-2. 분석 변수 처리

1) 변수 선택

통계적 분석 결과 신뢰성을 위해 기본적으로 변수는 많으면 좋음. but 분석 모형 구성/사용하는데 필요이상의 많은 데이터를 요구할 수 있음

* 회귀분석의 사례

독립변수가 m개이고 설명력(R-square)이 89%라고 했을 때, 더 적은 n개만을 사용해서 동일한 설명력이 나온다면 변수의 효율적 선택의 필요성 증가

* 변수별 모형의 분류

 ① 전체 모형(FM : Full model) : 모든 독립변수 사용한 모형
 ② 축소 모형(RM : Reduced model) : 전체 모형에서 변수 개수를 줄여 얻은 모형
 ③ 영 모형(NM : Null model) : 독립변수가 하나도 없는 모형

* 변수 선택 방법

 ① 전진(Forward) 선택법
  - NM에서 시작, 독립-종속 변수간 단순상관계수 절대값이 가장 큰 변수를 모형에 포함시키는 방법
  - 부분 F 검정(F test)통해 유의성 검증 시행. 유의한 경우 가장 큰 F를 가진 모형 선택.
  - 한번 추가된 변수는 제거하지 않는 것이 원칙

 ② 후진(Backward) 선택법 = 후진 소거법(Elimination)
  - FM에서 시작, 단순상관계수 절대값이 가장 작은 변수를 분석 모형에서 제외시키는 방법
  - 부분 F 검정 (F test) 시행. 유의하지 않는 경우 변수 제거, 유의한 경우는 변수제거 없이 과정 중단
  - 마찬가지로 한번 제거된 변수는 추가하지 않는 것이 원칙

 ③ 단계적(Stepwise) 선택법
  - 전진/후진 선택법의 보완책
  - 전진 선택법을 통해 가장 유의한 변수를 모형에 포함 → 나머지 변수들에 대해 후진 선택법으로 제거
  - 제거된 변수는 다시 포함하지 않으며 유의한 설명변수가 존재하지 않을 때까지 과정 반복

2) 차원 축소 (차원 = 분석하는 데이터 종류의 수, 차원축소 = 변수의 양을 줄이는 것)

* 차원 축소 필요성

 ① 복잡도의 축소(Reduce Complexity)
  - 동일한 품질 내 분석 시간, 저장변수의 양을 줄일 수 있다면 효율성 측면에서 Good
 ② 과적합(Overfit) 방지
  - 차원의 증가는 분석모델 파라미터 증가로 과적합 발생 → 모델의 신뢰도 저하
  - 작은 차원으로 안정적인(robust) 결과를 도출하는 것이 많은 차원을 다루는 것보다 효율적
 ③ 해석력(Interpretability) 확보
  - 차원이 간단한 모델일수록 내부구조 이해 용이 → 해석 쉬워짐 → 명확한 결과 도출
 ④ 차원의 저주(Curse of Dimensionality)
  - 차원이 증가하면 학습데이터가 수가 차원의 수보다 적어져 성능이 저하
  - 차원을 줄이거나 데이터의 수를 늘리는 방법 필요

* 차원 축소 방법

요인 분석(Factor Analysis)
 - 다수 변수들 간의 상관관계 분석하여 공통차원을 축약하는 통계분석 과정
 - 목적 : 변수 축소 및 제거, 변수특성 파악, 타당성 평가, 파생변수 생성
 - 특징 : 독립변수, 종속변수 개념 없이 기술 통계에 의한 방법 이용
 - 종류 : 주성분 분석(PCA), 공통요인 분석 특이값 분해(SVD:Singular Value Decomposition)행렬, 음수미포함행렬분해(NVF : Non-negative Matrix Factorization) 

 ① 주성분 분석(PCA : Principal Component Analysis) ※ 상세설명 : [데이터마이닝] 변수선택법
  - 분포된 데이터 특성을 설명할 수 있는 하나 또는 복수 개의 특징(주성분)을 찾는 것
  - 데이터 개별의 성분 분석하는 것이 아니라, 여러 데이터들이 분포를 이룰 때 분포의 주성분을 분석하는 방법
  - 서로 연관성 있는 고차원 데이터 → 선형연관성 없는 저차원(주성분)으로 변환 (직교변환 사용)
  - 기존변수들을 새로운 변수 셋으로 변환하면서 차원을 줄이되, 기존 변수들의 분포 특성 최대한 보존(신뢰성↑)
  - 차원 축소에 폭넓게 사용되며 사전적 분포 가정의 요구가 없음
  - 가장 큰 분산의 방향들이 주요 중심 관심으로 가정
  - 본래 변수들의 선형결합으로만 새로운 변수 생성
  - 차원 축소는 본래 변수들이 상관관계가 있을 때만 가능
  - 스케일에 대한 영향이 크기 때문에 변수들 간의 스케일링 필수

 ② 특이값 분해(SVD : Singular Value Decomposition)
W = U Σ Vtranspose
  - 원리 : 데이터 공간 m x n 크기의 M행렬에 대해 위와 같이 분해 가능
    ※ U는 m x m 직교행렬, Σ는 m x n 대각행렬, V의 전치행렬일 Vtranspose 는 n x n 직교행렬
    ※ 직교행렬(행렬의 열벡터가 독립)은 전치행렬과 역행렬이 같음 Utranspose = Uinverse
  - 주어진 행렬 W(데이터)를 W와 동일한 크기를 갖는 행렬로 분해할 수 있음 (각 행렬 원소값 크기는 Σ 에서 결정)
  - SVD를 통해 기존 차원의 정보를 U, Σ, Vtranspose 로 분해 및 A과 유사한 정보력을 가진 행렬 생성
    → 큰 몇 개의 특이값(k)을 가지고도 충분히 유용한 정보를 유지할 수 있는 차원을 생성 (차원 축소)

 ③ 음수 미포함 행렬분해(NMF : Non-negative matrix factorization)
  - 음수를 포함하지 않은 행렬 V를 음수를 포함하지 않은 두 행렬의 곱으로 분해하는 알고리즘 (V=WH)
  - W의 열 개수와 H의 행 개수가 WH = V가 되도록 결정됨. 
  - 기존 행렬 V와 분해한 행렬 W와 H의 곱과의 차이를 오차 U라고 정의 (V=WH+U)
    ※ U의 원소는 양수나 음수 모두 될 수 있음
  - W, H가 V(기존 데이터)보다 크기가 작기 때문에 저장하거나 다루기에 용이함. 
  - V를 원래 정보보다 상대적으로 적은 정보로 표현 (분해한 행렬 하나가 전체 정보의 대략적인 정보 제시)
    ※ 일반적으로 행렬 분해는 정확한 해가 없기 때문에 대략적인 해를 구함

3) 파생변수의 생성

주어진 원데이터에서 목표에 적합하게 계속해서 데이터 형태를 수정/보완할 필요 있음
데이터 마트(Data mart)는 데이터 웨어하우스(DW)로부터 파생된 중간층이지만 분석을 위한 기본단계변수가 모여지는 단계로, 요약변수와 파생변수들의 모임으로 볼 수 있음.
요약변수와 파생변수는 분석 모델 구축 시 핵심인 환경과 문제를 잘 해석할 수 있는 변수를 찾는데 의의가 있음

* 요약변수

 - 수집된 정보를 분석에 맞게 종합(aggregate)한 변수
 - 데이터 마터에서 가장 기본적인 변수
 - 많은 분석 모델에서 공통으로 사용될 수 있어 재활용성이 높음

* 파생변수

 - 기존의 변수를 조합하여 새로운 변수를 만들어 내는 것
 - 사용자가 특정 조건이나 함수에 의해 값을 만들어 의미를 부여함 → 매우 주관적임 (논리적 타당성 구축 필요)
 - 특정상황에만 유의미하지 않게 대표성을 나타나게 할 필요가 있음.
 예1) 국어, 수학 점수 컬럼에서 총합, 평균 컬럼을 파생변수로 생성하여 학업평가DB로 활용하는 경우
 예2) 수능에서 원점수는 실제 점수이지만, 표준 점수는 난이도 고려, 정규화된 점수임. (난이도에 따른 상대점수)

* 요약변수(단순 종합) vs. 파생변수(주관적 변수)

(예시 - 고객관계관리(CRM : Customer Relationship Management) DB 사례)
 - 매장이용횟수 vs. 주 구매매장 변수
 - 구매상품목록 개수 vs. 구매상품 다양성 변수
 - 기간별 구매금액/횟수 vs. 주 활동지역 변수
 - 상품별 구매금액/횟수 vs. 주 구매상품 변수

요약변수 처리 유의사항
 - 처리(단어의 빈도, 초기행동변수, 트렌스 변수 등) 방법에 따라 결측치 / 이상치 처리에 유의
 - 연속형 변수의 구간화 적용과 고정된 구간화를 통한 의미 파악 시 정구간이 아닌 의미있는 구간 탐색 필요

파생변수 생성 및 처리 유의사항
 - 특정 상황에만 의미성 부여가 아닌 보편적이고 전 데이터구간에서 대표성을 가지는 변수 생성 필요
 - 한 값으로부터 특징을 추출하는 방법
 - 한 레코드내의 값들을 결합하는 방법
 - 다른 테이블의 부가 정보를 결합하는 방법
 - 다수 필드내 시간 종속적인 데이터를 선택(pivoting) 하는 방법
 - 레코드 또는 중요 필드를 요약하는 방법 등.

4) 변수 변환

* 개념

 - 어떤 변수로 나타낸 식을 (분석하기 좋은 형태로) 다른 변수로 바꿔 나타내는 기법
 - 수학적 의미의 변환 관점에서, 기존 변수 공간에서 해결/관찰 없는 사실을 변환함으로써 해석이 용이해짐
 - 데이터 전처리 과정 중 하나로 간주

* 변수 변환 방법

 ① 범주형 변환 : 연속형 변수 자체 분석 보다 범주형으로 바꿨을 때 분석 결과 명료성/정확성 배가되는 경우 
    (ex. 소득 100만원 상승시 사교육비 지출 10만원 증가 
      → 상위 10% 소득가정의 사교육비 지출이 하위 10%보다 10배 많다.)

 ② 정규화 : 분석을 정확히 하기 위해 연속형 데이터 바로 사용하기 보다 정규화 이용하는 경우 타당할 수 있음.
   - 데이터가 가진 스케일이 심하게 차이나는 경우 상대적 특성이 반영된 데이터로 변환
     일반 정규화) 범위가 다른 데이터를 같은 범위로 변환
     최소-최대 정규화) 가장 일반적인 방법. 0~1사이의 값으로 변환하는 방법. 이상치 영향을 많이 받음.
     Z-Score 정규화) 이상치 문제를 피하기 위한 방법. 
Z = (X - μ) / σ
     평균과 같은 데이터는 0, 보다 작으면 음수, 보다 크면 양수로 정규화. 크기는 표준편차에 의해 결정
     표준편차가 크면(값이 넓게 퍼져있으면) 정규화 값은 0에 가까워짐
     이상치를 잘 처리하지만 정확히 동일한 척도로 생성하지 않음

  ③ 분포형태별 정규분포 변환
   - 정규성 검정 방법 : 데이터 분포의 형태 확인, 샤피로테스트(Shapiro Test), 큐큐 플롯(Q-Q Plot)
   - 제곱근변환 : 제곱근 취했을 때 선형적인 특성을 가지는 경우가 있음.
     데이터분포의 형태가 우측으로 약간 치우친 경우 정규 분포화에 유용
   - 로그변환 : 수치 값을 그대로 사용하지 않고 로그를 취한 값 ln (X) 를 사용하는 방법
     로그를 취하면 정규 분포에 가깝게 분포하는 경우가 있음. (로그정규분포)
     데이터분포의 형태가 우측으로 치우친 경우 정규분포화를 위해 로그변환 사용
   - 역수변환 : 역수를 사용하면 오히려 선형적인 특성을 가지는 경우가 있음. 
     데이터분포의 형태가 우측으로 극단적으로 치우친 경우 유용
   - 지수변환 : 지수를 사용하면 오히려 선형적인 특성을 가지는 경우가 있음. 
     데이터분포의 형태가 좌측으로 치우친 경우 유용. 극단적일 수록 지수를 높게 셋팅 (2승 → 3승)

5) 불균형 데이터 처리

각 클래스(주로 범주형 반응 변수)가 갖고 있는 데이터 양에 차이가 큰 경우 클래스 불균형이 있다고 지칭
(ex. 질병이 있는 사람과 없는 사람의 수의 차이가 큰 경우 등 대부분 '현실 데이터'에는 불균형 문제가 있음.)

* 불균형 데이터 문제점

 - 불균형이 너무 심하면(Highly-imbalanced data) 우세 클레스를 택하는 모형이 만들어질 확률이 높음.
 - 즉, 정확도(Accuracy)는 높지만, 재현율(Recall-rate)가 급격히 작아짐.
 - 클래스의 균형은 소수의 클래스에 특별히 더 관심이 있는 경우 꼭 필요함.

* 불균형 데이터 처리 방법

 ① 가중치 균형 방법(Weighted Balancing)
  - 손실(loss) 계산시, 소수클래스에서 발생하는 loss가 더 크게 측정되게 하는 방법
  - 고정 비율 이용 : 적은 샘플수를 가진 클래스를 전체 loss에 동일하게 기여하게 하는 법. 
    ex. 클래스 A, B의 불균형이 1:5 일때, loss는 5:1로 측정하는 방법
  - 최적 비율 이용 ; 가중치 비율의 최적 세팅을 찾으면서 가중치 자체를 찾아가는 방법

 ② 언더/오버 샘플링
  - 다수 클래스 데이터를 일부만 사용하거나 (언더샘플링), 소수 클래스를 증가 시키는 (오버샘플링) 방법
  - 데이터 비율을 맞추면 정밀도(precision)이 향상된다.
  - 언더 샘플링 : 다수 클래스의 데이터는 일부만 선택하고, 소수 클래스의 데이터는 최대한 사용.
  - 오버 샘플링 : 소수 클래스의 복사본을 만들어 다수 클래스의 크기만큼 만들어 주는 방법. 

댓글 쓰기

0 댓글