[R] 범주형 데이터의 유사성 (비유사성, 거리) 측정 방법 (Similarity measures for Categorical data)
R 분석과 프로그래밍/R 군집분석(Clustering) 2020. 12. 6. 15:37군집분석 연재하다가 다른 주제 포스팅하느라 잠시 옆길로 샌다는게... 시간이 참 많이 흘러서... 정말 오랜만에 군집분석(Clustering) 관련 포스팅하네요. ^^;
이전 포스팅에서는 연속형 변수에 대한 (비)유사성 측정 척도(https://rfriend.tistory.com/199)로서 맨하탄 거리(Manhattan distance), 유클리드 거리(Euclid distance), 표준화 거리(Standardized distance), 마할라노비스 거리(Mahalanobis distance) 등에 대해서 소개를 하였습니다.
그리고 범주형 자료에 대한 유사성 척도로서 자카드 거리, 코사인 거리, 편집거리 등에 대해서도 다루었는데요, 중복이 있긴 하지만 한번더 종합적으로 정리를 해보고, 연속형과 범주형 자료가 섞여있는 혼합 자료에 대한 유사성 측정하는 방법과 예도 소개할 겸 해서 이번 포스팅을 써봅니다.
이번 포스팅에서는 범주형 데이터(Categorical Data)로서 이분형 (binary), 서열형 (ordinal), 명목형 (nominal) 데이터에 대한 유사성 측정 척도를 소개하고, 다음번 포스팅에서는 연속형과 범주형 혼합 자료의 유사성 측정 방법에 대해 소개하겠습니다.
일반적으로 비유사성(Dis-similarity) 척도로서 거리(Distance)를 많이 사용하며, 거리가 짧을 수록 유사하고, 거리가 멀 수록 유사하지 않다고 평가합니다. 유사성(Similarity)은 비유사성(Dis-similarity) 척도인 거리의 역수 (=1-거리) 로 계산합니다. (본 포스팅에서는 유사성 척도, 비유사성 척도/ 거리가 수시로 번갈아가면서 사용을 하는데요, 혼돈하지 마시기 바랍니다.)
(1) 이분형 (이진형) 변수의 유사성 측정 (Similarity measures for Binary variable)
(2) 서열형 변수의 유사성 측정 (Similarity measures for Ordinal variable)
(3) 명목형 변수의 유사성 측정 (Similarity measures for Nominal variable)
(1) 이분형 (이진형) 변수의 유사성 측정 (Similarity measures for Binary variable) |
범주형 자료 중에서 클래스로 두 개의 값 (보통 '0'과 '1', [0, 1] with 1 = identity) 만을 가지는 자료를 이분형 (이진형) 변수 (Binary variable) 라고 합니다.
이분형 (이진형) 자료 변수에 대한 유사성 척도 (또는 비유사성 척도, 거리)로 Hamming distance (Simple matching), Jacard Co-efficient (Asymmetric binary attributes), Russel-Rao, Kulczynski-2, Ochiai measure, Dice similarity, Tanimoto similarity 등 여러가지 측정 척도가 있습니다. 이중에서 이번 포스팅에서는 Hamming distance, Jacard Co-efficient 에 대해서 자세히 설명하겠습니다.
(1-1) Hamming distance (Simple matching)
정보이론에서 Hamming distance 는 같은 길이의 두 문자열(two strings of equal length)을 대상으로 대응하는 기호가 서로 다른 위치의 개수를 말합니다. 다른말로 하면, 하나의 문자열을 다른 문자열과 동일하게 하기 위해 변경시켜야만 하는 최소한의 문자열 대체 회수를 의미합니다.
Hamming distance는 두개의 순열 사이의 편집거리(edit distance)를 측정하는 여러가지 문자열 측정 지표 중에서 하나입니다. Hamming distance는 미국의 수학자인 Richard Hamming의 이름을 따서 지어진 이름입니다.
Hamming distance function는 단순 매칭 계수 (Simple Matching Coefficient) 라고도 하며, 값이 다른 경우의 비율을 의미합니다.
관측치와의 k번째 변수가 이진형 자료일 때, 단순 매칭 방법은 두 변수의 값이 같으면 1, 다르면 0으로 표현합니다.
따라서 이 변수가 0과 1로 치환되어 있다면 단순매칭에 의한 유사성은 아래처럼 표현할 수 있습니다.
p개의 이분형(이진형) 변수를 가지는 두 개의 관측치와 의 값을 비교하여 집계한 분할표(contingency table)를 작성하면 아래의 표와 같이 표현할 수 있습니다.
이 분할표에 대해서 해밍 거리(Hamming distance), 또는 단순 매칭 계수 (Simple matching coefficient) 는 서로 다른 값을 가지는 변수 개수의 비율이므로 다음의 식으로 표현할 수 있습니다. (거리는 dist() 또는 d() 로 표기합니다.)
반대로, 단순 매칭에 의한 유사성은 서로 같은 값을 가지는 변수 개수의 비율이므로 위의 식에서 분자가 바뀐 아래의 식으로 표현할 수 있습니다. (유사성은 sim() 으로 표기합니다.)
(1-2) Jacard Co-efficient (Asymmetric binary attributes)
자카드 거리는 어느 하나의 상태가 다른 상태보다 더 중요하거나 더 값진 비대칭(asymmetric) 인 경우에 사용합니다. 편의상 상태 '1'을 더 중요하거나 값진 상태 (일반적으로 드물게 발생하고 희소한 상태) 를 나타낼 때 사용합니다.
위의 해밍 거리 (또는 단순 매칭 계수)에서는 두 관측치 Xi, Xj의 분할표에서 a, b, c, d 의 모든 경우를 포함하였다면, Jacard Co-efficient 는 두 관측치 Xi, Xj 가 모두 '0'인 'd'의 경우는 무시하고 나머지 a, b, c 만을 가지고(비대칭적으로) 비유사성인 거리나 혹은 유사성을 측정하게 됩니다.
(자카드 거리 계수, 자카드 유사성 척도에서는 분모에서 모두가 '0'인 d 는 무시되어 빠져있습니다.)
위의 해밍 거리(Hamming distance)와 자카드 계수 (Jacard coefficient) 를 3명의 사람에 대해 증상을 진단한 6개의 변수를 가진 간단한 예를 들어서 계산을 하여 비교해보겠습니다.
위의 이분형 변수 자료를 Feaver, Cough 증상이 Y(Yes)인 경우는 1, N(No)인 경우는 0으로 치환하고, Test-1 ~ Test-4에서 P(Positive)인 경우는 1, N(Negative)인 경우는 0으로 치환하면 아래와 같은 자료를 얻습니다.
그리고 이 자료를 사용하여 Lee와 Jung, Lee와 Hong, Jung과 Hong 별 쌍의 분할표(contingency table)를 작성합니다.
마지막으로 위의 (1)과 (2)에서 소개한 해밍 거리(Hamming Distance), 자카드 계수(Jacard Co-efficient) 공식에 분할표의 값을 대입해주면 됩니다.
거리가 작을 수록 더 관측치 간에 두 유사하다고 평가할 수 있으므로, Hamming distance와 Jacard Co-efficient 모두 가장 작은 Lee와 Jung의 두 명의 환자가 다른 두 쌍의 환자들 보다 더 유사하다고 판단할 수 있겠네요.
물론, 이번 예제의 경우 증상이 있고(Y)/없고(N), 테스트 결과의 양성(P)/음성(N)을 다룬, 변수의 값의 중요성이 다른 비대칭적(asymmetric)인 자료에 해당하므로 Jacard Co-efficient 를 사용하는게 더 적합하겠네요.
(2) 서열형 변수의 유사성 측정 (Similarity measures for Ordinal variable) |
서열형 척도(Ordinal scale)는 1 < 2 < 3 < 4 < 5 처럼 "순서(Order)가 있는" 범주형 자료의 척도를 말합니다. 예를 들면, 설문조사를 할 때 '1 (매우 불만족) < 2 (다소 불만족) < 3 (보통) < 4 (다소 만족) < 5 (매우 만족)' 과 같이 만족도를 조사하는 문항의 척도라든지, '-2 (매우 동의하지 않음), -1 (동의하지 않음), 0 (무관심), 1 (동의함), 2 (매우 동의함)' 과 같은 비교 지수, 또는 우선순위 rank, 배열 순서 등에서 서열형 척도를 사용합니다.
서열형 변수의 유사성을 측정하는 방법에는 Normalized Rank Transformation, Spearman Distance, Footrule Distance, Kendall Distance, Cayley Distance, Hamming Distance, Ulam Distance, Chebyshev/ Maximum Distance, Minkowski Distance 등 여러가지가 있습니다.
이중에서 이번 포스팅에서는 이해하기에 직관적이고 계산이 간편해서 많이 사용되는 Normalized Rank Transformation 방법을 소개하겠습니다.
등급이나 순위 등의 질적 변수(qualitative variable)인 서열형 변수는 정규화(normalization)를 통해서 양적 변수(quantititive variable)로 변환할 수 있습니다. 일단 정규화를 통해 서열형 변수를 양적변수로 변환을 하고 나면, 양적변수의 거리 계산 방법을 사용하는 원리입니다.
서열형 척도로 관측된 두 관측치의 거리를 계산하기 위해 다음의 두 단계를 거쳐서 변환을 하고, 이어서 연속형 변수에서 사용하는 거리 계산(가령, 유클리드 거리)을 하면 됩니다.
(a) 순서형 값(ordinal value)을 순위(rank)로 변환 (이때 순위(rank) r = 1 to R)
(b) 순위(rank)를 [0, 1] 사이의 값을 가지도록 정규화 (normalization)
(c) 정규화된 서열형 변수 X 에 대하여 연속형 변수 거리 계산 함수 적용하여 거리 계산
p 개의 서열형 변수가 있다고 했을 때,
- 유클리드 거리 (Euclidean distance)
- 맨해턴 거리 (Manhattan distance)
서열형 변수의 유사성(similarity)은 비유사성 척도인 거리의 역수 개념이므로 1 에서 거리를 빼주어서 계산합니다.
매장 별 고객만족도를 -2 (매우 불만족) < -1 (불만족) < 0 (보통) < 1 (만족) < 2 (매우 만족) 의 5단계 서열형 척도로 설문조사한 자료가 있다고 해보겠습니다. 아래의 예처럼 Shop A, B, C 의 3개 매장에 대해서 설문문항 S1, S2, S3 의 3개 질문항목을 조사했다고 했을 때 각 매장별 거리를 구해보겠습니다.
(3) 명목형 변수의 유사성 측정 (Similarity measures for Nominal variable) |
명목형 변수는 (서열형 변수와는 다르게) "순서(Order)가 없는" 범주형 자료를 말합니다.
명목형 변수의 유사성은 두 변수의 값이 같으면 1, 다르면 0으로 평가합니다.
따라서 p개의 명목형 변수가 있다고 했을 때, 두 관측치에서 m개의 변수 값이 서로 같다면 거리와 유사성은 아래와 같습니다. (즉, Hamming distance 와 동일)
다음번 포스팅에서는 혼합형 변수의 유사성 (혹은 비유사성 거리)을 평가하는 방법과 R 로 유사성 혹은 거리를 계산하는 방법/ 코드 (https://rfriend.tistory.com/584)를 소개하겠습니다.
[Reference]
* Hamming distance: https://en.wikipedia.org/wiki/Hamming_distance
* Jacard Coefficient similarity
: https://t4tutorials.com/jaccard-coefficient-similarity-measure-for-asymmetric-binary-variables/
* Normalized rank for ordinal data
: https://people.revoledu.com/kardi/tutorial/Similarity/Normalized-Rank.html
* 전치혁 저, "데이터마이닝 기법과 응용", 한나래
이번 포스팅이 많은 도움이 되었기를 바랍니다.
행복한 데이터 과학자 되세요! :-)