콘텐츠로 이동

P4-18.2 시각화와 정보 손실

Section ID: P4-18.2 Version: v2026.07.24

P4-18.1에서는 차원 축소(dimensionality reduction)가 많은 특징을 더 적은 축으로 다시 표현하는 일이라는 점을 보았습니다. 이제 다음 질문으로 넘어갑니다.

차원을 줄여서 그림은 훨씬 보기 쉬워졌는데, 그 그림을 어디까지 믿어도 될까?

차원 축소 그림은 구조를 탐색하는 데 매우 유용하지만, 원래 고차원 데이터의 관계를 완전하게 복사하지는 않습니다. 그래서 이 절의 핵심은 그림을 예쁘게 읽는 법이 아니라 그림을 과신하지 않는 법입니다.

시각화와 정보 손실에서 닫을 질문

이 절은 다음 질문에 답합니다.

  • 왜 차원 축소 결과는 보기 쉽지만 완전한 복사본은 아닌가?
  • 어떤 정보가 비교적 잘 남고, 어떤 정보가 약해질 수 있는가?
  • 2D 그림에서 가까워 보인다고 해서 원래도 반드시 가깝다고 할 수 없는 이유는 무엇인가?
  • PCA, t-SNE, UMAP은 각각 무엇을 더 남기려 하는가?
  • reconstruction error와 trustworthiness는 어떤 서로 다른 질문을 점검하는가?

이 절은 차원 축소 그림을 어디까지 믿을 것인가를 붙잡는 데 초점을 둡니다. 구현 최적화, 세부 튜닝, 여러 품질 지표의 확장 비교는 여기서 길게 다루지 않습니다.

시각화와 정보 손실에서 남길 판단 기준

  • 차원 축소 시각화를 구조 탐색 도구로 설명할 수 있습니다.
  • 보기 쉬운 그림과 구조가 완전히 보존된 그림이 다르다는 점을 설명할 수 있습니다.
  • PCA와 t-SNE, UMAP이 같은 종류의 그림을 만드는 것이 아니라는 점을 말할 수 있습니다.
  • reconstruction error와 trustworthiness가 각각 무엇을 다시 확인하는 지표인지 설명할 수 있습니다.

시각화와 정보 손실의 판단 흐름

이 절은 시각화 해석, 방법 비교, 품질 지표가 한꺼번에 나오므로, 처음 읽을 때는 아래 네 질문만 순서대로 잡는 편이 좋습니다.

  1. 왜 차원 축소 그림은 보기 쉽지만 완전한 복사본은 아닌가?
  2. PCA와 t-SNE, UMAP은 무엇을 더 남기려 하는가?
  3. 2D에서 가까워 보이는 점이나 덩어리를 어디까지 믿어야 하는가?
  4. reconstruction error와 trustworthiness는 이 위험을 어떤 방향에서 다시 점검하는가?

이 순서가 먼저 잡혀야 해석 질문점검 지표가 섞이지 않습니다.

왜 이 절이 필요한가

차원 축소를 배우고 나면 독자는 흔히 이렇게 생각합니다.

  • 이제 데이터를 2D로 볼 수 있다.
  • 점들이 덩어리처럼 보인다.
  • 그러면 구조가 명확해진 것 같다.

이 기대는 절반만 맞습니다.

맞는 부분 조심해야 할 부분
큰 흐름을 한눈에 보기 쉬워진다 원래 구조가 그대로 보존된 것은 아니다
덩어리와 이상치 후보를 빨리 찾기 쉽다 덩어리와 거리 해석이 과장될 수 있다
설명과 발표에 매우 유용하다 시각 효과가 과도한 확신을 만들 수 있다

그래서 P4-18.2는 그림을 만드는 법보다 그림을 어디서 멈춰 읽어야 하는가를 배우는 절입니다.

하나의 장면으로 먼저 보기

이 절에서도 같은 압축 장면을 계속 다시 봅니다. 아래 두 샘플은 1차원 요약값만 보면 둘 다 6.0 근처처럼 보일 수 있지만, 원래 축별 패턴은 다릅니다.

샘플 f1 f2 f3 1차원 요약 인상
X 6.0 6.0 6.0 균형 있게 높은 샘플
Y 7.0 6.8 4.2 평균은 비슷하지만 세 번째 축이 낮은 샘플

