두 변수 유사성 확인 (피어슨, 스피어만, 켄달타우)

Reference
  • https://medium.com/@leejukyung/%EC%BC%84%EB%8B%AC%ED%83%80%EC%9A%B0-kendalltau-18fb90ba4e7
  • https://jimmy-ai.tistory.com/142
  • https://medistat.tistory.com/89

켄달타우

  • 두 사람이 시스템에 대해 평가를 했다고 하자.
  • 이 두사람 A,B가 평가한 점수가 얼마나 연관성있는지 확인하고 싶다.
  • 5개의 데이터에 대한 평가 (5개의 데이터: d1,d2,d3,d4,d5 라고하자)
  • 예1)
    • 사람A: 1,2,3,4,5
    • 사람B: 3,4,1,2,5
    • di_X: i번째 데이터에 대한 X사람의 점수
    • concordant pair 계산
      • 같은 상관관계를 가진 쌍을 의미한다.
      • (d1, d2)와의 관계
        • d2_A > d1_A
        • d2_B > d1_B
        • 따라서 concordant pair임
      • 마찬가지로 (d1, d5), (d2, d5), (d3, d4), (d3, d5), (d4, d5)도 concordant pair이다.
      • 따라서 총 6개의 concordant pair가 있다. 이를 C라하자.
    • discordant pair
      • concordant pair와 반대로 반대의 상관관계를 가진 것을 의미한다.
      • 당연히 4C2-6=4가 된다. (여기서는 동점이 없으니까 일단 무시)
    • 켄달타우 = (C-D)/(C+D)=2/10=0.2 가 된다.
  • 예2)
    • 사람A: 1,2,3,5,5
    • 사람B: 3,4,1,5,5
    • concordant pair 계산
      • (d1, d2)와의 관계
        • d2_A > d1_A
        • d2_B > d1_B
        • 따라서 concordant pair임
      • 마찬가지로 (d1,d4), (d1,d5), (d2,d4), (d2,d5), (d3,d4), (d3,d5) concordant pair이다.
      • 따라서 C=7개의 concordant pair가 있다. 
    • discordant pair
      • 여기서는 동점이 있으므로 실제 discordant pair은 (d1,d3), (d2,d3) 2개이다.
    • 켄달타우 = (C-D)/(C+D)=5/9=0.555 가 된다.
  • from scipy import stats
    """
    tau = (P - Q) / sqrt((P + Q + T) * (P + Q + U))

    where P is the number of concordant pairs, Q the number of discordant pairs,
    T the number of ties only in x, and U the number of ties only in y.
    If a tie occurs for the same pair in both x and y, it is not added to either
    T or U
    h = [1, 2, 3, 4, 5]
    w = [3, 4, 1, 2, 5]
    """
    tau, p_value = stats.kendalltau(h, w)
    tau
    # 0.19999999999999998
    p_value
    # 0.8166666666666667
  • 식에서 분모가 T, U와 같이 뭔가 추가 된다.
    • T: x에만 있는 동점수
    • U: y에만 있는 동점 수
    • 예 3에서 살펴보자
  • 예3)
    • 사람A = [3, 3, 1, 3, 4, 4]
    • 사람B = [1, 2, 2, 5, 4, 4]
    • concordant pair 
      • d1,d5
      • d1,d6
      • d2,d5
      • d2,d6
      • d3,d4
      • d3,d5
      • d3,d6
    • discordant pair
      • d1,d3
      • d4,d5
      • d4,d6
    • T
      • 1,2
      • 1,4
      • 2,4
    • U
      • 2,3
    • 켄달타우 = (C-D)/sqrt((C+D+T)*(C+D+U))=(7-3)/sqrt((7+3+3)*(7+3+1))=0.3345

  • 일반적으로 말할때 켄달타우의 하나의 변수를 순서대로 나열한다.
    • 즉 위 예시에서 h=[1,3,3,3,4,4] 이러게 소팅한다.
    • 그리고 그에 해당하는 w만을 보면서 계산한다.

피어슨 상관계수

  • 표본(sample) 피어슨 상관 계수는 등간척도(간격척도)나 비례척도(비율척도)의 데이타에서 두 변수의 공분산(covariance) 을 각각의 표준 편차의 곱으로 나눈 값이다
  • 위처럼 계산한다.
    • X-Xmean = X'
    • Y-Ymean = Y'
    • 로 생각하면 X'와 Y'의 내적값이 분자, 이 둘의 norm이 분모가 된다.
    • 즉 X'와 Y'의 cosine similarity을 계산하는것과 같아 보임
  • 코드

스피어만 상관계수

  • 레퍼런스
    • https://m.blog.naver.com/pmw9440/221955081796
  • 피어슨과 달리 스피어만은 시작할 때, 변수를 순서형으로 취급한다.
    • 즉 켄달타우처럼 하나의 변수를 소팅하고, 다른 변수를 통해서 값을 계산한다.
    • 단, 스피어만은 동점(tie)가 없다고 가정하기 때문에, 상황에 따라 써야한다.
    • 자세한식은 좀 복잡하다.
    • $\combi{r}_s\ =\frac{\sum _{i=1}^n\left(i-\frac{n+1}{2}\right)\left(R_i\ -\ \overline {R}\right)}{\sqrt{\sum _{i=1}^n\left(i-\frac{n+1}{2}\right)^2}\sqrt{\sum _{i=1}^n\left(R_i\ -\ \overline {R}\right)^2}}$rs =ni=1(in+12)(Ri  R)ni=1(in+12)2ni=1(Ri  R)2
    • 위 식을 정리하면
    • $r_s=\frac{12}{n\left(n^2-1\right)}\sum _{i=1}^n\left(i-\frac{n+1}{2}\right)R_i$rs=12n(n21)ni=1(in+12)Ri
      $=\frac{12}{n(n^2−1)​}\sum _{i=1}^niR_i\ -\ \frac{3\left(n+1\right)}{n-1}$=12n(n21)ni=1iRi  3(n+1)n1
      $=\ 1-\ \frac{6}{n\left(n^2-1\right)}\sum _{i=1}^n\left(i-R_i\right)^2$= 1 6n(n21)ni=1(iRi)2
    • 위 식을 최종적으로 계산하면 된다.
  • 코드













































댓글