대응 분석과 다중 대응 분석: χ² 거리로 범주형 관계 읽기

대응 분석과 다중 대응 분석의 χ² 거리, 관성, SVD 기반 좌표 산출 과정을 정리하고 설문·품질·마케팅 데이터 해석 시 확인할 지점을 다룬다.

2026-08-14 · 최초 발행 2024-04-29

교차표의 잔차 구조를 좌표로 옮기는 방법

대응 분석(Correspondence Analysis, CA)과 다중 대응 분석(Multiple Correspondence Analysis, MCA)은 범주형 데이터에서 관계 구조를 시각적으로 파악하고 차원을 줄이는 기법이다. χ² 거리(chi-square distance)를 바탕으로 교차표에서 기대빈도와 실제 관측빈도가 어긋나는 패턴을 특이값 분해(SVD)로 요약한다.

CA는 2차원 교차표의 행·열 프로파일 사이 χ² 거리를 가능한 한 적은 왜곡으로 보존하는 저차원 임베딩이다. 표준화 잔차 행렬을 SVD로 분해해 행과 열의 좌표를 구한다.

MCA는 여러 범주형 변수의 지시행렬(원-핫)을 대상으로 하는 CA의 확장이다. 변수별 블록 구조와 벤제크리(Benzécri) 보정 등을 사용해 차원별 관성(inertia) 해석에서 생길 수 있는 왜곡을 완화한다.

χ² 거리는 관측빈도와 독립성을 가정한 기대빈도의 차이를 열 또는 행의 비중으로 가중하는 유클리드형 거리다. 질량(mass) 가중을 적용하므로 빈도가 큰 범주가 과도한 영향을 갖지 않도록 한다. 관성은 χ² 통계량을 표본 크기로 정규화한 총 변동의 분해이며, 각 축이 설명하는 비율은 차원 선택과 품질 평가에 쓰인다.

분석 전에 정해야 할 입력 규칙

CA는 단일 교차표를 입력으로 받고, MCA는 여러 범주형 변수에서 만든 지시행렬을 입력으로 받는다. 희소 카테고리를 어떻게 병합할지, 결측을 별도 범주로 둘지 또는 완전제거할지를 먼저 정해야 한다.

행과 열의 합으로 확률화한 뒤 각 행과 열의 조건부 분포인 프로파일을 계산한다. 이 과정에서 표준화 잔차는 다음과 같이 규모 차이를 교정한다.

(관측-기대)/√기대

분해 결과는 행과 열을 함께 놓는 대칭 맵으로 표현할 수 있다. 한쪽에는 주좌표를, 반대쪽에는 부좌표를 두는 비대칭 맵도 선택할 수 있다. 축 수는 스크리 플롯, 누적 관성, 부트스트랩 안정성으로 판단하고, 점의 기여도(contribution)와 cos²(표현 품질)로 해당 좌표를 신뢰할 수 있는지 확인한다.

이 기법은 독립성 기준에서 벗어나는 잔차 구조를 탐색하는 데 적합하다. 다만 표본이 부족하거나 극단적으로 희소한 경우, 다중응답 편향이 있는 경우에는 해석이 왜곡될 수 있다.

프로파일에서 바이플롯까지 이어지는 흐름

입력은 교차표 또는 지시행렬, 표본 크기 N, 전처리 규칙이다. 확률화와 프로파일·질량 산출, 표준화 잔차 계산, SVD, 차원 선택을 거쳐 필요하면 보조 포인트를 투영한다. 결과물은 요인 좌표, 설명 관성, 기여도·cos², 바이플롯이다.

스크리/누적 관성부트스트랩/퍼뮤테이션0 빈도 행·열극단적 희소성다중응답입력: 교차표/지시행렬전처리: 결측/희소 카테고리병합확률화 프로파일 계산기대빈도 산출 표준화 잔차SVD: 좌표·특이값 도출차원 선택요인맵 생성해석: 기여도·cos²·근접성에러/조건제거 또는 병합카테고리 재코딩·정규화MCA로 변환출력: 보고서·바이플롯·좌표테이블

설문, 품질, 채널 반응에서 읽을 수 있는 관계

고객 설문의 Likert, 단일선택, 다중선택 문항은 지시행렬로 통합한 뒤 MCA에 적용할 수 있다. 고객 세그먼트와 응답 패턴을 함께 배치하면 타깃 메시지를 검토할 수 있다.

품질 관리에서는 불량 유형과 라인·교대의 교차표에 CA를 적용해 연관 구조를 확인한다. 특정 교대와 결함 유형이 가까이 나타나는지 살펴보고 공정 개선의 우선순위를 잡는 방식이다.

마케팅에서는 채널과 캠페인 반응 코호트의 χ² 기반 거리 구조를 해석할 수 있다. 신규 캠페인 파일럿 데이터는 보조 포인트로 투영해 적합한 채널을 탐색한다.

증상과 진단 코드처럼 의료 범주 데이터가 대상이라면 고빈도 카테고리는 유지하고 희소 증상은 병합한 뒤 CA를 적용한다. 결과는 임상 지식과 결합해 가이드라인 후보 패턴을 찾는 데 사용할 수 있다.

