cardinality와 다중공선성의 관계에 대해 착각을 하고 있었다.
오늘 아주 대략적으로만 이해가 되었지만, 미래의 나를 위해 자세하진 않더라도 생각의 흐름을 간략하게 적어둔다.
Cardinality
: 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표이다.
하나의 feature 안에 있는 범주형 값들 간 중복도가 낮으면 > cardinality가 높다.
반대로, 하나의 feature 안에 있는 범주형 값들 간 중복도가 높으면 > cardinality가 낮다.
Ex) column 'A' 은 0과 1로 이루어진 범주형 데이터이다.
컬럼 'A' 내 0과 1의 비율이 50대 50이다 > high cardinality
0이 80%, 1은 20% 의 비율을 차지한다 > "상대적으로" low cardinality
0이 100%, 1은 0% 비율을 차지한다 > cardinality 매우 낮다
Encoding (범주형 데이터)
컬럼 내 값의 범주가 다양할 때, 문자로 되어있는 범주형 데이터는 내부적으로 처리가 불가능하다.
그래서!
encoding (ex. one hot encoding)을 통해 컬럼 내 범주형 데이터( 그 중에서도 순서가 중요하지 않은 명목형(nominal) 데이터)를 숫자형으로 변환해주는 과정을 거쳐야한다.
Ex) column "city" 의 데이터는 서울, 부산, 경기라는 범주로 나눠져 있다.
해당 컬럼을 원핫인코딩 하면, city_서울/ city_부산/ city_경기 로 쪼개지게 되고, 그 내부 값에는 1과 0이 할당된다.
onehotencoding 전
city |
서울 |
부산 |
경기 |
onehotencoding 후
city_서울 | city_부산 | city_경기 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
다중공선성(Multicollinearity) 문제
그런데! high cardinality인 컬럼을 encoding했을 때, 다중공선성 문제가 발생한다.
- 다중공선성이란?
회귀분석에서 독립변수들(X, column, feature) 간에 강한 상관관계가 나타나서, 예측해야할 값인 종속변수(y, target)을 구하는데 영향을 미치는 문제를 이야기한다.
high cardinality인 컬럼을 encoding해서 범주 마다 쪼개져나온 컬럼들은 한 컬럼이 1일 때, 나머지 컬럼이 0이라는 관계성이 생겨버리기 때문에 다중공선성 문제가 발생하게 된다.
이 때, 문제를 해결하기 위해서 encoding으로 만들어진 컬럼 중 하나를 제거하는 등의 조치를 취한다. (원래 있던 컬럼 값의 범주 중 어떤 것이 사라졌는지 알지만, 컴퓨터는 알지 못하도록!)
+ 다중공선성은 '회귀문제'에서만 고려하면 된다! ('결정트리'에서는 feature의 다중공선성은 문제가 되지 않는다.)
참조
cardinality 관련 : https://itholic.github.io/database-cardinality/
'학습 기록' 카테고리의 다른 글
[colab] google colab에서 자주 쓰는 method (0) | 2021.06.15 |
---|