여기서 바로 이 절의 핵심이 보입니다.

  1. 차원을 줄이면 X와 Y가 비슷해 보일 수 있습니다.
  2. 하지만 원래 축을 다시 보면 둘은 같은 샘플이 아닙니다.
  3. 따라서 보기 쉬워졌다구조를 충분히 보존했다는 같은 말이 아닙니다.

이 장면을 흐름으로 줄이면 다음과 같습니다.

flowchart TD
  A["샘플 X와 샘플 Y"]
  B["같은 1D 요약값"]
  C["축소 그림에서는 같아 보임"]
  D["원래 특징으로 돌아감"]
  E["원래 패턴 차이는 남아 있음"]
  F["최종 라벨이 아니라 가설로 둠"]

  A --> B --> C --> D --> E --> F

왜 차원을 줄이면 정보 손실이 생기나

차원 축소는 많은 축을 더 적은 축으로 요약합니다. 이 말 자체가 이미 모든 정보를 그대로 남길 수는 없다는 뜻입니다.

예를 들어 50차원 데이터를 2차원으로 줄이면:

  • 큰 전반적 흐름은 남길 수 있지만
  • 작은 국소 차이는 약해질 수 있고
  • 어떤 축의 정보는 서로 합쳐질 수 있습니다

즉, 차원 축소는 압축(compression)에 가깝습니다. 압축에는 항상 선택이 들어갑니다.

  • 무엇을 먼저 남길 것인가?
  • 무엇을 덜 중요하다고 보고 눌러 둘 것인가?

이 선택 때문에 정보 손실은 자연스럽게 따라옵니다.

원래 데이터에서 보고 있던 것 축소 뒤에 어떻게 달라질 수 있는가 그래서 다시 확인할 것
큰 전반적 흐름 비교적 잘 남을 수 있다 그 흐름이 실제 문제 차이와 연결되는가
경계 근처 애매한 샘플 더 뭉치거나 더 벌어져 보일 수 있다 원래 특징에서 무엇이 애매했는가
소수 샘플의 미세한 차이 압축 과정에서 묻힐 수 있다 별도로 다시 볼 가치가 있는가
여러 축에 흩어진 작은 변화 한두 축으로 눌리며 희미해질 수 있다 어떤 축이 사라졌는가

보기 쉬운 그림과 구조 보존은 왜 다른가

2차원 산점도(scatter plot)는 사람에게 매우 친절합니다. 하지만 친절하다는 사실만으로 원래 구조가 완전히 옮겨졌다고 말할 수는 없습니다.

여기서 구분해야 할 것은 두 가지입니다.

  • 보기 쉬움: 사람이 빠르게 해석할 수 있는 상태
  • 구조 보존: 원래 데이터 관계가 충분히 유지된 상태

이 둘은 겹칠 수 있지만 항상 같은 것은 아닙니다. 시각화는 사람 친화적 표현이지, 자동으로 완전한 구조 복제는 아닙니다.

가까워 보인다고 해서 원래도 가까운가

가장 흔한 오해는 이것입니다.

2D 그림에서 두 점이 붙어 보이니, 원래 데이터에서도 거의 같은 점이겠구나.

하지만 차원 축소 과정에서는:

  • 원래 멀던 점이 그림에서 가까워질 수 있고
  • 원래 가깝던 점이 그림에서 조금 벌어질 수도 있습니다

이는 고차원 구조를 더 적은 축에 눌러 담는 과정에서 생기는 자연스러운 왜곡입니다.

이 감각을 도식으로 보면 다음과 같습니다.

flowchart TB
  A["고차원 관계"]
  B["2D로 투영"]
  C["2D에서 보이는 거리"]
  D["원래 거리와 항상 같지는 않다"]

  A --> B --> C --> D

이 도식에서 독자가 붙잡아야 할 것은 그림의 거리원래 거리가 다를 수 있다는 점입니다.

예를 들어 아래 두 고객은 2D 그림에서는 거의 붙어 보일 수 있지만, 원래 특징을 다시 보면 강조점이 다릅니다.

고객 방문 수 구매 금액 최근성 2D 그림 인상
A 높음 높음 중간 B와 매우 가까워 보임
B 높음 중간 높음 A와 매우 가까워 보임

