GRAPH DB/Graph Solution

G-PAS 실전편 2부: 회귀와 분류로 알아보는 지도 학습

(주)비트나인 2022. 2. 25. 12:15

 

본 글에서는 예측분석에 사용할 수 있는 알고리즘을 설명합니다. 수많은 예측분석 알고리즘을 소개하기엔 현실적으로 무리가 있다고 판단하여, Regression과 Classification에 대해 간략한 소개를 하고 이후에 Brazilian E-Commerce 사례에서 사용하였던 알고리즘을 기술했습니다.

 

회귀(Regression)와 분류(Classification)로 범주화하는 지도 학습

머신러닝 알고리즘은 작동방법에 따라 몇 가지 기준으로 분류할 수 있는데,  가장 큰 기준은 바로 비지도 학습(Unsupervised Learning)과 지도 학습(Supervised Learning)이 있습니다. 비지도 학습은 출력 변수(Y)가 존재하지 않고, 입력 변수(X) 간의 관계에 대해 모델링하는 것입니다. 주로 Clustering 혹은 차원 축소에 많이 사용하며, 학습 결과에 대한 평가가 어렵기 때문에 데이터 이해를 위한 분석 단계에서 주로 사용합니다. 본 백서는 예측 분석에 대한 내용이므로 비지도 학습은 제외하겠습니다. 

 

지도 학습은 컴퓨터에게 정답(Label)이 무엇인지 알려주면서 컴퓨터를 학습을 하는 방법입니다. 지도학습은 회귀(Regression)와 분류(Classification) 문제로 범주화할 수 있습니다. 회기 문제는 연속적인(continuous) 출력 값을 예측하며, 분류 문제는 불연속(Categorical) 값을 예측합니다. 상세한 내용은 아래와 같습니다.

 

1. Regression

앞서 언급한 바와 같이 연속적인 출력값을 예측할 때 사용됩니다. 본 백서에서 모든 회귀 모델을 설명하기에 다소 무리가 있으므로, E-Commerce에서 사용한 알고리즘을 설명하고자 합니다. E-Commerce 데이터의 특징은 범주형(Categorical) 변수가 많다는 것입니다. 이를 해결하기 위해 Catboost와 Support Vector Regression 알고리즘을 사용하였고, 각각 알고리즘의 내용은 다음과 같습니다.

1) Categorical 변수가 많을 경우 : Catboost

부스팅은 약한 학습기를 여러 개 연결하여 강한 학습기를 만드는 앙상블 방법을 말합니다. 부스팅 방법의 아이디어는 앞의 모델을 보완해나가면서 일련의 예측기를 학습시키는 것입니다. 데이터 경연대회에서 많이 쓰이는 부스팅 알고리즘이 xgboost, lightgbm 등이 있으며, 이는 Gradient Boosting에 근간을 둔 알고리즘입니다. Catboost 역시 Gradient Boosting에 근간을 두고 아이디어를 추가한 알고리즘입니다. Catboost는 Category와 boosting을 결합하여 만든 명칭이며 이름에서 알 수 있듯 Categorical variable이 있을 경우 유용하게 사용할 수 있습니다. Gradient Boosting에 대한 간단한 원리와 Catboost의 주요 아이디어는 다음과 같으며 링크된 논문을 참고하였습니다. 

 

- Gradient Boosting

 

실제 값들의 평균과 실제 값의 차이인 잔차(Residual)를 구하고 데이터로 잔차를 학습하는 모델 A를 만듭니다. A모델로 예측 한 잔차를 학습한 B 모델을 만들고 A+B 모델을 통해 다시 예측하여 새로운 모델을 만들고 기존 모델과 새로운 모델을 합한 새로운 모델을 만드는 것을 반복합니다. 새로운 모델을 생성할 때 손실 함수(loss function)를 Gradient Descent를 사용하여 정량화하고, 손실 함수를 미분하여 기울기를 구하여 손실(loss) 값이 작아지는 방향으로 파라미터를 조정합니다. Catboost 또한 기본적으로 잔차를 학습한 학습기를 통하여 다른 학습기를 생성한다는 아이디어는 동일하지만 다음 설명하는 내용에서 Gradient Boosting과는 차별점이 있습니다.

 

