친화도 전파(Affinity Propagation)란? AI에서 실제 대표 사례를 골라 데이터를 묶는 방법
TL;DR
친화도 전파(Affinity Propagation)는 데이터 쌍 사이에서 대표로 적합한 정도를 수치로 주고받으며 실제 표본을 대표 사례로 고르는 군집화 방법입니다. 군집 수를 직접 지정하지 않지만 선호도 설정에 따라 대표 수가 달라집니다. 책임도·가용도 메시지, 감쇠 계수, 유사도 방향과 수렴 여부를 이해하면 결과를 잘못 해석하는 일을 줄일 수 있습니다.
핵심 3줄 요약
- 핵심 1
실제 표본이 대표가 됩니다. 평균 좌표를 새로 만드는 대신 입력 데이터 중 대표 사례를 골라 주변 사례를 묶습니다. - 핵심 2
군집 수는 선호도의 영향을 받습니다. 대표가 되기 쉬운 정도를 조절하므로 군집 수를 안 넣어도 설정 선택은 필요합니다. - 핵심 3
결과 배열과 수렴 성공은 다릅니다. 군집 번호가 나왔다고 계산이 안정됐다는 뜻은 아닙니다. 경고와 대표 사례를 함께 확인합니다.
이 글에서 다룰 내용
- 친화도 전파의 한 문장 정의
- 대표 문의를 고르는 쉬운 예시
- 유사도·책임도·가용도의 작동 원리
- 선호도와 감쇠 계수의 역할
- K-means·평균 이동·스펙트럴 군집화와의 차이
- 대표 사례 탐색과 실전 점검 순서
- 계산 비용·수렴·새 데이터 처리의 주의점
친화도 전파를 한 문장으로 정의하면 무엇인가요?
친화도 전파는 표본 사이의 유사도를 바탕으로 책임도와 가용도라는 메시지를 반복 갱신해 실제 데이터 중 대표 사례와 그에 속하는 군집을 찾는 비지도학습 알고리즘입니다.
영문 이름은 Affinity Propagation이며 문헌에서는 AP로 줄여 쓰기도 합니다. 여기서 메시지는 사람이 읽는 채팅이나 네트워크 요청이 아닙니다. 한 사례가 다른 사례의 대표가 되기에 얼마나 적합한지 계산한 수치입니다.
대표 사례는 exemplar라고 부릅니다. 결과에 남은 대표는 입력 데이터의 실제 행과 연결됩니다. 여러 표본의 평균으로 만든 가상의 중심과 구분하면 이해하기 쉽습니다. 다만 대표로 뽑혔다고 정답 라벨이나 품질 보증을 얻는 것은 아닙니다.
한 줄 정리: 서로의 대표로 얼마나 적합한지 반복 계산하고, 실제 사례 가운데 대표를 골라 묶습니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 고객 문의를 묶고 각 묶음을 설명할 문의 한 건씩을 고른다고 가정해 보겠습니다. 배송 문의와 환불 문의가 섞여 있지만 미리 붙인 정답 라벨은 없습니다. 아래는 원리를 설명하기 위한 가상 사례이며 실제 분석 결과는 아닙니다.
문의 내용을 숫자 특징으로 바꾸고 서로 비슷한 정도를 계산합니다. 어떤 배송 문의가 여러 배송 문의와 닮았다면 대표 후보가 됩니다. 각 문의는 다른 후보와 비교해 그 후보가 얼마나 적합한지 계산하고, 후보 쪽에서는 다른 문의들의 지지까지 모아 대표로 쓸 만한지 따집니다.
이 계산을 반복해 안정된 대표가 남으면 각 문의를 대표와 연결합니다. 결과를 설명할 때 평균 벡터만 보여 주는 대신 실제 배송 문의 원문을 제시할 수 있습니다. 배송·환불이라는 이름은 담당자가 내용을 읽고 붙입니다.
특정 문의에 대표 선호도를 높게 주면 그 문의가 대표로 선택될 가능성이 커집니다. 이때 생긴 묶음을 데이터가 스스로 찾아낸 유일한 정답이라고 설명하면 곤란합니다. 분석자가 준 설정이 결과에 영향을 미쳤기 때문입니다.
쉬운 예시: 각 묶음의 설명용 표본을 실제 자료에서 뽑되, 한 번의 인기투표가 아니라 후보끼리의 경쟁과 다른 사례의 지지를 반복해서 반영한다고 생각하면 됩니다.
왜 AI에서 친화도 전파가 중요한가요?
대표 원본을 바로 확인할 수 있습니다
문서나 이미지의 평균 특징은 사람이 읽거나 보기 어려울 수 있습니다. 친화도 전파는 실제 표본을 대표로 남기므로 그 원본을 열어 군집의 의미를 점검하기 편합니다. 대표 하나만으로 모든 구성원을 설명할 수는 없으므로 경계 사례도 함께 살펴봅니다.
묶음 수를 모르는 자료를 탐색합니다
군집 수를 직접 입력하는 대신 유사도와 선호도를 이용해 대표 수가 정해집니다. 몇 개로 나눌지 확신하기 어려울 때 여러 선호도에서 나타나는 구조를 비교할 수 있습니다. 자동으로 나온 숫자가 업무에 맞는 군집 수인지는 별도로 검토합니다.
이미 계산한 유사도를 활용합니다
표본 쌍의 관계를 이미 계산했다면 정사각 유사도 행렬을 입력으로 쓸 수 있습니다. 원본 좌표에 한정되지 않는 장점이 있지만 유사도 설계가 틀리면 대표도 잘못 선택됩니다. 어떤 특징을 비교했고 값이 커질수록 무엇을 뜻하는지 기록합니다.
친화도 전파는 어떤 순서로 작동하나요?
1. 유사도와 대표 선호도를 준비합니다
사례끼리 얼마나 비슷한지 수치로 나타냅니다. scikit-learn의 기본
affinity="euclidean"
은 유클리드 거리의 제곱에 음수를 붙인 값을 씁니다. 가까울수록 값이 크며, 음수라는 이유만으로 잘못된 유사도는 아닙니다.
선호도
preference
는 각 표본이 대표가 되기 쉬운 정도를 정합니다. 모든 표본에 같은 값을 주거나 표본마다 다르게 줄 수 있습니다. 지정하지 않으면 입력 유사도의 중앙값을 사용합니다. 선호도가 큰 표본은 대표로 선택되기 쉬워집니다.
2. 책임도로 다른 대표 후보와 비교합니다
책임도는 한 표본의 관점에서 특정 후보가 다른 후보들보다 대표로 얼마나 적합한지 나타냅니다. 둘 사이의 유사도만 보는 것이 아니라 다른 후보들의 유사도와 현재 가용도까지 비교합니다. 처음 가까워 보였던 후보도 다른 좋은 대안이 있으면 지지가 약해질 수 있습니다.
책임도는 분류 확률이나 정확도 점수가 아닙니다. 메시지 갱신에 쓰는 내부 수치이므로 값 하나에 정상·비정상 같은 업무 의미를 붙이지 않습니다.
3. 가용도로 다른 표본의 지지를 반영합니다
가용도는 후보가 해당 표본의 대표가 되는 것이 얼마나 타당한지 다른 표본들의 지지와 후보 자신의 상태를 모아 계산합니다. 책임도와 가용도를 번갈아 갱신하면서 여러 표본의 선택이 서로 영향을 주게 됩니다.
감쇠 계수
damping
는 이전 메시지를 얼마나 유지할지 정합니다. scikit-learn에서는 0.5 이상 1 미만을 사용합니다. 새 계산값으로 한꺼번에 바꾸지 않아 메시지가 번갈아 흔들리는 현상을 줄이지만 모든 입력의 수렴을 보장하지는 않습니다.
4. 대표와 군집 번호를 확인합니다
반복이 안정되면 대표 표본과 군집 배정을 정합니다. 클래스 방식에서는
cluster_centers_indices_
로 대표의 원본 행 번호를 확인하고
labels_
로 표본별 군집 번호를 읽습니다. 이 둘은 같은 종류의 인덱스가 아닙니다.
함수형 API인
affinity_propagation
도 유사도 행렬을 받아 대표 인덱스와 라벨을 반환합니다.
return_n_iter=True
를 쓰면 반복 횟수도 받습니다. 객체를 학습하는 방식인지 배열을 반환받는 방식인지에 따라 결과 접근법을 구분합니다.
핵심 인사이트: 선호도는 대표 선택에, 감쇠는 메시지 갱신의 안정성에 관여합니다. 서로 다른 설정을 군집 수 조절 손잡이 하나처럼 취급하지 않습니다.
친화도 전파와 헷갈리는 용어는 무엇이 다른가요?
K-means와의 차이
K-means는 군집 수를 정하고 평균 중심과 표본 배정을 갱신합니다. 그 중심은 실제 관측에 없는 좌표일 수 있습니다. 친화도 전파는 실제 표본을 대표로 선택하며 선호도에 따라 대표 수가 달라집니다. 두 방법 모두 유사한 데이터를 묶지만 대표의 의미와 최적화 과정이 다릅니다.
평균 이동과의 차이
평균 이동은 중심 후보를 주변 이웃의 평균 위치로 옮겨 밀도 봉우리를 찾습니다. 친화도 전파는 대표 후보 사이의 수치 메시지를 갱신합니다. 군집 수를 직접 넣지 않는 공통점이 있어도 평균 이동의 대역폭과 친화도 전파의 선호도는 다른 개념입니다.
스펙트럴 클러스터링과의 차이
스펙트럴 클러스터링은 유사도 그래프의 라플라시안과 고유벡터로 새 좌표를 만든 뒤 군집을 나눕니다. 친화도 전파는 책임도·가용도 메시지로 대표를 고릅니다. 둘 다 유사도 행렬을 쓴다는 이유로 같은 알고리즘이라고 보면 안 됩니다.
최근접 이웃 검색과의 차이
최근접 이웃 검색은 기준 사례와 가까운 항목을 찾습니다. 친화도 전파는 주어진 전체 표본에서 대표와 군집을 함께 정합니다. 특정 문의의 유사 사례만 필요하다면 전체 군집화가 반드시 필요한 것은 아닙니다.
실전에서는 어디에 쓰이나요?
문서 묶음의 대표 사례를 검토합니다
문의나 짧은 문서의 특징을 비교해 비슷한 묶음을 만들고 대표 원문을 검토하는 데 응용할 수 있습니다. 이는 활용 가능한 상황의 예시입니다. 대표 문서가 가장 정확하거나 최신이라는 보장은 없으므로 게시용 요약을 만들 때는 내용의 사실성과 갱신 시점을 따로 확인합니다.
이미지 특징의 묶음을 살펴봅니다
이미지에서 추출한 특징으로 군집을 만들면 각 대표 행을 원본 이미지와 연결할 수 있습니다. 대표 이미지를 나란히 보면 어떤 시각적 차이를 기준으로 묶였는지 검토하기 쉽습니다. 유사도가 높다고 같은 사람이나 같은 상품임을 자동 확정하지는 않습니다.
알고리즘 비교 실험의 한 후보로 씁니다
scikit-learn 공식 예제는 합성 자료에 친화도 전파를 적용한 뒤 대표 위치와 군집 배정을 표시합니다. 정답이 있는 합성 자료에서는 정답 기반 평가와 실루엣 점수를 함께 볼 수 있습니다. 그 예제의 좋은 결과가 실제 문서나 이미지 데이터에서도 반복된다는 뜻은 아닙니다.
친화도 전파를 사용할 때 어떤 순서로 확인하나요?
1. 원본 행과 특징의 의미를 고정합니다
어떤 문서나 이미지가 몇 번째 행인지 저장합니다. 대표 인덱스를 원본 ID와 연결하지 않으면 결과를 설명할 자료를 잃게 됩니다. 수치 특징의 단위와 전처리도 기록하고 고객 번호 같은 식별자를 거리 계산에 그대로 넣지 않습니다.
2. 거리와 유사도의 방향을 구분합니다
affinity="precomputed"
에서는 같은 표본들을 행과 열에 둔 유사도 행렬을 넣습니다. 값이 클수록 더 적합한 대표 관계라는 뜻이어야 합니다. 큰 값이 먼 거리를 뜻하는 원시 거리 행렬을 그대로 넣으면 의도와 반대의 관계를 학습합니다.
3. 선호도를 바꾸며 대표를 비교합니다
하나의 설정에서 나온 군집 수만 보지 말고 선호도를 바꿨을 때 대표 수와 군집 크기가 어떻게 달라지는지 확인합니다. 유사도의 척도가 바뀌면 같은 선호도 숫자도 다른 의미가 됩니다. 다른 데이터에서 잘 됐던 값을 이유 없이 그대로 가져오지 않습니다.
4. 감쇠·반복 한도·경고를 확인합니다
max_iter
는 최대 반복 수이고
convergence_iter
는 수렴 판단에 필요한 안정 구간과 관련됩니다. 경고가 났다면 반복 횟수와 대표 구성을 살펴보고 감쇠와 유사도 입력을 점검합니다. 배열이 반환됐다는 사실만으로 성공 처리하지 않습니다.
5. 원본 검토와 재현 조건을 남깁니다
군집별 대표, 표본 수, 경계 사례와 설정 변화에 대한 안정성을 기록합니다.
random_state
와 라이브러리 버전도 남깁니다. 번호가 바뀌었는지보다 같은 표본들이 함께 묶이는지가 더 중요하며, 필요한 경우 다른 군집화 방법과 비교합니다.
실전 팁: 작은 표본에서 입력 행렬과 대표 원본의 연결부터 시험하세요. 좋은 점수 하나보다 설명 가능한 대표와 반복해서 유지되는 묶음이 분석 목적에 맞는지 확인하는 편이 낫습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 모든 표본 쌍을 다루는 비용을 확인합니다. 조밀한 유사도와 메시지를 저장하는 공간은 표본 수의 제곱 수준으로 늘어납니다. 시간도 표본 수의 제곱과 반복 횟수에 영향을 받습니다. 공식 사용자 안내는 작은 규모에서 중간 규모 자료에 더 적합하다고 설명합니다.
둘째, 수렴하지 않은 결과를 그대로 쓰지 않습니다. 공식 API 문서는 수렴하지 않아도 대표와 라벨이 반환될 수 있으며 그 결과가 부적절할 수 있다고 경고합니다. 대표가 생기지 않은 경우까지 포함해 경고와 출력 상태를 확인하고 원인을 점검합니다.
셋째, 대표 수가 자동이라고 설정 책임이 사라지지 않습니다. 선호도와 유사도 선택이 군집 수를 좌우합니다. 원하는 보고서 모양을 얻으려고 설정을 바꿨다면 그 사실과 비교 기준을 남깁니다. 데이터가 스스로 정확한 유형 수를 알아냈다고 주장하지 않습니다.
넷째, 학습과 새 데이터 배정을 나눠 봅니다. 특징 좌표로 학습한 scikit-learn 객체의
predict
는 새 표본을 가장 가까운 기존 중심에 배정합니다. 메시지 교환으로 전체 대표를 다시 고르는 재학습과는 다릅니다. 미리 계산한 유사도만 쓴 경우에도 같은 예측 경로가 가능한지 구현 조건을 따로 확인합니다.
다섯째, 대표 사례를 집단의 전부로 해석하지 않습니다. 같은 묶음에도 다른 이유와 맥락의 사례가 섞일 수 있습니다. 대표만 읽고 나머지를 삭제하거나 사람의 등급을 확정하지 않습니다. 민감한 정보가 든 원문은 검토 권한과 공개 범위도 함께 관리합니다.
주의: 친화도 전파는 선택한 유사도와 설정으로 대표를 찾는 분석 방법입니다. 군집 번호는 정답 확률도 위험 등급도 아닙니다.
자주 묻는 질문
Q1. 군집 수를 미리 정해야 하나요?
군집 수 자체를 입력하지는 않습니다. 대신 대표 선호도와 유사도에 따라 대표 수가 달라집니다. 여러 설정에서 군집 수와 실제 구성이 어떻게 바뀌는지 확인해야 합니다.
Q2. 대표는 반드시 실제 데이터인가요?
여기서 대표는 학습 표본 중에서 고른 사례입니다. 평균으로 만든 가상 좌표와 다릅니다. 대표 인덱스가 가리키는 원본 행을 보관해야 문서나 이미지의 실제 내용을 다시 확인할 수 있습니다.
Q3. 메시지를 주고받으려면 API 연결이 필요한가요?
아닙니다. 메시지는 알고리즘 안에서 갱신하는 수치입니다. 외부 AI 서비스에 요청을 보내거나 챗봇끼리 대화시키는 절차를 뜻하지 않습니다.
Q4. 유사도가 음수면 오류인가요?
반드시 그렇지는 않습니다. 기본 유클리드 방식은 거리 제곱의 음수를 사용합니다. 중요한 것은 값이 클수록 대표로 더 적합한 관계인지입니다. 다른 알고리즘의 유사도 조건을 그대로 가져와 판단하지 않습니다.
Q5. 감쇠 계수를 크게 하면 군집 수가 줄어드나요?
감쇠의 주된 역할은 이전 메시지를 유지해 갱신의 흔들림을 줄이는 것입니다. 대표 수를 조절하는 선호도와는 역할이 다릅니다. 감쇠를 군집 수의 직접적인 조절값으로 해석하지 않습니다.
Q6. 라벨 배열이 나왔으면 수렴한 것인가요?
아닙니다. 수렴하지 않은 상태에서도 라벨이 나올 수 있습니다. 경고, 반복 횟수, 대표의 존재와 실제 군집 구성을 확인한 뒤 사용할지 판단합니다.
출처
마무리
친화도 전파는 책임도와 가용도 메시지를 반복 갱신해 실제 표본 중 대표를 고르는 군집화 방법입니다. 군집 수를 직접 지정하지 않지만 선호도와 유사도, 감쇠 설정을 이해해야 결과를 제대로 읽을 수 있습니다.
처음에는 작은 자료에서 대표 원본과 군집 구성을 확인하세요. 입력의 방향, 계산 비용과 수렴 경고를 점검한 뒤 활용 범위를 정합니다. 중심을 찾는 다른 방식이 궁금하다면 평균 이동(Mean Shift) 용어 설명과 비교하면 실제 대표를 고르는 방식의 차이가 더 분명해집니다.