그림에서는 둘 다 활동 고객처럼 보일 수 있습니다. 하지만 원래 특징으로 돌아가면 A는 구매 규모 쪽이 강하고, B는 최근 활동성이 더 강할 수 있습니다. 그래서 2D에서 가깝다는 이유만으로 같은 정책이나 같은 유형으로 바로 묶으면, 정보 손실을 해석 오류로 바꾸게 됩니다.

방법마다 먼저 남기려는 것이 왜 다른가

모든 차원 축소가 같은 그림을 만들지는 않습니다. 어떤 방법은 큰 전반적 변동을 먼저 남기고, 어떤 방법은 가까운 이웃 관계를 더 우선합니다.

먼저 묻는 질문 더 가까운 방법 초심자가 먼저 읽을 핵심
큰 전반적 변동을 최대한 보존하고 싶은가 PCA 큰 분산 방향을 먼저 남긴다
비선형 구조나 가까운 이웃 관계를 더 보고 싶은가 t-SNE, UMAP 전체 거리보다 국소 이웃 구조에 더 민감하다

이 구분이 먼저 잡혀야, 뒤에서 나오는 품질 지표도 같은 질문으로 오해하지 않게 됩니다.

PCA, t-SNE, UMAP은 각각 무엇을 더 남기려 하나

방법 입문적으로 붙잡을 핵심 그림에서 자주 보이는 특징
PCA 큰 전반적 변동을 우선 남긴다 전체 방향과 퍼짐은 읽기 쉽지만 작은 국소 묶음은 약할 수 있다
t-SNE 가까운 이웃 관계가 저차원에서도 비슷하게 보이게 한다 국소 덩어리가 또렷하지만 덩어리 사이 거리는 조심해야 한다
UMAP 가까운 이웃 그래프 구조를 저차원에서도 유지하려 한다 국소 구조를 잘 보여 주면서 전체 배치도 어느 정도 읽기 쉽게 만든다

짧게 줄이면 다음과 같습니다.

  • PCA: 큰 흐름을 먼저 남긴다
  • t-SNE: 가까운 점들을 같이 보이게 하는 힘이 강하다
  • UMAP: 가까운 이웃 구조를 유지하면서도 전체 그림을 조금 더 읽기 쉽게 하려 한다

그래서 같은 2D 그림이라도 해석 질문이 달라집니다.

그림을 볼 때 먼저 묻는 질문 특히 조심할 점
같은 덩어리 안의 가까움은 얼마나 믿을 수 있는가 국소 구조는 참고할 만하지만 완전 보존은 아니다
덩어리와 덩어리 사이 거리는 얼마나 믿을 수 있는가 방법과 파라미터에 따라 과장되거나 눌릴 수 있다
그림에서 보인 덩어리 수가 곧 진짜 구조인가 구조 힌트일 수는 있지만 바로 확정할 수는 없다

즉, t-SNE와 UMAP은 예쁜 그림을 만드는 도구라기보다 원래 공간의 가까운 관계를 저차원으로 옮겨 보려는 도구로 읽는 편이 맞습니다.

reconstruction error는 무엇을 묻나

품질 지표도 같은 질문을 묻지 않습니다. 먼저 구분부터 잡는 편이 좋습니다.

점검 질문 더 가까운 지표
줄인 표현이 원래 정보를 얼마나 다시 만들 수 있는가 reconstruction error
저차원 그림의 가까운 이웃 관계를 얼마나 믿을 수 있는가 trustworthiness

즉, reconstruction error는 복원 쪽 질문입니다.

이 지표의 질문 방향만 먼저 묶으면 다음과 같습니다.

flowchart TD
  A["축소 뒤 품질 점검"]
  B["원래 값을 다시 복원할 수 있는가"]
  C["재구성 오차"]
  D["새로 가까워진 이웃을 믿을 수 있는가"]
  E["trustworthiness"]

  A --> B --> C
  A --> D --> E

가장 기본적인 형태는 다음처럼 씁니다.

\[ \text{Reconstruction Error} = \frac{1}{n}\sum_{i=1}^{n}\lVert x_i - \hat{x}_i \rVert^2 \]

