Skip to main content
Summary

특징이 많아지면 데이터는 안개 속으로 들어간다

앞 장에서 우리는 K-means를 통해 비슷한 데이터끼리 자연스럽게 모이는 모습을 살펴보았다. 점들이 평면 위에 흩어져 있고, 그 점들 사이의 거리를 보고 그룹을 만든다고 생각하면 군집화는 꽤 직관적이었다. 그런데 실제 데이터는 그렇게 친절하지 않다.

예를 들어 고객 데이터를 생각해 보자. 고객 한 명을 설명하기 위해 나이, 가입 기간, 월평균 구매 금액, 방문 횟수, 할인 쿠폰 사용률, 최근 접속일, 장바구니 상품 수, 반품 횟수, 선호 카테고리, 앱 체류 시간 같은 값을 모을 수 있다. 벌써 특징이 열 개다. 여기에 상품별 클릭 횟수, 시간대별 접속 패턴, 기기 종류, 지역, 검색어까지 더하면 특징은 금세 수십 개, 수백 개가 된다.

특징이 두 개라면 우리는 데이터를 종이에 그릴 수 있다. x축에는 방문 횟수, y축에는 구매 금액을 놓으면 된다. 특징이 세 개라면 입체 공간에 그릴 수도 있다. x축, y축, z축을 쓰면 된다. 하지만 특징이 열 개라면 어떻게 그릴까? 열 개의 축이 있는 공간을 머릿속에 떠올릴 수 있을까?

여기서 머신러닝을 처음 배우는 사람이 자주 만나는 벽이 등장한다. 데이터는 분명히 표 형태로 존재하지만, 사람이 한눈에 이해하기 어렵다. 특징이 많아질수록 데이터는 보이지 않는 공간, 즉 고차원 공간에 놓인다. 고차원이라는 말이 무섭게 들릴 수 있지만 뜻은 간단하다. 데이터를 설명하는 숫자 축이 많다는 뜻이다.

문제는 단지 그림을 못 그린다는 데서 끝나지 않는다. 특징이 너무 많으면 해석이 어려워진다. 어떤 특징이 중요한지, 데이터가 어떤 방향으로 달라지는지, 고객들이 어떤 기준으로 나뉘는지 감을 잡기 힘들다. 계산도 무거워진다. 모델은 더 많은 숫자를 처리해야 하고, 데이터가 조금만 부족해도 우연한 패턴에 끌려갈 가능성이 커진다. 또한 모든 특징이 의미 있는 것은 아니다. 어떤 특징은 신호라기보다 잡음에 가깝다. 모델이 배워야 할 핵심 패턴을 흐리게 만드는 먼지 같은 값들이다.

차원 축소는 바로 이 상황에서 등장한다. 많은 특징을 더 적은 수의 축으로 압축해, 복잡한 데이터를 조금 더 단순한 형태로 바라보려는 방법이다. 핵심은 "모든 정보를 완벽히 보존하자"가 아니다. 그건 대개 불가능하다. 대신 "중요한 구조는 최대한 남기고, 덜 중요한 복잡함은 줄이자"에 가깝다.

차원 축소와 PCA

차원 축소는 데이터의 요약본을 만드는 일이다

차원 축소를 책상 정리에 비유해 보자. 책상 위에 영수증, 노트, 케이블, 펜, 충전기, 간식 봉지, 책, 이어폰이 어지럽게 놓여 있다. 이 상태 그대로도 정보는 많다. 하지만 일을 시작하려면 먼저 정리가 필요하다. 중요한 서류는 파일에 넣고, 케이블은 한쪽에 모으고, 버릴 것은 버린다. 정리한 책상은 원래 책상 위의 모든 상태를 100% 그대로 보존하지 않는다. 대신 "지금 필요한 구조"를 더 잘 드러낸다.

차원 축소도 비슷하다. 원래 데이터에는 많은 특징이 있다. 차원 축소는 그 특징들을 조합해 더 적은 수의 새로운 특징을 만든다. 이 새로운 특징은 원래 특징 하나를 그대로 가져온 것이 아닐 수 있다. 예를 들어 고객 데이터에서 "방문 횟수", "앱 체류 시간", "상품 클릭 수"가 함께 움직인다면, 차원 축소는 이들을 묶어 "활동성"에 가까운 새로운 축으로 표현할 수 있다. 물론 알고리즘이 스스로 그 축에 '활동성'이라는 이름을 붙여 주지는 않는다. 이름은 사람이 데이터의 의미를 보고 해석하는 것이다.

