유클리드 거리 vs 맨해튼 거리: 왜 제곱하고 루트를 씌울까
두 점, 혹은 두 시계열이 얼마나 닮았는지 수치로 재는 두 가지 거리. 유클리드 거리의 제곱-합-루트가 각각 무슨 의미인지, 맨해튼 거리와는 어떻게 다른지 직관까지 정리한다.
들어가며
두 데이터가 "얼마나 닮았나"를 수치 하나로 표현하려면 결국 **거리(distance)**가 필요하다. 좌표 두 개가 얼마나 떨어졌는지, 시계열 두 개가 얼마나 다른 모양인지 — 전부 거리로 환원된다.
가장 많이 쓰는 게 **유클리드 거리(Euclidean distance)**다. 식을 보면 "차이를 제곱하고, 다 더하고, 루트를 씌운다"인데, 처음 보면 이게 왜 이 순서인지 잘 와닿지 않는다. 특히 제곱했다가 다시 루트를 씌울 거면 왜 굳이? 그리고 합치는 게 제곱과 루트 사이에 끼는 게 맞나? 같은 의문이 든다.
이 글은 그 의문을 푸는 글이다. 유클리드 거리의 각 단계가 무슨 의미인지 뜯어보고, 사촌격인 **맨해튼 거리(Manhattan distance)**와 비교한다.
거리란 결국 "차이 벡터의 크기"
점 두 개를 비교한다고 하자. 각 점이 n개의 숫자(좌표)로 이루어져 있다.
- P = (p₁, p₂, …, pₙ)
- Q = (q₁, q₂, …, qₙ)
두 점의 차이는 각 좌표끼리 뺀 차이 벡터 d = (p₁−q₁, p₂−q₂, …, pₙ−qₙ)다.
"거리"는 이 차이 벡터가 얼마나 큰가를 하나의 숫자로 요약한 값이다.
문제는 "벡터의 크기"를 정의하는 방법이 하나가 아니라는 것. 그래서 거리도 여러 종류가 있다. 그중 둘이 유클리드와 맨해튼이다.
유클리드 거리 — 피타고라스의 일반화
유클리드 거리의 정의는 이렇다.
계산 순서를 풀어 쓰면:
- 각 좌표끼리 차이를 구한다 →
pᵢ − qᵢ - 그 차이를 제곱한다 →
(pᵢ − qᵢ)² - 제곱한 값들을 전부 더한다 →
Σ(pᵢ − qᵢ)² - 마지막에 루트를 씌운다 →
√(…)
이게 임의의 3단계가 아니라, 사실 피타고라스 정리를 차원만 늘린 것이다.
2차원에서 두 점 사이 거리는 √((Δx)² + (Δy)²)였다. 3차원이면 √((Δx)² + (Δy)² + (Δz)²).
똑같은 공식을 n차원으로 늘린 게 위 식이다. 즉 제곱·합·루트는 떼어낼 수 없는 한 묶음이고, 그게 "두 점 사이 직선거리"의 정의 그 자체다.
왜 제곱하나
두 가지 이유가 있다.
(1) 부호를 없앤다. 차이가 +5든 −5든 "벌어진 정도"는 같아야 한다. 그냥 더하면 +5와 −5가 상쇄돼 버린다. 제곱하면 둘 다 25가 되어 상쇄가 안 된다.
(2) 큰 어긋남에 더 큰 벌점을 준다. 제곱은 큰 값을 더 키운다.
한 좌표가 10 어긋나면 100을 기여하지만, 1씩 열 군데 어긋나면 10 × 1 = 10밖에 기여하지 않는다.
즉 유클리드 거리는 "한 군데에서 크게 튄 차이"를 "여러 군데에서 조금씩 난 차이"보다 훨씬 무겁게 본다.
왜 마지막에 루트를 씌우나
제곱을 하면서 단위가 한 번 부풀었다(원래 단위의 제곱이 됐다). 루트는 이걸 원래 단위로 되돌린다. 기하적으로도, 루트를 씌워야 비로소 차이 벡터의 **진짜 길이(직선 길이)**가 된다. 피타고라스에서 빗변 구할 때 마지막에 루트 씌우는 것과 똑같다.
"합치는 게 제곱과 루트 사이에 끼는 것"은 정상이다
순서는 반드시 제곱 → 전부 합 → 루트다. 이 순서가 핵심이다. n개의 차원을 하나의 직선거리로 합치는 단계가 바로 "제곱들의 합"이기 때문이다.
만약 순서를 바꿔서 각 항에 루트를 먼저 씌운 뒤(= 절댓값) 더하면, 그건 유클리드가 아니라 다른 거리가 된다. 그게 바로 맨해튼 거리다.
맨해튼 거리 — 격자 도시의 택시
맨해튼 거리의 정의는 이렇다.
차이의 절댓값을 그냥 다 더한다. 제곱도 루트도 없다.
이름이 "맨해튼"인 이유는 격자형 도시(맨해튼)에서 택시가 움직이는 방식과 같아서다. 건물을 가로지를 수 없으니, 대각선으로 못 가고 블록을 따라 가로 + 세로로만 이동한다. 그래서 "택시 거리(taxicab distance)"라고도 부른다.
직관:
- 유클리드 = 새가 직선으로 날아가는 거리 (대각선 허용)
- 맨해튼 = 택시가 블록 따라 가는 거리 (가로·세로만)
핵심 차이: 큰 한 방 vs 잔펀치
같은 데이터라도 두 거리가 다르게 반응한다. 2차원 예시로 보자. 차이 벡터가 두 경우:
- 경우 A: 두 좌표가 각각
100씩 어긋남 →(100, 100) - 경우 B: 한 좌표만
200어긋나고 나머지는0→(200, 0)
| 거리 | 경우 A (100,100) | 경우 B (200,0) |
|---|---|---|
| 유클리드 (L2) | √(100² + 100²) ≈ 141 | √(200²) = 200 |
| 맨해튼 (L1) | 100 + 100 = 200 | 200 + 0 = 200 |
맨해튼은 두 경우를 똑같이(200) 본다. 어디서 어긋났든 총합만 같으면 같은 거리다. 반면 유클리드는 경우 B(200)를 경우 A(141)보다 더 멀다고 본다. "한 군데에서 크게 튄 쪽"을 더 다르다고 보는 것 — 이게 제곱의 효과다.
그래서 거칠게 요약하면:
- 유클리드(L2): 큰 한 방에 민감. 이상치(outlier)·국소적 급변을 강하게 벌준다.
- 맨해튼(L1): 모든 차이를 공평하게. 이상치에 상대적으로 둔감(robust)하다.
기하로 보는 직관: 원과 마름모
"중심에서 거리가 똑같은 점들의 집합"을 그려 보면 두 거리의 성격이 한눈에 보인다.
- 유클리드에서 등거리 점들 → 원
- 맨해튼에서 등거리 점들 → 마름모(45도 돌린 정사각형)
유클리드 (원) 맨해튼 (마름모)
.-"""-. /\
/ \ / \
| + | < + >
\ / \ /
'-...-' \/유클리드는 모든 방향으로 똑같이 둥글게 퍼지지만, 맨해튼은 축 방향을 따라 각이 진다. 거리를 어떻게 정의하느냐에 따라 "가깝다"의 모양 자체가 달라지는 것이다.
한 식으로 묶기: 민코프스키 거리
사실 둘은 형제다. **민코프스키 거리(Minkowski distance)**라는 일반식의 특수한 경우일 뿐이다.
p = 1→ 맨해튼 거리 (L1)p = 2→ 유클리드 거리 (L2)p → ∞→ 체비쇼프 거리 (가장 큰 차이 하나만 봄)
p가 커질수록 "큰 차이 하나"의 영향력이 커진다. 유클리드가 맨해튼보다 큰 어긋남에 민감한 이유가 여기서 나온다.
그래서 언제 뭘 쓰나
정답은 없고 데이터 성격에 달렸다. 고를 때 보는 기준 몇 가지.
- 이상치 민감도: 한 차원에서 크게 튄 값을 "많이 다른 것"으로 보고 싶다 → 유클리드. 튐에 둔감하게 가고 싶다 → 맨해튼.
- 차원 수: 차원이 아주 많아지면 유클리드 거리들이 서로 비슷해지는 "차원의 저주"가 더 두드러진다. 고차원 희소 데이터에서 맨해튼이 더 안정적일 때가 있다.
- 스케일: 두 거리 모두 단위가 큰 차원에 휘둘린다. 한 축은 0
1, 다른 축은 010000이면 큰 축이 거리를 지배한다. 그래서 거리 비교 전에는 보통 정규화(스케일 맞추기)를 먼저 한다.
시계열 패턴 유사도처럼 "두 곡선이 닮았나"를 잴 때도 같은 고민이 들어간다. 유클리드로 가면 특정 시점에서 확 벌어진 곡선을 강하게 다르다고 보고, 맨해튼으로 가면 전 구간의 차이를 고르게 합산한다. 어느 쪽이 맞는지는 "무엇을 닮음으로 볼 것인가"라는 도메인 판단이지, 수식이 정해주는 게 아니다.
마무리
- 거리는 차이 벡터의 크기를 숫자 하나로 요약한 것이다.
- 유클리드: 차이를 제곱 → 합 → 루트. 피타고라스의 일반화이자 직선거리. 제곱은 부호 제거 + 큰 어긋남에 큰 벌점, 루트는 단위 복원. 합이 제곱과 루트 사이에 끼는 건 정상이고, 그게 다차원 거리의 정의다.
- 맨해튼: 차이의 절댓값을 그냥 합산. 격자 도시의 택시 거리. 모든 차이를 공평하게 보고 이상치에 둔감하다.
- 둘은 민코프스키 거리의
p=2,p=1케이스다. - 고를 때는 이상치 민감도·차원 수·스케일을 본다. 그리고 거리를 재기 전엔 보통 정규화부터.
"왜 제곱하고 루트를 씌우나"의 답은 결국 하나다 — 그게 직선거리를 재는 방법이기 때문이고, 그 과정에서 큰 어긋남을 더 무겁게 보는 성질이 덤으로 따라온다.