여기서:

  • \(x_i\): 원래 데이터
  • \(\hat{x}_i\): 줄인 뒤 다시 복원한 데이터
  • \(\lVert x_i - \hat{x}_i \rVert^2\): 원래와 복원값 사이의 제곱 차이

초심자 기준에서는 수식보다 계산 감각이 먼저 중요합니다. 예를 들어 방금 본 Y 샘플을 1차원 요약 뒤 다시 6.0, 6.0, 6.0으로 복원했다고 하면:

샘플 원래 값 복원값 축별 차이 제곱의 합
Y (7.0, 6.8, 4.2) (6.0, 6.0, 6.0) \(1.0^2 + 0.8^2 + (-1.8)^2 = 4.88\)

이 장면에서 reconstruction error가 말하는 것은 단순합니다.

  • 줄인 표현만으로도 원래를 꽤 비슷하게 되돌릴 수 있는가?
  • 아니면 중요한 축별 차이가 많이 사라졌는가?
reconstruction error가 작다 reconstruction error가 크다
줄인 축만으로도 원래 정보를 비교적 잘 다시 만들 수 있다 줄이는 과정에서 잃은 정보가 더 많다
큰 구조가 남았을 가능성이 있다 중요한 차이가 많이 눌렸을 가능성이 있다

하지만 이것만으로 시각화가 안전하다고 결론 내리면 안 됩니다. reconstruction error는 복원이 잘 되었는가를 보는 값이지, 그림이 얼마나 설득력 있어 보이는가를 직접 재는 값은 아닙니다.

trustworthiness는 무엇을 묻나

trustworthiness는 이름 그대로 저차원 그림의 가까운 이웃 관계를 얼마나 믿을 수 있는가를 묻습니다.

아주 짧게 쓰면 다음 질문입니다.

그림에서 새로 가까워 보이게 된 점들이, 원래 고차원에서도 정말 가까운 점들이었는가?

공식은 다음처럼 적습니다.

\[ T(k) = 1 - \frac{2}{nk(2n - 3k - 1)} \sum_{i=1}^{n}\sum_{j \in U_k(i)}(r(i,j)-k) \]

여기서:

  • \(n\): 샘플 수
  • \(k\): 몇 번째 이웃까지 볼 것인가
  • \(U_k(i)\): 저차원에서는 가까워 보이지만, 원래 공간에서는 상위 \(k\) 이웃이 아니었던 점들
  • \(r(i,j)\): 원래 공간에서 점 \(j\)가 점 \(i\)의 몇 번째 이웃이었는가

초심자 기준에서는 이 수식도 계산 장면으로 먼저 읽는 편이 좋습니다.

장면 원래 공간 2D 그림
A의 가장 가까운 이웃 B C

이 경우 2D 그림은 A와 C를 가깝게 보이게 했지만, 원래 고차원에서는 A의 진짜 가장 가까운 이웃이 B였습니다. 즉, 그림이 가짜 가까움 하나를 새로 만든 셈이고, 이런 장면이 많아질수록 trustworthiness는 내려갑니다.

따라서 trustworthiness 해석은 이렇게 잡으면 충분합니다.

trustworthiness가 높다 trustworthiness가 낮다
저차원 그림의 가까운 이웃 관계가 원래 공간과 비교적 잘 맞는다 그림에서 가까워 보이는 관계 중 원래는 멀었던 관계가 더 많다
붙어 보이는 점들 해석을 조금 더 신뢰할 수 있다 붙어 보이니 원래도 비슷하다는 해석을 더 조심해야 한다

이 지표도 만능은 아닙니다. trustworthiness는 가까운 이웃 구조를 다시 보는 값이지, 덩어리와 덩어리 사이 전체 거리 해석을 완전히 보장해 주지는 않습니다.

안전한 읽기 순서

차원 축소 그림은 다음 순서로 읽는 편이 가장 안전합니다.

  1. 먼저 큰 흐름과 덩어리를 본다.
  2. 그 구조가 원래 어떤 특징과 연결되는지 다시 본다.
  3. 다른 축 수나 다른 방법에서도 비슷한 패턴이 나오는지 본다.
  4. 필요하면 reconstruction error, trustworthiness, 원래 특징 비교로 다시 확인한다.

이를 흐름으로 줄이면 다음과 같습니다.