- Catboost

 

A. Ordered Target Encoding (Categorical variable 처리)

Target Encoding은 동일 범주의 평균값으로 수치형 변수로 변환하는 방법입니다.  Catboost는 좀 더 발전시켜 훈련 데이터를 random permutation 한 후 n번째 관측값(동일 카테고리)에 대해 n-1까지의 평균값으로 변환합니다. 첫 번째 관측치의 경우 이전의 관측치가 없어 값을 변환할 수 없습니다. 이때  a(alpha)와 p(prior)를 사용하게 되는데, prior는 permutation 된 각 모델의 평균이며 a는 0보다 큰 파라미터입니다. 현재 데이터의 타깃 값을 사용하지 않고, 이전 데이터들의 타겟 값만을 사용하여, Data Leakage 가 일어나지 않는 장점이 있습니다. 

 

 

상기 테이블은 Brazilian e-commerce의 데이터 예시입니다. Seller가 2000여 명, Product category가 73개로 One-hot encoding으로 변환 시 변수가 2000여 개가 생겨나 학습에 부적합한 데이터셋이 됩니다. Catboost에서 Index 1의 A는 앞서 언급한 대로 prior(permutation 된 각 모델의 평균)와 a(가중치)를 사용하여 Numerical Variable로 변환시키며 후에 나오는 A의 값은 다음과 같이 변환시킬 수 있습니다.

 

- index 4의 A : 1.5 (index 1의 평균)

- index 5의 A : 1.25 (index 1, 4의 평균)

- index 6의 A : 1.5 (index 1, 4, 5의 평균)

 

B. ordered boosting

기존의 Gradient boosting의 문제는 각 iteration마다 이전에 사용한 데이터를 재사용하기 때문에 target leakage가 나타납니다. 이 때문에 prediction shift 문제가 나오고, 이 문제에 ordered principle을 적용했습니다. 쉽게 말하자면 gradient boosting 전체 데이터셋의 잔차를 학습한 모델을 사용하여 다음 모델을 생성하는 반면, Catboost는 n번째 모델을 생성하기 위해 n-1 관측치만을 사용하여 학습한 후 n을 예측하는 것입니다.

 

아래는 Catboost에서 ordered boosting를 설명하는 표이며 해석하면 다음과 같습니다. 

 

- t-1까지의 무작위 순열 σ를 취하여 t-1번째 모형을 학습

- t번째 데이터를 t-1번째 모형으로 예측하고 t번재 실제 y값과 비교하여 t번째 residual 값을 구함

- t번째 residual 값으로 gradient를 업데이트하여 t번째 모형을 생성

 

 

C. Optimized Parameter tuning

xgboost나 light gbm와 달리 Catboost는 기본 파라미터가 기본적으로 최적화가 잘 되어있어서, 파라미터 튜닝에 크게 신경 쓰지 않아도 됩니다. 부스팅 모델들이 파라미터 튜닝하는 이유는 트리의 다형성과 오버 피팅 문제를 해결하기 위함인데, Catboost는 이를 내부적인 알고리즘으로 해결하고 있으니, 파라미터 튜닝할 필요가 없는 것입니다. 하지만 bayesian-optimization을 통해 parameter 최적화를 할 수 있는 문서가 있으니 참고용으로 링크를 공유합니다.

 

2) Categorical 변수가 많을 경우 : SVR

SVM(Support Vector Machine)은 머신러닝에서 ‘분류’ 문제를 해결할 때 쓰이는 매우 유명한 알고리즘입니다. SVR(Support Vector Regression)은 회귀, 즉 예측 문제를 해결할 때 SVM 분석기법을 적용한 것이다. 분류 기법을 적용했기 때문에, 연속형 변수에 더 최적화되어 있는 일반 회귀분석보다 범주형 변수가 많을 때 사용하기 적합합니다. 

 

Category 변수를 모델에 직접 사용하기 위해서는 인코딩의 과정을 거쳐야 합니다. 대표적인 기법으로는 아래 세 가지가 있습니다. 

 

