빅데이터분석기사 시험 노트개념 정리18 MIN
변수 선택과 차원 축소
변수가 많을수록 좋은 것이 아닌 까닭과 그 수를 줄이는 두 길을 봅니다. 차원의 저주, 필터·래퍼·임베디드 기법, 전진선택·후진제거·단계적 선택, PCA와 SVD, 요인분석·판별분석·다차원척도법, 누적기여율과 스크리 플롯을 다룹니다.
앞 노트에서 빈칸과 튀는 값을 다듬었습니다. 다듬은 데이터를 보면 이번에는 변수가 너무 많다는 문제가 남습니다. 고객 한 명에 대해 수백 개의 열이 붙어 있으면 그중 정말 쓸모 있는 것은 몇 개뿐이고, 나머지는 모델을 무겁게 하고 오히려 성능을 깎습니다. 변수의 수를 줄이는 길은 둘인데, 쓸 변수를 고르는 길과 여러 변수를 합쳐 새 축을 만드는 길입니다. 이 단원은 그 둘을 가르는 문항과 주성분분석의 누적기여율 계산이 가장 자주 나옵니다.
차원의 저주
차원과 데이터 밀도
여기서 차원은 데이터를 설명하는 변수의 개수입니다. 변수가 셋이면 관측치 하나가 3차원 공간의 점 하나가 됩니다. 차원의 저주는 차원이 늘어날수록 같은 수의 관측치가 공간을 채우지 못하고 듬성듬성 흩어져, 분석과 학습이 급격히 어려워지는 현상입니다.
숫자로 보면 실감이 납니다. 각 변수가 0~1 사이에 고르게 퍼져 있을 때 전체 데이터의 10%를 담는 정육면체를 만든다고 합시다. 변수가 하나면 길이 0.1인 구간이면 되지만, 셋이면 한 변이 , 열이면 가 되어야 합니다. 「가까운 이웃 10%」를 찾으려는데 각 축 범위의 80% 가까이를 뒤져야 하는 셈이라, 가깝다는 말이 뜻을 잃습니다.
과적합
변수가 많고 관측치가 적으면 모델은 데이터의 진짜 규칙보다 우연한 무늬를 외우게 됩니다. 학습 데이터에서는 잘 맞는데 새 데이터에서는 틀리는 이 현상이 과적합이며, 차원의 저주가 실제로 드러나는 모습입니다. 그래서 차원을 줄이면 계산이 가벼워지는 것 말고도 일반화 성능이 오르고, 2차원이나 3차원으로 줄이면 사람이 그림으로 볼 수 있게 됩니다.
변수 선택
필터·래퍼·임베디드
변수 선택은 원래 변수 가운데 쓸 것만 골라 남기는 방법입니다. 변수 자체는 바뀌지 않으므로 해석이 쉽습니다. 고르는 방식이 셋입니다.
| 기법 | 고르는 방식 | 예 | 특징 |
|---|---|---|---|
| 필터 | 모델 없이 통계량으로 변수마다 점수를 매긴다 | 상관계수, 카이제곱 검정, 정보 이득, 분산 기준 | 빠르지만 변수끼리의 조합을 못 본다 |
| 래퍼 | 변수 부분집합을 바꿔 가며 모델을 실제로 학습해 성능을 잰다 | 전진선택, 후진제거, 단계적 선택, RFE | 정확하지만 계산이 많고 과적합 위험이 있다 |
| 임베디드 | 모델이 학습하는 과정 안에서 변수를 고른다 | 라쏘, 엘라스틱넷, 의사결정나무 | 둘의 중간 |
필터는 모델을 고르기 전에 한 번 거르는 체이고, 래퍼는 모델을 감싸(wrap) 돌려 보는 방식이며, 임베디드는 모델 안에 박혀 있는 방식입니다. 이름의 뜻을 잡으면 사례를 주고 기법을 묻는 문항이 풀립니다.
라쏘와 릿지
임베디드의 대표가 라쏘입니다. 회귀 계수의 절댓값 합에 벌점을 주는 L1 규제를 쓰는데, 벌점이 크면 쓸모없는 변수의 계수가 정확히 0이 되어 그 변수가 모델에서 빠집니다. 계수의 제곱합에 벌점을 주는 릿지(L2 규제)는 계수를 0 가까이 줄이기만 하고 정확히 0으로 만들지 않으므로 변수 선택이 일어나지 않습니다. 둘을 섞은 것이 엘라스틱넷입니다. 「변수 선택 효과가 있는 규제」를 물으면 라쏘입니다.
단계적 방법
전진선택과 후진제거
래퍼 기법 가운데 회귀 분석에서 자주 쓰는 셋이 있습니다.
- 전진선택은 변수가 하나도 없는 모델에서 시작해, 가장 도움이 되는 변수를 하나씩 더한다. 더해도 나아지지 않으면 멈춘다
- 후진제거는 모든 변수를 넣은 모델에서 시작해, 가장 덜 중요한 변수를 하나씩 뺀다. 빼면 나빠질 때 멈춘다
- 단계적 선택은 전진선택처럼 하나씩 더하되, 더할 때마다 이미 들어간 변수 중 쓸모없어진 것이 있으면 뺀다
전진선택은 한 번 들어간 변수를 다시 빼지 않고, 후진제거는 한 번 뺀 변수를 다시 넣지 않습니다. 단계적 선택은 이 한계를 메우려고 더하기와 빼기를 함께 합니다. 「더하고 빼기를 모두 고려한다」는 설명이 붙으면 단계적 선택입니다.
선택 기준
「도움이 된다」를 재는 잣대로는 회귀 계수의 p값, 수정된 결정계수, 그리고 AIC와 BIC 같은 정보 기준을 씁니다. AIC는 모델이 데이터를 얼마나 잘 설명하는지에 변수 개수만큼 벌점을 더한 값으로 작을수록 좋고, BIC는 표본이 클 때 변수 개수에 더 큰 벌점을 줘 더 단순한 모델을 고르는 경향이 있습니다. 변수를 더하면 결정계수는 무조건 올라가므로 그것을 기준으로 쓰면 변수를 끝없이 넣게 된다는 점이 이런 기준을 따로 두는 이유입니다.
주성분분석
주성분
차원 축소는 변수를 고르는 대신 여러 변수를 합쳐 더 적은 수의 새 변수를 만드는 방법입니다. 그 대표가 주성분분석(PCA)입니다. 원래 변수들의 선형결합으로 새 축을 만드는데, 첫 축은 데이터의 분산이 가장 큰 방향으로, 둘째 축은 첫 축과 직교하면서 남은 분산이 가장 큰 방향으로 잡습니다. 이렇게 만든 축 하나하나가 주성분입니다. 주성분끼리는 상관이 0이므로, 서로 상관이 높아 회귀계수가 불안정해지는 다중공선성 문제를 피할 수 있습니다.
계산으로는 공분산행렬(또는 상관행렬)의 고유값 분해이며, 각 주성분이 설명하는 분산이 그 고유값입니다. 변수마다 단위가 다르면 분산이 큰 변수가 첫 주성분을 독차지하므로 표준화한 뒤, 곧 상관행렬로 분석합니다.
누적기여율과 스크리 플롯
주성분 하나의 기여율은 그 고유값을 전체 고유값의 합으로 나눈 것으로, 전체 분산 가운데 그 주성분이 설명하는 비율입니다. 첫째부터 차례로 더한 것이 누적기여율입니다. 변수 다섯을 표준화해 얻은 고유값이 2.6·1.2·0.6·0.4·0.2라면 합은 5이고 기여율은 52%·24%·12%·8%·4%, 누적기여율은 52%·76%·88%·96%·100%입니다.
몇 개를 남길지 정하는 기준은 셋입니다.
- 누적기여율이 미리 정한 값(보통 70~90%)을 넘는 데까지 남긴다 — 80%면 위 예에서 셋
- 상관행렬의 고유값이 1 이상인 것만 남긴다(카이저 기준) — 위 예에서 둘
- 스크리 플롯을 그려 꺾이는 지점까지 남긴다
스크리 플롯은 가로축에 주성분 번호, 세로축에 고유값을 찍은 꺾은선입니다. 처음에는 가파르게 떨어지다가 어느 지점부터 완만해지는데, 그 꺾이는 팔꿈치 직전까지가 의미 있는 주성분입니다. 같은 데이터라도 기준마다 답이 다를 수 있으므로 문항이 어느 기준을 쓰라고 지정하는지를 먼저 봅니다.
import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
X = StandardScaler().fit_transform(load_iris().data) # 변수 4개를 표준화
pca = PCA().fit(X)
print(pca.explained_variance_ratio_.round(3)) # [0.73 0.229 0.037 0.005]
print(np.cumsum(pca.explained_variance_ratio_).round(3)) # [0.73 0.958 0.995 1. ]
붓꽃 데이터는 주성분 둘이 분산의 95.8%를 설명하므로 변수 넷을 둘로 줄여도 정보를 거의 잃지 않습니다.
다른 축소 기법
SVD
특잇값 분해(SVD)는 임의의 m×n 행렬 A를 세 행렬의 곱으로 나누는 방법입니다.
U와 V는 직교행렬이고 Σ는 대각선에 특잇값이 큰 순서로 놓인 행렬입니다. 고유값 분해가 정사각행렬에만 되는 것과 달리 SVD는 어떤 모양의 행렬에도 됩니다. 큰 특잇값 k개만 남기고 나머지를 버리면 원래 행렬을 가장 잘 근사하는 낮은 차원의 행렬이 나와, 추천 시스템과 텍스트 분석의 잠재 의미 분석에 쓰입니다. 평균을 뺀 데이터 행렬에 SVD를 하면 특잇값의 제곱이 주성분의 분산에 비례하므로, 실제 PCA 구현은 대개 SVD로 계산합니다. 위 붓꽃 코드에서 np.linalg.svd(X)로 얻은 특잇값을 제곱해 비율을 내면 같은 [0.73, 0.229, 0.037, 0.005]가 나옵니다.
요인분석·판별분석·다차원척도법
나머지 셋은 PCA와 무엇이 다른지가 문항의 전부입니다.
| 기법 | 하는 일 | PCA와 다른 점 |
|---|---|---|
| 요인분석 | 관측 변수들 뒤에 있는 잠재 요인을 찾는다 | PCA는 변수를 합쳐 분산을 설명하고, 요인분석은 잠재 요인이 변수를 만든다고 본다 |
| 판별분석 | 집단을 가장 잘 가르는 축을 찾는다 | 집단 정보(목표 변수)를 쓰는 지도 학습이다 |
| 다차원척도법 | 개체 사이의 거리를 저차원 공간에서 최대한 보존해 배치한다 | 변수가 아니라 개체 간 거리나 유사성 행렬에서 출발한다 |
요인분석에서는 여러 문항의 응답이 「만족도」나 「충성도」 같은 보이지 않는 요인 몇 개에서 나온다고 보고 그 요인을 찾습니다. 판별분석은 PCA가 집단을 모른 채 분산만 보는 것과 달리 집단 사이는 멀고 집단 안은 가까워지는 축을 찾습니다. 다차원척도법(MDS)은 도시 간 거리표만 주고 지도를 그리는 문제와 같으며, 원래 거리와 그린 배치의 어긋남을 스트레스 값으로 재 0에 가까울수록 잘 맞는다고 봅니다.
연습 문제
모델 없이 상관계수나 카이제곱 통계량으로 변수마다 점수를 매겨 고르는 기법은?
① 필터
② 래퍼
③ 임베디드
④ 단계적 선택①. 래퍼는 모델을 실제로 학습해 부분집합을 고르고, 임베디드는 학습 과정 안에서 고르며, 단계적 선택은 래퍼에 속합니다.회귀 계수를 정확히 0으로 만들어 변수 선택 효과를 내는 규제는?
① 릿지
② 라쏘
③ 드롭아웃
④ 표준화②. 라쏘의 L1 규제는 계수를 0으로 만들 수 있고, 릿지의 L2 규제는 0 가까이 줄이기만 합니다.변수를 하나씩 더하면서, 더할 때마다 이미 들어간 변수 중 쓸모없어진 것을 빼는 방법은?
① 전진선택
② 후진제거
③ 단계적 선택
④ 주성분분석③. 전진선택은 한 번 넣은 변수를 다시 빼지 않고, 후진제거는 모두 넣은 상태에서 빼기만 합니다.변수 여섯을 표준화해 얻은 고유값이 3.0, 1.5, 0.9, 0.3, 0.2, 0.1이다. 누적기여율 80%를 기준으로 하면 몇 개의 주성분을 남기는가?
① 1개
② 2개
③ 3개
④ 4개③. 합은 6이므로 기여율은 50%·25%·15%·5%·3.33…%·1.66…%이고 누적은 50%·75%·90%입니다. 둘로는 75%라 80%에 못 미치고 셋에서 90%로 넘습니다.4번과 같은 고유값에 카이저 기준(고유값 1 이상)을 적용하면 남는 주성분 수는?
① 1개
② 2개
③ 3개
④ 6개②. 1 이상인 것은 3.0과 1.5뿐입니다. 같은 데이터라도 기준에 따라 답이 갈립니다.각 변수가 0~1에 고르게 퍼진 2차원 데이터에서 전체의 25%를 담는 정사각형의 한 변 길이는?
① 0.25
② 0.5
③ 0.0625
④ 0.75②. 넓이가 0.25여야 하므로 한 변은 입니다. 차원이 늘수록 같은 비율을 담는 데 필요한 변의 길이가 길어지는 것이 차원의 저주입니다.집단 정보를 이용해 집단 사이를 가장 잘 가르는 축을 찾는 기법은?
① 주성분분석
② 요인분석
③ 판별분석
④ 다차원척도법③. 판별분석만 목표 변수를 쓰는 지도 학습이고, 나머지 셋은 집단 정보 없이 데이터의 구조를 봅니다.특잇값 분해에 대한 설명으로 옳지 않은 것은?
① 정사각행렬이 아니어도 분해할 수 있다
② 큰 특잇값 몇 개만 남겨 원래 행렬을 근사할 수 있다
③ 분해 결과의 U와 V는 직교행렬이다
④ 특잇값은 작은 순서로 대각선에 놓인다④. 특잇값은 큰 순서로 놓이며, 그래서 앞의 몇 개만 남기는 근사가 가능합니다.
이 단원은 「고르느냐 합치느냐」로 먼저 가르면 정리됩니다. 고르는 쪽은 필터·래퍼·임베디드의 이름 뜻과 단계적 방법 셋의 출발점을, 합치는 쪽은 PCA의 기여율 계산과 남길 개수의 세 기준을 잡고, 요인분석·판별분석·다차원척도법은 PCA와 무엇이 다른지 한 줄씩만 붙이면 됩니다.