flowchart TB
  A["2D 또는 3D 보기"]
  B["패턴을 발견"]
  C["원래 특징으로 돌아간다"]
  D["그 패턴이 강건한지 확인한다"]
  E["증거가 아니라 가설로 쓴다"]

  A --> B --> C --> D --> E

이 절의 핵심은 마지막 줄입니다.

차원 축소 그림은 가설을 만들게 해 주지만, 그 가설을 혼자 증명하지는 못한다.

사례 및 예시

사례 1. 2D에서 멀리 보여도 원래 특징까지 바로 다르다고 단정하면 왜 위험한가

상품 기획 팀이 수십 개 상품 특징을 차원 축소해 2D 그림으로 봤더니 두 점무리가 멀리 떨어져 보였다고 해 보겠습니다. 그림만 보면 완전히 다른 상품군처럼 보일 수 있지만, 실제 원래 특징에서는 가격대와 핵심 기능은 꽤 비슷하고 일부 보조 특징이 투영 과정에서 더 크게 드러난 것일 수도 있습니다. 반대로 그림에서 조금 겹쳐 보이는 상품이 원래 고차원 공간에서는 충분히 구분될 수도 있습니다.

flowchart TD
  A["2D 축소 플롯"]
  B["두 그룹이 멀리 떨어져 보임"]
  C["서로 다른 제품군이라고 성급히 판단"]
  D["투영 과장 가능성"]
  E["원래 특징으로 돌아간다"]
  F["가격과 핵심 기능을 비교한다"]
  G["다른 투영이나 축 개수를 확인한다"]
  H["그룹 가설을 유지하거나 약화한다"]

  A --> B --> C
  B --> D
  D --> E
  E --> F
  F --> G --> H

이 장면을 해석 메모로 남기면 다음처럼 됩니다.

그림에서 먼저 보인 구조 바로 붙여야 할 해석 경계 다시 확인할 질문
두 점무리가 멀리 떨어져 보인다 2D 거리만으로 원래 특징까지 완전히 다르다고 단정하지 않는다 원래 특징 요약에서도 같은 분리가 보이는가
일부 점이 겹쳐 보인다 투영 때문에 원래보다 더 섞여 보였을 수 있다 다른 축 수나 다른 방법에서도 같은가

사례 2. 한 점이 멀리 튄다고 해서 바로 이상치로 지우면 왜 위험한가

운영 로그를 차원 축소해 본 데이터 분석 팀이 한 점이 다른 점무리에서 멀리 떨어져 있는 것을 발견했다고 해 보겠습니다. 그림만 보면 비정상 로그 하나처럼 느껴질 수 있지만, 실제 원래 특징을 보면 그 점은 배포 직후의 정상 트래픽 패턴이거나 특정 캠페인 때문에 일시적으로 늘어난 행동일 수도 있습니다. 즉, 중요한 것은 멀리 보인다는 사실 자체보다 왜 멀리 보이는가를 다시 확인하는 일입니다.

그림에서 먼저 보인 신호 곧바로 내리기 쉬운 오해 먼저 다시 볼 것
한 점이 유독 멀리 튄다 이상치이니 바로 제거해야 한다 원본 특징, 시간대, 배포 이력
작은 점무리가 따로 분리된다 오류 집단이다 실제 공통 속성이 있는지, 다른 축 수도 같은지

연습 및 예제

이번 예제는 PCA로 5개 특징을 2D로 줄인 뒤, 원래 공간의 가까운 이웃과 2D 공간의 가까운 이웃이 어떻게 달라질 수 있는지 확인합니다.

  • 문제 상황: 2D 그림에서 가까운 상품 후보를 원래 특징에서도 그대로 가깝다고 읽어도 되는지 점검한다
  • 입력(input): 다섯 개 점수 특징으로 표현된 상품 후보
  • 기대 출력(output): PCA가 남긴 분산 비율, 원래 공간의 가까운 이웃, 2D 공간의 가까운 이웃
  • 확인할 개념:
  • 2D 축소 표현은 원래 공간의 복사본이 아니다
  • 가까운 이웃 순서가 축소 전후에 달라질 수 있다
  • 축소 그림은 결론이 아니라 후속 검토의 출발점이다
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.metrics import pairwise_distances
from sklearn.preprocessing import StandardScaler