A. One-Hot Encoding: 가장 단순하게 인코딩할 수 있는 방법이며, feature 내 값들의 수(Cardinality) 만큼 변수를 만들어 해당하는 변수에 1, 아닌 경우에 0을 할당합니다. Cardinality가 높을수록 변수의 개수가 폭발하게 되어 모델의 훈련 속도를 저하시킬 수 있습니다.

 

B. Label Encoding: Feature 내 값마다 하나의 label을 할당하여, 하나의 변수만을 생성함으로써 차원의 저주 없이 자료를 표현하여 학습 속도가 빠릅니다. 예를 들어 값 A=0, B=1, C=2… 와 같이 인코딩을 구현하는 것입니다. 이때 각 할당된 숫자는 당연히 아무 의미를 갖지 않습니다. 하지만 모델은 순서 개념을 전제하여 학습하기 때문에 분석 결과에 왜곡이 생길 수 있다는 문제점이 있습니다.

 

C. Mean Encoding: 위 두 방법은 Categorical 변수를 표현하기 의하여 의미가 없는 값을 각 value에 부여했습니다. Mean Encoding은 Feature 내 각 값들의 평균을 부여함으로써 조금 더 의미 있는 값을 사용합니다. 하지만 training data의 특성을 반영하여 data leakage와 overfitting의 문제가 있습니다. 이를 해결하기 위해 Smoothing, CV Loop, K-Fold Regularization 등의 방법을 사용하여 Mean Encoding을 수행하는 방법이 있습니다.

 

이제 SVR 알고리즘의 원리를 이해하기 위하여 SVM을 수행하는 과정을 먼저 살펴보도록 하겠습니다.

SVM의 목적은 다음과 같이 다수의 집단으로 이루어진 데이터가 있을 때, Training Data를 바탕으로 분류 기준이 되는 Classifier를 설정하여 새로운 데이터를 올바른 집단으로 잘 분류할 수 있도록 하기 위한 것입니다.

 

그렇다면 어떤 방법으로 Classifier를 설정하는 것이 효과적일까요?

 

각 집단에서 가장 인접한 두 관측치의 중간으로 classifier를 설정합니다. 이는 1차원이라면 점, 2차원에서는 선, 3차원에서는 면의 형태로 차원이 높아질수록 다른 shape을 갖게 될 것이며, Hyperplane이라고 부릅니다.

 

이때, classifier와 가장 인접한 관측치를 support vector라고 하며, support vector와 classifier 사이의 거리를 margin이라 합니다. 이 margin을 최대화하려면 1)에서 언급한 것과 같이 각 집단의 support vector의 중앙으로 hyperplane을 설정해야 합니다. 그리고 이를 Maximum Margin Classifier라고 부릅니다.

 

 Maximum Margin Classifier

    

하지만 이 방식은 Outlier에 매우 취약하다는 단점이 있습니다. 예를 들어 집단 A의 Support Vector가 집단 B와 매우 인접할 경우, 설정된 Maximum Margin Classifier는 새로운 데이터를 잘 분류하지 못할 것입니다. 따라서 일정 수준의 오류(misclassification)를 허용하는 Classifier와 Margin을 설정하는 것이 분류 성능을 더 향상시킬 수 있으며, 이를 Soft Margin이라고 합니다.

 

어느 정도의 Margin을 설정하는 것이 새로운 데이터를 분류하는데 최적화될지 Cross Validation을 통해 반복하면서 찾도록 합니다.

 

데이터를 고차원의 공간으로 변형시킴으로써 더 효과적인 Classifier를 찾을 수 있으며, 이렇게 데이터를 변형시키는 함수를 Kernel Function이라고 합니다. 역시 여러 차례 시도를 통하여 데이터를 변형시킬 차수 d와 어떤 Kernel Function을 사용할 것인지 결정할 수 있습니다. 아래 그림을 통해서 더 자세히 알아보도록 하죠. 

    

Simple Line Classification

 

아래와 같이 선형 분류가 되지 않는 경우에 데이터를 3차원으로 변환하여 분류합니다. 

 

예시 1: 고차원으로 데이터 변환하여 분류

 

    

예시 2: 고차원으로 데이터 변환하여 분류

 

SVR은 SVM과 같은 원리를 사용하지만 회귀 문제에 적용합니다. Decision Boundary 안쪽에 들어오는 데이터들을 고려하며, 관측치와의 오차가 적은 Hyperplane이 가장 적합한 모델입니다. 

 

