판별분석 판별분석(Discriminant analysis)은 로지스틱 회귀분석처럼 질적 척도로 이루어진 종속변수를 분류할 때 사용되는 분석 기법이다. 기계학습보다는 통계기반의 데이터 분류 모델에 더 가깝다. 회귀 분석처럼 최소 제곱법을 사용하는 추정방법을 통해 독립변수의 최적 가중치를 구한다. 종속변수의 범주가 두 개일 경우는 일반 판별분석 혹은 두 집단 판별분석(Two-group -)이라 하고, 범주가 세 개 이상일 경우는 다중 판별분석(Multiple -)이라 한다. 또한 범주를 구분하는 결정경계선을 산출하는 방식에 따라 선형 판별 분석(LDA: Linear -)과 이차 판별분석(QDA: Quadratic -)으로 구분된다.
선형 판별분석
선형 판별분석(이하 LDA)은 분류 모델뿐만 아니라 PCA와 같은 차원축소에도 사용된다. PCA와의 가장 큰 차이는 종속변수를 사용하는 지도학습으로 차원 축소를 한다는 점이다. 그래서 차원 축소 성능이 더 우수하다. 종속변수의 범주 간 분별 정보를 최대한 유지시키면서 차원을 축소시키는 방식으로 데이터의 오분류율이 최소가 되는 축을 찾는다.
LDA는 피셔(Fisher)가 개발한 선형 판별함수를 사용한다. 전체 범주의 분류 오차를 최소화하는 선형 판별함수를 도출한 다음 모든 관측치의 분류점수를 도출한다. 분류점수를 통해 해당 관측치가 어느 범주에 속할 것인지를 예측할 수 있다. 선형 판별함수는 집단 내 분산에 비해 집단 간 분산의 차이를 최대화하는 독립변수의 함수를 찾는 것이다. 선형 판별함수의 수식은 선형 회귀분석의 수식과 형태가 동일하다. 판별점수를 구하기 위해 먼저 판별상수를 더해주고, 각 독립변수의 값에 판별계수를 곱한 값을 모두 더해준다. 각 범주에 대한 선형 판별함수가 도출되며, 관측치에 대하여 각 범주별 분류 점수를 계산한다. 그 다음 가장 큰 분류 점수를 갖는 범주로 관측치를 분류해준다.
LDA는 다른 머신러닝 모델처럼 몇 가지의 조건이 충족되어야 한다.
데이터가 정규 분포한다.
각각의 범주들은 동일한 공분산 행렬을 갖는다.
독립변수들은 통계적으로 상호 독립적이다(충족되지 않을 경우, QDA를 사용한다).
선형 판별분석 예시
다음과 같이 독립변수 X1과 X2의 값에 따라 두 개의 집단이 분포되어 있다고 가정한다. 이 두 집단을 가장 잘 나눠줄 수 있는 직선을 만들어 주는 것이 선형 판별함수의 개념이다. 아래의 그림에서는 2번 직선이 두 집단을 가장 잘 나눠준다.
ex) 선형 판별함수의 결정경계선
이러한 최적의 분류선인 결정경계선을 찾아내는 것이 판별분석의 핵심 로직이다. 두 집단의 오분류 크기를 최소화하기 위해 분류선의 각도를 정해주는 함수 z를 만드는 것이다. 최적의 각도를 찾는 원리는 다음과 같다.
선형판별함수의 결정경계선 도출
우선 독립변수 X1만으로 두 집단을 분류할 경우, 오분류의 크기는 α1이 되며, 그리고 X2만으로 분류할 경우의 오분류의 크기는 α2가 된다. X1과 X2 두 변수를 사용하게 되면 각 변수에 각도를 조정할 수 있는 계수값을 조정해주면서 최적의 일차방정식을 도출한다. 오분류 크기 α가 최소화되는 직선의 함수식이 완성되면, 각 관측치의 변수값을 대입하여 분류 점수를 구할 수 있다. 위의 결정경계선 도출 그림에서 볼 수 있듯이, 최종적으로 가장 작은 오분류 영역의 α3을 찾아내어 선형 판별 함수를 도출했다. 이는 두 개의 독립변수로 이차원 공간에서의 예시로, 변수가 늘어감에 따른 선형 판별 함수 도출 과정은 동일하다.
판별 분석도 독립변수들 간의 조합을 통해 최적의 분류식을 만드는 방식이기 때문에, 모든 독립변수를 다 넣는 것보다는 분류에 유의미한 변수를 선택하여 모델을 만드는 것이 좋다. 회귀분석과 같이 전진 선택법, 후진 제거법, 단계적 선택법 등의 변수 선택 방법을 사용하여 모델의 성능을 향상시킬 수 있다. 그 밖에 결측값과 이상치 처리, 분포 보정, 파생변수 생성 방법은 다른 분석 모델 방법과 동일하다.
그렇다면 판별 분석의 분류 점수를 계산하는 방법을 알아보자. 연령과 연수익에 따른 자동차 보유 여부를 예측하는 모델을 만든다고 했을 때, 보통 판별 분석을 실행하면 다음과 같은 결과 값을 확인할 수 있다.
ex) 판별분석 결과
Constant는 선형 판별 함수의 상수를 의미하며, 각 변수에 표기된 값은 계수를 의미한다. 따라서 만약 A라는 사람이 30세에 연수익이 3,000만원이라면, 자동차 보유 범주에 대한 분류 점수는 -118.53 + 1.65X30 + 0.036X3,000 = 38.97이다. 그리고 자동차 미보유 범주에 대한 분류 점수는 -127.86 + 1.54x30 + 0.029×3,000 = 5.34가 된다. 자동차 보유 범주에 대한 점수가 더 높기 때문에, A라는 사람은 자동차 보유 범주로 분류된다.
그리고 자동차 보유와 미보유 범주 예측 분류에 대한 오분류 비율을 확인할 수 있다. 이를 통해 모델의 정확도가 얼마나 높은지 평가한다. 그 밖에 판별 분석 모델의 설명력에 대한 평가 지표로 고유값(Eigenvalue)을 사용한다. 고유값은 집단간 차이의 제곱합을 집단 내 차이의 제곱합으로 나누어 계산한다. 따라서 고유값이 크면 집단간 차이가 크다는 것을 의미하므로 설명력이 높다고 해석할 수 있다. 일반적으로 고유값이 4.0 이상이면 판별 모델로서 설명력이 있다고 판단한다.
이차 판별분석
이차 판별 분석은 선형 판별 분석이 공분산 구조가 많아 다른 범주의 데이터를 잘 분류하지 못한다는 단점을 보완한 방법이다. 범주간의 공분산 구조가 다를 때는 이차 판별 분석을 사용한다. 그리고 이차 판별 분석은 비선형 분류가 가능하다는 장점이 있지만 독립변수가 많을 경우 추정해야 하는 모수가 많아져서 선형 판별 분석에 비해 연산량이 큰 단점이 있다.
이차 판별 분석은 기본적인 원리는 선형 판별 분석과 유사하지만 이름에서 알 수 있듯이 변수에 제곱을 취한 추가적인 변수들을 사용하여 결정 경계선을 곡선의 형태로 만들어준다. 원리를 이해하려면 오분류 기대 비용(ECM: Expected Cost of Misclassification)을 알아야 한다.
오분류 기대비용을 최소화할 때 최적의 C 지점을 찾을 수 있기 때문에 공식에 의해 각 범주를 분류하는 방식은 아래와 같다.
ex) 오분류 총 기대비용
위와 같이 이차 판별분석은 오분류 비용과 각 범주의 분산 차이를 고려하여 이차식으로 결정경계선을 산출한다.
서포트 벡터머신(분류 모델)
서포트벡터머신 (SVM: Support Vector Machine; SVM)은 판별 분석과 같이 범주를 나눠 줄 수 있는 최적의 구분 선(결정경계선)을 찾아내어 관측치의 범주를 예측해주는 역사 깊은 모델이다. 이진 분류에만 사용 가능하다는 단점이 있지만, 로지스틱 회귀나 판별 분석에 비해 비선형 데이터에서 높은 정확도를 보이며 다른 모델들보다 과적합되는 경향이 적어서 인기가 많은 분석 방법이다. 최근에는 인공 신경망 분석 기법이 보편화되면서 인기가 줄어들기는 했지만, 이진 분류에서만큼은 뒤지지 않는 성능과 효율을 갖고 있다. SVM의 개념은 간단하면서도 깊이 들어가면 매우 복잡해진다.
SVM에서 가장 중요한 결정경계선을 만들어내는 원리를 중심으로 살펴보자.
ex) SVM의 범주 분리 선 기준
분리 선 기준 예시에서 ①~③ 분류 선을 살펴보면, 모두 두 집단을 오분류 없이 나눠주고 있다. 그런데 어떤 선이 가장 정확하게 나눠 준 것 일까라는 의문점이 든다. 예시 그림의 아랫 부분을 보면 각 구분 선의 양 쪽으로 대칭의 빈 공간을 표시했다. 육안으로 봐도 ③번의 결정 경계선(Decision boundary)이 가장 넓은 빈 공간을 가지고 있다. SVM은 결정 경계선의 양 쪽의 빈 공간, 즉 마진 (Margin)을 최대화 하도록 만들어졌다.
그림 ③번의 결정 경계선을 확대해서 보면 마진에 검은 두 개와 흰 점 한 개가 맞닿아 있는 것을 알 수 있다. 이렇게 마진과 맞닿아서 결정 경계선의 위치와 각도를 정해줄 수 있는 기준이 되는 관측치를 서포트 벡터(Support vector)라고 한다. 결정 경계선을 지지(Support)해주고 있기 때문이다. SVM은 서포트 벡터만으로 범주의 구분 기준인 결정 경계선을 정하기 때문에 학습 효율이 높은 것이다. 마진은 결정 경계선과 서포트 벡터와의 거리를 의미한다.
마진과 서포트 벡터
기계 학습에서 거리(distance)를 통해 분류나 회귀 모델을 만들 때는 반드시 데이터 정규화나 표준화를 해줘야 한다. 변수마다 스케일이 다르게 되면 모델 성능이 매우 떨어지게 되기 때문이다.
최적의 결정 경계선을 찾기 위해서는 독립변수가 k 개라 했을 때, 최소 K+1개의 서포트 벡터가 필요하다. 그림 13.2에서도 독립변수가 2개이기 때문에 3(2+1)개의 서포트 벡터가 존재하는 것이다. 앞의 예시는 독립변수가 2개인 2차원 상의 결정 경계선을 표현했다. 만약 변수가 3개로 늘어나면, 결정 경계선은 평면(plane)이 된다. 그 이상으로 차원이 증가하면 그림으로 표현할 수 없는 초평면(hyperplane)이 결정 경계선이 된다. 따라서 SVM은 MMH(Maximum Marginal Hyperplane), 즉 최대 마진 초평면을 찾아 범주를 분리하는 분류 방법이라 할 수 있다.
결정경계선의 표현
W는 가중치 벡터를 의미한다. 독립변수의 수에 따라 W = {w1, w2, …, wk}로 이루어진다. X는 각 독립변수, b는 편향값(bias)을 의미한다. 결정 경계선의 값은 0이기 때문에, 경계선 위에 있는 관측치는 0보다 크고, 아래에 있는 0 보다 작다.
이를 응용하여 서포트 벡터들과 맞닿은 위아래 마진의 값을 1과 -1로 정의하면,
각 관측치의 값은 w0+w1x1+w2x2+...+wkxk ≥ ±1이 된다.
결정경계선과 마진값
결정경계선으로부터 마진까지의 거리는 유클리드 거리를 통해 구할 수 있다.
그렇지만 대부분의 데이터는 이상치가 있기 마련이다. 아래와 같이 흰 점 하나가 검은 점 구역에 포함된 경우, 두 범주를 정확하게 나눠주기 위해서는 ①번과 같은 결정 경계선을 만들어야 한다. 하지만 이렇게 이상치를 허용하지 않는 경우 과적합 문제가 발생할 수 있다. 따라서 어느 정도 이상치를 허용해주도록 해줄 필요가 있다. ②번과 같이 두 범주를 정확하게 나누지만, 마진을 최대화하여 과적합을 방지해주는 것이다. 이런 개념을 소프트 마진(Soft margin)이라 하며, 반대로 이상치를 허용하지 않는 것을 하드 마진(Hard margin)이라 한다.
ex) 소프트마진과 하드마진
이를 조정해주는 매개변수로 C와 Gamma가 사용된다. C값을 낮게 설정하면 이상치들이 있을 가능성을 높게 잡아서 ②번과 같은 결정 경계선을 만들어내고, 반대로 C값을 높게 설정하면 ①번과 같은 결정 경계선을 만들어낸다. Gamma는 하나의 관측치가 영향력을 행사하는 거리를 조정해주는 매개변수다. 이는 조금 뒤에 자세히 설명하겠다. 그럼 이러한 이상치 상태가 더 극단적으로 이루어진 데이터라면 어떻게 결정 경계선을 그어야 할까? 아래와 같이 X, Y 축을 기준으로 두 범주가 분포한다고 가정한다.
ex) Linear line을 그리기 힘든 데이터 분포
이러한 데이터 분포를 한 상황에서는 아무리 소프트 마진을 높게 설정하더라도 결정 경계선을 만들기 힘들고 설령 만든다 하더라도 모델 성능이 매우 떨어질 것이다. 그런 경우에 사용하는 것이 커널 기법 (Kernel trick)이다. 커널 기법은 기존의 데이터를 고차원 공간으로 확장하여 새로운 결정 경계선을 만들어내는 방법이다. Polynomial 커널, Sigmoid 커널, 가우시안 RBF 커널 등 다양한 종류의 커널 기법이 있는데, 성능이 좋아 가장 널리 쓰이고 있는 가우시안 RBF(Radial Basis Function) 커널을 알아본다.
가우시안 RBF(Radial Basis Function) 커널
우선 그래프를 자세히 보면 원점을 중심으로 세모 모양의 군집이 가까이 있고 원 모양의 군집은 멀리 떨어져 있다. 따라서 원점과의 거리를 나타낼 수 있는 Z 축을 추가하여 공간을 확장할 수 있다. 이를 하고 Z 와 X 축만으로 표현하면 아래 그림의 왼쪽처럼 두 집단이 이차원 상으로 분리될 수 있도록 나타난다. 이를 X, Y, Z 축 3차원으로 표현하면 그림 오른쪽과 같은 형태를 나타낸다.
ex) 커널 기법
이처럼 기존의 저차원 공간 상에서는 나눠 줄 수 없었던 범주를 고차원으로 확장하여 분류할 수 있도록 유도해주는 것이 커널 기법이다. 이제 이렇게 만들어준 결정 경계선을 다시 X, Y 축 그래프에서 표현해주면 동그란 원형의 결정 경계선이 된다.
ex) 커널기법으로 생성한 결정경계선
Gamma 값을 알아보자. Gamma 값은 관측치가 영향력을 행사하는 거리를 조정해주는 것이라고 했다. 값이 클수록 영향력의 거리는 짧아지게 되고 값이 작을수록 영향력의 거리는 길어지게 된다. 이는 가우시안 분포의 표준편차를 조정해주는 것으로, Gamma 값이 클수록 작은 표준편차를 갖게 된다.
Gamma 값에 따른 가우시안 분포
C값은 이상치에 대한 민감도를 조정해주는 것이기 때문에 결정 경계선의 유연함을 조정해주는 느낌이라면, Gamma 값은 개별 관측치의 결정 경계선 범위를 크거나 작게 만들어주는 느낌이다. 따라서 C 값은 아무리 크거나 작아도 결정 경계선이 하나만 생성되지만, Gamma 값은 커질수록 각각의 관측치에 대한 결정 경계선 범위가 작아져서 결국 여러 개의 결정 경계선이 생기게 된다.
ex) Gamma값에 따른 결정경계선
따라서 SVM 모델을 만들 때는 C 값과 Gamma 값을 잘 조정해가면서 모델의 복잡도를 적정 수준으로 맞춰줘야 한다. 각 조건의 모델의 정확도, 검증 데이터셋의 오류율 증감을 확인해가며 과적합과 소적합 사이의 최적의 모델을 만들어내야 하는 것이다.
KNN(분류, 예측 모델)
K-근접이웃(K-Nearest Neighbors; KNN. 이하 KNN) 모델은 쉽고 직관적인 분류 모델로 알려져 있지만 의사결정나무처럼 연속형 종속변수의 회귀 예측도 가능한 모델이다. KNN은 기계학습 중에서 가장 단순한 모델이라 해도 과언이 아니다. 대부분의 기계학습 방법은 학습 데이터를 먼저 학습하여 모델을 만든 후 예측 데이터에 이를 적용하여 값을 도출해낸다. 하지만 KNN은 학습 데이터의 별도 학습과정이 없다. 미리 저장되어 있는 학습 데이터에다가 예측 데이터를 대조함으로써 직접 결과가 도출되므로 메모리 기반 학습(Memory-based learning)이라고도 불린다.
그 원리를 보면 명칭의 이유를 알 수 있다. 이름에서 알 수 있듯이 KNN은 공간상에 이웃해 있는 관측치의 범주나 값을 통해 결과를 출력한다. 우선 분류 모델을 중심으로 그 원리를 알아보자. 다음은 KNN을 위한 학습 데이터로, 연령과 연소득에 따른 자차보유 여부를 나타낸 산점도다.
KNN을 위한 학습 데이터
이제 여기에 예측 데이터로 3명을 집어넣는다. 각 3명은 세모 모양으로 2차원 공간상에 표현이 될 것이다. 그리고 그 주변에는 자차 보유자도 있고 자차 미보유자도 있다. 이 중에서 가장 가까운 거리에 있는 관측치가 곧 예측하고자 하는 관측치와 동일한 범주일 것이라고 판단한다. 즉, 독립변수들의 값이 비슷하면 범주도 같다는 심플한 사상으로 시작한 모델이 KNN이다. 아래 그림의 ①번 관측치는 가장 가까이 있는 관측치가 검은 점으로 자차 보유자다. 따라서 ①번은 자차 보유자로 분류한다. 동일한 원리로 ②, ③번 관측치는 가장 가까이 있는 미보유자로 분류한다.
ex) 1NN 모델의 분류
이렇게 하나의 근접한 학습 데이터로 분류를 하는 것은 1NN 모델이다. K는 양의 정수로 다양하게 세팅할 수 있다. 통상적으로는 10 이하로 맞춰준다. K를 3으로 설정하면 가장 가까운 공간에 있는 3개 관측치 중과반수의 관측치로 범주를 예측한다. 그래서 이름이 K-근접이웃 분석인 것이다.
아래는 K를 3으로 설정하여 범주를 분류한 것이다. 기존 하나의 근접이웃으로 분류했을 때는 ②, ③번이 자차 미보유자였지만, 세 개의 근접 이웃으로 분류했을 때는 모두 보유자로 분류되었다.
ex) 3NN 모델의 분류
이처럼 KNN은 데이터의 지역 구조(Local structure)에 민감한 특성을 가지고 있다. 근접한 과반수의 범주를 따르다 보니 범주의 분포가 편향되어 있을 경우에는 예측 데이터의 관측치들이 빈도 높은 범주로 강하게 쏠리는 단점이 있는 것이다. 그래서 KNN은 K를 잘 설정해주는 것이 중요하다. 우선 동률의 범주가 생겨 분류를 할 수 없는 상황을 방지하기 위해 이진 분류의 경우 홀수의 K를 설정하는 것이 좋다. K가 너무 크면 전체 범주의 분포의 영향을 많이 받게 되고, 관련이 적은 먼 곳의 데이터가 분류에 영향을 미치게 된다. 그리고 K가 너무 작으면 이상치의 영향을 많이 받고, 패턴이 직관적이지 못하다. 최적의 K를 선택하는 방법은 앞의 의사결정나무에서 검증 데이터로 최적의 나무가지 분기수를 찾아낸 방법과 같다. 교차 검증(cross validation)을 통해 오분류율이 가장 낮아지는 K 수를 탐색하는 것이다. K 수를 1부터 계속 늘려가며, 검증 데이터의 오분류율이 어떻게 변화하는지 관찰한다. 그러면 특정 지점에서 오분류율이 최저점을 찍고 다시 높아진다. 오분류율이 가장 낮았던 지점의 K 수를 선정하면 된다. 보다 정확한 K 탐색을 위해 교차 검증을 여러 번 수행하는 K-fold 교차 검증을 하기도 한다.
ex) 적정 수준의 K 탐색을 위한 교차검증
K를 큰 수로 설정하면 거리가 멀리 있는 관측치의 범주의 영향을 받는다고 했는데, 그럼 멀리 있는 것은 영향력을 적게 받도록 하면 모델의 정확도가 더 높아지지 않을까라는 의문점이 생긴다. 실제로 KNN 알고리즘에서는 거리에 가중치를 줄 수 있다. 기본적으로 세 가지 방법이 있다.
가장 흔한 방법은 d가 이웃 관측치까지의 거리일 때 각각의 관측치에 거리의 역수 1/d 를 가중치로 하는 것이다. 만약 A와의 거리가 5라면 0.2가 되고, 10이라면 0.1이 되는 것이다. 이를 응용하여 거리가 가깝거나 멀수록 가중치의 크기를 조절해 줄 수 있다.
KNN의 가중치 방식에 따른 차이
맨 위의 1+ 공식은 근접한 이웃들의 관측치들은 가중치 값이 비슷하게 유지되다가 거리가 멀어지면 영향력을 확연히 떨어지도록 조정해준다. 그리고 맨 아래의 1⁄2 공식은 근접한 이웃들간에 가중치 값이 큰 차이를 나타내도록 조정해준다. 어떤 가중치가 더 효과적인지는 데이터의 상황에 따라 다르다. 따라서 가중치도 교차 검증을 통해 최적의 알고리즘을 선택해야 한다. KNN은 SVM과 마찬가지로 유클리드 거리 (Euclidean distance)로 계산한다. 피타고라스의 정리와 동일한 개념이다. 다만 두 개의 변수만이 아니라, 여러 개의 변수 (차원)이 있어도 거리 계산이 가능하다.
그리고 KNN 역시 거리를 사용하기 때문에 데이터 정규화나 표준화를 반드시 해줘야 한다. 명목형 독립 변수의 경우에는 0과 1로 더미 변수 처리를하여 사용한다.
종속 변수가 연속형 변수인 경우에는 회귀나무처럼 KNN 회귀를 한다. 원리는 분류 모델과 동일하다. 이웃한 K개 관측치의 평균값을 계산하면 된다. 만약 K가 1이라면 이웃한 하나의 관측치와 동일한 값을 예측하며, K가 5라면 5개 관측치의 평균값을 예측값으로 산출하는 방식이다. 회귀의 경우, K를 너무 적게 설정하면 학습 데이터에 너무 의존된 모델이 되어 일반화가 어려워진다. 그래서 안정된 예측 모델을 만들기 위해서는 학습 데이터셋에서 정확도가 다소 떨어지더라도 K를 3 이상으로 설정해 주는 것이 좋다.
KNN은 쉽고 직관적인 장점이 있다. 하지만 변수가 100개 이상으로 많아지거나, 데이터 양이 커지게 되면 연산량 증가가 다른 모델보다 훨씬 크기 때문에 다소 비효율적이다. 그래서 대량의 데이터를 다루는 분석 프로젝트에는 적절하지 않은 모델이라 할 수 있다. 그리고 분류 모델에서 특정 하나의 범주가 대부분을 차지하고 있는 상황에서는 분류가 잘 되지 않는 단점이 있다.
시계열 분석(예측모델)
시계열 분석은 관측치의 통계량 변화를 시간의 흐름에 따라 순차적(Sequentially)으로 데이터화하고 현황을 모니터링하거나 미래의 수치를 예측하는 분석 방법이다. 주가 전망, 수요 예측 등 무수히 많은 분야에서 사용되기 때문에 그 기법이 매우 다양하게 발전되어왔다.
시계열 분석의 목적은 크게 탐색(Explanation)과 예측(Prediction)으로 나눌 수 있다. · 탐색 목적: 외부 인자와 관련된 계절적인 패턴, 추세 등을 설명하고 인과관계를 규명한다. · 예측 목적: 과거 데이터 패턴을 통해 미래의 값을 예측한다.
시계열에서 한 시점의 관측 결과 X는 시간에 따라 변동하는 값이므로 Xt로 나타낸다. 그리고 Xt는 신호와 잡음으로 이루어져 있으므로 다음과 같이 표현한다.
신호와 잠음의 개념을 좀 더 세부적으로 나누면 수준, 추세, 순환성, 계절성, 잡음으로 나눌 수 있다.
· 수준(Level): 시계열의 평균값 · 추세(Trend): 장기 변동 요인으로써 강한 외부요인이 없는 한 지속되는 경향성 · 순환성(Cycle): 불규칙적이며 반복적인 중기 변동 요인 · 계절성(Seasonality): 1년(12개월)의 기간 동안의 주기적인 패턴 · 잡음(Noise): 일정한 규칙성이 없는 무작위적인 변동
시계열의 각 요소 시각화: 시계열 분해
회귀 기반 시계열 분석
비즈니스 분야에서 주로 사용되는 시계열 분석 기법은 회귀 기반 방법과 지수 평활법 그리고 ARIMA 모델 방법이 있다.
회귀 기반 모델은 예측하고자 하는 시점 t의 값이 종속 변수가 된다. 그리고 t 시점에 해당하는 요소(해당 요일, 월 등)들이 독립 변수가 된다. 물론 요일, 월 등의 변수는 실제로는 더미 변수로 변환해야 모델을 학습시킬 수 있다.
해당 시점에 대한 요일이나 월 등에 대한 정보를 독립 변수화함으로써 시즌성이나 순환성을 모델에 반영할 수 있다. 그럼 점점 값이 증가하거나 감소하는 추세성을 반영하려면 어떻게 해야할까? 시계열이 시작하는 기준 시점으로부터의 경과일을 독립 변수화하면 된다. 예를 들어 시계열 시작일이 1월 1일이면, 1월 20일은 20이 되고, 3월 5일은 63이 되는 것이다. 이러한 값을 독립 변수로 넣어주면, 그림 13.37의 왼쪽 추세처럼 선형적으로 상승하는 시계열을 설명하는 모델을 만들 수 있다.
선형 추세와 비선형 추세
하지만 오른쪽 그림처럼 비선형적인 경우에는 일반 선형 회귀식으로 표현하는 것이 어렵다. 앞에서 배운 회귀 분석을 떠올려보면 비선형 추세의 경우 다항 회귀를 하여 모델적합성을 향상시킬 수 있다. 추세가 지수적으로 증가하는 경우 다음 식과 같이 해당 독립 변수에 제곱을 취하여 회귀 선을 보정해 주는 것이다.
또는 종속 변수나 독립 변수에 로그를 취해주어 비선형적 관계를 적합시킬 수 있다. 로그 변환을 하기 위해서는 모든 관측치의 값이 0보다 커야 한다. 그렇기 때문에 만약 변수에 0이 포함되어 있는 경우에는 로그 변환을 할 때 1을 더해주는 변환을 해줘야 한다. 종속 변수를 로그 변환해주었을 때는 다른 일반 선형 모델과 비교하거나 예측값을 해석할 때 역산하여 기준을 맞춰줘야 한다. 그리고 이 방법은 과적합의 위험이 있기 때문에 과도한 변수 변형은 모델의 예측력을 저하시킬 수 있으므로 주의해야 한다.
회귀 모형 기반의 시계열 분석의 장점 중 하나는 외부 요소를 변수로 추가해 주는 것이 용이하다는 것이다. 예를 들어 A라는 인터넷 쇼핑몰의 수요 예측을 위한 시계열 분석을 한다고 해보자. A 쇼핑몰은 부정기적으로 20% 할인 행사를 진행한다. 20% 할인 행사를 진행할 때는 수요가 확실히 증가하는데, 정기적으로 행사를 하는 것이 아니기 때문에 일반 시계열 분석의 시점 변수로는 적용이 어렵다. 따라서 해당 시점에 할인 행사 여부(Y/N) 정보를 알 수 있는 독립 변수를 추가해 주면 할인 행사에 따른 수요 증가분을 모델에 적용할 수 있다. 또는 업태 특성에 따라 공휴일이나 명절 등이 수치 변화에 영향을 준다면 독립 변수로 추가할 수 있다. 그러면 이러한 부정기적인 노이즈 요소를 최소화할 수 있다.
그 밖에 시계열 변화에 영향을 줄 수 있는 외부 요소를 독립 변수로 함께 넣을 수 있다. 기업의 제품 수요와 같은 경우에는 날씨에 영향을 받는 경우가 많으므로 날씨 정보를 넣어줄 수 있다. 그리고 해당 산업 분야의 경제 지수, 환율, 경쟁 지수, 국민 저축률, 출산율 등 다양한 외부 요소를 독립 변수로 활용할 수 있다. 주의할 점은 예측 데이터에도 이러한 데이터를 넣어주는 것이 가능해야 한다. 날씨 같은 경우는 일주일 정도의 예측 날씨 정보를 구할 수 있고, 경제 지표 같은 경우도 여러 기관에서 예측 수치를 제공하기 때문에 이를 활용하여 시계열 분석 및 예측을 할 수 있다.
또한 전달 혹은 3달 전이나 전년도 동일 등에 대한 과거 기간의 수치를 독립 변수로 넣어 주면 추세 요소를 보다 정교하게 반영할 수 있다. 이는 자기회귀(Autoregression) 요소를 반영하는 개념으로써 시차 이동에 따른 수치 변화에 대한 설명력을 보다 높일 수 있다. 이러한 요소들을 고려한 회귀 모델 기반 시계열 분석의 데이터셋은 다음과 같은 형식을 취한다.
ex) 회귀모델 기반 시계열 분석을 위한 학습 데이터
자기 회귀 요소 변수는 전달의 수치가 유의미할 수도 있고, 6개월 전, 12개월 전 등 유의미한 변수가 될 수 있는 경우의 수가 매우 많다. 그렇기 때문에 과거 시차 중 언제 시점이 종속 변수의 수치에 영향을 주는지 쉽게 확인하기 위해 활용하는 기법이 있다.
자기 상관 함수인 ACF(Autocorrelation function)를 이용하면 시계열 데이터의 주기성을 수치적으로 확인할 수 있고, 어떠한 특정 시차가 어떠한 영향을 주는지 알 수 있다. ACF는 자기 상관 함수로써 Y 값과 각 시점과의 상관계를 0.05 유의 수준 안에서 나타낸 것이다. 점선으로 되어있는 가로선을 벗어나면 해당 시차가 Y 값과 상관성이 있다는 것을 의미한다. 이는 다소 주관적인 기준으로, 상황에 따라 살짝만 나온 지점은 무시하기도 한다. 선 막대가 0보다 크면 양의 상관 관계, 작으면 음의 상관 관계가 있음을 나타낸다.
ex) ACF
시차 0은 Y 값을 나타내므로 당연히 1.0의 상관관계를 나타내고, 시차 1과 2가 어느 정도 양의 상관성을 보이는 것을 알 수 있다. 그리고 시차 6은 약간의 음의 상관성을 나타내는데, 그 수치가 크지 않기 때문에 무시할 수 있다. 그리고 시차 12가 높은 상관성을 나타내기 때문에 해당 시계열 데이터는 1년마다 주기성이 있다고 해석할 수 있다. 이러한 분석을 통해 유의미한 특정과거 시점을 선택하여 독립변수로 사용할 수 있다.
시계열 데이터에 추세가 존재할 경우, 근접한 시차에 대한 상관성은 높은 양의 값을 갖게 되는 경향이 있다. 오늘의 수치가 어제의 수치와 비슷하고 어제의 수치는 그제의 수치와 비슷하기 때문이다. 그래서 추세가 있는 데이터의 경우 그림 13.38처럼 1, 2와 같은 근접한 시차의 ACF값이 높은 양의 상관성을 갖는 것이다.
이와 비슷한 개념으로 편자기상관함수인 PACF(Partial autocorrelation function)가 있다. Y의 시점과 특정 4x 시점 이외의 모든 시점과의 영향력을 배제한 순수한 영향력을 나타내는 척도다. 다른 시점들과의 다중공선성을 제거한 단두 시점과의 관계를 수치화한 것이다. 시계열 분석을 할 때는 ACF와 PACF를 같이 봐야 한다. 이 두 기준은 AR, MA 등의 분석 방법에서 중요하게 사용된다.
모델 학습과 해석, 예측 방법은 기존의 회귀 분석과 동일하다. 변수간의 다중공선성과 유의도를 고려하여 변수 선택을 하고, 계수값, R 값 등을 통해 모델을 해석하고 튜닝해 나가면 된다.
ARIMA 모델
ARIMA는 Auto regressive integrated moving average의 준말이다. 즉, 이동평균을 누적한 자기회귀를 활용하여 시계열 분석을 하는 것이다. 따라서 먼저, 자기회귀(AR)모델과 이동평균(MA)모델을 이해하여 ARIMA 모델에 적용해야 한다.
AR, MA 모형 분석을 시작하기에 앞서 시계열 데이터가 정상성(Stationarity)을 가지도록 변환을 해주어야 한다. 정상성이란 모든 시점에 대해서 일정한 평균을 갖도록 하는 것이다. 즉, 추세나 계절성이 없는 시계열 데이터로 만들어주는 것이다. 유의할 점은 시계열 데이터의 주기성은 정상성과 관련이 없다. 주기의 고점이나 저점을 알 수 없고 고정된 길이를 갖고 있지 않기 때문이다. 정상성을 나타내는 시계열은 평균과 분산이 안정되어 있는 상태이다.
추세와 계절성이 있는 시계열 vs 추세와 계절성이 없는 시계열
시계열 데이터에 추세가 있어서 평균이 일정치 않으면 차분 (difference)을 해준다. 차분은 연달아 이어진 관측값들의 차이를 계산하여 그 변화 차이를 제거하는 것이다. 다시 말해, 현재 상태의 값에서 바로 전 상태의 값을 빼주는 것이다. 이러한 과정을 통해 모든 기간의 평균을 일정하게 해준다. 추세만 차분하는 것은 1차 차분이나 일반 차분 (Regular difference)이라 한다. 시계열에 계절성도 존재하는 경우에는 계절성의 시차인 n 시점 전 값을 빼주는 2차 차분이나 계절 차분 (Seasonal difference)을 해준다.
ex) Transformation을 통한 증가하는 분산 완화
시계열 데이터의 분산이 일정치 않을 때는 변환 (Transformation)을 해줘야 한다. 그림 13.40과 같이 분산이 점점 커져가는 형태를 가질 경우, 각 시점의 값에 로그나 루트를 씌워주어 분산의 크기를 완화시켜주는 것이다. 이러한 방법은 분산을 없애주지는 못하지만, 시점간의 편차를 감소시키기 때문에 시계열 분석에서 유용하게 사용된다. 앞에서 잠시 자기회귀라는 용어를 언급했다. 이는 말 그대로 자기 자신에 대한 변수의 회귀라는 뜻이다. 현재 시점의 Y 값과 t_-k 시차들 간의 관계만으로 시계열 데이터를 분석하는 것을 자기회귀모델 (Autoregressive model, AR)이라 한다. 회귀 기반 시계열 분석에서 시차 변수만 사용한 개념이라고 이해하면 된다. AR 모델을 표현할 때는 하나의 시차만 사용한 경우 AR(1) 모델, 세 개의 시차만 사용한 경우 AR(3) 모델이라 부른다.
이동평균 (Moving average, MA) 모델은 추세와 주기를 측정하기 위해 일반적으로 사용하는 이동평균과는 다른 개념이다. 용어가 같아서 이동평균 모델을 처음 들었을 때 혼란이 올 수 있다. 시계열 예측 모델로 사용되는 MA 모형은 관측값의 이전 시점의 연속적인 예측 오차 (Forecast error)의 영향을 이용하는 방법이다. MA 모델도 AR 모델처럼 MA(n)으로 표현한다.
이러한 AR 모델과 MA 모델은 각각 사용하는 시점의 수에 따라 AR(p), MA(q) 모형으로 정의할 수 있다. 이 두 모델을 결합하면 자기회귀이동평균 모델인 ARMA(P, q) 모델이 된다. 과거 시점의 수치와 변동성을 모두 활용하여 보다 정교한 예측을 하는 것이다. 하지만 보통 시계열 데이터는 추세를 가지고 있으며 일정한 패턴을 가지고 있지 않은 경우가 많다. 대부분 불안정 (Non-Stationary)한 패턴을 가지고 있기 때문에 ARMA(P, q) 모델만으로는 부족한 면이 있다.
그래서 ARMA(p, q) 모델 자체의 불안정성을 제거하는 기법을 결합한 모델이 바로 ARIMA 모델이다. ARIMA 모델은 과거의 데이터가 가지고 있던 추세까지 반영한다. 시계열의 비정상성을 설명하기 위해 시점간의 차분을 사용하는 것이다. AR 모델의 자기회귀 부분의 차수, MA 모델의 이동평균 부분의 차수 그리고 1차 차분이 포함된 정도를 포함하여 ARIMA(p, d, q)로 표현한다.
· p: AR 모델의 자기회귀 부분의 차수 · d: 1차 차분이 포함된 정도 · q: MA 모델의 이동편균 부분의 차수
이를 요약하면 AR(p) 모델은 p만큼의 과거 값들을 예측에 이용하는 것이고 MA(q) 모델은 q만큼의 과거 오차 값들을 예측에 이용하는 것이다. 따라서 ARMA(P, q) 모델은 p만큼의 과거 값들과 q만큼의 과거 오차 값들을 예측에 이용한다. 그리고 ARIMA(P, d, q) 모델은 시계열 데이터를 d회 차분하고 p만큼의 과거 값들과 q만큼의 과거 오차 값들을 통해 수치를 예측하고 차분한 값을 다시 원래의 값으로 환산하여 최종 예측값을 산출한다.
ARIMA(p, d, q) 분석을 할 때는 우선 시각화와 ACF 차트를 통해 시계열 데이터가 정상 시계열인지 확인한다. 시계열 데이터에 추세가 있어서 평균이 일정치 않으면 차분을 하여 차분 계수 d를 구한다. 그 다음 ACF, PACF 값으로 p값과 q값을 설정하고 최종의 ARIMA(P, d, q)를 적합하여 모델을 만든다.
시계열 분석의 예측값에 대한 평가는 실젯값과 예측값의 차이를 측정하여 모델의 적합도와 예측력을 평가한다. 일반적으로 RMSE, MAE, MAPE 등의 기준을 사용한다.
슬라이딩 윈도우를 활용한 시계열 모델 검증
시계열 데이터는 검증할 데이터가 적은 편이기 때문에 슬라이딩 윈도우 기법을 사용하여 학습 및 검증 데이터를 증폭시킬 수 있다. 시점을 중복하여 복제하면 시계열 전체 구간을 학습과 예측으로 사용하여 보다 정밀한 모델 검증 및 평가가 가능하다.
k-means 클러스터링(군집 모델)
k-means 클러스터링 분석 방법은 앞에서 다루었던 KNN(K- Nearest Neighbors)과 비슷한 듯 하면서도 전혀 다른 모델이다. 우선 KNN은 지도 학습이고 k-means 클러스터링은 비지도 학습이다. 그렇기 때문에 k-means 클러스터링은 미리 가지고 있는 정답(레이블) 없이 데이터의 특성과 구조를 발견해내는 방식이다. 군집화는 기업에서 수행하는 고객 세그먼트 분석과 유사하다. 예를 들어 성별, 연령, 지역, 구매 패턴 등의 특성이 비슷한 고객들끼리 묶어서 군집으로 분류하고 분류된 군집에 맞게 마케팅 전략을 수립하는 것이다.
k-means 클러스터링은 군집화 알고리즘 중에서 구현 방법이 매우 간단하고 실행 속도가 빠르기 때문에 많이 사용된다. K-means 방식 외에 DBSCAN, Mean-shift clustering, Agglomerative hierarchical clustering 등 다양한 클러스터링 기법이 있다. 각 군집을 나누는 방식이 다르기 때문에 데이터의 상황에 따라 알맞은 알고리즘을 선택하여 군집화를 해야 한다. 이 책에서는 k-means를 중심으로 클러스터링 방법을 설명하겠다.
k-means 클러스터링이라는 이름에서 k는 분류할 군집의 수를 뜻한다. K를 3으로 설정하면 전체 관측치를 3개의 군집으로 분류한다. Means는 각 군집의 중심(Centroid)을 뜻한다. 군집의 중심점을 각 관측치들 간의 거리 평균 값으로 구하기 때문이다. 중심점과 군집 내 관측치 간의 거리를 비용 함수로하여, 이 함수 값이 최소화되도록 중심점과 군집을 반복적으로 재정의해준다. 즉 k 개의 중심점을 찍어서 관측치들 간의 거리를 최적화하여 군집화를 하는 모델이 k-means 클러스터링이다. 이 역시 관측치와 중심점 간의 거리를 사용하기 때문에 데이터 표준화나 정규화를 꼭 해줘야 한다.
k-means 클러스터링의 과정 • 1단계: k 개의 중심점을 임의의 데이터 공간에 선택 • 2단계: 각 중심점과 관측치들 간의 유클리드 거리를 계산 • 3단계: 각 중심점과 거리가 가까운 관측치들을 해당 군집으로 할당 • 4단계: 할당된 군집의 관측치들과 해당 중심점과의 유클리드 거리를 계산 • 5단계: 중심점을 군집의 중앙으로 이동 (군집의 관측치들 간 거리 최소 지점) • 6단계: 중심점이 더 이상 이동하지 않을 때까지 2~5단계 반복(Iteration)
우선 ①번과 같은 형태로 2차원 상에 관측치가 존재한다고 해보자. 얼핏 보기에도 3개의 군집으로 분류가 가능해 보인다. 이제 k 를 3으로 설정하면 k-means 클러스터링 모델은 ②번과 같이 임의의 위치에 군집의 중심점(별표)을 지정해준다. 그러면 각 중심점과 가까운 관측치들을 군집으로 분류한다. ②번은 임의의 중심점을 찍은 상태이기 때문에 아직 군집이 제대로 분류되지 않았다.
k-means 클러스터링의 중심점 이동
다음으로 각 군집의 가운데로 중심점을 이동시킨다. ③번을 보면 각 중심점을 나타내는 별표가 이동한 것을 알 수 있다. 그리고 이동한 중심점에 맞춰 군집을 다시 분류한다. ③번이 ②번보다 군집을 더 깔끔하게 분류되어 보인다. 이러한 과정을 반복하면 ④번과 같이 중심점이 더 이상 이동하지 않는 상태가 된다. 전체 관측치를 3개의 군집으로 깔끔하게 분류한 것을 확인할 수 있다.
하지만 알고리즘의 특성상 단점이 존재한다. 다음의 그림처럼 데이터가 ①번과 같은 값을 가진다고 가정하자.
k-means 클러스터링의 Local minimum 현상
합리적으로 생각했을 때, 오른쪽 군집과 왼쪽 군집으로 군집화를 해주는 것이 맞아보인다. 그런데 만약 2개의 k 중심점을 설정했을 때, ②번과 같은 위치에 초기 중심점이 생겼을 때, 위쪽 중심점은 위에 있는 관측치들과 가장 가깝고, 아래쪽 중심점은 아래에 있는 관측치들과 가장 가깝게 된다. 따라서 ③번과 같이 위쪽과 아래쪽으로 군집화가 되는 일이 발생한다. 이러한 현상을 지역 최솟값(Local minimum) 문제라 한다.
Local minimum과 Global minimum
앞에서 k-means 클러스터링은 중심점과 군집 내 관측치간의 거리를 비용 함수로 하여, 이 함수값이 최소화되도록 중심점과 군집을 반복적으로 재정의해준다고 했다. 중심점과 군집 내 관측치의 거리 합이 최소화됐을 때 클러스터링 알고리즘이 종료되기 때문에 정말로 거리 합이 최소화되는 전역 최솟값(Global minimum)을 찾기 전에 지역 최솟값에서 알고리즘이 종료되는 것이다. 이러한 지역 최솟값 문제를 방지하기 위해 초기 중심점 선정 방법을 다양하게하여 최적의 모델을 선정할 수 있다. 초기 중심점 선정 방법은 랜덤 방식, 중심점들을 가능한 한 서로 멀리 떨어져서 설정하는 방법, 중심점이 밀집되지 않도록 하는 k-means++ 등 다양한 방법이 존재한다.
그럼 적절한 k의 수는 어떻게 선정할 수 있을까? K 수를 정하는 방법은 대표적으로 세 가지가 있다. 첫 번째는 비즈니스 도메인 지식을 통한 개수 선정이다. 이는 정성적인 선정 방법으로 데이터적인 근거는 다소 부족할 수 있지만, 클러스터링 자체가 해석을 통한 비즈니스 인사이트 도출이 중요하기 때문에 많은 기업에서 이 방법을 많이 사용하고 있다.
두 번째는 엘보우 기법(Elbow method)이다. 이는 군집 내 중심점과 관측치간 거리 합(Inertia value)이 급감하는 구간의 k 개수를 선정하는 방법이다. 군집의 수가 k 개였을 때보다 k+1개일 때 거리 합이 급감했다는 것은 유사한 속성의 관측치들끼리 잘 묶였다는 것을 뜻한다. 따라서 k가 더 증가해도 거리 합이 별로 줄어들지 않을 때는 k를 더 증가시킬 필요가 없다는 것을 의미한다.
ex) Elbow method
K 수가 3이 될 때까지 Inertia value가 급감하다가 4 이후부터는 큰 차이가 없다. 이를 통해 k 수를 3으로 설정하는 것이 적절하다는 판단을 할 수 있다. 세 번째로 실루엣 계수(Silhouette coefficient)를 활용하여 적정 k 수를 찾을 수 있다. 실루엣 계수는 군집 안의 관측치들이 다른 군집과 비교해서 얼마나 비슷한지를 나타내는 수치다. 동일한 군집 안에 있는 관측치들간의 평균 거리와 가장 가까운 다른 군집과의 평균 거리를 구해 실루엣 계수를 구한다.
• a1: i와 동일한 군집에 속한 관측치들 간의 평균 거리
• b1: i와 다른 군집 중 가장 가까운 군집까지의 평균 거리
수식을 보면, 동일한 군집 내 관측치들 간 평균 거리가 집단간 평균 거리보다 짧을수록 실루엣 계수는 높아진다. 범위는 -1부터 1의 값을 가지며, 실루엣 계수가 1에 가까울 수록 K 수가 적합하게 나눠졌음을 의미한다. 예를 들어, ai 값이 0.1인 경우와 bi 값이 0.5인 경우라면 (0.5-0.1)/0.5 = 0.4/0.5 = 0.8이 된다. K 값을 1부터 증가시켜가며 실루엣 계수가 최대치가 될 때를 찾아 K 값을 찾는 것이다.
그런데 아무리 K 값을 잘 지정해주었다 해도 데이터의 형태가 k-means 클러스터링 알고리즘에 적합하지 않으면 효과적인 군집화를 할 수 없다. 만약 데이터가 다음 그림과 같이 두 개의 동심원과 같은 형태를 가지고 있다면, K를 2로 설정했을 경우 안쪽의 원과 바깥쪽의 원으로 군집을 나누지 못하고 원들을 반으로 갈라서 군집화를 하게된다.
k-means 클러스터링의 잘못된 군집화
보여진 것처럼 k-means 클러스터링은 중심점과 관측치 간의 거리를 이용하기 때문에 이러한 형태의 데이터는 효과적으로 분류할 수 없다. 그렇다면 어떤 방식으로 군집화 알고리즘을 수행하면 작은 원과 큰 원을 잘 나눠줄 수 있을까? 우리가 두 원을 서로 다른 군집으로 인식하는 이유는 관측치들의 밀도가 높은 덩어리를 하나의 군집으로 생각하기 때문이다. 이러한 밀도 기반의 원리를 이용한 클러스터링 기법이 DBSCAN (Density-based spatial clustering of applications with noise)이다.
DBSCAN은 별도의 k 수 지정이 필요없다. 관측치들의 밀도를 통해 자동으로 적절한 군집의 수를 찾는다. 밀도를 측정하려면 두 가지 기준이 필요하다. 첫번째로 기준 관측치로부터 이웃한 관측치인지 구별할 수 있는 거리 기준 (epsilon)이 필요하다. 거리 기준 값이 크면 데이터 공간상 멀리 있는 관측치도 이웃한 관측치로 인식한다. 두번째로 거리 기준 내에 포함된 이웃 관측치 수 (minPts)에 대한 기준이 필요하다. 특정 거리 안에 몇 개의 이상의 관측치가 있어야 하나의 군집으로 판단할 것인가를 결정하는 것이다.
DBSCAN의 군집화 원리
예를 들어 거리 기준값 ε(epsilon)을 0.1로 설정하고, 이웃 관측치 수를 3으로 설정했을 때 그림 13.47을 보면 처음번 관측치의 거리 기준 안에 3개의 관측치가 포함되어 있다. 그다음 2번 관측치로 넘어가면서 거리 기준 안에 3개의 관측치가 포함되어 있는지 확인한다. 기준이 충족될 경우 해당 관측치들은 하나의 군집으로 분류된다. 7번과 같이 멀리 떨어져 있고 주변에 이웃한 관측치가 3개 이상 없는 관측치는 이상치로 분류된다. 그리고 3번을 제외한 군집의 끝에 위치한 관측치들을 경계선(Border) 데이터라 한다.
이처럼 DBSCAN은 기준 밀도를 가진 관측치들을 기준으로 군집화를하기 때문에 U자형과 같이 오목한 데이터나 H와 같은 모양을 띠는 데이터 분포도 효과적으로 군집화할 수 있다. 또한 군집이 명확하지 않은 이상치를 잘 분류해낼 수 있다. 하지만 DBSCAN은 k-means 방식에 비해 분류에 필요한 연산량이 많다. 특히 독립변수가 늘어날수록 필요한 연산량이 급증하기 때문에 변수를 적절히 설정해 주어야 한다. 그리고 데이터 특성을 모를 경우에는 적절한 파라미터값을 설정하는 것이 어렵다는 단점이 있다.
ex) DBSCAN을 통한 군집화
군집화 모델은 분류된 각 군집의 특성을 파악하여 군집에 이름을 붙여서 그 특징을 정의하는 작업이 무엇보다 중요하다. k-means 클러스터링에 사용한 독립 변수들이 다른 군집들에 비해서 어떠한 특성을 가지고 있는지를 확인하여 각 군집을 명확하게 정의해야 한다. 그 다음 정의한 각 군집의 특성에 맞는 비즈니스 전략을 수립해야 한다.
추천 모델
제품이나 콘텐츠를 추천하는 것은 아주 오래 전부터 진행되어왔다. 우리가 옷가게에 들어갔을 때, 점원이나에게 맞는 옷을 추천해주는 것도 사람이 직접 하는 추천 시스템이라 할 수 있다. 전통적으로 추천의 유형은 다음의 세 가지로 구분할 수 있다.
• Editorial and hand curated: 전문가가 직접 아이템을 평가하여 추천하는 시스템. (예: 미술관 큐레이터, 전문가 선정 필수 아이템 목록 등) • Simple aggregates: 대중에게 인기 있는 아이템, 신규 아이템 등 특정 조건의 아이템을 추천하는 시스템. (예: 인기 TOP 10, 최근 업로드 영상 등) • Tailored to individual users: 각 개인의 특성, 선택한 아이템에 맞춰 추천하는 시스템. (예: 아마존, 넷플릭스의 개인화 추천 등)
제품이나 콘텐츠 간에는 우리가 놓치고 있는 연관 계들이 존재하고 있고, 이러한 관계를 수학적으로 도출하여 효과적으로 추천을 할 수 있도록 하는 모델이 추천 시스템이다. 특정 시점에 특정 고객이 관심 가질 만한 제품이나 콘텐츠를 찾아주는 것이 핵심이다. 추천 시스템의 대표적 방법으로는 연관 규칙 (Association rule), 협업 필터링 (Collaborative filtering), 콘텐츠 기반 필터링 (Contents-based recommendation) 등이 있다. 장바구니 분석이라고도 알려져 있는 연관 규칙은 비교적 단순한 알고리즘으로 직관적이며 효과도 괜찮은 편이다. 최근에는 협업 필터링이 더 효과적이기 때문에 인기가 많이 줄었지만, 추천 시스템의 기본 사상을 이해하기 위해서는 관련 내용을 알고 있어야 한다.
추천시스템의 분석 기법 종류
연관 규칙
연관 규칙 분석은 A라는 제품을 구매한 사람은 B라는 제품도 구매할 확률이 높다는 결과를 이끌어내는 모델이다. 예를 들어 삼겹살과 양파를 구매한 사람은 버섯을 구매할 가능성이 높다는 결론을 도출하는 것이다. 이를 위해서는 과거 고객들의 구매 이력(트랜잭션)을 기반으로 추천 점수를 구해야 한다. 연관 규칙 분석의 대표적 알고리즘으로는 Apriori, FP-Growth (Frequent Patterns by pattern fragment Growth), DHP (Direct Hashing and Pruning) 알고리즘 등이 있다.
• Apriori: 아이템들의 조합에 대한 경우의 수를 최소화하여 처리 속도 효율을 높인 알고리즘. • FP-Growth: 트리 기반 알고리즘으로, 항목 간 비교 계산을 최소화하여 처리 속도 효율을 높인 알고리즘. • DHP: 항목 집합의 개수가 2개인 트랜잭션을 먼저 해시 테이블로 만들어 처리 속도 효율을 높인 알고리즘.
구매 이력(transaction) 데이터를 통해 연관규칙 분석의 원리에 대해 설명한다. 총 10건의 구매 이력이 있으며, A부터 E까지 총 5개의 아이템이 판매되었다. 각 거래마다 한 가지 아이템만 구매한 경우도 있고, 4개의 아이템을 한꺼번에 구매한 경우도 있다.
ex) Transaction Data
품목간의 연관 관계 계산은 각 품목 조합의 출현 빈도를 이용한다. 연관 규칙 분석을 알아보기 위해 먼저 조건절과 결과절이라는 용어를 짚고 넘어가자. 상품 A를 구매한 사람은 B도 구매한다고 했을 때, A를 구매한 현상은 조건절(Antecedent)에 해당되고, B를 구매한 현상은 결과절(Consequent)에 해당된다. 즉, 조건은 IF이므로 ' ~ 을 구매한다면'이 되고 결과절은 THEN으로서 '~ 도 구매한다' 가 되는 것이다. 이는 (A → B)로 표현할 수 있다.
연관 규칙 분석은 다음의 세 가지 핵심 지표를 통해 품목 조합 간의 연관성의 수준을 도출한다. • 지지도(Support): 아이템 A와 B를 동시에 포함하는 거래가 발생할 확률 • 신뢰도(Confidence): 아이템 A가 포함되는 거래에 B가 포함될 확률 • 향상도(Lift): 아이템 A와 B가 독립적으로 판매되는 것 대비 함께 판매되는 비율
지지도는 전체 구매횟수 중에서 해당 아이템 혹은 조합의 구매가 얼마나 발생하는지를 나타낸다. 다시 말해 조건절 A가 일어날 확률을 뜻하기 때문에 다음과 같이 표현된다.
이를 벤다이어그램으로 표현하면 다음과 같다.
지지도 벤 다이어그램
구매내역 데이터 예시를 통해 각각의 아이템이 몇 번씩 판매됐으며 지지도는 어떻게 되는지 확인한다.
각 아이템의 구매이력과 지지도
예시의 전체 구매 이력 횟수는 10회이므로, 각 아이템의 지지도는 구매 이력 횟수를 10으로 나눠준 값이 된다. 아이템 A는 3번의 구매 이력에 포함되므로 0.3의 지지도를 갖는다. 이처럼 지지도를 통해 구매 빈도가 높은 아이템이나 조합을 판별할 수 있다. 만약 전체 10,000번의 구매 내역 중에 단 한 번만 판매된 아이템이 있다면, 추천으로서 큰 의미가 없을 것이다. 이러한 방법을 응용하여 아이템의 조합도 지지도를 구할 수 있다. 2개씩의 조합에 대한 지지도는 다음과 같다.
아이템 2개씩의 조합에 대한 지지도
표를 통해 어떤 조합으로 판매가 많이 되고 있는지 확인할 수 있다. B, D 조합과 D, E 조합이 0.4의 지지도로 가장 높다. 이런 식으로 3개, 4개 조합의 양을 늘려가며 모든 조합의 지지도를 구할 수 있다. 그러나 이처럼 모든 조합에 대한 지지도를 계산하다 보면 계산량이 기하급수적으로 늘어나게 된다.
Apori 알고리즘은 계산량의 증가를 막기 위해 지지도에 대한 제한을 준다.
신뢰도는 아이템(조합) A가 판매됐을 때 B 아이템(조합)도 함께 포함되는 조건부 확률이다. 그렇기 때문에 우유와 시리얼과 같이 연관성이 강한 조합은 높은 신뢰도를 갖게된다. 신뢰도는 다음과 같이 표현 가능하다.
신뢰도 벤 다이어그램
지지도는 전체 거래 중에서 특정 조합이 얼마나 자주 발생하는지의 기준이고, 신뢰도는 아이템(조합) 조건절 IF가 주어졌을 때, 결과절 THEN이 얼마나 자주 발생하는 기준이라는 차이를 혼동하지 않도록 주의해야 한다. 예시의 구매 이력을 통해 다음 조합의 신뢰도를 확인한다.
ex) 신뢰도 계산
첫 번째 A 아이템의 지지도는 0.3이고, B가 함께 팔리는 경우의 지지도는 0.2다. 신뢰도는 A가 팔릴 때 B도 같이 팔리는 비율을 나타내므로, 0.2를 0.3으로 나눠준다. 따라서 신뢰도 P(A→B)는 0.67이 된다. 조건절의 지지도는 결과절의 지지도보다 항상 클 수밖에 없기 때문에 신뢰도는 1보다 클 수 없다. 이를 응용하여 아이템 조합의 신뢰도 역시 구할 수 있다. 주의할 점은 P(A→B)와 P(B→A)는 다를 수 있다는 것이다. 결과절의 지지도는 동일하지만, 조건절의 지지도는 A=0.3, B=0.6으로 다르기 때문이다. 상관관계와 인과관계가 다른 것과 같은 이치다. 이러한 척도를 비대칭적 척도(Asymmetric measure)라 한다.
향상도는 아이템(조합) A의 판매 중 아이템(조합) B가 포함된 비율이, 전체 거래 중 아이템(조합) B가 판매된 비율보다 얼마나 증가했는지를 나타내는 지표이다. 즉, 아무 조건 없이 무작위로 아이템 B가 팔리는 확률보다, 아이템 A라는 조건절을 주었을 때 B가 얼마나 더 잘 팔리는가를 수치화한 것이다. 이를 요약하면 A와 B의 신뢰도를 B의 지지도로 나눠준 것이다. 향상도는 두 아이템(조합) 간의 연관성을 나타내는 지표이기 때문에 조건과 결과절의 위치가 바뀌어도 값이 동일하다. 이러한 척도를 대칭적 척도(Symmetric measure)라 한다. 향상도를 표현하면 다음과 같다.
향상도 벤 다이어그램
향상도는 1을 기준으로 한다. 1에 가까울수록 두 아이템(조합)은 서로 독립적인 관계라 해석할 수 있다. 1보다 작으면서로 음의 상관관계이므로 A를 구매하는 사람은 B를 구매하지 않는 경향이 있는 것이다. 반대로 1보다 크면 A를 구매할 때는 B도 구매하는 경향이 강하다는 뜻이므로, 향상도가 높은 아이템을 추천해주는 것이다. 앞의 구매 내역을 통해 향상도가 어떻게 계산되는지 확인한다.
ex) 향상도 계산
A->B의 향상도는 A->B의 신뢰도 0.66을 B의 지지도 0.6으로 나눈 값인 1.11로서, 고객들이 자연적으로 B 아이템을 구매하는 확률보다 A를 구매할 때 B도 함께 구매할 확률이 1.1배 높다는 것을 의미한다. 그리고 B->A의 향상도 역시 1.11로 동일하다. 향상도가 1보다 높게 나오므로, A와 B 아이템을 함께 추천하는 것이다. 이처럼 연관규칙 분석은 지지도, 신뢰도, 향상도라는 기준 척도를 활용하여 최적의 상품을 추천해 주는 것이다.
그렇다면 세 개의 기준 척도를 어떻게 활용해서 상품을 추천해줘야할까? 일반적으로, 첫번째 단계로 지지도와 신뢰도 기준을 잡아서 특정 cut off 미만의 아이템 관계를 필터링한다. 다른 분석 모델링과 마찬가지로, 추천 로직이 아무리 정확도가 높다하더라도 비즈니스적으로 효과가 작으면 그 모델은 큰 의미가 없게 된다. 만약 상품 A와 B의 향상도가 매우 높게 나왔다 하더라도, 거래가 거의 이루어지지 않는 (지지도가 낮은) 아이템이라면 실제 기업이 얻는 이익은 미미할 것이다. 따라서 해당 아이템이나 조합이 어느 정도 판매가 되고 있다는 기준인 지지도로 추천 리스트를 선별해야하는 것이다.
두번째 단계로, 향상도를 내림차순으로 정렬하여, 상위에 있는 아이템 조합을 최종 선정한다. 향상도가 높다는 것은 그 아이템 조합이 추천 정확도에 효율적이라는 것이기 때문에, 최종 평가지표로서 중요하다. 하지만, 앞에서도 말했듯, 매출에 얼마나 효과적일지도 함께 고려해야하기 때문에 지지도를 함께 보는 것이 좋다. 만약 특정 아이템을 지정하여 추천 상품을 찾고 싶다면, 해당 아이템을 포함한 조합들을 필터링하여 지표를 확인하면 된다.
연관규칙 분석은 고려해야 할 지표가 세 가지나 되기 때문에 분석가와 비즈니스 담당자의 주관적 판단이 많이 들어갈 수밖에 없다. 이에 따라 잘못된 추천 로직이 만들어질 수 있으며, 명확하지 않은 룰 때문에 잦은 수정이 필요하게 될 수 있다. 그래서 이를 보완한 평가 척도들이 존재한다. 그 중에 대표적으로 많이 사용되는 IS (Interest-Support) 측도와 교차 지지도(Cross Support)는 다음과 같다.
• IS(Interest-Support) 측도: 향상도와 지지도를 곱한 후, 제곱근을 취한 값
IS 측도는 향상도와 지지도를 함께 고려한 측도다. 향상도와 지지도 중 하나가 너무 낮음에도 불구하고 연관규칙으로 선택되는 문제를 방지할 수 있다. 만약 향상도와 지지도 중에 비중을 더 두고 싶은 지표가 있다면, 가중치를 주어 영향력을 조정할 수 있다.
•교차지지도(cross support): 전체 아이템 중 최대 지지도 대비 최소 지지도의 비율 교차 지지도는 개별 아이템이나 조합의 우위를 측정하는 지표는 아니다. 전체 아이템 조합에서 어느 정도 수준의 지지도 이하를 버릴 것인가를 판단할 수 있는 하나의 보조 지표다. 처음에 아무런 정보가 없는 상태에서 얼마 이하의 지지도를 가진 아이템 조합을 뺄 것인지를 정하는 것은 어렵다. 하지만 전체 아이템 중에서 최대 지지도를 가진 아이템(조합) 대비 최소 지지도가 어느 정도 이를 보이는지 알게 되면 기준을 잡기 훨씬 쉽다. 교차 지지도 수치가 작을수록 지지도의 차이가 크다는 것이므로, 이는 의미 없는 아이템 조합이 포함됐을 가능성이 높다는 것을 의미한다.
이제 Apriori 알고리즘의 핵심이라 할 수 있는 지지도와 신뢰도 제한 방식에 대해 알아보자. 앞에서 언급했듯이 연관 분석은 모든 조합에 대한 지지도, 신뢰도, 향상도를 계산해야 하므로 아이템 품목이 늘어날수록 계산량이 엄청나게 증가한다. 아이템이 n 개일 때, 연산해야 하는 경우의 수는 최대 2^m 개가 된다. 예를 들어 총 10개의 아이템이 있다면 최대 1,023개의 조합에 대해 연산을 해야 한다. 아이템이 하나씩 늘어날수록 연산해야 하는 양은 지수적으로 늘어나게 된다.
이러한 이유로 Apriori 알고리즘은 지지도나 신뢰도가 낮을 조합은 처음부터 연산 대상에서 제외한다. 이는 의사결정나무의 pruning과 유사한 개념이다. 다음은 아이템 조합이 확장되는 흐름이다.
ex) 아이템 조합의 확장과 pruning
처음 A에서 E까지 총 5개의 아이템으로 시작하여 2개, 3개, 4개, 5개씩의 조합으로 확장해 나갈 수 있다. 그렇게 했을 때, 나올 수 있는 조합의 총 경우의 수는 31개(2^5)가 된다. 이렇게 조합을 계산하는 과정을 self-join이라 한다. 만약 Apriori 알고리즘에서 최소 지지도를 로 설정했다면, 지지도가 0에 미치지 못하는 조합은 물론 해당 조합이 포함된 조합은 모두 pruning을 하여 연산 대상에서 제외한다. 예를 들어 AB 조합이 최소 지지도에 미치지 못한다면, AB를 포함한 모든 조합은 지지도가 AB 조합의 지지도를 초과할 수 없으므로 전부 제외하는 것이다. 따라서 그림 13.53과 같이 AB가 포함된 모든 조합이 pruning되고 이를 제외한 조합들로 수치를 산출한다. Apriori 알고리즘의 분석 순서를 정리하면 다음과 같다.
• Step 1. 최소 지지도를 설정한다. • Step 2. 개별 아이템 중에서 최소 지지도 미만의 모든 아이템을 찾는다. • Step 3. 제외되지 않은 아이템만을 이용해 최소 지지도 이상의 2가지 조합을 찾는다. • Step 4. 제외되지 않은 2가지 조합을 결합하여 최소 지지도 이상의 3가지 조합을 찾는다. • Step 5. 아이템 조합을 늘려가며 반복적으로 최소 지지도 이상의 조합을 찾는다. - 해당 조합들의 지지도, 신뢰도, 향상도 산출
콘텐츠 기반 필터링과 협업 필터링
다음 추천 시스템 방법으로, 아이템의 속성을 활용하여 추천하는 콘텐츠 기반 필터링(Content-based recommendation) 방법이 있다. 이는 아이템의 메타정보를 활용한다.
예를 들어 의류 제품을 추천한다고 했을 때, 제품의 색상, 사이즈, 가격대, 스타일 등의 속성을 데이터화하여, 다른 제품들 간의 유사도를 측정한다. 영화 콘텐츠라면 장르, 참여하는 배우, 러닝타임 등이 속성이 될 수 있다. 그리고 고객이 선호하거나 구매한 제품과 유사한 속성을 가진 제품을 추천한다. 고객이 선호하는 것과 유사한 제품이나 콘텐츠라면 구매할 가능성이 높을 것이기 때문이다.
콘텐츠 기반의 모델은 정형화된 데이터를 통해 기존의 선호와 유사한 아이템을 추천할 수 있다는 장점이 있다. 하지만, 모든 제품에 대한 메타정보를 입력해야 작동하기 때문에 아이템이 많아질 경우 관리가 어려워지는 문제가 있다. 또한, 구매자가 선호를 표현한 아이템과 유사한 속성을 가진 아이템만 추천하기 때문에 속성이 유사하지 않더라도 구매할 가능성이 높은 제품을 추천할 수 없다는 단점이 있다.
예를 들어 '불닭볶음면'과 '모짜렐라치즈'는 매우 다른 아이템 속성을 가지고 있지만, 고객들의 구매 성향 측면에서는 연관성이 매우 깊은 조합이다. '불닭볶음면'의 매운맛에 고소한 풍미를 더해줄 수 있는 '모짜렐라치즈'는 서로 상반된 속성을 통해 높은 연관성을 보이는 것이다. 콘텐츠 기반 필터링은 이러한 구매자의 구매 선호성을 고려하지 못한다.
이러한 콘텐츠 기반 필터링 모델의 두 가지 단점을 해결할 수 있는 모델이 협업 필터링 모델이다. 앞의 그림 13.49에서 협업 필터링은 크게 최근접 이웃 모델(Neighborhood model)과 잠재요인 모델(Latent Factor model)로 구분되는 것을 알 수 있다. 그리고 최근접 이웃 방식은 사용자 기반(User-based)과 아이템 기반(Item-based) 방식으로 구분된다.
최근접 이웃 모델은 사용자(user)들이 아이템에 매긴 평점(rating) 데이터를 기반으로 매기지 않은 아이템의 평점을 예측하는 방식으로 작동된다. 예측한 평점이 높은 아이템을 추천해주는 것이다. 다음의 영화 평점 예시를 통해 최근접 이웃 모델의 작동 원리를 확인해보자.
ex) 영화 평점
A에서 E까지 총 5명의 사람이 있고, 맨 인 블랙, 기생충 등 5 개의 영화에 대해 평점을 준 데이터가 있다. 각 사람들이 모든 영화를 전부 본 것은 아니기 때문에 평점이 비어 있는 부분들이 있다.
우선 사용자 기반의 협업 필터링 모델은, 유사한 성향을 가진 사람들을 찾아내어 그 사람들이 선호하는 아이템을 추천해주는 방식으로 수행된다. 유사한 성향을 가진 사람들은 피어슨 유사도나 코사인 유사도를 통해 구할 수 있다. 예를 들어 사용자 A와 B의 피어슨 유사도는 계산을 통해 0.11이라는 것을 알 수 있다. 계산 방법은 공분산과 상관성 분석 파트에서 다루었다. 사용자 A부터 E까지 서로간의 피어슨 유사도를 모두 구하면 다음과 같은 결과가 나온다. 자기 자신에 대한 유사도는 1이 나오며, 사용자들 간의 유사도는 -1에서 1의 값으로 나타난다.
모든 사용자 간의 피어슨 유사도
이렇게 사용자들 간의 유사도를 가지고 서로의 취향이 얼마나 비슷한지 수치화할 수 있다. 이를 통해 사용자가 보지 않았던 영화의 평점을 예측할 때 유사도가 높은 사람의 점수는 강하게, 유사도가 낮은 사람의 점수는 약하게 반영하는 것이다. 예를 들어 사용자 A의 〈맨 인 블랙〉에 대한 평점을 예측하고자 한다면 다음과 같은 공식을 사용하여 구할 수 있다.
다른 사용자들이 영화 〈맨 인 블랙〉에 준 평점에 다른 영화 평점들의 평균을 빼준 값에 사용자 A와의 유사도를 곱한 값을 모두 더한 다음, 사용자 A와 다른 사용자간의 유사도를 모두 더한 값으로 나눠준다. 그 다음 사용자 A가 다른 영화들에 주었던 평점의 평균을 더해주면, 사용자 A의 〈맨 인 블랙〉에 대한 예측 점수가 구해진다.
사용자 A의 '맨 인 블랙' 평점 계산 예시
이러한 공식을 통해 사용자 A의 영화 〈맨 인 블랙〉에 대한 평점은 4.01점이 될 것이라고 예측할 수 있다. 이런 식으로 각 사용자가 보지 않았던 영화들에 대한 예측 평점을 구하여, 예측 평점이 높은 순으로 영화를 추천한다.
아이템 기반의 최근접 이웃 모델도 사용자 기반과 유사하다. 관점만 사용자에서 아이템으로 바꿔서 예측 점수를 도출하면 된다. 아이템 기반은 사용자 A가 '001'이라는 아이템을 선호한다고 했을 때, '001'과 유사한 특성을 가진 '002'라는 아이템도 선호할 것이라는 가정으로 추천을 하는 방식이다. 따라서 이를 위해서는 아이템 간의 유사도를 구해야 한다. 앞의 영화 평점 예시를 통해 영화간의 피어슨 유사도를 구하면 다음과 같은 유사도가 나오게 된다.
모든 영화 간의 피어슨 유사도
만약 어떤 사람이 영화 <어스>를 봤다면, 이 영화와 유사도가 높은 순으로 <기생충>, <양들의 침묵>, <맨 인 블랙>, 등의 영화를 추천해줄 수 있다. <어벤져스>와 같이 유사도가 음수로 나온 영화의 경우, 해당 사용자가 선호하지 않는 영화일 확률이 높으므로, 추천 목록에서 제외할 수 있다.
영화와 같은 콘텐츠는 물론 상품 추천에도 협업 필터링 모델을 적용해서 사용할 수 있다. 하지만 일반적으로 제품은 구매자들이 평점을 주는 경우가 드물다. 이러한 문제를 희소 행렬 (sparse matrix)이라 한다. 특히나 오프라인 같은 경우는 제품을 구매하고 따로 피드백을 주는 경우가 거의 없다. 따라서 상품 추천의 경우에는 조금 다른 접근 방법이 필요하다. 주로 고객들의 구매 이력을 사용한다. 온라인의 경우 클릭, 장바구니 담기 등의 데이터를 활용할 수 있다.
영화 평점과 같은 호불호가 명확한 데이터를 명시적 (Explicit) 데이터라 하고, 구매, 클릭 이력과 같은 데이터를 암묵적 (Implicit) 데이터라 한다. 암묵적 데이터는 사용자의 호불호를 명확히 알 수 없다. 고객이 한 번 구매한 제품보다 세 번 구매한 제품을 더 선호하는지 알 수 없으며, 클릭하지 않은 제품이 단순히 보지 못해서인지 선호하지 않아서인지 알 수 없다. 넷플릭스나 왓챠와 같은 영화 스트리밍 서비스도 마찬가지로 사용자들이 콘텐츠에 대한 명확한 피드백을 주는 경우가 드물다. 단지 관심 가는 콘텐츠를 클릭해보고 시청할 뿐이다.
이와 같은 암묵적 데이터 위주의 도메인에서는 협업 필터링 중에서 잠재 요인 모델 (Latent Factor model)을 사용하는 것이 좋다. 잠재 요인 모델은 사용자와 아이템간의 관계 정보를 가지고 있는 데이터를 행렬 분해 (Matrix Factorization)하여, 데이터 안에 숨겨져 있는 잠재 요인 (factor)을 도출한다. 일반적으로 20~100 가지 잠재 요인 (factor)을 만든다. 잠재 요인은 앞의 통계 기반 분석 방법론 중의 주성분 분석과 비슷한 개념이다. 대규모의 다차원 행렬에 차원 감소 기법을 사용하여, 몇 개의 잠재 요인을 추출해낸다.
ex) 행렬 분해를 통한 잠재요인 추출
위와 같이 사용자-아이템의 암묵적 데이터 행렬을 분해하여 사용자의 잠재 요인과 아이템의 잠재 요인 행렬로 분해한다. 그러면 모든 사용자의 속성과 모든 아이템의 속성이 추출된다. 이 의미는 사용자들의 속성을 통해서 비슷한 속성을 가진 사용자를 찾아낼 수 있다는 것이다. 마찬가지로 아이템들의 속성 간 거리를 계산하여 비슷한 특성을 가진 아이템들을 선별할 수 있다. 행렬 분해를 위한 기본 기법으로 특잇값 분해 (Singular Value Decomposition, SVD)가 있다. 그런데 SVD는 데이터가 null 값으로 누락되어 있는 공간을 모두 평균값 등으로 대치 (imputation) 해줘야 한다. 이런 경우, 데이터가 왜곡될 가능성이 크다. 특히 아이템이 많아서 희소 행렬인 경우 문제는 심각해진다. 그래서 관측된 데이터만으로 행렬 분해를 할 수 있는 알고리즘을 사용한다.
일반적으로 협업 필터링에서 사용하는 행렬 분해 알고리즘으로 ALS (Alternating Least Squares)나 SGD (Stochastic Gradient Descent)가 있다. 두 방법 모두 작동 방식은 유사하지만, ALS 가 병렬 시스템을 지원하기 때문에, 대량의 데이터를 처리하는데에 유리하다. 이를 통해 분해가 완료된 행렬을 다시 내적하여 하나의 행렬로 만들어주면, 기존에 가졌던 값들과 유사한 수치가 나오게 된다. 이는 각 잠재 요소가 기존의 값의 속성을 가지고 있었기 때문이다. 이와 함께 기존 행렬에서는 비어있었던 암묵적 데이터가 모두 채워지게 된다. 왜냐하면 모든 사용자와 모든 아이템의 잠재 요인을 곱하여 사용자의 관심을 수치화하기 때문이다.
이렇게 각 사용자와 각 아이템간의 잠재 요인을 내적하면 현재 A라는 사용자에게 어떤 아이템을 추천해야할지 알 수 있다. 다음 그림을 보면 사용자의 모든 잠재 요인과, 각각 아이템의 모든 잠재 요인을 내적하여 사용자 x 아이템 행렬을 구하는 과정을 확인할 수 있다. 이렇게 각 사용자별로 모든 아이템에 대한 관심도가 생기게 되고, 관심도가 높은 순으로 아이템을 추천해주는 것이다.
ex) 사용자-아이템 행렬 내적
하지만 협업 필터링에도 몇 가지 맹점이 존재한다. 첫 번째로 콜드 스타트 (Cold start) 문제가 있다. 새로 가입한 사용자나, 이제 막 출시된 아이템은 상호 작용 데이터가 없기 때문에 추천을 위한 스코어를 줄 수가 없다. 이런 경우, 사용자가 처음 가입할 때, 선호하는 아이템을 몇 가지를 선택하도록하여, 콜드 스타트를 방지할 수 있다. 신규 아이템의 경우, Simple aggregates를 통해 별도로 신제품 추천 리스트를 제공하거나, 신규 아이템의 잠재 요인을 특성이 유사한 아이템들의 잠재 요인 평균으로 대치하여 줄 수 있다.
이와 유사한 단점으로, 아이템 수에 비해 구매, 클릭 등의 상호 작용이 부족할 경우 잠재 요인을 도출할 데이터가 희박하게 되어 (Sparsity) 추천 성능이 떨어지게 된다. 그래서 유저와 아이템간 상호작용 외의 속성을 함께 고려한 하이브리드 필터링 모델을 사용하기도 한다. 그리고 행동 양식이 일관적이지 않은 특이 취향 사용자 (Graysheep)에 대한 추천 정확도가 떨어지는 문제도 있다. 이러한 특이 취향 사용자는 분리해내어 별도의 유사도 알고리즘을 적용하여 추천 정확도를 향상시킬 수 있다. 이것 또한 일종의 하이브리드 필터링이라 할 수 있다.
하이브리드 필터링은 세 종류로 구분이 가능하다.
· 협업 필터링과 콘텐츠 기반 필터링을 각각 구현하여 혼합하는 방식 · 협업 필터링에 콘텐츠 기반 필터링의 특성을 적용하는 방식 · 콘텐츠 기반 필터링에 협업 필터링의 특성을 적용하는 방식
첫 번째 협업 필터링과 콘텐츠 기반 필터링을 각각 구현하여 혼합하는 방식은 각 모델의 스코어 결과값의 가중합을 구하여 최종 스코어를 산출한다. 추천 성능에 따라 각 모델의 가중치를 조정해준다. 혹은 가중합을 하지 않고, 각 모델 중 더 나은 결과 값을 선택하는 식으로 설계할 수 있다. 예를 들어, 처음 가입한 사람들은 콘텐츠 기반 필터링으로 아이템을 추천해주다가, 상호작용 데이터가 어느 정도 쌓이면 협업 필터링 모델로 전환해 주는 식으로 활용할 수 있다.
두 번째 협업 필터링에 콘텐츠 기반 필터링의 특성을 적용하는 방식은 협업 필터링 모델에 사용자의 특성을 나타내는 변수를 추가한다. 이를 통해 희소 행렬의 문제를 완화할 수 있다. 앞에서 말한 신규 아이템의 잠재 요인을 특성이 유사한 아이템들의 잠재 요인 평균으로 대치하는 것도 이 방식에 해당된다.
세 번째 콘텐츠 기반 필터링에 협업 필터링의 특성을 적용하는 방식은, 사용자의 성별, 연령, 취향 등의 프로필 정보들을 협업 필터링 방식처럼 차원 압축하여 몇 개의 잠재 요인으로 변환하여 사용하는 방식이다. 이를 통해 보다 유의미한 속성 정보를 추출할 수 있고, 데이터 양을 감소시켜 시스템 효율을 높일 수 있다.
인공 신경망(CNN, RNN, LSTM)
생물학적 뉴런과 인공신경망의 구조 비교
뉴런은 수상돌기들을 통해 전기적 신호를 받는다. 이는 신경망 모델의 독립변수 가중합 입력부분과 같다. 입력된 전기신호들은 세포체로 모여 합산된다. 신경망은 생명체의 신경계를 이루는 신경세포인 뉴런을 모티브로 만들어진 기계학습 모델이다. 신경망 모델도 이와 같이 각 독립변수들에 가중치를 부여하여 값이 합산된다. 합산된 신호는 축삭돌기를 통해 출력되고 생명체가 이에 반응한다. 신경망 모델에서 결과값 Y가 출력되는 것과 같다.
기본적인 신경망 구조는 입력층(Input layer), 은닉층(Hidden layer), 그리고 출력층(Output layer) 세 가지 층으로 분류되어 있다. 입력층은 독립변수의 값들을 입력하는 역할을 하기 때문에 독립변수의 수만큼 노드를 갖게 된다. 은닉층에서는 입력층에서 들어온 값들을 합산하여 보관을 하고, 노드들을 연결하는 층 사이에는 가중치들이 있다. 처음 주어진 가중치를 이용해 출력층의 값을 계산하고, 결값과의 오차를 각 가중치로 미분한 값으로 처음 가중치에서 빼주는 작업을 반복하며 가중치를 조정한다. 이를 오류역전파(Back-propagation of errors)라 한다.
신경망의 은닉층이 2개 이상이 될 때는 딥러닝이라 부른다. 딥러닝은 신경망에서 파생되어 나온 모델이기 때문에 일반적으로 신경망이라고 하면 딥러닝 모델을 지칭한다.
회귀, 신명망, 딥러닝 모델 비교
신경망을 이루는 가장 기본 단위 구조는 퍼셉트론(Perceptron)이다. 입력층의 각 독립변수 값들을 하나로 합산할 때 각각에 가중치를 적용해서 보다 유의한 변수의 영향력을 강화한다. 이 때 합산된 값이 정해진 임곗값을 초과했을 때는 1을 출력하고 못했을 때는 0을 출력한다. 퍼셉트론은 학습 데이터가 입력됐을 때, 분류가 제대로 됐는지를 보며 가중치를 개선해 나간다.
신경망은 여러 층의 퍼셉트론으로 구성되기 때문에 다층퍼셉트론(multi-layer perceptron, MLP)이라 한다. 다층퍼셉트론은 비선형 분류가 가능하기 때문에 과적합을 방지할 수 있다. 단층퍼셉트론의 경우 AND, NAND, OR 게이트 논리 연산을 할 수 있지만, XOR 게이트 연산은 비선형적 구분선이기 때문에 구현이 불가능하다.
다층퍼셉트론은 기존의 AND, NAND, OR, XOR 게이트를 조합하여 XOR 게이트를 구현할 수 있다. 다음의 예시와 같이 NAND와 OR 게이트를 AND로 조합하여 XOR 게이트 구현이 가능하다.
ex) 다층 퍼셉트론을 통한 XOR 게이트 구현
다층 퍼셉트론, 즉 은닉 층을 한 개 이상 구성하여 비선형적으로 조합을 학습할 수 있는 것이 바로 신경망 모델인 것이다. 그런데 초기 신경망 모델은 지역 최솟값(Local minimum) 문제가 발생할 수 있었고, ReLU나 Drop-out 기법 등의 기법으로 이를 해결했다. 그밖에 과적합을 방지할 수 있는 Initialize point 사전훈련 알고리즘 등 다양한 신경망 관련 기법들이 있다.
CNN
합성곱 신경망, 즉 CNN(Convolution Neural Network)은 사람의 시신경 구조를 모방한 구조로써 데이터의 특징을 추출하여 패턴을 파악한다.
CNN 기본 개념
CNN은 Convolution과 Pooling의 단계를 통해 데이터를 효율적으로 연산한다. Convolution(합성곱)의 정의는 두 함수 f, g 가운데 하나의 함수를 반전(reverse), 전이(shift) 시킨 다음, 다른 하나의 함수와 곱한 결과를 적분하는 것을 의미한다. 5x5 픽셀의 이미지 원본이 있다면, 실제 컬러 이미지는 각 픽셀을 RGB 3개의 실수로 표현한 3차원 데이터고, 이를 1차원 데이터 3개로 분리해준다. 각 RGB 값인 RED 채널, Green 채널, Blue 채널 3개가 생성됐다.
CNN의 Convolution 과정
이제 각 픽셀에 필터(Filter)를 대입하여 주변 픽셀들의 값을 합성한 피처맵(Feature map)을 만든다. 피처맵은 원본 이미지에 필터를 대입하여 각 값을 합하여 만든다. 예시에서는 (3, 3)의 정사각 행렬 필터를 대입했고, 각 채널들의 Feature map이 출력된다.
CNN의 Feature map 생성 과정
Convolution 과정에서 Feature map의 크기가 Input 데이터보다 작아지는 것을 확인했다. Convolution을 반복할수록 Feature map 데이터의 크기는 점점 작아지게 되고 계속 반복하다 보면 결국에는 출력 크기가 1이 되어 합성곱 연산을 할 수 없게 된다. 이러한 문제를 방지하기 위해 패딩 (Padding) 작업을 하여 기존 데이터의 가장 자리를 0 또는 맞닿는 가장 자리와 동일한 값으로 채워 넣는다. 일반적으로는 0으로 채워 넣는다. 입력 이미지의 외곽 부분을 0으로 채워주어 출력된 Feature map의 크기를 기존과 동일한 4x4 픽셀로 만들어 준다. 이는 Zero-padding이라 하며 데이터 손실과 이미지 축소를 방지한다.
ex) CNN의 Padding
Padding 과정까지 완료된 Feature map은, 이제 Pooling을 통해 사이즈를 축소한다. 연산량을 줄이고 노이즈를 상쇄시키는 역할을 한다. Pooling은 설정된 영역 중에서 가장 큰 값이나 평균 값등을 추출한다. Pooling 방법은 Max-pooling, Average-pooling, L2-norm pooling 등이 있으며, 보통 CNN에서는 최댓값만 가져오는 Max-pooling을 사용한다.
ex) CNN의 Max-pooling
위와 같이 Convolution과 Pooling 과정을 반복한 후, 마지막 출력층에서 해당 이미지의 범주를 분류하여 결과를 출력한다.
ex) CNN(LeNet)의 전체 프로세스
RNN
RNN(Recurrent Neural Network)은 자연어 처리 영역에서 많이 쓰이고 있는 순환 신경망이다. 알고리즘 내부에 순환 구조가 들어있다. 기본적인 신경망 구조는 입력층과 출력층이 한 방향으로만 흐르는 피드포워드(Feedforward) 방식으로, 모든 입력과 출력이 서로 독립적이다.
RNN의 기본 구조
인풋 x가 입력되면, 퍼셉트론 안에서 계산된 파라미터 값이 다시 퍼셉트론 안으로 돌아가는 순환 구조를 보인다. 그리고 결괏값 y가 출력된다.
ex) RNN의 순환 구조
RNN은 시차 요소가 적용되는 모델이라고 했다. 맨 아래의 박스는 각 시점별 입력값, 중간 부분의 박스는 RNN의 기억을 담당하는 은닉층(Hidden state)을 의미한다. 맨 위의 사각형 O는 최종 출력값이다. 각 은닉층 단위 S는 X를 입력받고 기억 정보를 다음 시차의 S로 전달한다. 기억 정보를 전달받은 다음 S는 새로 입력받는 X값을 종합하여 다음 S로 전달한다. 전달 과정이 끝나면 요약된 정보를 바탕으로 최종 결과를 출력한다. 물론 RNN을 사용하는 분석 주제에 따라 입력-출력 구조는 달라질 수 있다. 다중 입력값에 단일 출력값만 있는 구조는 문장의 긍정 부정 판단과 같이, 모든 인풋 정보를 고려해서 하나의 정답만 내면 되는 모델에 사용된다.
ex) 분석 목적에 따른 RNN 구조
단일 입력값에 다중 출력 구조로 되어 있는 번 구조는 이미지를 입력했을 때, 이미지 설명 캡션을 출력하는 용도에서 사용되는 구조다. 이 경우, CNN과 RNN을 결합해 사용한다. 우선 CNN을 통해 이미지에서 관련 단어들을 추출하고, RNN을 통해 문장을 생성하는 것이다. 2번의 앞단에서 입력만 수행되다가 출력으로 변환되는 다중 입력-다중 출력 구조는 번역기 모델에서 사용되는 구조다. 언어 번역의 경우, 어순이 다른 경우가 많다. 그렇기 때문에 원본 언어의 단어들을 입력하면 어순을 함께 기억한 다음 번역하고자 하는 언어의 어순으로 변환해 순차적으로 출력하는 것이다. 마지막번 구조는 인풋이 들어옴과 동시에 출력을 시작하고, 인풋이 늘어날수록 과거의 모든 인풋을 함께 고려해 결과를 출력한다.
그런데 RNN은 과거 시점의 인풋과 현재 시점의 인풋과의 거리가 멀면, 초기의 가중치값이 유지되지 않아 학습 능력이 저하되는 문제가 있다. 물론 시계열적으로 생각하면, 거리가 먼 과거의 정보의 영향력이 줄어드는 것이 자연스럽다.
그런데 이렇게 예측하고자 하는 단어와 근거가 되는 단어 사이 간격이 멀게 되면 RNN은 올바르게 문맥을 연결할 수 없다. 멀리 있는 단어일수록 그 영향도가 줄어들기 때문이다. 이러한 문제를 해결할 수 있는 모델이 바로 LSTM이다.
LSTM
LSTM(Long Short Term Memory networks)은 기존 RNN과 유사한 구조를 가지고 있지만 셀 스테이트(Cell state)라는 요소를 가지고 있다. 이는 가중치를 계속 기억할 것인지 말 것인지를 결정해주는 역할을 한다. 가중치가 기억되면, 거리가 먼 과거의 인풋이라 해도 가중치가 그대로 적용된다.
RNN과 LSTM의 세부 알고리즘 비교
RNN은 일반적으로 하이퍼볼릭 탄젠트(hyperbolic tangent) 함수를 통해 전 시점의 가중치를 -1~1 사이 값으로 산출해 다음 시점에 전달한다. 시그모이드보다 미분 최댓값이 상대적으로 크기 때문에 가중치를 더 오래 유지할 수 있다. 수식은 다음과 같다.
하지만 결국 시차가 지날수록 과거의 가중치는 희석되어가므로, 영향력이 급격히 줄어든다. 반면 LSTM은 은닉층에서 이전 시점의 가중치를 그대로 넣을 것인지 시그모이드 함수로 0 or 1 사이 값을 산출해 판단한다. 과거 시점의 가중치 사용에 대한 출력값이 1이면 가중치를 완전히 유지하고, 0이면 삭제한다.
이런 식으로 기존의 RNN은 LSTM으로 성능이 보다 향상됐고, 그 외에 다양한 변칙 알고리즘이 계속 개발되고 있다. 상황에 따라서는 기본 RNN 알고리즘에 변칙 패턴을 적용한 모델이 LSTM보다 탁월한 성능을 보이기도 한다.