빅데이터와 관련된 이전 글에서는 데이터의 볼륨에 초점을 맞추어 얼마나 큰 규모의 데이터가 축적되고 있는지를 살펴보았습니다. (다시 보시려면 여기를..) 일반적으로 사람들이 가장 먼저 데이터의 크기를 피부로 느낄 수 있는 부분은 볼륨입니다.
하지만 제가 만약에 빅데이터의 정의를 내린다고 한다면 볼륨보다는 독립적인 샘플의 개수에 초점을 맞출 것입니다. 복잡도와 노이즈 레벨이 고정되어 있다고 가정했을 때, 독립적인 샘플 수가 많을 수록 이 데이터에 적용될 딥러닝 등 기계학습의 성능이 높아집니다. 오늘은 매우 간단한 실험을 통해서 데이터 양, 특히 독립적 샘플의 개수가 가져오는 힘에 대해서 살펴보겠습니다.
향후 기계학습 방법론에 대한 개괄적 이야기도 할 예정입니다만, 우선은 매우 간단한 선형 회귀 분석 모델 (linear regression analysis[1])을 통해서 데이터 양이 얼마나 중요한 힘을 갖는지 살펴보도록 하겠습니다. 모든 계산은 R 을 통해서 했고, 소스는 여기에서 다운로드 가능합니다.
우선 어떤 5차원 변수 X = (X1, X2, X3, X4, X5)를 기반으로 예측 가능한 변수 Y가 있다고 해보겠습니다 (예: Y= 중학교 성적, X = (IQ, 초등학교 성적, 다니는 학원수, 출석일수, 책상에 앉은 시간)). 이 두개의 변수간에 다음과 같은 선형 관계가 성립한다고 가정하겠습니다.
Y = a*X1 + b*X2 + c*X3 + d*X4 + e*X5
즉 Y 변수는 5차원 변수 X의 선형조합으로 계산이 가능합니다. 조합 계수 (regression coefficients) a-e 는 랜덤하게 샘플링했습니다 (그림 1). 아래의 계수대로면 변수 X1-X3은 커질수록 Y가 커지고, X4-X5는 반대로 커질수록 Y는 작아지게 됩니다.
자, 우선 랜덤한 X를 단 10개 (네 Big과는 거리가 멀죠) 샘플링하여 Y를 계산하고, 이 10개의 학습 데이터를 토대로 a-e를 학습하는 회귀 분석 알고리즘을 돌렸습니다(glmnet package [2]). 학습에 사용하는 10개의 데이터와는 별개로 추가로 200개의 (X, Y) 데이터를 생산하여 예측 성능 검증에 사용했습니다.
비록 단 10개의 데이터만 사용했지만, 학습된 모델은 거의 정확하게 새로운 Y를 예측할 수 있습니다 (그림 2A; R-squared는 0-1 사이의 예측 성능 입니다[3]). 조합 계수도 또한 거의 정확하게 예측됩니다 (그림 2B). 이 예제의 경우 단 10개의 데이터만으로도 학습에 충분해 보입니다.
그러나 이것은 Y가 어떠한 노이즈도 없는 경우입니다. 실제 세상에서 우리가 하는 관측은 어떤 식으로든 노이즈를 가지고 있습니다. 관측자의 실수나 기구의 한계, 그리고 모델이 담지 못하는 현실의 복잡성도 있을 수 있습니다.
그것을 간단하게 시뮬레이션 하기 위해서 학습데이터의 Y를 다음과 같이 다시 계산해 보겠습니다.
Y = a*X1 + b*X2 + c*X3 + d*X4 + e*X5 + E
새로운 모델의 E는 랜덤 노이즈인데, 여기서는 표준편차(standard deviation)를 5로 설정된 정규분포(Gaussian distribution[4])에서 랜덤하게 샘플링을 했습니다. 정규분포에서 표준편차가 클 수록 노이즈 레벨도 또한 올라갑니다.
자 그럼, 이 노이즈는 모델 학습에 어떤 영향을 끼쳤을까요?
아래 그림에서 보시듯 노이즈가 가미된 데이터에서 회귀 분석은 엉망이 되었습니다 (그림 3). R squared 가 0이면 예측이 실제 값과 아무 상관 없다는 뜻입니다. 학습된 계수(a-e)도 또한 실제 계수와 완전히 다릅니다.
자 이런 상황에 데이터 양이 힘을 어떻게 힘을 발휘하는 지 볼까요? 이제껏 실험은 독립적 샘플이 단 10개만 존재했습니다. 이제 그 수를 50개, 100개, 500개로 늘려보도록 하겠습니다. 그 외에는 이전 실험과 같은 방식으로 모델을 학습하고 성능을 측정해 보았습니다.
우선 학습 데이터가 50개, 즉 5배로 늘어났을 경우의 성능입니다. 예측성능이 완전 랜덤에서 어느정도 추세를 잡는 것이 보입니다 (그림 4).
100개로 늘어났을 경우입니다 (그림 5). 학습된 계수(그림 5B)가 실제와 상당히 유사합니다.
500개까지 늘리자 검증 데이터에서 거의 완벽하게 Y를 예측할 수 있었습니다 (그림 6). 조합계수도 또한 방향 및 크기 양쪽 모두 거의 완벽하게 실제와 잘 맞습니다.
보시다 시피 독립적 데이터가 많을 수록 성능이 눈에 띄게 좋아지는 것을 확인할 수 있습니다.
자, 그럼 이제 노이즈 레벨과 필요한 데이터 양 사이에는 어떤 상관관계가 있을까요? 간단하게 서로 다른 레벨의 노이즈 (노이즈 레벨 1부터 10까지)와 서로 다른 개수의 학습 데이터 수 (10개부터 1000개까지)를 두고 모델을 학습하여 예측 성능(R squared)을 측정했습니다 (그림 7). 노이즈가 낮은 레벨일 경우 (짙은 푸른색 선) 적은 수의 학습 데이터만으로도 높은 성능을 얻었지만 노이즈 레벨이 높은 경우 (옅은 푸른색 선) 1000개의 학습 데이터를 가지고도 0.9 이상의 성능에 도달하지 못했습니다.
비록 여기서 사용된 방법은 딥러닝이나 여타 기계학습에 비해 아주 단순한 방법이지만 이 예제의 데이터에는 아주 이상적입니다. 모델의 가정 (X1-X5를 선형조합하여 Y를 예측함)이 실제 학습 및 검증 데이터를 만들기 위해서 사용된 가정이기 때문입니다. 그러므로 다른 복잡한 알고리즘을 사용한다고 해서 이 상황에서 더 나은 성능을 낼 수는 없을 것입니다. 어떤 알고리즘을 쓰던지 모델이 가진 가정에 실제 데이터가 부합하지 못하면 성능을 내지 못합니다. 그리고 아무리 훌륭한 알고리즘이라도 원칙은, garbage in, garbage out 입니다. 즉, 좋은 데이터 양질의 데이터가 많아야지만 성능을 낼 수 있습니다.
간단한 실험을 통해서 독립적인 샘플의 양이 알고리즘 성능에 크게 영향을 미칠 수 있음을 살펴봤습니다. 이 실험에서는 모델 학습에 사용된 변수의 개수(X1-X5)가 적어 복잡도도 작고, Y를 설명한 데 필요한 모든 변수가 주어져 있습니다. 게다가 정규분포를 가정한 노이즈는 선형 회귀분석에서 아주 잘 다룰 수 있는 형태의 노이즈입니다. 그러나 데이터가 더 복잡한 형태로 주어져 있거나 (즉 변수가 많고), X와 Y가 선형적 관계로 설명할 수 없거나, 노이즈가 크거나 정규분포가 아닌 형태의 것으로 주어지면 데이터도 훨씬 더 많이 필요하고, 학습 모델도 정교하게 준비될 필요가 있습니다. 학습 모델에 대한 부분은 여기서 다루지 않았지만, 어째서 그토록 많은 숫자의 데이터가 필요한지 또 왜 제가 빅데이터를 독립적인 샘플 수로 정의하는지 감이 올 것이라 생각합니다.
References
[1] https://ko.wikipedia.org/wiki/%EC%84%A0%ED%98%95_%ED%9A%8C%EA%B7%80
[2] https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html
[3] https://en.wikipedia.org/wiki/Coefficient_of_determination
[4] https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C%EB%B6%84%ED%8F%AC
안야로
Latest posts by 안야로 (see all)
- 빅데이터: 큰 용량의 역습 – 차원의 저주 (Curse of dimensionality) - October 10, 2017