Hyperplane과 Decision Boundary

 

* Equation of Hyperplane: Y = wx+b ()

 

* Equation of Decision boundary: wx+b= +a   /  wx+b= -a

 

* SVR을 충족하는 Hyperplane:   -a < Y- wx+b < +a

 

결국 SVR을 수행하는 최종 목적은 관측치와 가장 일치하는 Hyperplane과, Hyperplane과의 거리 ‘a’를 결정하는 것입니다. 

 

2. Classification

Classification은 기존에 존재하는 데이터와 황목과의 관계를 학습하여 새로 관측된 데이터의 category를 판별하는 문제이다. 스팸 필터를 예로 들면, 스팸 필터의 데이터는 이메일이고, category, 혹은 label, class는 spam메일인지 일반 메일인지를 판별하는 것입니다. 스팸 필터는 먼저 스팸 메일, 그리고 일반 메일을 학습 한 이후, 새로운 데이터 (혹은 메일)이 input으로 들어왔을 때 해당 메일이 스팸인지 일반 메일인지 판별하는 문제를 풀어야 하며, 이런 문제를 classification이라고 합니다.


앞서 말한 스팸/일반 메일처럼 결괏값의 label이 두 개만 있는 경우를 이진 분류(binary classification)라 하며, 3가지 이상의 label을 학습하여 예측하는 문제를 다중 분류 (multiclass classification)라 합니다.

Catboost는 여타 트리 모형에 비해 비교적 간단히 Classification과 Regression을 사용할 수 있으며, 따라서 Categorical Variable이 많을 경우 Classification 문제에도 적용할 수 있습니다. SVR은 분류 모델인 SVM의 알고리즘을 활용하여 Regression 문제에 적합한 형태로 만든 것입니다. SVM은 데이터의 분포에 따라서 다양한 형태의 Kernel Function으로 변형하고, Support Vector 간의 Margin을 이용하여 분류를 수행합니다. 이상, Classification에 사용 가능한 알고리즘으로 Catboost와 SVM을 간략히 언급했습니다. 

 

Brazilian E-Commerce 개요 및 데이터 분석

1. 데이터 설명

브라질 E-Commerce 사이트인 Olist Store의 데이터로, 2016~2018년에 만들어진 약 10만 개에 달하는 주문 정보를 가지고 있습니다. Olist는 브라질의 가장 큰 유통 시장으로서, 작은 규모의 판매자들은 Olist Store를 통해 판매를 할 수 있고 Olist의 물류 파트너를 이용하여 고객에게 직접 배송할 수 있습니다. 고객이 물건을 수령하거나 예상 배송일이 다가오면 만족도 설문지 이메일이 고객에게 발송되고, 고객은 구매 경험에 대하여 리뷰를 남길 수 있습니다.

 

1) 출처: https://www.kaggle.com/olistbr/brazilian-ecommerce

 

2. 분석 목적

1) 배송시간 예측 

통상적으로 E-Commerce를 통한 거래는 '구매 → 승인 → 발송 → 도착 → 리뷰 작성'의 과정을 거치며,  이 중 '구매 ~ 발송' 은 판매자의 영역, '발송 ~ 도착' 은 배송의 영역이며 이 영역들이 복합적으로 소비자 만족도에 영향을 끼치게 됩니다.

 

각 영역을 반영하는 features를 사용하여 배송시간을 예측할 수 있는 분석 설계가 필요하며 반영되어야 할 사항은 다음과 같습니다.

 

- 구매자/판매자 간의 거리

- 판매자 개개인에 따른 영향

- 상품 카테고리

- 기타 확인 가능한 변수

 

2) EDA결과

A. 배송시간에 영향을 미치는 두 주체

제품 주문 후 구매자까지 도착하는데 크게 두 가지의 주체가 있습니다.

- Seller Time : 주문 승인 소요시간, 배송회사에 제품 등록 소요시간

- Carrier Time : 운송회사에 등록된 제품이 구매자까지 배송되는데 걸린 소요시간


 

B. EDA 결론

