브레이–커티스 비유사도(Bray–Curtis)란? AI에서 양의 차이를 전체 합으로 나눠 비교하는 방법
TL;DR
브레이–커티스 비유사도는 같은 항목의 음이 아닌 양을 비교해 차이의 합을 두 벡터의 전체 양으로 나눈 수치입니다. 공통으로 없는 항목은 점수를 바꾸지 않으며 값이 클수록 양의 구성이 다릅니다.[1][4] 항목마다 먼저 나누는 캔버라 거리와 달리 마지막에 한 번 나눕니다. 행별 합을 맞추는 전처리, 전부 0인 입력, 삼각부등식의 한계를 따로 확인합니다.
핵심 3줄 요약
- 핵심 1
차이의 합을 전체 양으로 나눕니다. 음이 아닌 입력과 양수 분모에서 0부터 1 사이의 비유사도를 구합니다. - 핵심 2
정규화 방식이 비교 질문을 바꿉니다. 두 행의 합을 각각 1로 맞추면 총량 차이는 지워지고 구성 비율을 비교합니다. - 핵심 3
이름이 거리여도 모든 거리 성질은 없습니다. 삼각부등식이 항상 성립하지 않아 후속 검색·군집 도구의 조건을 확인합니다.
이 글에서 다룰 내용
- 브레이–커티스의 한 문장 정의
- 세 문의 유형의 계산 예시와 공통 0
- 분자·분모와 가중치의 작동 방식
- SciPy와 vegan의 입력·출력 규칙
- 캔버라·자카드·코사인과의 차이
- 실전 사용처와 전처리 체크리스트
- 빈 행·음수·삼각부등식의 주의점
브레이–커티스 비유사도를 한 문장으로 정의하면 무엇인가요?
브레이–커티스 비유사도는 같은 항목 순서로 놓인 두 비음수 벡터에서 항목별 절대 차이를 모두 더하고 두 벡터의 모든 값을 더한 양으로 나눈 비교 지표입니다.
영문명은 Bray–Curtis dissimilarity이며 브레이 커티스 거리라고도 부릅니다. 생태 자료의 종별 개체 수처럼 항목별 양을 비교하는 데 쓰이며 AI에서는 비음수 특징이나 빈도 벡터를 비교하는 후보로 검토할 수 있습니다. vegan 문서는 Steinhaus·Czekanowski·Sørensen이라는 이름도 함께 설명합니다.[4]
이 글은 항목별 가중치가 모두 같은 경우를 기본으로 삼습니다. 분모가 양수이면 같은 벡터의 값은 0이고 두 벡터가 양수 항목을 전혀 공유하지 않으면 1입니다. 비유사도 0.4가 분류 오류율 40%나 다른 클래스일 확률 40%를 의미하지는 않습니다.[1][4]
한 줄 정리: 브레이–커티스는 항목별 양의 차이를 전체 양과 비교하는 방법입니다. 항목의 의미와 관측 조건은 계산 전에 맞춥니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 배송·환불·기타 문의의 건수를 비교한다고 가정하겠습니다. 첫날은
[4,2,0]
, 둘째 날은
[2,2,2]
입니다. 실제 업무 자료가 아니라 계산을 설명하려고 만든 세 항목 예시입니다. 두 벡터에서 첫째 칸이 같은 문의 유형을 가리켜야 합니다.
항목별 절대 차이는
[2,0,2]
이고 합은 4입니다. 두 날의 전체 건수를 더하면 12이므로 비유사도는
4/12=1/3
입니다. 환불 두 건은 그대로이고 배송과 기타의 양이 달라졌다는 사실을 하나의 수치로 요약합니다.
여기에 두 날 모두 0인 새 문의 항목을 붙여도 분자와 분모는 그대로입니다. 공통으로 관측되지 않은 항목이 많다는 이유만으로 두 날이 더 비슷해지지 않습니다. 한쪽만 전부 0이고 다른 쪽에는 양이 있다면 비유사도는 1이지만 양쪽 모두 전부 0이면 분모도 0이라 이 식으로 정의되지 않습니다.
모든 값을 함께 열 배 한
[40,20,0]
과
[20,20,20]
은 다시 1/3입니다. 첫날만 두 배 한
[8,4,0]
과 둘째 날 원본을 비교하면
10/18=5/9
로 바뀝니다. 공통 배율에 대한 불변성과 행별 크기 변경을 구분하는 예시입니다.
본문의 분수·배율·가중치와 삼각부등식 반례는 Python 표준 라이브러리의 정확한 분수 연산으로 검산했습니다. SciPy나 vegan 함수를 실행한 결과, 실제 문의 분류 성능을 측정한 결과는 아닙니다.
쉬운 예시: 두 장부의 같은 항목끼리 차이를 합친 뒤 두 장부에 적힌 전체 양으로 나눕니다. 항목별 비율을 먼저 구해 더하는 방식과 순서가 다릅니다.
왜 AI에서 브레이–커티스 비유사도가 중요한가요?
공통으로 없는 특징에 끌려가지 않습니다
빈도 표에는 대부분의 항목이 두 사례에서 모두 0일 수 있습니다. 브레이–커티스는 그런 공통 0을 분자·분모에 더하지 않습니다. 다만 값 0이 실제 부재인지 수집 실패인지 먼저 구별합니다. 관측하지 못한 양을 0으로 채우는 것은 지표의 성질로 해결되지 않습니다.[4]
표현 선택과 모델 평가를 나눠 봅니다
비음수 특징의 가까운 사례를 찾거나 거리 행렬을 입력받는 분석을 설계할 때 비교 기준으로 검토합니다.[2][3] 양의 크기를 반영하는 방식이 목표에 맞는지 확인해야 합니다. 벡터가 비슷하다고 정답 라벨이나 의미까지 같아지지는 않으며 실제 효용은 분리한 정답 자료에서 평가합니다.
브레이–커티스는 어떤 순서로 작동하나요?
1. 같은 항목의 비음수 값을 준비합니다
행은 사례, 열은 항목으로 정하고 열의 이름과 순서를 고정합니다. 모든 값이 유한한 비음수인지, 관측 기간과 단위가 맞는지 확인합니다. 문의 건수와 처리 시간을 서로 다른 열에 넣으면 숫자가 크다는 이유로 특정 단위가 결과에 큰 영향을 줄 수 있습니다.
2. 절대 차이와 전체 합을 따로 더합니다
비음수 입력에서 기본 계산은
sum(abs(u-v))/sum(u+v)
입니다. SciPy 문서의 일반 식은 분모에도 항목별 합의 절댓값을 쓰므로
sum(abs(u-v))/sum(abs(u+v))
로 적습니다.[1] 비음수 영역에서는 같지만 음수가 섞이면 이 해석을 그대로 옮길 수 없습니다.
3. 가중치는 양쪽 합에 함께 반영합니다
SciPy의
braycurtis(u,v,w=None)
에서 w는 각 항목의 가중치이고 기본은 모두 1입니다.[1] 같은 비음수 가중치를 분자의 차이와 분모의 합에 적용합니다. 세 항목 예시에서
w=[1,1,3]
이면 분자는 8, 분모는 16으로 비유사도는 1/2입니다. 계산을 마친 뒤 점수에 가중치를 한 번 곱하는 방식과 다릅니다.
실전 팁: 총량 차이를 남길지 구성 비율만 볼지 먼저 정하세요. 정규화를 자동으로 켜기 전에 원본 건수와 행별 합을 함께 보관합니다.
주요 설정과 결과는 어떻게 읽나요?
벡터 한 쌍의 결과는 숫자 하나입니다
SciPy의 braycurtis는 같은 길이의 일차원 배열 두 개를 받아 숫자 하나를 반환합니다.[1] 문의 행렬 전체를 한 번에 전달하는 함수와 구분합니다. 코드에 metric 이름을 넣을 때는
"braycurtis"
를 사용하며 한글 표시명과 함수 인수 문자열을 섞지 않습니다.
cdist는 두 묶음 사이의 직사각형 결과입니다
cdist(XA,XB,metric="braycurtis")
는 XA의 각 행과 XB의 각 행을 비교합니다. 두 입력은 특징 열 수가 같아야 하며 행이 각각 2개와 3개라면 출력 모양은
(2,3)
입니다. 공식 문서는 입력을 부동소수점으로 변환한다고 설명합니다.[2] 출력 한 칸이 어느 사례 쌍인지 행 ID와 함께 남깁니다.
pdist는 한 묶음의 중복 없는 쌍을 담습니다
pdist(X,metric="braycurtis")
는 한 행렬 내부에서 서로 다른 행 쌍을 비교하고 압축된 일차원 결과를 반환합니다. 행 3개의 서로 다른 쌍은 3개입니다. 정사각형 거리 행렬이 바로 돌아오는 것으로 오해하지 말고 필요하면 공식 문서가 안내하는 squareform 변환을 구분합니다.[3]
vegan의 binary 설정은 입력 정보를 바꿉니다
R의 vegan은
vegdist(x,method="bray",binary=FALSE)
를 안내합니다.
binary=TRUE
는 계산 전에 존재·부재로 바꾸므로 건수의 크기 정보가 사라집니다. 반환값도 SciPy의 행렬과 같은 모양이라고 가정하지 않습니다. 공식 문서는 R의 dist와 같은 유형의 거리 객체라고 설명합니다.[4]
브레이–커티스와 헷갈리는 용어는 무엇이 다른가요?
캔버라 거리는 항목마다 먼저 나눕니다
캔버라 거리는 항목별 차이를 그 항목의 절댓값 합으로 나눈 뒤 더합니다.[5] 브레이–커티스는 차이를 먼저 모두 더하고 전체 합으로 한 번 나눕니다.[1] 앞의 세 항목에서 SciPy 정의의 캔버라는
1/3+0+1=4/3
, 브레이–커티스는 1/3입니다. 두 이름을 같은 계산의 별칭으로 쓰지 않습니다.
자카드는 집합의 겹침을 비교합니다
자카드 유사도는 두 집합의 교집합을 합집합으로 나눕니다. 반면 브레이–커티스는 보통 항목별 양을 남깁니다. 이진 입력으로 제한해도 브레이–커티스는 공통 항목 수를 두 집합 크기의 합과 연결하는 형태이므로 자카드와 숫자가 같지는 않습니다. vegan은 양적 자카드와의 변환 관계도 별도로 설명합니다.[4]
코사인과 행별 정규화의 질문은 다릅니다
코사인 유사도는 벡터 방향을 비교합니다. 브레이–커티스에서는
[4,2,0]
과 그 두 배인
[8,4,0]
도 1/3입니다. 양쪽 행을 각각 합 1로 맞추면 두 행이 같아져 0이 됩니다. 비율만 비교할지 총량 차이도 남길지를 선택한 결과이며 정규화 전후 점수를 같은 기준으로 섞지 않습니다.
비교 정리: 캔버라는 항목별 상대 차이의 합, 브레이–커티스는 전체 합으로 나눈 양의 차이, 집합 자카드는 겹침 비율, 코사인은 방향을 읽습니다.
실전에서는 어디에 쓰이나요?
항목별 빈도 표의 사례를 비교합니다
같은 분류 체계로 집계한 문의 유형이나 행동 건수처럼 비음수 표를 비교하는 설계가 가능합니다. 이는 원리를 옮긴 활용 예시이며 특정 서비스의 공식 권장 설정은 아닙니다. 관측량이 다른 행을 원본 건수로 볼지 비율로 볼지 정하고 희귀 항목보다 큰 양의 차이에 비중을 두는 것이 목적에 맞는지 살핍니다.
비유사도 행렬을 후속 분석에 전달합니다
같은 자료의 모든 쌍을 계산해 군집이나 시각화의 입력으로 검토합니다. 다차원 척도법(MDS)은 비유사도 관계를 좌표로 나타내는 후속 작업입니다. 브레이–커티스 계산 자체가 좌표나 군집 라벨을 만들지는 않습니다. 후속 도구가 비계량 비유사도를 받는지 별도로 확인합니다.[2][3][4]
적용할 때 어떤 순서로 확인하나요?
1. 원본 표와 전처리 규칙을 고정합니다
열 사전, 단위, 집계 기간, 결측값 규칙과 행별 합을 기록합니다. 원본 건수·비율·존재 여부는 서로 다른 입력입니다. 학습된 열 선택이나 변환이 있다면 훈련 자료에서 정한 규칙만 평가 자료에 적용하고 새 항목의 처리 기준도 미리 정합니다.
2. 작은 예시와 빈 행을 따로 시험합니다
같은 행, 겹치는 항목이 없는 행, 한쪽만 빈 행, 양쪽이 빈 행을 나눠 확인합니다. 공통 0을 더한 경우와 같은 배율을 곱한 경우도 비교합니다. 계산 불가능한 쌍을 0으로 조용히 대체하면 두 빈 기록을 실제로 같은 관측으로 취급하게 됩니다. 제외·별도 상태 등의 정책을 명시합니다.
3. 최종 검색·군집 결과를 검토합니다
거리 하나가 작은지보다 필요한 사례가 가까워졌는지 봅니다. 비교 기준을 바꾸기 전후에 같은 평가 표본을 쓰고 수집량 차이와 특정 큰 열이 순위를 바꿨는지도 살핍니다. 정답 없는 군집에서는 대표 원본과 실패 사례를 함께 읽으며 임의의 비유사도 임계값을 보편적 기준으로 제시하지 않습니다.
체크리스트: 항목 순서, 비음수·유한값, 행별 합, 전처리, 가중치, 빈 행 정책, 출력 쌍 순서와 후속 도구의 거리 조건을 확인하세요.
사용할 때 무엇을 주의해야 하나요?
첫째, 음수가 섞인 임베딩에 그대로 쓰지 않습니다. SciPy 식에서 한 항목 값이 1과 -0.5이면 비유사도는 3입니다. 비음수 조건에서의 0부터 1 범위를 벗어나는 계산 예시입니다. 표준화로 평균을 빼거나 음수 성분을 가진 벡터에 적용할 때 원래 양의 비교라는 뜻을 잃지 않는지 살핍니다.[1][4]
둘째, 양쪽이 모두 빈 행인 경우를 정상 점수로 읽지 않습니다. 분모 0은 두 사례가 같다는 증거가 아닙니다. vegan도 빈 관측 행에서 오해하기 쉬운 값이나 NA·NaN이 생길 수 있다고 경고합니다. 작은 양수를 임의로 더하면 정의가 바뀌므로 그 정책과 영향까지 기록합니다.[4]
셋째, 삼각부등식이 필요한 알고리즘에 무심코 넣지 않습니다.
A=[1,0]
,
B=[1,1]
,
C=[0,1]
에서 A와 C의 비유사도는 1이고 나머지 두 쌍은 각각 1/3입니다.
1 > 1/3+1/3
이므로 삼각부등식이 깨집니다. vegan이 이를 semimetric으로 구분하는 이유를 보여주는 반례입니다.[4]
넷째, 합으로 나눴다고 관측 노력 차이가 사라지지는 않습니다. 공통 배율을 곱할 때 값이 유지되는 것과 두 행의 관측 기간이 다른 것은 별개입니다. 행별 합 정규화는 총량 정보를 없애며 작은 표본에서 얻은 비율의 불확실성까지 없애주지는 않습니다. 원본 양과 비교 목적을 함께 남깁니다.
주의: 브레이–커티스는 비음수 양의 비교 규칙입니다. 의미 일치 확률·고장 확률·군집 정답이나 모든 검색 구조에 쓸 수 있는 보편적 거리가 아닙니다.
자주 묻는 질문
Q1. 값이 0.3이면 두 데이터가 70% 같은가요?
비유사도를 1에서 빼 유사도로 표현할 수는 있지만 특정 라벨·의미가 같을 확률로 보정한 수치는 아닙니다. 어떤 항목과 양을 비교했는지 먼저 읽습니다.
Q2. 두 벡터의 합을 반드시 1로 맞춰야 하나요?
필수 조건은 아닙니다. 원본 양으로 계산할지 각 행의 구성 비율로 계산할지에 따라 질문이 달라집니다. 앞의 비례 벡터 예시는 원본에서 1/3이고 행별 합 정규화 뒤에는 0입니다.
Q3. 두 행에 모두 없는 항목을 더하면 더 비슷해지나요?
기본 비가중 식에서는 공통 0이 분자와 분모를 바꾸지 않습니다. 다만 전체가 0인 행 쌍은 분모도 0이어서 별도의 상태로 처리합니다.[1][4]
Q4. 캔버라 결과를 항목 수로 나누면 같은가요?
일반적으로 같지 않습니다. 항목별 비율의 평균과 전체 차이 합의 비는 다른 계산입니다. 큰 양과 작은 양의 항목이 기여하는 방식도 달라집니다.[1][5]
Q5. metric 인수에 이름이 있으면 수학적 거리인가요?
API 인수 이름만으로 모든 거리 공리가 보장되지는 않습니다. 본문의 세 벡터 반례처럼 브레이–커티스는 삼각부등식이 깨질 수 있으므로 후속 알고리즘의 전제를 확인합니다.[2][4]
Q6. 건수를 0과 1로 바꾸어도 같은 결과인가요?
존재 여부만 남기면 여러 건의 차이가 사라집니다. vegan의 binary 설정처럼 별도 변환으로 취급하고 원래 양을 보존한 분석과 같은 실험 결과로 섞지 않습니다.[4]
출처
마무리
브레이–커티스 비유사도는 항목별 양의 차이를 더해 전체 양으로 나누는 방법입니다. 캔버라와 나누는 순서가 다르고 공통 0·행별 정규화·음수·빈 행 처리에 따라 비교 의미가 달라집니다. API가 숫자를 반환했다는 사실과 목적에 맞는 비교라는 판단을 구분합니다.
처음에는 세 항목 예시로 분자와 분모를 직접 확인해 보세요. 원본 건수와 비율을 나란히 비교하고 출력의 사례 쌍을 보존합니다. 그다음 실제 검색이나 군집 결과와 후속 도구의 조건을 확인하면 작은 비유사도를 과도하게 해석하는 일을 줄일 수 있습니다.
