일반적으로 모델을 만들 때는 데이터셋을 학습셋(train set), 검증셋(validation set), 테스트셋(test set)으로 나눠서 검증 과정을 거친다.
• 학습셋: 모델을 학습하여 파라미터 값을 산출하기 위해 사용하는 데이터 • 검증셋: 학습셋으로 과도하게 학습을 하여 과적합되지 않기 위해 사용하는 데이터 • 테스트셋: 학습한 모델의 성능을 평가하기 위한 데이터
학습셋은 모델을 학습하기 위한 데이터셋이다. 그런데 학습셋 데이터만 가지고 모델을 학습하게 되면, 어느 수준까지 학습을 해야 할지 판단하기 어렵다. 보통 모델을 학습하게 되면, 가지고 있는 Y값을 잘 예측할 수 있도록 파라미터 값이 업데이트된다. Degree 1은 모델이 너무 단순해서 값을 제대로 예측을 하지 못한다. 학습이 많이 진행된 Degree 15를 보면, 학습셋 데이터의 X값들을 거의 정확하게 예측할 수 있는 모델이 만들어졌다.
ex) 학습 셋 모델 학습
이런 경우는 학습셋 데이터에만 너무 잘 맞도록 학습되어, 새로운 데이터가 입력됐을 때 제대로 예측을 하지 못하는 상황이 발생할 수 있다. Degree 15로 만들어진 모델을 테스트셋에 적용했을 때 정확도가 떨어지는 것을 확인할 수 있다.
ex) 과적합된 모델의 테스트 셋 적용
최적의 모델이라 할 수 있는 True function과 가장 유사한 모델은 Degree 5다. Degree 15는 train 데이터에 대해서는 매우 정확한 예측을 해주지만, test 데이터에 대해서는 부정확한 예측을 한다. 이렇게 학습셋에 과도하게 적합(fit)하도록 학습된 경우를 과적합(overfitting)이라 한다. 반대로 Degree 1과 같이 학습이 너무 덜 된 경우는 과소적합(underfitting)이라 한다. 과적합은 학습이 너무 많이 이루어지거나, 변수가 너무 복잡해서 발생하기도 하고, train 데이터와 test 데이터가 중복될 경우에도 발생한다.
검증셋은 학습셋 데이터를 통해 모델을 만들 때 과도하게 학습되지 않도록 조정한다. 학습을 계속 진행할수록 train 데이터에 대한 모델의 오차율은 계속해서 감소한다. 하지만 학습이 특정 수준 이상을 넘어가면 다른 데이터에 모델을 반영했을 때 오히려 오차율이 높아지게 된다. 따라서 모델 학습 시에 검증셋 데이터의 오차율이 더 이상 줄어들지 않고 오히려 늘어나는 시점에서 학습을 중단한다. 이렇듯 검증셋 데이터는 학습셋 데이터의 모델 학습 과정에 관여하여 모델의 과적합을 방지해주는 역할을 한다.
학습 수준에 따른 학습 셋과 검증 셋의 오차율 변화
점선으로 표시된 검증셋 데이터의 오차율이 더 이상 줄어들지 않고 오히려 늘어나는 시점에서 학습을 중단한다. 이처럼 검증셋 데이터는 학습셋 데이터의 모델 학습 과정에 관여하여 모델의 과적합을 방지해주는 역할을 한다.
마지막으로 테스트셋은 학습셋과 검증셋으로 만든 최종 모델의 실제 '최종 성능'을 평가할 때 사용한다. 검증셋도 결국 모델을 만들 때 관여를 한 데이터이기 때문에 모델 성능 지표가 다소 과장되어 있다. 따라서 모델 산출 시에 사용되지 않았던 테스트셋 데이터를 통하여 실제적인 모델의 정확도를 판단하는 것이다.
학습셋, 검증셋, 테스트셋 데이터의 활용 구조
'레이블'은 종속변수, 즉 정답지 Y를 뜻한다. 정답지가 있는 학습셋과 검증셋 데이터로 모델을 만들고, 모델을 테스트셋 데이터에 적용하여 산출한 예측값을 테스트셋 레이블과 비교하여 모델 성능을 평가한다. 이러한 방법이 과적합을 방지하는 가장 기본적인 데이터셋 분리 방법인 홀드아웃(holdout)이다. 반복 학습을 많이 하지 않는 간단한 모델에는 검증셋 사용을 생략하고 바로 테스트셋에 모델을 적용하여 과적합을 검증한다. 그러나 반복 횟수가 100회 이상으로 많은 모델을 만들 때에는 앞의 인공 신경망 절의 실습에서 사용했던 model.fit..,validation_data-(x_test, y_test)와 같이 검증셋을 설정해준다.
그 밖에 과적합을 방지하기 위한 방법 • 학습 데이터 확보 • 결측값 처리 및 이상치 제거 • 유의도가 낮은 변수 제거 및 차원 축소 • 정규화(Regularization) 적용 • 드롭아웃(Dropout) 적용
정규화(Regularization)는 앞서 배운 데이터 정규화(Normalization)와 한글명이 같지만, 다른 개념이다. 앞의 회귀분석에서 Ridge와 Lasso를 조합한 Elasticnet을 적용하는 법에 대해서 다룬 적 있다. 이러한 기법이 정규화다. 모델 내부의 계수인 세타(0) 값에 페널티를 주어 변수의 영향력을 감소시키는 기법이다. 과적합된 모델의 각 가중치를 줄여줌으로써 예측에 불필요한 변수의 영향을 최소화한다.
드롭아웃(dropout)은 주로 신경망 모델에서 사용된다. 최종 결값을 계산하기 위해서 사용되는 뉴런들 중 일부를 누락(dropout)시켜 과적합을 방지하는 기법이다. 은닉층에 드롭아웃 확률 p를 설정하면, p의 확률로 은닉층의 뉴런들이 제외된다. 그리고 드롭아웃은 일부 뉴런이 제거된 여러 개의 모델의 결 값을 앙상블하기 때문에 예측 성능이 향상된다.
주요 교차 검증 방법
앞에서 처음 주어진 학습셋을 7:3 정도의 비율로 학습셋과 검증셋으로 분리한 다음 학습셋으로 계수 값을 산출하고 검증셋 데이터로 학습 수준을 결정한다고 했다. 학습셋으로 최적의 모델 정확도를 끌어내고 검증셋으로 과적합을 방지한다. 이러한 방식을 홀드아웃 방법이라 한다고 했다.
그런데 이렇게 만든 모델은 결국 전체 중 일부인 검증셋의 데이터로만 적정 학습 수준을 결정한 모델이기 때문에 과적합을 완전히 방지했다고 할 수 없다. 최종적으로 생성된 모델을 가지고 실제 데이터에 예측을 수행하면 테스트 때보다 훨씬 못한 정확도를 보이는 경우가 자주 발생한다.
ex) K-fold 교차검증 개념
우선 전체 학습셋을 k 개의 조각(fold)으로 분리한다. 만약 k가 5라면 학습셋은 1번부터 5번까지 다섯 개의 셋으로 나눠질 것이다. 데이터가 분리된 후에는, 하나의 데이터 조각을 검증셋으로 활용하고, 나머지 4개의 조각을 학습셋으로 활용하여 모델을 학습한다. 그다음 학습셋으로 사용했던 데이터 조각 중 하나를 검증셋으로 바꾸고, 방금 검증셋으로 사용한 데이터는 다시 학습셋에 포함시켜 학습한다. 이러한 절차로 검증셋을 중복 없이 바꿔가면서 모델 생성과 평가를 진행한다.
일반적으로 k의 수는 5~10개를 지정하여 k-fold 교차 검증을 수행한다. k가 클수록 평가의 편중된 정도(bias)는 낮아지지만, 각 fold의 모델별 결과의 분산(variance)이 높을 수 있으므로 K가 무조건 크다고 좋은 것은 아니다. 그리고 k의 수만큼 모델을 만들어야 하기 때문에, 일반 홀드아웃 방식보다 연산량이 훨씬 많다는 단점이 있다.
LOOVC(Leave-one-out Cross-validation)
기존 k-fold 방식에서 k를 최대화한 방법이다. 즉, k를 전체 관측치 수로 하여, 검증셋이 관측치 하나가 되는 것이다. 예를 들어 전체 관측치가 1,000개인 데이터셋이면 k가 1,000인 k-fold 교차 검증을 수행한다.
이 방식은 모델의 편중이 매우 작지만 결괏값의 분산이 다소 크다는 단점이 있다. 과적합될 여지가 있는 방법이다. 그리고 관측치의 숫자만큼 모델을 생성하여 최종 계수를 산출하기 때문에 데이터 양이 많은 경우에는 적합하지 않은 방법이다.
ex) LOOCV 개념
Stratified K-fold Cross-validation
기존 k-fold 방식에 층화 추출 방식을 접목한 기법이다. 데이터의 특정 클래스(카테고리)가 한 곳에 몰리는 상황을 방지할 수 있다.
클래스 분포가 일정하지 않으면 각 분할 셋 간 계수 값의 분산이 커지게 된다. Stratified K-fold 교차 검증은 분할 셋 안의 클래스 비율이 학습셋 전체의 클래스 비율과 같도록 분리해준다. 따라서 주로 분류 모델에서 사용된다. 예를 들어 전체 학습셋 데이터의 클래스 A가 30%, 클래스 B는 60%, 클래스 C는 10%의 비율로 구성되어 있다면, 각 분할 셋의 클래스 비율을 일정하게 3:6:1이 되도록 분류해주는 것이다.
ex) Stratified K-fold Validation
Nested Cross-Validation
기존 k-fold 방식은 학습셋과 테스트셋 분리를 한 번만 하기 때문에, 모델의 성능이 테스트셋에 크게 의존한다는 문제가 있다. 이러한 문제를 해결하기 위해 학습셋과 테스트셋 검증에도 k-fold 방식을 적용한 것이 중첩 교차 검증(Nested CV)이다. 따라서 k-fold를 이중으로 중첩하여 사용하므로 inner loop와 outer loop로 구성된다.
ex) Nested Cross Validation
Inner loop는 기존의 k-fold 교차 검증과 마찬가지로 학습셋으로 분류된 데이터를 K-1개의 테스트 셋과 1개의 검증셋으로 나누어 k번 학습을 수행하여 계수 값을 산출한다. Outer loop는 inner loop에서 만들어진 계수 값을 테스트셋에 적용하여 정확도를 산출하는 작업을 k-fold 방식으로 수행한다. 전체 데이터를 테스트셋 데이터로 활용하기 때문에, 만든 모델이 얼마나 잘 일반화되는지 평가하는데 유용한 방법이다. 모델의 최종 예측력은 각 fold의 예측력 평균으로 구한다.
Grid Search Cross-Validation
하이퍼 파라미터 값을 리스트 형태로 미리 입력해 놓은 다음 각 조건의 모델 성능을 측정하고 평가하여 효율적으로 최적의 하이퍼파라미터 값을 찾아내는 기법이다. 예를 들어 랜덤포레스트 모델의 최대 깊이, 최소 관측치 수 등의 조건을 다양하게 지정한 후에 각 조건의 모델을 교차 검증으로 평가하여 최적의 모델 조건을 찾는 것이다. 교차 검증 알고리즘은 상황에 맞게 자유롭게 선택하면 된다.
ex) Grid Search Cross Validation
격자 탐색 교차 검증이 종료된 후에는 최적의 하이퍼파라미터 조건과 성능을 확인할 수 있다. 그런데 그리드 방식은 사전에 설정한 모든 하이퍼파라미터 조건의 모델을 수행하기 때문에 조건이 많아지면 시간이 오래 걸린다는 단점이 있다. 그래서 하이퍼파라미터 조건이 많은 경우에는 현실적으로 가능한 횟수(예를 들면 1,000회) 내에서 무작위로 조건을 탐색하여 최적의 조건을 찾는 무작위 탐색(randomized search) 방법을 사용하기도 한다.
회귀 성능 평가 지표
R-Square & Adjusted R-Square
결정 계수, 즉 R-Square(R²)는 모델의 독립변수들이 종속변수를 설명할 수 있는 설명력을 나타내는 0에서 1 사이의 수치라고 앞에서 언급한 적 있다. 조금 더 정확히 정의하면 회귀 모델의 회귀선이 종속변수 y값을 얼마나 잘 설명할 수 있는가를 의미한다. R-Square는 실제 값과 예측값의 차이인 오차와, 실제 값과 실제 값 평균의 차이인 편차와 관련 있다.
SSR(Sum of square regression)은 회귀식의 추정값과 전체 실제 값 평균과의 편차 제곱합이다. 그리고 SSE(Explained sum of squares)는 회귀식의 추정값과 실제 값 편차 제곱의 합이다. 마지막으로 SST(Total sum of squares)는 실제 값과 전체 실제 값 평균과의 편차 제곱합이다.
SSR과 SSE
따라서 R-Square 값은 SSR값이 클수록, SST값이 작을수록 커지게 된다. SSR값이 크다는 것은 회귀선이 각 데이터를 고르게 설명한다는 의미이다. 그리고 SST가 작다는 것은 SSR을 제외한 SSE가 작다는 의미이다. SSE는 실제 값과 예측값의 차이이기 때문에, 당연히 작을수록 모델의 설명력이 높아지는 것이다.
Adjusted R-Square는 R-Square가 독립변수의 개수가 많아질수록 값이 커지는 문제를 보정한 기준이다. 실제로 설명력이 전혀 없는 변수를 계속 추가하면 R-Square는 계속 증가하게 된다. Adjusted R-Squared는 SSE와 SST를 각각의 자유도(Degree of freedom)로 나누어 구하면 된다.
RMSE(Root Mean Square Error)
회귀 모델은 실제 값을 정확히 예측하기가 어렵기 때문에 모델의 정확도를 판단하는 것이 까다롭다. 분류 모델은 직관적으로 정확히 분류한 비율을 구해 정확도를 표현할 수 있다. 하지만 회귀 모델은 실제 100,000이라는 값을 100,010으로 예측했을 때, 틀렸다고 하기가 애매하다. 그래서 수치를 정확히 맞춘 비율이 아닌, 실제 수치와의 차이를 회귀 모델 평가 지표로 사용한다.
RVSE는 편차 제곱의 평균에 루트를 씌운 값으로, 실제 수치와 예측한 수치와의 차이를 확인하는 전형적인 방법이다. 예측값에서 실제 값을 뺀 후 제곱한 값을 모두 더한 다음, n으로 나누고 루트를 씌운다. 이 방식은 표준 편차 공식과 동일하다. 즉, 실제 값과 예측값의 표준 편차를 구하는 것이다.
예측값과 실제 값의 차이가 평균적으로 어느 정도인지 측정할 수 있어 직관적으로 모델의 정확도를 가늠 할 수 있다. 표본 평균과의 비교를 통해 대략적인 모델 간 정확도를 비교할 수 있다. 예를 들어 표본 평균이 100이고 RMSE가 5라면, 예측값이 표본 평균 대비 5%의 변동성을 가진다고 해석한다.
그런데 RMSE는 예측값의 스케일에 영향을 받는다. 종속변수의 단위가 커지면 RMSE도 커지는 것이다. 그래서 모델 간 정확도 비교를 할 때, 표본 데이터가 다르면 RMSE 절대치로 비교를 해서는 안 된다. 예를 들어 주택 가격 예측 모델을 비교한다고 했을 때, 평균 주택가격이 10억 원인 A 지역의 주택가격 예측값에 대한 RMSE와, 3억 원인 B 지역의 주택가격 예측값 RMSE는 스케일 자체가 다르기 때문에 예측력의 좋고 나쁨을 비교할 수 없다.
Mean Absolute Error
MAE는 실제 값과 예측값의 차이 절대값 합을 n으로 나눈 값이다. 그렇기 때문에 직관적으로 예측값 차이를 비교할 수 있다.
RMSE는 ‘평균 제곱 오차’고, MAE는 ‘평균 절대 오차’다. 즉 RMSE는 제곱한 오차 평균에 제곱근을 해준 것이고, MAE는 오차 절댓값의 평균을 구한 것이다. 두 지표 모두 예측값과 실제값의 차이를 평균한 값이지만 계산 방식이 다르기 때문에 특성도 차이가 있다. RMSE는 오차 값을 제곱해주기 때문에 MAE보다 이상치에 더 민감하다.
ex) RMSE와 MAE 비교
실제값이 모두 100인 데이터가 있고, 모델 1과 모델 2는 서로 다른 예측값을 산출했다. 모델 1은 오차가 전부 20씩 나도록 예측했고, 모델 2는 하나의 값만 50의 오차가 나도록 예측하고 나머지는 10씩 오차가 나도록 예측했다. 절대 오차 합은 모델 1은 100이고 모델 2는 90이다. RMSE 기준으로는 오차의 이상치가 없는 모델 1을 더 우수하다고 평가했다. 하지만 MAE 기준은 절대 오차 합이 더 적은 모델 2를 우수하게 평가했다. 이처럼 RMSE는 실제 값과 예측 값의 오차가 들쭉날쭉하지 않은 모델을 더 우수하게 평가하는 특성이 있다. 절대적인 전체 오차 크기를 더 중시할지, 모델의 예측 안정성을 중시할지에 따라 MAE와 RMSE를 선택할 수 있다.
MAPE (Mean Absolute Percentage Error)
백분율 오차인 MAPE는 MAE를 퍼센트로 변환한 것이다. 따라서 스케일에 관계없이 절대적인 차이를 비교할 수 있으므로 다른 데이터가 들어간 모델 간 성능을 비교하기에 유용하다. MAPE 값은 0부터 무한대의 값을 가질 수 있으며, 0에 가까울수록 우수한 모델이다.
산출 공식은 다음과 같다.
MAPE 사용 시 주의할 점이 있다. 실제 값이 0인 경우에는 0으로 나눌 수 없기 때문에 MAPE를 구할 수 없다. 다만, 대부분의 분석 소프트웨어는 알아서 실제 값이 0인 관측치를 제외하고 MAPE를 계산한다. 그렇게 때문에 실제 값에 0이 많은 데이터는 MAPE 평가 기준을 사용하는 것이 적합하지 않다. 그리고 실제 값이 양수인 경우, 실제 값보다 작은 값으로 예측하는 경우(underforecast)는 MAPE의 최댓값이 최대 100%까지만 커질 수 있다. 반면 실제 값보다 크게 예측하는 경우(overforecast)는 MAPE 값이 한계가 없기 때문에 MAPE 기준으로 모델을 학습하면 실제 값보다 작은 값으로 예측하도록 편향될 수 있다.
RMSLE (Root Mean Square Logarithmic Error)
RMSLE는 앞서 알아본 RMSE와 동일한 수식에서 실제 값과 예측 값에 1을 더한 다음 로그를 취해 준 평가방식이다. 로그를 취해줌으로써 MAPE와 마찬가지로 상대적 비율을 비교할 수 있다. 그러한 연유로 RMSLE는 RMSE보다 오차 이상치에 덜 민감하다. 그래서 실제 값에 이상치가 존재하는 경우에 적당한 방식이다. 로그를 취하기 전에 1을 더해주는 이유는, 실제 값이 0일 때, \(\log(0)\)이 무한대로 수렴할 수 있기 때문이다.
RMSLE의 공식은 다음과 같다.
MAPE 처럼 오차 비율로 모델 성능을 평가하기 때문에 스케일이 차이가 나더라도 오차 비율이 같으면 동일한 RMSLE 값을 산출한다. 예를 들어 표 14.2와 같이 스케일은 다르지만, 동일하게 10%의 오차가 나는 경우에 RMSE는 다르게 산출되지만 RMSLE는 동일하게 산출된다.
ex) RMSE와 RMSLE 비교
이처럼 RMSLE는 절대값 오차의 스케일이 다르더라도, 비율 오차가 동일하면 같은 값이 산출된다. 그리고 RMSLE는 로그 특성상 실제 값보다 크게 예측하는 경우보다 작게 예측하는 경우에 페널티를 높게 준다. 예를 들어 실제 값 1,000을 1,500으로 예측했을 때보다, 500으로 예측했을 때 RMSLE 값이 더 높아진다. 이러한 특성은 상품 수요 예측에 적합하다. 일반적으로 수요를 높게 예측해서 재고 비용이 생기는 것보다, 수요를 낮게 예측해서 기회 손실이 발생하는 경우가 타격이 더 크기 때문이다.
AIC & BIC
아카이케 정보 기준이라고도 불리는 AIC (Akaike's Information Criterion)는 최대 우도(likelihood)에 독립변수가 얼마나 많은가에 따른 페널티를 반영하여 계산하는 모델 평가 척도다.
즉, 모델의 정확도와 함께 독립변수가 많고 적음까지 따져서 우수한 모델을 선택할 수 있도록 하는 평가 방법이다. 앞에서 변수가 많아지면 차원의 저주에 의해 모델 성능이 떨어질 수 있다고 했다. Adjusted R-Square도 변수의 개수에 대한 페널티를 준 평가 방법이라 할 수 있다.
AIC 값은 작을수록 좋은 모델이며, 우도가 높을수록, 변수가 적을수록 값은 작아진다. 변수가 늘어날수록 모델의 편의(bias)는 감소하지만 분산(variance)은 증가한다. AIC는 적정한 변수의 개수를 찾는데에 유용한 모델 평가 방법이다.
독립변수의 개수에 따른 편의와 분산
AIC의 수식은 다음과 같다.
-2ln(Likelihood)는 모델의 적합도를 의미하며, 2k는 모델의 상수항을 포함한 독립변수(파라미터)의 개수를 의미한다. 독립변수의 수가 증가할수록 페널티를 부여하여 AIC 값이 높아지게 된다. 그런데 AIC 방법은 데이터 수에 대한 보정은 없기 때문에 관측치가 많지 않은 경우 정확도가 낮을 수 있다. 관측치가 적은 경우에는 관측치 수를 반영하여 보정된 AICc 방식을 사용할 수 있다. AIC와 마찬가지로 작은 값을 가질수록 좋은 모델로 평가한다. AICc의 수식은 다음과 같다.
AIC나 AICC와 유사한 개념으로 BIC (Bayesian Information Criterion)가 있다. 수식에서 -2ln(Likelihood)부분은 동일하며, 변수 개수에 대한 페널티 방식에 차이가 있다.
수식에서 알 수 있듯이, 변수의 개수 xln(n)으로 페널티를 부여한다. 관측치의 개수에 자연로그를 취한 값을 독립변수의 개수와 곱해주기 때문에, 관측치가 8개 이상만 되어도 BIC가 AIC보다 변수 개수에 대한 페널티를 강하게 부여한다. 따라서 변수의 개수를 줄이는 것을 중요하게 여기는 상황에서는 BIC로 모델을 평가하는 것이 좋다.
분류, 추천 성능 평가지표
분류 모델도 회귀 모델만큼이나 다양한 모델 평가 방법이 있다. 회귀 모델은 실제 값과 예측 값의 오차가 얼마나 나는가를 주요 평가 지표였다. 분류 모델은 예측한 전체 관측치 중에서 몇 개나 정확히 분류했는가를 평가하는 것이 주요 평가 지표다. 이 책에서는 이진 분류 모델을 기반으로 설명할 것이다. 가장 기본적인 혼동 행렬(Confusion Matrix)부터 시작해서 F-score, ROC 커브 등 다양한 평가 방법들이 있다.
혼동 행렬
로지스틱 회귀 분석이나 의사 결정 나무의 분류 모델은 기본적으로 오분류율을 따져서 모델의 성능을 평가한다고 했다. 이진 분류 모델의 분류 예측 방식을 다시 한번 살펴보자. 그림 14.13과 같이 학습셋으로 학습한 모델을 테스트셋에 적용하여 모든 관측치의 구매 여부 '1'과 '0'에 대한 확률 값을 구한다. 우리가 예측하고자 하는 '1'에 대한 확률 값을 내림차순으로 정렬하면, 위쪽에는 '1'로 분류될 관측치들이 모이고, 아래쪽에는 '0'으로 분류될 관측치들이 모이게 된다. 그럼 '1'과 '0'으로 분류할 기준 값인 threshold를 설정한다. 일반적으로는 중간 값이라 할 수 있는 0.5로 설정한다. 그러면 '1'의 확률이 0.5 이상인 관측치들은 '1'로 분류하고, 나머지는 '0'으로 분류한다.
ex) 분류 모델의 분류 예측 과정
'1'로 예측한 관측치들 중에는 실제로 1인 것도 있고 0인 것도 있을 것이고, '0'으로 예측한 관측치들도 마찬가지일 것이다. 제대로 분류하지 못한 관측치의 수를 전체 관측치의 수로 나눠주면 오분류율을 구할 수 있다. '1'로 예측했는데 실제로도 '1'인 경우는 진양성(True Positive), 실제로는 '0'인 경우는 위양성(False Positive)이라고 하며. '0'으로 예측했는데 실제로도 '0'인 경우는 진음성(True Negative), 실제로는 '1'인 경우는 위음성(False Negative)이라고 한다. 이 개념이 혼동 행렬(Confusion Matrix)의 기본 틀이다.
혼동 행렬(Confusion matrix)의 기본 틀
혼동 행렬에서 'positive'와 'negative'는 긍정과 부정의 의미를 뜻하지 않는다. 일반적으로 분류하고자 하는 '1' 값과 '0' 값을 뜻한다. 예를 들어, 구매 여부의 '구매', 탈퇴 여부의 '탈퇴', 질병 양성 여부의 '양성' 등이 'positive', 즉 '1'인 것이다. 용어가 헷갈릴 수 있다. 다시 정리하면 다음과 같다.
· 진양성(TP, True positive): 모델은 1(Positive)로 예측하고, 실젯값도 동일(True) · 위양성(FP, False positive): 모델은 1(Positive)로 예측하고, 실젯값은 상이(False) · 진음성(TN, True negative): 모델은 0(Negative)로 예측하고, 실젯값도 동일(True) · 위음성(FN, False negative): 모델은 0(Negative)로 예측하고, 실젯값은 상이(False)
위와 같이 혼동 행렬을 통해 오분류율을 계산할 수 있다. 오분류율뿐만 아니라 민감도, 특이도 등의 기준값을 확인하여 모델의 성능을 평가할 수 있다. 그리고 모델의 목적에 맞춰 분류 기준값인 threshold를 조정할 수 있다.
정확도, 오분류율, 정밀도, 민감도, 특이도, f-score
앞의 혼동 행렬을 통해 확인할 수 있는 다양한 모델 평가 기준을 알아보자. 가장 대표적인 기준으로 정확도(Accuracy)가 있다. 정확도는 전체 관측치 데이터 중에서 '1'은 '1'로, '0'은 '0'으로 모델이 올바르게 분류한 비중을 뜻한다. 즉, 모델이 얼마나 정확하게 분류를 하는지를 나타내는 기준값이 정확도다.
오분류율(Misclassification Rate), 또는 Error Rate로 불리는 오분류율은 전체 관측치 데이터 중에서 모델이 잘못 분류한 비중을 뜻한다. 예를 들어 전체 관측치가 100개이고, 잘못 분류한 관측치가 20개라면 오분류율은 20%, 정확도는 80%가 된다.
정밀도(Precision)는 '1'으로 예측하여 분류한 관측치 중에서 실제 값도 '1'인 비중을 의미한다. 모델이 실제 '1'을 제대로 분류하는 성능이 얼마나 우수한지를 확인할 때 정밀도 기준값을 확인한다.
정확도와 정밀도 평가 시 주의해야 할 점이 있다. 대부분의 학습 및 예측 데이터는 '1'로 분류된 관측치의 비중이 적다. 상황에 따라서는 클래스 불균형을 없애기 위해 언더샘플링(Under sampling)이나 오버샘플링(Over sampling) 등을 통해 '1'과 '0' 클래스의 비율을 비슷하게 맞춰주기도 하지만, 8:2 정도의 비율 그대로 분류 예측을 하기도 한다. 이런 경우 모델을 극단적으로 무조건 '0'으로 분류하도록 만들어도 정확도는 80%가 된다. 전체의 80%가 '0'이기 때문에 '0'인 것은 모두 실제 값과 동일하게 분류했기 때문이다. 이러한 현상을 정확성 역설(Accuracy paradox)이라 한다. 또한, 모델이 단 하나의 관측치만 '1'로 분류했고 실제 값도 '1'이라면, 그 모델의 정밀도는 100%가 된다. '1'로 분류한 관측치의 실제 값이 전부 '1'이기 때문이다. 그렇기 때문에 정확도와 정밀도만으로 분류 모델의 성능을 평가하는 것은 위험하다. 다른 평가 기준들을 종합해서 모델 성능 평가를 해야 한다.
재현율(Recall), 또는 민감도(Sensitivity)는 실제 '1'인 관측치 중에서 모델이 정확히 '1'로 예측하여 분류한 비중을 뜻한다. 모델의 정밀도가 아무리 우수하다 하더라도 실제 '1'인 관측치를 너무 적게 찾아낸다면 좋은 모델이라 할 수 없다. 비즈니스 상황에 따라 다르지만, 일반적으로 50% 이상의 민감도를 유지하는 것이 좋다.
특이도(Specificity)는 '0'으로 예측하여 분류한 관측치 중에서 실제 값도 '0'인 비중을 의미한다. 보통 전체 관측치 중에서 '1'보다 '0'이 많은 비중을 차지하기 때문에 특이도는 높게 나오는 편이다. 가끔 '1'과 '0'의 비중이 비슷하거나, '0'에 대한 분류가 중요할 경우에 특이도 기준값을 확인한다.
마지막으로 정밀도와 민감도를 동시에 고려한 분류 모델 성능 평가 기준인 F-score가 있다. F-score는 0에서 1 사이의 값을 갖는다. 정밀도와 민감도는 서로 트레이드오프 관계다. 정밀도가 증가하면 민감도가 감소하고, 민감도가 증가하면 정밀도가 감소하게 된다. 정밀도를 높인다는 것은 실제로 '1'일 것이 거의 확실한 관측치만 '1'로 예측하여 분류한다는 것이기 때문에, 전체 실제 '1' 중에 '1'로 분류되는 비중인 민감도는 감소할 수밖에 없다. 따라서, 정밀도와 민감도 둘의 조화 평균을 한 기준값을 사용하여 보다 객관적으로 분류 모델을 평가할 수 있다. F-score는 정밀도와 민감도가 한쪽으로 치우치지 않을 때 상대적으로 높은 값을 갖는다. 왜냐하면 조화 평균은 상대적으로 작은 값 위주로 평균을 구하기 때문이다. 모델 성능을 평가할 때는 정밀도와 민감도 그리고 F-score를 종합적으로 확인하여 판단하는 것이 좋다. F-score의 계산 공식은 다음과 같다.
수식에서 β^2는 조화 평균의 가중치로, 정밀도와 민감도의 중요도를 동일하게 본다면 β에 1을 대입한다. 이를 F1-score라 하며 가장 많이 사용되는 F-score 기준값이다. 만약 정밀도를 중요시한다면 β 값을 1 미만으로, 민감도를 중요시한다면 β 값을 1 초과로 설정하면 된다.
F-score와 유사한 개념으로 G-mean이 있다. G-mean은 이름 그대로 기하 평균(Geometric mean)을 사용한다. 조화 평균과 기하 평균은 '4강 데이터의 기술 통계적 측정'에서 이미 다뤘다. G-mean은 민감도와 특이도의 평균을 구한다. 따라서 실제 '1'을 제대로 분류한 비율과 실제 '0'을 제대로 분류한 비율의 기하 평균이라 할 수 있다. 기하 평균의 특성상 더 작은 값에 가중치를 주기 때문에, 민감도와 특이도 중 하나의 값이 확연히 떨어지면 G-mean 값은 단순 산술평균한 값보다 더 떨어지게 된다. 수식은 다음과 같다.
향상도 테이블과 향상도 차트, 향상도 곡선
정확도, 오분류율, 정밀도 등은 분류 임계치인 threshold 값에 따라 변화한다. 향상도테이블 (Lift table) 과 향상도 곡선 (Lift curve) 은 전체 threshold 값에 대한 모델을 평가하는 지표로 사용할 수 있다. 또한 적정한 threshold 값을 선정할 때에도 사용할 수 있는 유용한 모델 평가 기준이다. 향상도 테이블의 향상도(Lift)란, 전체 관측치 중에서 실제 '1'의 비율보다, 모델을 통해 '1'로 예측한 관측치 중 실제 '1'의 비율이 얼마나 더 높은지를 나타낸다.
ex) 향상도(Lift) 개념
예를 들어, 전체 관측치가 100개이고 이 중 실제 '1'이 10개라고 해 보자. 이 데이터에 모델을 적용했을 때 20개를 '1'이라 예측했고, 실제 '1'은 5개가 포함됐다. 그럼 모델의 '1' 비율은 25%고 전체 관측치의 실제 '1' 비율은 10%기 때문에 25%/10% = 2.5가 향상도 값이 된다.
우선 향상도 테이블은 모델이 '1'로 분류될 확률이 높은 관측치는 실제로 '1'인 경우가 많다는 것을 전제로 한다. 모델이 제대로 학습됐다면 '1'로 분류될 확률이 높을수록 실제 값과 일치할 확률이 높아야 한다. 만약 무작위로 '1'을 뽑는 확률보다 모델이 '1'을 분류할 확률이 낮으면 향상도는 1 미만이 된다. 향상도 테이블을 만드는 과정은 다음과 같다.
· Step 1. 전체 테스트 셋 데이터를 '1' 예측확률 내림차순 정렬한다. · Step 2. 10분위수로 분할하여 각 분위수의 향상도 값을 산출한다. · Step 3. 완성된 향상도 테이블과 향상도 곡선을 확인하여 모델 성능을 평가한다. · Step 4. 누적 향상도 테이블을 통해 적정 threshold 값을 선정한다.
전체 1,000개의 관측치를 가진 테스트셋 데이터를 통해 향상도 테이블을 만드는 과정을 확인해 보자. 테스트셋에는 총 200개의 실제 '1' 값이 존재한다. 따라서 기본 향상도(Baseline lift)는 20%이다. 학습 셋으로 학습한 모델을 테스트셋에 대입하여 출력된 '1'의 확률(Predicted probability)이 높은 순으로 표 다음과 같이 정렬했다.
ex) 테스트 셋의 predicted probability 내림차순
Predicted probability 값이 높은 관측치들은 실제 값이 대부분 '1'이고, 값이 낮아질수록 '0'인 경우가 많아진다. 이제 이 데이터를 10분위로 분할하여, 아래의 표와 같이 각 분위수의 실제 '1' 값 관측치 수, 전체 실제 '1' 값 중 해당 분위수에 포함된 실제 '1' 값의 비율, 즉 민감도, 해당 분위수의 전체 관측치 중 실제 '1'의 비율, 즉 정밀도 그리고 해당 분위수의 향상도 값을 구한다.
ex) 향상도 테이블(Lift table)
향상도 테이블 예시를 보면, 1분위수에는 해당 분위수의 100개 관측치 중 84개의 관측치가 실제 '1'인 것을 알 수 있다. 전체 데이터셋의 실제 '1'은 총 200개이므로 84 / 200 = 42%의 민감도 값을 갖는다. 그리고 1분위수에 있는 총 100개의 관측치 중 84개의 관측치가 실제 '1' 값이기 때문에 84 / 100 = 84%의 정밀도 값을 갖는다.
해당 분위수의 정밀도 / 기본 향상도를 뜻하는 Li 값은 4.2가 된다. 즉, 전체 1,000개의 관측치에서 '1'이 나올 확률보다 1분위수에서 '1' 값이 나올 확률이 4.2배 높다고 해석할 수 있다. 이렇게 향상도 테이블을 활용하여 각 분위수에 포함된 실제 '1'의 비율을 확인하여 모델 성능을 확인할 수 있다. 상위 분위수에 '1'이 많이 포함될수록 '1'을 더 잘 맞춘다는 의미이므로 좋은 모델이라 할 수 있다.
그리고 분위수가 바뀔 때마다 향상도 값이 확연하게 줄어드는 형태가 이상적이다. 분류를 잘못하는 모델은 실제 '1' 값이 전체 분위수에 골고루 퍼져 있게 되므로 향상도 값도 분위수마다 비슷하다. 이를 보다 직관적으로 확인할 수 있도록 막대 그래프로 표현한 것을 향상도 차트(Lift chart) 혹은 십분위도(Decile chart)라 부른다.
ex) 향상도 차트(Lift chart)
향상도 차트는 각 분위수의 민감도 값을 막대 그래프로 표현한다. 좋은 모델은 상위 분위수에서 높은 막대 형태를 취하다가 갑자기 줄어드는 형태를 보인다. 만약 향상도 차트가 아래의 향상도 차트 형태의 3번과 같은 형태를 보인다면, 모델의 분류 성능이 매우 떨어진다는 뜻이므로 데이터와 모델을 검증해야 한다.
ex) 모델 성능에 따른 향상도 차트
향상도 테이블과 향상도 차트를 누적 형태로 변환하면 임곗값(threshold)을 정할 때 사용할 수 있다. 예를 들어 A 쇼핑 회사에서 전체 대상 고객 중 최대 30%의 고객에게만 할인 쿠폰을 줄 여력이 있다고 해보자. 이런 경우, 누적 향상도 테이블과 차트를 활용하여 1~3분위수 동안 향상도 값이 어떻게 변화하는지 확인하여 적정 타깃 고객군의 수를 결정할 수 있다. 만약 모델 결과가 아래 이미지와 같이 나왔다면 2분위수에서 3분위수로 넘어갈 때는 민감도 값이 크게 늘어나지 않고 향상도 값이 많이 줄어들기 때문에 2분위수로 임곗값(threshold)을 정하는 것으로 의사결정할 수 있다.
ex) 누적 향상도 테이블과 차트
가로로 그어진 점선은 기본 향상도를 뜻한다. 전체의 20%가 '1' 값이기 때문에 기본 향상도는 20%다. 분위수가 누적될수록 기본 향상도와의 차이가 어떻게 되는지 확인하여 적정 threshold를 결정한다. 그래프의 길이 격차가 커지는 지점을 선택하는 것이 좋다. 그런데 누적 향상도 차트는 10분위수로 띄엄띄엄 나누기 때문에 세세한 threshold를 결정하기 어렵다. 그래서 보통 100분위수로 표현된 누적 향상도 곡선(Cumulative lift curve)을 사용한다. 누적 향상도 곡선은 누적 이득 곡선 (Cumulative gain curve)으로도 불린다. 물론 일반 향상도 차트 또한 향상도 곡선으로 표현하기도 한다.
ex) 누적 향상도 곡선
우상향 직선으로 쭉 그어진 선은 기준선(Baseline)이다. 각 분위수에 포함된 전체 관측치 비율을 나타내기 때문에, 45도 각도를 나타낸다. 즉 "해당 분위수의 누적 관측치 수 / 전체 관측치 수"다. 기준선 위로 볼록하게 나온 선은 해당 분위수까지 누적된 '1'의 비율이다. 주의할 점은 이 선의 모수는 '1'인 관측치 전체이고, 기준선의 모수는 전체 관측치다.
따라서 만약 전체 관측치 중 '1' 값이 20%라면, 모델이 분류를 100% 정확하게 분류한 경우 20% 분위수에서 이익률 (Gains)이 100%가 되어야 한다. 그것이 그림의 Best model 선이다. Best model 선처럼 기울기가 급하게 상승해서 최대한 빠르게 이익률 100%가 될수록 성능이 좋은 모델이다. 이렇게 기준선 및 Best model 선과 모델의 선을 비교하여 분류 모델의 성능을 평가한다. 혹은 여러 모델의 누적 향상 곡선을 비교하여 최적의 모델을 선별할 수 있다.
ROC 곡선과 AUC
혼동행렬을 활용한 분류 모델 평가 지표 중 ROC (Receiver Operator Characteristic) 곡선과 AUC (Area Under Curve)가 있다. 이 평가 방법은 객관적으로 모델 비교 및 평가를 할 수 있고 임곗값인 threshold를 결정하는 데에 유용하게 사용할 수 있다는 장점이 있다. ROC 곡선의 접근 방식은 향상도 테이블과 유사하다. 임곗값 threshold를 1에서 0으로 조정해 가면서 민감도 (True Accept Rate)와 1 - 특이도 (False Accept Rate) 값을 2차원 좌표에 찍어서 그래프를 그린다. 민감도는 전체 실제 '1' 값 중에서 '1'로 분류된 비율이기 때문에, 모델 임곗값이 1에서 0으로 내려갈수록 증가한다. 그러다가 임곗값이 0이 될 때 민감도는 100%가 된다. 전체 데이터를 '1'로 분류하기 때문이다.
그런데 1-특이도는 전체 실제 '0' 값 중에서 '1'로 잘못 분류된 비율이므로 최소화해야 하는 값인데, 임곗값이 낮아질수록 전부 '1'로 분류하기 때문에 증가한다. 다시 말해, 임곗값을 낮추면 더 많은 항목이 '1'로 분류되므로 민감도와 1-특이도가 모두 증가한다. ROC 곡선은 이러한 민감도와 1-특이도 값의 변화를 그래프로 그려서 분류 모델의 성능을 평가하는 것이다. 좋은 모델이라면 높은 threshold 구간에 실제 '1' 값이 많이 몰려있고, 낮은 구간에는 실제 '1'값이 희소할 것이다. 따라서 좋은 모델일수록 ROC 곡선은 좌측 상단에 수렴하게 된다. 다음 그림을 통해 ROC 곡선이 생성되는 과정을 확인해 보자.
ex) ROC 곡선
눈으로 봤을 때, 모델 1의 그래프가 가장 좌측 상단에 붙어있고, 모델 2가 중간, 모델 3은 기준선과 큰 차이가 없다. 기준선에 가깝다는 것은 랜덤에 가까운 성능이라는 뜻이므로, 모델의 가치가 없다고 볼 수 있다. 분류 성능이 우수한 모델은 낮은 1-특이도 상태에서 높은 민감도를 갖기 때문에 ROC 곡선이 좌측 상단으로 볼록한 형태를 취한다.
그런데 곡선 그래프만으로 모델의 성능을 객관적으로 판단하기는 어렵다. 그래서 ROC 곡선을 수치로 계산한 AUC (Area Under Curve) 기준을 활용한다. AUROC (Area Under a ROC Curve)로도 불리는 AUC는 이름에서 알 수 있듯이 ROC 곡선 아래의 면적 크기를 구한 것이다. 면적의 크기는 최대 100% x 100% = 1의 값을 가질 수 있다. 면적의 크기가 클수록 우수한 모델이며, 0.5는 랜덤 분류와 같은 성능이기 때문에 AUC가 0.5 이하인 모델은 무작위로 분류하는 것보다 못하다는 뜻이다. 따라서 AUC가 0.5 이하로 나왔다면 데이터에 이상이 있거나, 모델링에 심각한 실수가 있지 않은지 확인해야 한다. 일반적인 AUC 값 판단 기준은 아래의 표와 같다.
AUC 결괏값 판단 기준
그럼 ROC 곡선으로 임곗값 Threshold를 어떻게 선정할 수 있을까? ROC 곡선의 좌표를 테이블 형태로 출력한 다음, 가장 이상적인 민감도와 1-특이도 조합에 해당되는 임곗값 지점을 찾으면 된다. ROC 곡선의 좌표 정보 테이블은 분석 환경 자체에서 제공되는 경우도 있고, 직접 만들어야 하는 경우도 있다. 임곗값 구간 별 민감도와 1-특이도 값 테이블은 간단한 쿼리로 구현할 수 있다.
수익 곡선
분류 모델은 비용 대비 효과의 불균형 문제가 존재한다. 단지 오분류만을 계산함으로써 오분류의 가중치가 똑같다는 가정에서 발생하는 문제다. 예를 들어, 정상인 사람에게 암이라고 오진하는 경우보다, 암에 걸린 환자에게 정상이라고 오진하는 경우가 더 큰 페널티를 받아야 한다. 그리고 새로운 고객을 유치할 때마다 예상 수익이 10만원인 경우와, 10만원인 경우의 모델 임곗값 threshold 기준은 달라져야 한다. 고객당 예상 수익이 큰 경우는 정밀도가 좀 떨어지더라도 민감도를 최대한 높이는 것이 더 이익이다.
이처럼 진양성(True positive)에 따른 이익과 위양성(False positive)에 따른 손해를 수치화하여 분류 모델의 수익성을 최대화할 때 사용하는 것이 수익 곡선(Profit Curve)이다.
Precision at k, Recall at K 그리고 MAP
추천 시스템은 일반적으로 사용자에게 여러 개의 콘텐츠나 제품을 추천한다. 추천을 받은 것들 중에서 얼마나 실제로 선택을 했는가를 통해 추천 시스템의 성능 평가를 한다. 이때 사용하는 것이 Precision at K와 Recall at K다. 앞에서 알아본 정밀도와 민감도의 개념을 차용한 평가 기준이므로 쉽게 이해할 수 있다. 우선 Precision at K와 Recall at K의 개념을 요약하면 다음과 같다.
· Precision at k: 추천한 Top K개의 항목 중 반응 항목의 비율 · Recall at k: 반응한 전체 항목 중 추천한 Top K개의 항목에서 반응한 항목의 비율
A/B 테스트
기업에서 기존의 시스템을 개선하거나 새로운 시도를 할 때 성과를 어떻게 측정할까? 가장 직관적이고 확실한 방법은 AS-IS와 TO-BE의 결과를 직접 비교하는 것이다. 혹은 임의로 두 집단으로 나눠서 서로 다른 콘텐츠를 보여준 다음 어떤 집단이 더 높은 성과를 보이는지를 비교한다.
이 방법이 A/B 테스트이고 주로 웹 서비스에서 변화 효과를 검증하기 위해 사용된다. 구글의 경우, 41가지 종류의 파란색 중에서 어떤 색이 사람들로 하여금 더 많은 클릭을 하도록 하는지를 알아보기 위해 무작위 A/B 테스트를 진행했다. 페이스북도 타임라인에 어떤 친구의 게시글이 나와야 사람들이 가장 오래 머무는지를 알아보기 위해 다양한 피드 알고리즘을 적용하여 A/B 테스트를 진행하고 있다.
A/B 테스트 주제와 절차
· 웹사이트 내비게이션 배치와 문구 등 UI/UX 최적화 · 추천 콘텐츠 노출 리스트 최적화 · 상품 종류와, 가격, 노출 사이즈 등 최적화 · 서비스 가입 경로 시나리오 최적화(어느 시점에 가입을 유도할 것인가?) · 게임 아이템 드롭률 최적화 · 배너/버튼 위치, 사이즈, 색상, 폰트, 문구 등 최적화 · 검색엔진의 키워드 검색 결과 최적화 A/B 테스트 절차
처음 실험 설계를 할 때는 무엇을 최적화하기 위한 것인가를 명확히 설정해야 한다. 목표는 세션 시간, 클릭률, 이탈률, 페이지 뷰 수 등 다양하다. 목표 설정과 함께 언제, 얼마나 실험할 것인지 기준값을 설정해야 한다. A/B 테스트 실행 시에는 각 실험 집단에 얼마나 비중을 둘지, 배분 기준을 설정하고 반응 데이터를 수집한다. A/B 테스트를 마친 뒤에는 고객 행동 데이터를 비교/시간/분포 시각화하여 차이를 분석한다. 동시에 통계 검정을 하여 집단 간 차이의 유의성을 확인한다. 마지막으로 결과를 시스템에 적용한 후에는 지속적으로 고객 반응을 모니터링하여 최적화를 유지할 수 있도록 관리해줘야 한다.
A/B 테스트의 주의사항과 단점
A/B 테스트를 설계하고 실행할 때 주의해야 할 점이 몇 가지 있다. 우선 표본 그룹이 편향되지 않도록 무작위 추출을 올바르게 시행하여야 한다. 예를 들어 A 집단에는 남성, B 집단에는 여성으로 나누어서 서로 다른 콘텐츠를 보여주는 것은 의미가 없다. A 집단과 B 집단 간에는 콘텐츠 이외에는 차이가 없어야 한다. 따라서 사용자의 유입 경로, 기기나 운영체제, 성별과 연령 등과 같이 결과에 영향을 줄 수 있는 요소들이 집단 간 차이가 없도록 유의해야 한다. 상황에 따라서 A 집단은 95%, B 집단은 5%로 분리해서 일부 인원에게만 다른 대안을 보여주기도 한다. 이런 경우는 표본 추출과 같기 때문에, 추출 방법에 유의해야 한다.
A/B 테스트의 표본 수는 물론 많을수록 좋지만, 일반적으로 1,000명 이상의 표본으로 테스트를 하는 것이 좋다. 통계적으로는 30명 이상이 되어도 유의성 검증이 가능하지만, 온라인 데이터는 변화가 크고, 클릭률 같은 경우 그 비율이 매우 작은 경우가 많기 때문에 충분한 표본을 확보하는 것이 좋다.
그리고 각 집단의 반응률은 시간대, 요일 등에 차이가 있을 수 있으므로 되도록 24시간 이상 A/B 테스트를 진행해야 한다. 이론적으로 A/B 테스트는 일시적으로 하는 것이 아니라, 지속적으로 진행하는 것이 좋다. 그 이유는 뒤에서 자세히 다루겠다.
마지막으로, A/B 테스트를 기획할 때 한 사용자가 한 가지 변화만 경험하도록 설계해야 한다. 예를 들어 광고 클릭률을 향상시키기 위해 변화를 준다고 했을 때, 폰트, 색상, 사이즈 등의 레이아웃 변화와 추천 알고리즘 변화를 동시에 주어서는 안 된다. 종류가 다른 여러 변화를 동시에 줄 경우, 그 효과를 측정하기가 어렵다. 따라서 타 부서 간의 A/B 테스트가 겹치지 않도록 사전에 상호 조율을 해야 한다.
A/B 테스트의 단점 은, 테스트 가능한 경우의 수는 매우 다양하기 때문에 최적의 조건을 찾을 때까지 오랜 시간과 비용이 필요하다는 것이다. 이에 따라 덜 효과적인 조건의 테스트에 배정되는 인원들은 계속해서 늘어나고, 잠재적 손실 비용은 커져간다. 그리고 트렌드는 계속해서 변한다. 저번 달까지 효과가 더 좋았던 A안이 이번 달에는 효과가 더 안 좋을 수 있다. 이처럼 A/B 테스트는 기회비용이 크고, 빠른 트렌드 변화에 둔감하다는 단점이 있다. A/B 테스트의 이러한 단점을 보완한 방법이 MAB(Multi-Armed Bandit)다.
MAB
강화 학습의 기초 개념이라 할 수 있는 MAB 알고리즘의 출발점은 이렇다. 어느 한 도박꾼이 여러 대의 슬롯 머신이 있는 카지노에 갔다. 이 도박꾼은 주어진 시간 동안만 슬롯 머신을 플레이할 수 있고, 한 번에 하나의 슬롯 머신만 실행시킬 수 있다. 각 슬롯 머신의 수익률은 다르며, 수익률은 계속 변화한다. 이 도박꾼이 주어진 시간 동안 최대의 이익을 얻으려면 어떤 전략으로 슬롯 머신을 플레이해야 할까?
Exploration과 Exploitation 모든 슬롯 머신의 보상은 다르기 때문에, 가장 높은 보상을 주는 슬롯 머신을 최대한 빨리 찾아야 한다. 동시에 수익률이 가장 좋은 슬롯 머신이 바뀌는 경우도 고려해야 한다. 수익률이 가장 높은 슬롯 머신을 찾는 행위를 'exploration'이라 하며, 찾아낸 최적의 슬롯 머신을 계속 플레이하여 이익을 최대화하는 행위를 'exploitation'이라 한다.
· Exploration: 최적의 보상을 얻을 수 있는 방안을 찾기 위해 계속해서 실험하는 것 · Exploitation: 선택한 최적의 방안을 계속 실행하여 이익을 최대화하는 것
Exploration과 exploitation은 trade-off 관계에 있기 때문에, 이 조합을 최적화하여 최대의 이익을 얻는 것이 MAB의 목적이 된다. MAB의 'Multi-armed'는 여러 개의 손잡이를 뜻하고, 'Bandit'은 슬롯 머신을 의미한다. 따라서, 슬롯 머신의 여러 손잡이를 가장 효과적으로 사용하는 알고리즘이 MAB가 된다. 예를 들어 도박꾼 앞에 3대의 슬롯 머신이 있고, 한 시간이 주어지면, 먼저 세 개의 슬롯 머신을 한 번씩 플레이해 본다. 그 중에서 가장 좋은 결과가 나온 슬롯 머신을 계속 사용할 수도 있고, 다른 슬롯 머신도 번갈아가며 테스트해 보고 수익이 더 좋은 슬롯 머신으로 바꿔가며 할 수도 있다. 이처럼 최적의 수익을 내기 위한 전략은 다양하게 나타날 수 있다.
다음은 대표적인 세 가지 MAB 알고리즘이다.
· ε-greedy: 일정 확률로 대안을 무작위로 탐색하는 알고리즘 · UCB: 대안의 결과가 불확실한 것을 우선순위로 탐색하는 알고리즘 · Thompson Sampling: 대안의 결과에 대한 베타 분포를 계산하여 샘플링한 값 중 가장 높은 대안을 탐색하는 알고리즘
ε-greedy ε-greedy 알고리즘은 간단하고 직관적이어서 인기가 많은 알고리즘이다. 1−ϵ1−ϵ의 확률로 현재까지 exploration한 대안 중 가장 성과가 좋은 대안을 선택한다. 나머지 ϵϵ 값의 확률로는 무작위로 대안을 선택한다. ϵϵ 값은 0에서 1 사이의 값을 갖는다. 만약 ϵϵ 값이 0.2라면, 80% 확률로 지금까지 나온 결과 중에서 가장 성과가 좋았던 대안을 선택하여 실행하고, 나머지 20%의 확률로 새로운 대안을 탐색한다. ϵϵ 값이 클수록 새로운 대안을 찾기 위한 exploration 작업을 더 많이 하게 되는 것이다. ε-greedy 알고리즘의 수식은 대략 다음과 같다. 시점 t까지 행동 a의 누적 보상을 표본 평균으로 대안의 가치 Q_t(a)를 추정한다. 추정된 가치가 가장 높은 대안을 1-ε의 확률로 선택하고, 나머지는 다른 대안을 무작위로 선택한다. 만약 선택을 한 번도 하지 않아서 추정치가 없다면 미리 설정된 기본값으로 추정한다. 이 알고리즘은 최적의 대안을 찾기 전에는 합당하지만, 확실한 대안을 찾았음에도 계속해서 ε 값의 확률로 탐색을 해야 한다. 따라서 지속적으로 일정 확률로 이미 확실한 최적의 대안을 선택하지 않는 단점이 있다. 이러한 단점을 보완하기 위해 ε 값을 일정 비율로 감소하도록 하여 시간이 흐르면서 exploration을 적게 하도록 하는 어닐링(Annealing) 알고리즘을 적용하기도 한다.
UCB UCB (Upper Confidence Bound) 알고리즘은 앞의 e-greedy 알고리즘을 좀 더 스마트하게 할 수 있도록 보완한 알고리즘이다. e-greedy 방식은 e 값의 확률로 무작위로 대안을 선택하기 때문에 효과적이지 못하다는 단점이 있다. UCB는 기본 방식은 e-greedy와 마찬가지로 일정 확률로 대안을 탐색하지만, 대안을 탐색하는 방식이 보다 합리적이다. 대안들 중에서도 최적의 수익을 낼 가능성이 더 높은, 즉 불확실성이 강한 대안을 우선적으로 선택한다. 관측된 보상의 표본 평균으로 계산된 대안의 가치에, 얼마나 많은 탐색을 했는지를 함께 고려하여 대안을 평가한다. 탐색을 적게 했다는 것은 그 대안의 보상이 아직 확실하지 않다는 뜻이기 때문에 더 많은 가중치를 주는 방식이다.
수식을 보면, 기존 e-greedy 알고리즘에 보상의 불확실성 수치가 추가되었다. 수식의 t는 시점을 의미하며 c는 exploration의 정도를 나타내는 하이퍼파라미터다. 그리고 N_t(a)는 시점 전까지 해당 대안이 선택됐던 횟수다. 즉 전체 횟수에 로그를 취한 값으로 해당 대안이 선택됐던 횟수로 나누기 때문에, 선택됐던 횟수가 늘어날수록 불확실성 수치는 줄어들게 된다. 보통 ε-greedy보다 우수한 성능을 보이지만, 처음에는 모든 대안들을 한 번씩은 exploration 해야하고, 매 시점마다 불확실 성수치를 계산해줘야 한다는 단점은 있다.
톰슨 샘플링 톰슨 샘플링 (Thompson Sampling)은 넷플릭스나 구글 애널리틱스 (Google Analytics)에서 사용하는 알고리즘으로 최근 가장 좋은 성능을 보여 많이 쓰인다. UCB는 예측한 그대로의 값을 통해 최적의 수익률을 선택하는 결정론적 알고리즘이다. 하지만 톰슨 샘플링은 베타 분포 (Beta distribution)를 사용하여 확률적으로 수익을 추정하고 선택하는 확률적 알고리즘이다. 우선 베타 분포부터 알아보자. 베타 분포는 확률 변수 x의 범위가 0부터 1을 가진다. 베르누이 분포와 같은 이항 분포인데, 베르누이 같은 경우 샘플의 결과가 모두 1이면 μ=1이 되어 과적합이 발생한다. 하지만 베타 분포는 베이지안 방식으로 파라미터를 추정하므로 샘플이 적더라도 안정된 추정값을 얻을 수 있다. 베타 분포는 다음과 같은 형태를 나타낸다. ex) 베타분포 톰슨 샘플링은 사전 수익률을 베타 분포를 통해 다시 추정한다. 그렇기 때문에 exploration을 적게 한 상황에서는 특정 대안이 수익률이 높게 나오더라도 베타 분포에 의해 추정되어 다른 대안을 선택할 수 있는 여지가 생긴다. 그리고 exploration 횟수가 많아질수록 베타 분포의 첨도가 높아져 최적의 대안을 지속적으로 선택하게 된다.
MAB의 활용 분야 MAB의 활용 가능 분야는 다양해서, 기계학습 모델에도 적용이 가능하다. 예를 들어 추천 시스템 모델에서 여러 종류의 협업 필터링과 콘텐츠 기반 필터링 기법을 앙상블하여 사용한다고 했을 때, MAB를 적용하여 최적의 추천 정확도를 보이는 모델을 선택하도록 할 수 있다. 일반적인 앙상블 방식은 대부분 테스트 데이터의 정확도를 가지고 모델 결과를 가중합하여 사용한다. 하지만 MAB를 적용하면 사용자의 실제 반응 정보를 바로 반영하여 실제 반응률이 가장 좋은 모델을 적용한 아이템 추천을 하여 반응률을 극대화할 수 있다. ex) 추천시스템 모델의 MAB 활용
유의확률의 함정
지금까지 회귀 모델이나 A/B 테스트를 알아본 바에 따르면 P 값이라 불리는 유의 확률이 변수 선택 및 모델 평가에 있어 매우 중요하다는 것을 알 수 있다. 그런데 이 유의 확률은 정말 절대적으로 확실한 기준값 일까? 통계 및 데이터 분석을 하는 사람들이면 대부분 p 값이 0.05 이하로 나오면 유의하다고 판단한다. p 값은 일반적으로 '해당 변수의 효과가 없다' 혹은 '집단간 차이가 없다' 라는 귀무가설을 검증하는데 사용된다. p 값이 작다는 것은 그만큼 해당 변수가 귀무가설을 지지하지 않는다는 것을 의미한다.
그런데 p 값은 표본의 크기가 커지면 점점 0으로 수렴하게 되는 특성이 있다. 표본의 크기가 커지면 표본 오차가 작아지고, 결과적으로 p 값도 작아지게 되는 것이다. 예를 들어 연소득과 기부 여부 간의 관계를 알아보기 위한 분석을 수행했을 때, 표본이 30명인 상태에서는 p 값이 0.05보다 크게 나왔다가, 표본을 300명으로 늘리니 p 값이 0.05 미만으로 줄어드는 현상이 발생할 수 있다. 물론 표본을 증가시켰을 때 확실한 차이를 나타내는 관측치들이 추가되어 그런 것일 수도 있다. 하지만 표본이 30명일 때와 300명 일 때의 기부 여부에 대한 연소득 차이는 같을 수도 있다.
분석가의 주관적 판단과 스토리텔링
앞서 다양한 기계학습 분석 방법론과 모델 평가 방법론을 통해 최적의 예측, 분류 결과를 낼 수 있는 방법에 대해서 알아봤다. 이렇게 컴퓨터를 통해 사람이 할 수 없는 고도로 복잡한 계산을 하여 마치 전문가와 같은 결과를 얻어낼 수 있다. 하지만 아무리 AI, 딥러닝이 발전했다 해도 아직 데이터 분석가의 역할은 중요하다. 올바른 데이터를 선택하고 결론을 이끌어내려면, 사람의 지식과 상식, 그리고 창의성이 필요하다. 왜냐하면 데이터에서는 나타나지 않는 사람들의 심리적 요소가 있기 때문이다.
우리는 데이터가 무조건 객관적인 진실만을 나타낸다고 생각해서는 안된다. 1차원적인 데이터는 사람들의 문화나 심리를 나타내지 못하는 경우가 많다. 물론 분석가의 주관적 믿음과 판단으로 결과를 왜곡하거나 오류를 범할 수도 있음을 명심하고 주의해야 한다. 하지만 데이터가 쌓이는 프로세스도 결국 사람이 설계한 것이고, 분석 시스템은 보이지 않는 요소를 고려하지 않는다. 분석가는 데이터를 항상 의심해야 한다. 실제로 데이터가 잘못 입력되어 분석가의 개입이 필요한 경우가 많다.
분석가가 올바른 주관적 판단을 하기 위해서는, 첫째로 해당 분야의 도메인 지식이 수반되어야 한다. 그 분야의 생리를 잘 알지 못하면 무엇이 잘못됐는지 판단할 수 없으며, 따라서 제대로된 판단을 내리기도 힘들다. 제조 공정 데이터를 분석할 때는 공정 설비와 제조 프로세스, 공정 인력의 일하는 방식을 잘 이해해야 한다. 마찬가지로 금융 데이터를 분석할 때는 거래 프로세스, 수수료나 이자 등의 세부 로직, 도메인 용어 등을 잘 숙지해야 한다.
둘째로 통계적 지식을 기반으로 탐색적 데이터 분석(EDA)과 데이터 전처리를 성실히 수행해야 한다. 간혹 도메인에 익숙하거나 시간이 부족하여 이 단계를 소홀히 하는 경우가 있다. 하지만 이 프로세스는 데이터를 깊이 이해하고 오류를 찾아낼 수 있는 중요한 단계이기 때문에 철저히 해야 한다. 전처리가 제대로 되지 않은 데이터는 예측력도 당연히 떨어질 수밖에 없다. 그리고 문제 해결의 과정과 데이터를 꼼꼼하게 기록해두어야 한다. 이는 팀원간의 협업에서도 많은 도움이 되지만, 기록하고 다시 확인하는 과정을 통해 생각을 정리하고 발전시키는 데에 많은 도움이 된다.
셋째로 적극적인 커뮤니케이션과 검증 과정이 필요하다. 분석가가 해당 데이터와 모델에만 매몰되다 보면 시야가 좁아질 수 있다. 찾아낸 중간 결과에 대해서 관련 부서나 제3자의 의견을 적극적으로 구하고 내용을 발전시켜 나가야 한다. 그리고 결과가 나왔을 때 바로 현실에 적용하기보다, 샘플을 통한 A/B 테스트 등을 진행하여 사전 검증을 하는 것이 좋다. 분석가는 검증 결과를 통해 새로운 정보를 얻을 수 있으며 이를 통해 데이터와 모델에 대한 인사이트를 높여 보다 좋은 판단을 내릴 수 있다.
분석가의 올바른 주관적 판단을 위한 필수 요소 · 해당 분야의 풍부한 도메인 지식 · 통계적 지식을 기반으로 탐색적 데이터 분석(EDA)과 전처리 · 적극적인 커뮤니케이션과 데이터, 모델 검증
이렇게 분석가의 주관적 판단이 들어간 분석 결과는 타인을 이해시키고 설득시킬 수 있어야 한다. 그러기 위해서는 스토리텔링이 중요하다. 효과적으로 분석 및 예측 모델링 내용을 전달하려면 듣는 사람으로 하여금 흥미를 느끼고, 이 분석 프로젝트가 왜 필요한지를 공감하도록 해야 한다. 아무리 좋은 결과가 나왔다 하더라도, 듣는 사람이 필요성을 느끼지 못하면 소용이 없다.
일반적으로 몰입도와 전달 효과가 큰 스토리텔링 구조는 "배경-문제(위기)-극복-변화"의 흐름으로 구성된다. 분석 프로젝트의 도메인에 있는 사람들에게 스토리텔링을 할 때는 배경 부분은 생략해도 되지만, 외부 사람과 같이 해당 도메인이 익숙하지 않은 사람들에게는 배경을 간략히 소개하면서 이야기를 시작하는 것이 좋다. 주의할 점은, 무미건조한 수식이나 복잡한 표는 최소화해야 한다. 간혹 자신의 전문성을 어필하기 위해 필요 이상으로 어려운 용어나 수식 등을 나열하는 경우가 있다. 하지만 이는 듣는 이로 하여금 흥미를 떨어뜨릴 뿐 아니라 이야기의 본질을 흐리게 한다.