Product Category, Seller가 Seller Time에 영향을 미치는 것으로 나타났다. 예를 들어 보험 서비스 카테고리는 사무용 가구보다 Seller가 소요되는 시간이 짧은 것으로 확인하였고, 동일한 제품 카테고리일지라도 Seller의 배송에 소요되는 시간이 다른 것으로 확인하였습니다.  Carrier time에 영향을 주는 변수는 Product Category, Freight Value(배송 운임), Distance(Seller와 Customer 간 거리)로 나타났습니다. Freight Value가 비쌀수록, Distance가 멀수록 Carrier time이 늘어나는 것으로 확인하였습니다. 아래에 도식화한 그림으로 각 변수 간의 관계를 확인할 수 있습니다.

 

 

3) 분석 결과

전체 데이터 셋을 8:2로 Train / Test 셋으로 나누고 Catboost와 SVR 각각 알고리즘으로 테스트한 결과입니다. 성능지표는 평균 제곱근 오차(Root Mean Square Error; RMSE)로서 추정 값 또는 모델이 예측한 값과 실제 환경에서 관찰되는 값의 차이를 다룰 때 흔히 사용하는 측도입니다. 평균 제곱근 편차를 평균 제곱 오차의 제곱근으로 정의할 때 RMSE의 수식은 다음과 같습니다.

 

 

사용한 분석 알고리즘의 결과는 다음과 같습니다.

 

 

파라미터 최적화 없이 최대한 간단히 검증한 결과입니다. Catboost, SVR 모두 Olist에서 예측한 값보다 좋은 성능을 나타내 있으며, Catboost는 별도의 파라미터 값 없이 Default로 주었을 때 RMSE 28.35가 나왔습니다. SVR은 어떤 Kernel Function을 사용하는가에 따라 결과가 매우 크게 좌우됩니다. 가장 널리 사용되는 Kernel Function인 RBF(Radial Basis Function), Linear, Polynomial(degree=2, 3)로 모두 적합해 보았으며, Seller Time의 경우 Linear, Carrier Time는 RBF를 사용했을 때 가장 적은 RMSE를 얻을 수 있었습니다(각각 5.56, 69.92). epsilon 값을 각 0.05, 0.1, 0.2로 조정한 결과는 크게 차이 나지 않는 것으로 나타났습니다. 

 

실전편 1&2부를 마치며

지금까지 G-PAS 실전편 1부를 포함해서 그래프 DB를 활용하여 예측분석을 수행하기 위해서 그래프 데이터베이스의 정의, 모델링 절차부터 분석기법까지 알아보았습니다. 실제 서로 복잡한 관계로 얽혀 있는 E-Commerce 데이터를 적용하여 일일이 mapping이 필요했던 테이블을 어떻게 GDB 형식으로 간결하게 표현할 수 있는지 제시했습니다. 이렇게 그래프 데이터베이스를 통해 데이터를 적재한다면 원하는 정보를 더욱 쉽고 빠르게 조회할 수 있으며, 분석 모델을 더 효율적으로 실행할 수 있습니다. 

 

이후에는 예측 분석을 수행하기 위한 분석 알고리즘에 대해서 살펴보았습니다. 특히 E-Commerce 데이터와 같이 상품 카테고리, 구매자 & 판매자 ID, 구매자 & 판매자 지역 등 범주형 변수가 많은 경우에 적용할 수 있는 알고리즘 위주로 제시했습니다. Gradient Boosting 기법을 근간으로 하는 Catboost와 Support Vector Machine의 분류 기법을 사용해 예측 분석에 활용하는 Support Vector Regression을 설명했습니다. 또한 이 변수들을 모델로 학습시키기 위해 인코딩하는 기법도 함께 소개했습니다. 

 

본 백서가 처음 그래프 DB를 사용하여 분석 프로젝트를 수행하는 사용자들에게 도움이 될 수 있길 바라며 다음 G-PAS 실전편의 새로운 내용으로 뵙겠습니다. 


글: 그래프 사이언스 R&D 센터

 


 

트렌디한 그래프 기술과 IT 소식을 뉴스레터로 받아보세요!

https://bitnine.net/ko/subscribe/

 

제품 및 기술문의

070-4800-3517  |   agens@bitnine.net