중요한 점은 차원 축소가 단순히 특징 몇 개를 버리는 일이 아니라는 것이다. 물론 때로는 불필요한 컬럼을 직접 제거할 수도 있다. 하지만 PCA 같은 차원 축소 방법은 원래 특징들을 새롭게 섞어 더 정보가 많은 축을 만든다. 마치 여러 색의 빛을 섞어 새로운 색을 만드는 것처럼, 여러 특징을 조합해 데이터를 더 잘 설명하는 방향을 찾는다.

이때 우리가 원하는 축은 아무 축이나 아니다. 데이터가 가장 많이 달라지는 방향, 즉 변화가 큰 방향을 찾고 싶다. 왜냐하면 변화가 거의 없는 방향은 데이터를 구분하는 데 큰 도움이 되지 않을 가능성이 높기 때문이다.

예를 들어 어떤 반의 학생 데이터를 보는데, 모든 학생의 키가 거의 170cm 근처라고 해 보자. 키는 데이터 안에서 별로 변하지 않는다. 반면 공부 시간은 학생마다 크게 다르다. 누군가는 하루 30분, 누군가는 5시간 공부한다. 이 데이터에서 학생들의 차이를 설명하는 데는 키보다 공부 시간이 더 많은 정보를 줄 수 있다. PCA는 이런 식으로 "데이터가 많이 퍼져 있는 방향"에 주목한다.

PCA는 가장 많이 퍼진 방향을 찾는다

PCA는 Principal Component Analysis의 줄임말이다. 한국어로는 주성분 분석이라고 부른다. 이름은 딱딱하지만 직관은 의외로 단순하다. PCA는 데이터가 가장 크게 흔들리는 방향을 새로운 축으로 삼는다.

평면 위에 점들이 길쭉한 타원 모양으로 흩어져 있다고 상상해 보자. 점들은 왼쪽 아래에서 오른쪽 위로 길게 퍼져 있다. 이때 기존 x축과 y축은 우리가 편의상 정한 축일 뿐이다. 데이터 입장에서 보면 진짜 중요한 방향은 점들이 길게 늘어선 대각선 방향일 수 있다. PCA는 바로 그 대각선 방향을 찾아 "첫 번째 주성분"으로 삼는다.

첫 번째 주성분은 데이터를 가장 많이 설명하는 방향이다. 여기서 "많이 설명한다"는 말은 데이터의 변화, 즉 분산을 많이 담고 있다는 뜻이다. 분산은 값들이 얼마나 넓게 퍼져 있는지를 나타내는 숫자다. 모든 점이 거의 같은 위치에 몰려 있으면 분산이 작고, 넓게 흩어져 있으면 분산이 크다.

그다음 PCA는 첫 번째 방향과 겹치지 않는 새로운 방향을 찾는다. 이것이 두 번째 주성분이다. 두 번째 주성분은 첫 번째 주성분이 담지 못한 변화 중에서 가장 큰 변화를 담는다. 세 번째, 네 번째 주성분도 같은 식으로 이어진다. 다만 뒤로 갈수록 담고 있는 정보량은 줄어드는 경우가 많다.

여기서 PCA를 어렵게 만드는 지점이 하나 있다. PCA는 원래 특징 중 하나를 고르는 것이 아니라, 여러 특징을 섞어 새로운 축을 만든다. 예를 들어 첫 번째 주성분은 다음과 같은 느낌일 수 있다.

방문 횟수는 조금 크게 반영하고, 구매 금액도 어느 정도 반영하고, 쿠폰 사용률은 약간 반대로 반영하고, 앱 체류 시간은 크게 반영하는 식이다. 즉 "원래 특징들의 조합"으로 새로운 축이 만들어진다.

그래서 PCA를 이해할 때는 이렇게 생각하면 좋다. PCA는 데이터를 돌려 본다. 기존의 가로축과 세로축이 아니라, 데이터가 가장 길게 늘어선 방향으로 좌표계를 살짝 회전시킨다. 그러고 나서 가장 중요한 방향 몇 개만 남긴다. 버려진 방향에는 정보가 전혀 없는 것은 아니지만, 상대적으로 덜 중요하다고 판단한 정보가 들어 있다.

