상관계수

햄도·2020년 12월 3일
0

word embedding fine-tuning 성능 테스트 코드에 정답 라벨과 예측한 라벨의 상관계수를 계산하는 코드가 포함되어 있었는데, 정답 라벨을 1로만 설정하니까 상관계수를 계산하며 오류가 났다. 이 오류를 해결하려다가 일단 상관계수에 대해 찾아봤다.

상관계수

연속형 자료들끼리 분석하는 방법 중 하나. 회귀분석도 그 중 하나이다.

연속형 수치로 이루어진 변수와 변수 사이의 관계는 상관 관계와 인과 관계로 구분할 수 있는데, 상관 관계는 서로 선형적인 증가/감소와 관련된 상호 관계만을 나타내며 서로 영향을 주는 관계를 의미하지는 않는다. 한 변수가 다른 변수에 영향을 주는 경우에는 상관 관계가 아니라 인과 관계를 가진다고 한다. 이런 인과 관계 분석에는 회귀 분석을 사용하며, 상관 관계는 상관 관계 분석을 사용한다.

상관 관계의 크기는 상관계수라는 값으로 정량화해 나타낼 수 있다. 대표적인 상관계수로는 피어슨 상관계수와 스피어만 상관계수, 켄달 상관계수가 있고 모두 -1~1 사이의 값을 가진다. 상관계수가 음수인 경우 음의 상관 관계, 양수인 경우 양의 상관 관계가 있다고 한다.

피어슨 상관계수

분석하고자 하는 두 변수가 모두 연속형 자료일 때 두 변수간 선형적인 상관관계의 크기를 나타내는 값. 두 변수가 모두 정규성을 따른다는 가정이 필요하며 모수적 방법이라고 한다.

스피어만 상관계수

분석하고자 하는 두 연속형 변수의 분포가 심각하게 정규 분포를 벗어난다거나, 표본크기가 작을 때 또는 두 변수가 순위 척도 자료일 때 사용한다. 데이터에 순위만 매길 수 있다면 적용이 가능하기 때문에 연속형 데이터, 순서형 데이터에 적용할 수 있다. 예를 들어 모의고사 성적을 각 과목별로 등수를 매겼을 때, 언어 영역의 등수와 수리 영역의 등수가 서로 상관 관계가 있는지를 스피어만 상관계수로 알아볼 수 있다.

주의할 점

상관계수 값이 0이라고 해서 두 변수가 전혀 상관관계가 없다고 생각하면 안된다. 피어슨은 선형 상관관계의 정도를, 스피어만은 단조관계의 정도를 측정하기 때문에 둘 다 비선형 상관관계에서는 0에 가까운 값이 나올 수 있다. 따라서 산점도를 통해 다른 상관관계가 있는지 파악해야 한다.

모든 label이 같은 값일 때 왜 오류가 발생했나?

scipy.stats.pearsonr() 함수를 호출하며 인자로 정답 유사도와 예측 유사도를 넘겨주는데, PearsonRConstantInputWarning이 자꾸 발생하고, 점수가 nan으로 나왔다.

피어슨 상관계수

PLCC=i=1n(XiXˉ)(YiYˉ)i=1n(XiXˉ)2(YiYˉ)2PLCC = \frac{\sum\limits_{i=1}^n ({X_i}-\bar{X})({Y_i}-\bar{Y})}{\sqrt{\sum\limits_{i=1}^n ({X_i}-\bar{X})^2({Y_i}-\bar{Y})^2}}

Xi,YiX_i, Y_i: X, Y 변수들의 i번째 샘플값

Xˉ,Yˉ\bar{X}, \bar{Y}: X, Y 변수의 평균값

각 변수의 샘플값에서 평균값을 빼주기때문에, 평균값과 모든 샘플값이 같은 경우 분모가 0이 되어 오류가 났던 것..

스피어만 상관계수

SROCC=16M(M21)i=1Mdi2SROCC=1-\frac{6}{M(M^2-1)}\sum\limits_{i=1}^M {d_i}^2

did_i: 두 변수의 값들을 크기 순으로 정렬한 것에서 i번째 값들의 차

여기에서도 모든 샘플값이 같으면 순위도 같기 때문에 분모가 0이 되어버린다.

label을 모두 1로 넘겨서 훈련시켜도 훈련이 되지 않는것은 아니지만, 테스트셋의 label은 모두 같으면 정답과 예측의 상관계수를 구할 수 없다.

참고

profile
developer hamdoe

0개의 댓글