items = pd.DataFrame(
    [
        {"id": "A", "price_score": 2, "battery": 7, "camera": 5, "service": 10, "design": 8},
        {"id": "B", "price_score": 3, "battery": 9, "camera": 8, "service": 3, "design": 6},
        {"id": "C", "price_score": 8, "battery": 3, "camera": 3, "service": 2, "design": 1},
        {"id": "D", "price_score": 5, "battery": 1, "camera": 6, "service": 5, "design": 2},
        {"id": "E", "price_score": 4, "battery": 1, "camera": 2, "service": 5, "design": 1},
        {"id": "Q", "price_score": 8, "battery": 3, "camera": 10, "service": 2, "design": 7},
    ]
)

features = ["price_score", "battery", "camera", "service", "design"]
X_scaled = StandardScaler().fit_transform(items[features])

pca = PCA(n_components=2, random_state=0)
points_2d = pca.fit_transform(X_scaled)

raw_distances = pairwise_distances(X_scaled)
reduced_distances = pairwise_distances(points_2d)
q_index = items.index[items["id"] == "Q"][0]


def nearest_ids(distance_matrix):
    order = distance_matrix[q_index].argsort()[1:4]
    return items.iloc[order]["id"].tolist()


print("explained_variance=", [round(float(v), 3) for v in pca.explained_variance_ratio_])
print("nearest_in_original=", nearest_ids(raw_distances))
print("nearest_in_2d=", nearest_ids(reduced_distances))

for item_id, point in zip(items["id"], points_2d):
    print(item_id, "2d=", [round(float(value), 2) for value in point])

실행 결과는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
explained_variance= [0.505, 0.348]
nearest_in_original= ['D', 'B', 'C']
nearest_in_2d= ['B', 'D', 'C']
A 2d= [2.55, -1.23]
B 2d= [1.63, 0.87]
C 2d= [-1.96, 0.04]
D 2d= [-0.83, -0.38]
E 2d= [-1.19, -1.62]
Q 2d= [-0.19, 2.32]

이 예제에서 읽어야 할 것은 세 가지입니다.

  1. PCA의 두 축이 전체 분산의 상당 부분을 담고 있어도 원래 공간을 완전히 보존하지는 않습니다.
  2. 원래 공간에서는 Q와 가장 가까운 후보가 D지만, 2D 공간에서는 B가 먼저 보입니다.
  3. 따라서 2D 그림에서 가까워 보이는 후보를 찾았다면, 원래 특징 거리와 실제 feature 값을 다시 확인해야 합니다.

이 장면을 시각화 해석 메모로 바꾸면 다음처럼 적을 수 있습니다.

공통 기록 언어 이번 연습에서 바로 남길 내용
먼저 보인 구조 2D PCA 공간에서는 Q가 B와 가장 가까워 보였다
해석 경계 원래 특징 공간에서는 Q의 최근접 후보가 D였으므로 2D 거리를 원본 거리로 단정하지 않는다
다음 질문 Q, B, D의 원래 feature 값을 나란히 보고 어떤 축이 투영에서 눌렸는지 다시 확인할까

체크리스트

  • 차원 축소 그림이 구조 탐색과 설명에는 유용하지만, 보기 쉬운 그림이 곧 구조 보존을 뜻하지는 않는다는 점을 이해했는가?
  • 지금 2D 그림의 거리와 원래 고차원 거리를 같은 것으로 읽고 있지 않은가?
  • PCA는 큰 전반적 변동을 먼저 남기고, t-SNE와 UMAP은 가까운 이웃 구조를 더 중시한다는 차이를 설명할 수 있는가?
  • 보이는 덩어리나 이상치 후보를 후속 검토 없이 바로 정책 판단으로 넘기고 있지 않은가?
  • reconstruction error는 복원이 얼마나 되는가, trustworthiness는 가까운 이웃 관계를 얼마나 믿을 수 있는가를 본다는 점을 말할 수 있는가?
  • 지금 필요한 확인이 복원인지 근접 관계 보존인지 구분하고 있는가?
  • 차원 축소 그림을 최종 결론보다 후속 검토의 출발점으로 읽고 있는가?
  • 시각화에서 본 구조를 원래 특징, 다른 방법, 다른 축 수로 다시 확인할 준비가 되어 있는가?

출처와 참고 자료