2차원 그림으로 돌아오기

차원 축소가 특히 매력적인 이유는 시각화 때문이다. 사람은 100차원 공간을 볼 수 없지만, 2차원 그림은 볼 수 있다. PCA를 사용하면 수십 개나 수백 개의 특징을 가진 데이터를 2차원 또는 3차원으로 줄여 그림으로 그릴 수 있다.

예를 들어 고객 데이터에 50개의 특징이 있다고 하자. 고객 한 명은 50개의 숫자로 표현된다. 이 상태에서는 고객들이 어떤 무리로 나뉘는지 직관적으로 보기 어렵다. 하지만 PCA로 첫 번째 주성분과 두 번째 주성분을 뽑으면, 각 고객을 두 개의 숫자로 표현할 수 있다. 이제 우리는 고객을 평면 위의 점으로 찍을 수 있다.

그림을 그려 보면 재미있는 일이 생긴다. 어떤 고객들은 한쪽 구석에 모여 있고, 어떤 고객들은 길게 띠를 이루며 퍼져 있을 수 있다. 구매 금액이 높은 고객과 낮은 고객이 자연스럽게 갈라져 보일 수도 있고, 자주 방문하지만 구매는 적은 고객이 따로 모여 있을 수도 있다. 물론 PCA 그림만 보고 모든 결론을 내려서는 안 된다. 하지만 복잡한 표에서는 보이지 않던 데이터의 윤곽이 드러난다.

앞 장의 K-means와도 연결해 볼 수 있다. K-means는 비슷한 점들을 군집으로 묶는 방법이었다. 그런데 원래 특징이 너무 많으면 군집 결과를 눈으로 확인하기 어렵다. 이때 PCA로 데이터를 2차원으로 줄인 뒤, 군집별로 색을 다르게 칠해 보면 모델이 어떤 식으로 데이터를 나누었는지 감을 잡을 수 있다. 빨간 점들이 한곳에 모이고 파란 점들이 다른 쪽에 모인다면 군집이 꽤 뚜렷하다고 볼 수 있다. 반대로 색이 뒤섞여 있다면, 군집 구분이 애매하거나 다른 특징 조합이 필요할 수 있다.

이런 시각화는 정답을 주지는 않는다. 대신 질문을 던지게 만든다. "왜 이 고객들은 떨어져 있을까?", "이 군집은 어떤 특징을 공유할까?", "멀리 떨어진 이 점은 특별한 사용자일까, 아니면 데이터 오류일까?" 좋은 데이터 분석은 대개 이런 질문에서 시작한다.

PCA를 사용할 때의 기본 흐름

PCA를 실제로 사용할 때는 몇 가지 단계를 거친다. 복잡한 수식을 몰라도 전체 흐름을 이해하는 것이 중요하다.

  • 먼저 데이터를 특징 표로 준비한다. 행은 고객, 상품, 문서 같은 개별 데이터이고 열은 그 데이터를 설명하는 특징이다.

  • 각 특징의 스케일을 맞춘다. 예를 들어 나이는 10에서 80 사이지만 연소득은 수천만 단위일 수 있다. 숫자의 단위가 크게 다르면 PCA가 큰 숫자 단위를 가진 특징에 지나치게 끌릴 수 있다.

  • PCA를 적용해 새로운 축, 즉 주성분을 찾는다.

  • 몇 개의 주성분을 남길지 정한다. 시각화가 목적이면 보통 2개나 3개를 많이 사용한다.

  • 줄어든 데이터를 그림으로 보거나, 다른 모델의 입력으로 사용한다.

여기서 특히 중요한 것은 스케일이다. PCA는 데이터가 얼마나 퍼져 있는지를 본다. 그런데 어떤 특징의 숫자 단위가 유난히 크면, 실제로 더 중요한 특징이 아니어도 더 크게 퍼져 있는 것처럼 보일 수 있다. 키를 미터로 표현하면 1.7 정도지만, 밀리미터로 표현하면 1700이 된다. 데이터의 의미는 같지만 숫자 크기는 완전히 달라진다. 이런 이유로 PCA 전에는 평균을 0 근처로 맞추고, 특징들의 크기를 비슷한 범위로 조정하는 전처리를 자주 한다.