단일 교차표와 다변량 범주형 데이터의 차이

항목 CA MCA
데이터 형태 단일 교차표 다변량 범주형(지시행렬)
성능(속도/메모리) 작음~중간 규모 효율적 변수·범주 수 증가 시 비용 증가
확장성(범주/관측) 수천 범주까지 실용 범위 변수×범주가 크면 차원 축소·병합 필요
일관성(해석/가중) 행·열 대칭 해석 용이 변수 불균형 시 가중·보정 필요
안정성(희소/소표본) 희소성에 비교적 강인 희소성·다중응답 편향에 민감
운영 편의(도구/시각화) 광범위한 패키지 지원 주류 패키지 지원, 파이프라인화 용이

Python과 R에서 좌표를 구하는 예시

실행 환경은 Python 3.10+, pandas >= 1.5, prince >= 0.13 또는 R 4.2+, FactoMineR, factoextra를 사용한다.

Python에서는 교차표로 CA를 적합한 뒤 행·열 좌표와 설명 관성을 확인할 수 있다. 여러 범주형 변수를 담은 데이터프레임에는 MCA를 적용한다.

# pip install pandas prince
import pandas as pd
import prince

# 예시 교차표 (채널 × 반응)
ct = pd.DataFrame({
    "Email":   [120, 30],
    "SMS":     [80, 50],
    "Search":  [60, 70],
    "Social":  [40, 90]
}, index=["Responded", "NoResponse"])

# CA
ca = prince.CA(n_components=2, benzecri=False, check_input=True, engine="auto", random_state=42)
ca = ca.fit(ct)

row_coord = ca.row_coordinates(ct)
col_coord = ca.column_coordinates(ct)
explained = ca.explained_inertia_

print("Row coordinates:\n", row_coord.head())
print("Column coordinates:\n", col_coord.head())
print("Explained inertia:", explained)

# MCA: 다변량 범주형 예시
data = pd.DataFrame({
    "AgeGroup": ["20s","30s","20s","40s","30s","50s"],
    "Channel":  ["Email","SMS","Search","Social","Email","Search"],
    "Satis":    ["High","Low","Mid","High","Mid","Low"]
})

mca = prince.MCA(n_components=2, benzecri=True, random_state=42)
mca = mca.fit(data)

coord = mca.column_coordinates(data)
print("MCA column coordinates:\n", coord.head())
print("MCA explained inertia:", mca.explained_inertia_)

R에서도 같은 교차표와 범주형 데이터프레임으로 CA와 MCA를 실행하고 바이플롯을 생성할 수 있다.

# install.packages(c("FactoMineR", "factoextra"))
library(FactoMineR)
library(factoextra)

# CA
ct <- matrix(c(120,30, 80,50, 60,70, 40,90), nrow=2, byrow=TRUE)
colnames(ct) <- c("Email","SMS","Search","Social")
rownames(ct) <- c("Responded","NoResponse")
res.ca <- CA(ct, graph=FALSE)
fviz_ca_biplot(res.ca, repel=TRUE)

# MCA
df <- data.frame(
  AgeGroup=c("20s","30s","20s","40s","30s","50s"),
  Channel=c("Email","SMS","Search","Social","Email","Search"),
  Satis=c("High","Low","Mid","High","Mid","Low")
)
res.mca <- MCA(df, graph=FALSE)
fviz_mca_biplot(res.mca, repel=TRUE)

희소 카테고리 비율이 1% 미만이면 병합하거나 보조 포인트로 처리하는 방식을 권장한다. 다중응답 설문은 지시행렬 생성 규칙, 즉 단일 선택 가중 또는 동일 가중을 명시해야 한다. 재현성을 확보하려면 전처리·가중·보정 옵션을 코드로 고정한다.

요인맵을 읽을 때 남겨야 할 기준

CA에서는 상위 23차원 누적 관성 6090% 범위를 기대할 수 있으며, 이는 데이터 구조에 따라 달라진다. MCA는 변수와 범주 수가 많아질수록 관성이 분산되고, 25차원 합산 2050% 수준이 빈번하게 관찰된다. 시각 요약을 사용하면 보고서 페이지 수를 30~50% 절감하고 탐색 시간을 40% 이상 단축할 수 있다.

가까운 점 쌍은 조건부 분포가 유사하다는 뜻이지 인과관계를 뜻하지는 않는다. 원점에 가까운 점은 해당 축에서 설명력이 낮으므로 과해석을 피한다. 기여도는 상위 20%, cos²는 ≥ 0.5인 점을 우선 해석 대상으로 둘 수 있다. 보조 포인트는 모델 적합 후에 투영하므로 구조를 바꾸지 않고 비교할 수 있다.

복잡한 범주 관계를 직관적으로 전달할 수 있다는 점도 CA와 MCA의 강점이다. 희소 패턴이나 이상 연결성을 일찍 포착해 의사결정 품질을 높이는 데 활용할 수 있다.

대응 분석다중 대응 분석범주형 데이터통계 분석SVD