또 하나 기억할 점은 PCA가 라벨을 보지 않는다는 것이다. PCA는 비지도학습의 대표적인 기법 중 하나다. 생존 여부, 스팸 여부, 이탈 여부 같은 정답을 보고 축을 찾는 것이 아니라, 입력 데이터 자체의 구조만 보고 변화가 큰 방향을 찾는다. 그래서 PCA로 만든 축이 분류 문제에 항상 최적인 것은 아니다. 하지만 데이터의 큰 구조를 파악하고 노이즈를 줄이는 데는 매우 유용하다.

정보 손실은 실패가 아니라 선택이다

차원 축소라는 말을 들으면 약간 불안해질 수 있다. "특징을 줄이면 중요한 정보를 잃어버리는 것 아닌가?" 맞다. 잃어버린다. 차원 축소는 정보 손실을 동반한다. 다만 모든 정보가 똑같이 중요하지 않다는 점에서 출발한다.

사진 파일을 압축하는 경우를 떠올려 보자. 원본 사진에는 매우 많은 픽셀 정보가 있다. 압축하면 일부 세부 정보는 사라진다. 하지만 적절히 압축하면 사람 눈에는 거의 비슷하게 보이면서 파일 크기는 훨씬 작아진다. 차원 축소도 비슷하다. 데이터의 세부적인 흔들림은 조금 포기하되, 전체적인 모양과 중요한 변화 방향은 유지하려고 한다.

PCA에서는 각 주성분이 어느 정도의 정보를 담고 있는지 확인할 수 있다. 이를 설명된 분산 비율이라고 부른다. 말은 길지만 뜻은 간단하다. 첫 번째 주성분이 전체 변화의 몇 퍼센트를 담고 있는지, 두 번째 주성분이 몇 퍼센트를 담고 있는지를 보는 것이다.

예를 들어 첫 번째 주성분이 55%, 두 번째 주성분이 25%를 담는다면, 두 개의 축만으로 전체 변화의 80% 정도를 설명한다고 볼 수 있다. 이 경우 2차원 그림은 원래 데이터의 큰 구조를 꽤 잘 보여 줄 가능성이 있다. 반대로 첫 번째와 두 번째 주성분을 합쳐도 20%밖에 설명하지 못한다면, 2차원 그림은 원래 데이터의 아주 작은 일부만 보여 주는 것일 수 있다. 그림은 예쁘지만, 그 그림만 믿고 판단하기에는 위험하다.

그래서 차원 축소는 항상 균형의 문제다. 너무 많이 줄이면 중요한 정보를 놓친다. 너무 적게 줄이면 복잡함이 그대로 남는다. 좋은 차원 축소는 필요한 만큼 단순하게 만들되, 중요한 구조를 잃지 않는 선을 찾는 일이다.

PCA가 잘하는 일과 조심할 점

PCA는 머신러닝에서 오래전부터 널리 사용된 기본 도구다. 특히 데이터의 큰 방향을 파악하고, 특징이 많은 데이터를 시각화하며, 일부 잡음을 줄이는 데 도움이 된다. 그러나 PCA가 만능은 아니다.

먼저 PCA는 선형적인 방법이다. 선형적이라는 말은 직선이나 평면처럼 곧게 뻗은 방향을 기준으로 데이터를 본다는 뜻이다. 데이터의 구조가 휘어 있거나 둥글게 말려 있다면 PCA만으로는 그 구조를 잘 펼쳐 보지 못할 수 있다. 예를 들어 초승달 모양으로 나뉜 데이터는 단순한 직선 방향만으로 설명하기 어렵다.

또한 PCA의 주성분은 해석이 쉽지 않을 때가 있다. 원래 특징 하나하나에는 "나이", "구매 금액", "방문 횟수"처럼 이름이 있었다. 하지만 PCA가 만든 축은 여러 특징의 조합이다. 첫 번째 주성분이 무엇을 의미하는지는 데이터와 특징의 기여도를 보고 사람이 해석해야 한다. 어떤 경우에는 "전반적인 활동량"처럼 잘 설명되지만, 어떤 경우에는 명확한 이름을 붙이기 어렵다.

마지막으로 PCA는 변화가 큰 방향을 중요하게 본다. 그런데 변화가 크다고 해서 항상 예측에 중요한 것은 아니다. 예를 들어 고객 이탈 예측에서 가장 중요한 신호가 아주 작은 변화에 숨어 있을 수도 있다. PCA는 라벨을 보지 않기 때문에 그런 신호를 놓칠 수 있다. 따라서 PCA는 데이터를 이해하고 정리하는 강력한 도구이지만, 문제의 목적과 함께 사용해야 한다.

작은 예: 고객 데이터를 두 개의 축으로 줄여 보기

온라인 쇼핑몰의 고객 데이터를 다시 생각해 보자. 각 고객에게 다음과 같은 특징이 있다고 하자. 최근 30일 방문 횟수, 평균 주문 금액, 할인 쿠폰 사용률, 장바구니 추가 횟수, 리뷰 작성 수, 반품 횟수, 앱 체류 시간, 마지막 구매 이후 지난 날짜. 이 데이터는 8차원이다. 우리는 8차원 공간을 볼 수 없다.

PCA를 적용해 2차원으로 줄였더니 첫 번째 축에서는 방문 횟수, 장바구니 추가 횟수, 앱 체류 시간이 크게 반영되었다고 해 보자. 이 축은 고객이 얼마나 활발히 서비스를 이용하는지를 나타내는 방향처럼 보인다. 두 번째 축에서는 할인 쿠폰 사용률과 평균 주문 금액, 반품 횟수가 섞여 있다. 이 축은 가격에 민감한 구매 패턴이나 구매 방식의 차이를 보여 줄 수 있다.

이제 고객들을 2차원 평면에 찍어 본다. 오른쪽에는 자주 방문하고 오래 머무는 고객들이 모인다. 위쪽에는 쿠폰을 많이 쓰고 가격에 민감한 고객들이 모일 수 있다. 왼쪽 아래에는 방문도 적고 구매도 적은 휴면 고객이 모일 수 있다. 이 그림을 보는 순간, 단순한 표에서는 잘 보이지 않던 전략적 질문이 떠오른다.

활동은 많지만 구매가 적은 고객에게는 어떤 추천을 해야 할까? 쿠폰을 많이 쓰는 고객은 할인 없이는 구매하지 않는 사람일까, 아니면 단지 프로모션에 민감한 충성 고객일까? 휴면 고객에게는 재방문 쿠폰이 효과적일까? PCA는 이런 질문에 직접 답하지 않는다. 하지만 질문을 발견하게 만든다. 그리고 좋은 머신러닝 프로젝트는 대개 좋은 질문에서 시작된다.

차원 축소는 복잡함을 버리는 기술이 아니라 구조를 보는 기술이다

차원 축소를 "데이터를 작게 만드는 기술"로만 보면 반쪽짜리 이해다. 더 중요한 것은 복잡한 데이터에서 구조를 보는 능력이다. 특징이 너무 많으면 데이터는 숫자의 숲이 된다. PCA는 그 숲 위로 잠깐 올라가 전체 지형을 내려다보게 해 준다. 어디에 언덕이 있는지, 어디에 골짜기가 있는지, 어떤 길로 데이터가 길게 이어지는지 볼 수 있게 해 준다.

물론 높은 곳에서 본 지도는 모든 나뭇잎을 보여 주지 않는다. 대신 방향을 알려 준다. PCA도 마찬가지다. 세부 정보 일부를 포기하는 대신, 데이터의 큰 흐름을 보여 준다. 이 균형 감각이 차원 축소를 이해하는 핵심이다.

이제 우리는 정답이 없는 데이터에서도 패턴을 찾는 두 가지 중요한 도구를 만났다. K-means는 비슷한 데이터를 묶어 군집을 만들었고, PCA는 많은 특징을 더 적은 축으로 압축해 데이터의 큰 변화 방향을 보여 주었다. 다음 장에서는 이 관점을 조금 다르게 사용해 볼 것이다. 많은 데이터 사이에서 유난히 튀는 점, 즉 이상치를 찾아보는 방법이다. 데이터의 무리와 구조를 볼 수 있게 되면, 자연스럽게 "무리에서 벗어난 데이터는 무엇일까?"라는 질문으로 이어진다.

책 목록

처음 만나는 머신러닝: 데이터가 스스로 규칙을 배우는 법

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기