R을 사랑한 느림보 데이터 분석가
재현 데이터(Synthetic Data) 생성 - 생성 기법 본문
안녕하세요. 재현 데이터 생성에 대한 마지막 글이 될 포스팅이 되겠습니다.
재현 데이터를 생성하는데 필요한 통계와 ML 지식에 대한 주제를 생성 기법이라는 것으로 소개하려고 합니다.
1. 재현 데이터(Synthetic Data) 생성 - 개념 2. 재현 데이터(Synthetic Data) 생성 - 라이브러리 3. 재현 데이터(Synthetic Data) 생성 - 생성 기법 |
재현 데이터를 생성하기 위해선 단순 복제, 집단 기준 평균 등 가볍게 재현 자료를 생성할 수 있으며, 통계나 알고리즘 구현만 가능하다면 생성할 수 있는 방법은 많이 있다.
그중에서도 과거 포스팅에서도 자주 언급했었던 CART, GAN과 검증하기 위해 사용했던 KS통계량, MSE에 대한 설명이다.
CART(Classification And Regreesion Trees)
CART의 경우 의사결정나무(Decision Tree) 계열 알고리즘이다. 앙상블 계열 알고리즘에 대한 이해도를 높이기 위해서는 의사결정나무 알고리즘의 메커니즘을 사전에 이해하는 것이 좋다.
의사결정나무는 나무 구조 기반으로 분기(분할)와 가지치기라는 특징을 가지고 있다.
노드의 순도(purity)가 높아지는 방향으로 분기하는데, 유명한 트리 계열 알고리즘인 ID3, C4.5, CART는 분기 방식을 다르게 취하고 있다. 불순도를 측정하는 지표로 엔트로피와 지니지수를 사용하며, 엔트로피를 통해 정보 이득(Information gain)과 이득율(gain ratio)을 구한다. 또한, 모델의 과적합 위험을 낮추고 리소스를 줄이기 위해 가지치기를 진행한다.
구분 | ID3 | C4.5 | CART |
트리 유형 | 분류 트리 | 분류 트리 | 분류 트리, 회귀 트리 |
분기 방식 | Information Gain | gain ratio | Gini index |
분기 유형 | 다중 분기 | 다중 분기 | 이진 분기 |
가지치기 | X | O | O |
연속성 처리 | X | O | O |
결측치 처리 | X | △ | O |
CART는 분류 트리(Classification Tree)와 회귀 트리(Regression Tree) 둘 다 만들 수 있는 알고리즘으로 목표변수(종속변수)가 범주형, 연속형 모두 처리할 수 있다. 한 노드에서 두 개의 자식 노드로만 분기하기 때문에 이진 분기(Binary Split)로 진행하며, 순도가 높아지는 방향으로 분기하기 위해 불순도 측정 시 지니지수를 활용하여 분기한다. 회귀 트리는 목표변수가 연속형으로 해당 값을 예측하기 위해 사용되며, 잔차 감소(Residual Reduction) 방식으로 분기한다. 사이킷런에 내장된 트리는 CART를 사용하고 있다.
장점
- 다른 알고리즘에 비해 수학적 지식이 없어도 결과를 해석하고 이해하기 쉽다.
- 이상치에 민감하게 반응하지 않는다.
단점
- 과적합 가능성이 높다.
의사결정나무에 대해 더 알고 싶다면, '더 읽을거리'를 참고 바란다.
➕더 읽을거리
GAN(Generative Adversarial Networks)
GAN은 딥러닝(Deep learning) 계열 알고리즘이다. 많이 알고 있는 CNN, RNN, LSTM은 어떤 값을 분류하거나 예측하기 위한 구분 모델(Discriminative Model)이라면, GAN은 train data의 특징을 학습하여 유사한 새로운 데이터를 생성하는데 목적이 있는 생성 모델(Generative Model)이다.
GAN은 생성자(Generator)와 구분자(Discriminator)라는 두 개의 신경망이 경쟁하며 학습하는 구조이다. 생성자는 실제 데이터의 분포를 학습하여 유사한 데이터를 생성해 구분자를 속이려 시도하며, 구분자는 실제 데이터와 만들어진 가짜 데이터를 분류하기 위해 노력한다. 두 신경망 모델은 번갈아가면서 학습을 진행하며, 구분자가 실제 데이터와 가짜 데이터를 50% 확률로 구분할 수 있게 되는 균형점에서 학습이 종료된다. 결과적으론 생성자가 유사한 데이터 분포를 학습하게 된다. WGAN, Cycle GAN, Style GAN, CTGAN 등 GAN은 꾸준히 개발되고 있으며, 큰 틀에서는 생성자와 구분자가 학습하는 것은 크게 다르지 않다.
한계
- 모드 붕괴(mode collapse)로 생성자와 구분자 중 하나가 학습이 너무 잘 돼서 다른 모델이 학습이 진행되지 않는다.
➕더 읽을거리
MSE(Mean Squared Error)
MSE는 평균 제곱 오차라고 불리며, 실제 값과 예측 값 간의 차이를 제곱하여 평균을 낸다. 각각의 데이터 포인트가 회귀선을 중심으로 위아래에 위치해 있어도 제곱을 통해 음수값을 가질 수 없으며, 0에 가까워질수록 차이가 발생하지 않는다. 회귀 모델 평가 시 MSE를 사용할 경우 0에 가까워질수록 좋은 모델이란 진단을 내린다.
그 밖에 오차를 측정하는 방법으로 MAE, RMSE, MAPE 등이 존재하며, 실제 값과 예측한 값의 차이가 얼마큼의 차이를 보여주는지 절댓값, 제곱, 제곱근 등 여러 방식으로 지표를 낸다.
K-S 통계량 (Kolmogorov-Smirnov statistic)
K-S 통계량은 누적 분포 함수(CDF, Cumulative Distribution Function)를 기반으로 하는 비모수 검정(non-parametric test)으로 정규성 조건이 충족되는지 확인하기 위한 기법이다. 두 분포를 비교하기 위해 분포와 분포 사이의 거리 차이를 수량화한다. K-S 통계량은 일표본(One-sample) 검정과 2-표본(Two-sample) 검정으로 나눈다.
일표본의 경우, 경험 분포(Empirical Distribution)가 모집단의 확률 분포(정규분포 또는 특정 분포)와 얼마나 유사한지 누적 분포를 이용하여 비교하는 방법이다.
2-표본의 경우, 두 개의 경험 분포를 누적 분포로 비교하여 두 표본이 동일한 분포에서 나온 것인지 검정한다.
'정규분포'와 '정규분포의 누적분포함수'에서 빨간색 곡선은 표준 정규 분포와 표준 정규 분포의 누적분포함수를 표현한다.
'K-S test'에서는 빨간색 선은 정규분포(또는 특정 분포)를 표현하며, 파란색 선은 경험적 CDF를 표현한다.
➕더 읽을거리
마지막으로
재현 데이터를 생성하기 위한 기법으로 CART와 GAN에 대한 설명을 마친다. 또한 생성한 재현 데이터를 검증하기 위해 MSE와 K-S 통계량에 대한 설명을 했으며, 이 방법론이 재현 데이터를 검증하는 여러 방법론 중 일부라는 것이다. synthpop패키지(R)에서는 MSE를 이용하였고, SDV라이브러리(Python)에서는 K-S 통계량을 사용했다는 것을 기준으로 기술하였다.
CART의 경우 트리 알고리즘으로 앙상블, 딥러닝 계열의 지식을 얻기 위한 밑거름이 되며, GAN은 컴퓨터 비전에서 많이 활용되고 꾸준히 연구 개발되는 것으로 개념을 알 필요가 있다는 것을 다시 한번 강조하고 싶다. MSE는 회귀 관련 모델에서 많이 쓰이며, K-S test 역시 신용평가모형을 검증하기 위한 지표로 활용도가 높은 것으로 알려져 있다.
MSE 같은 경우 데이터 분석가라면 누구나 들어보는 필수 지식으로 설명하기 어려웠고, 오히려 수식 하나 추가하는 것이 더 깔끔할지도 모른다. 반면, GAN의 경우 내용이 너무 방대하고 글로 표현하고 이해하기엔 한계가 있어 깊이 있는 설명은 최대한 피했다.
비록, 심도 깊게 설명하지 못했지만, 이 글을 통해서 지식을 얻어가거나, 개념을 다져갔으면 좋겠다.
Reference
도서
조우쯔화(2020), "단단한 머신러닝", 제이펍
솔라리스(2018), "텐서플로로 배우는 딥러닝", 영진닷컴
전용문 외 3인(2020), "2021 빅데이터분석기사 필기", 위키북스
웹사이트
Decision Tree(의사결정 나무), 접근일: 2024-01-21, https://velog.io/@woongstar/Decision-Tree%EC%9D%98%EC%82%AC%EA%B2%B0%EC%A0%95-%EB%82%98%EB%AC%B4
Syrvey of the Decision Trees Algorithms (CART, C4.5, ID3), 접근일: 2024-01-21, https://medium.com/@abedinia.aydin/survey-of-the-decision-trees-algorithms-cart-c4-5-id3-97df842831cd
의사결정 나무 (Decision Tree) CART 알고리즘 설명, 접근일: 2024-01-21, https://tyami.github.io/machine%20learning/decision-tree-4-CART/#binary-tree
CART (Classification And Regression Tree) in Machine Learning, 접근일: 2024-01-21, https://www.geeksforgeeks.org/cart-classification-and-regression-tree-in-machine-learning/?ref=lbp
GAN 설명 (Generative Adversarial Networks란?, GAN 증명, GAN 한계), 접근일: 2024-01-21, https://process-mining.tistory.com/169
Linear Regression Assumptions and Diagnostics in R: Essentials, 접근일: 2024-01-21, http://www.sthda.com/english/articles/39-regression-model-diagnostics/161-linear-regression-assumptions-and-diagnostics-in-r-essentials/#comments-list
Kolmogorov-Smirnov test 위키피디아, 접근일: 2024-01-21, https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test
'스터디 노트' 카테고리의 다른 글
dataiku(데이터이쿠) - Data Preparation Quick Start (1) | 2024.07.03 |
---|---|
도커 초보자의 몸통박치기(환경셋팅 프로세스 및 시행착오) (1) | 2024.02.04 |
재현 데이터(Synthetic Data) 생성 - 라이브러리 (py-synthpop) (1) | 2024.01.07 |
재현 데이터(Synthetic Data) 생성 - 라이브러리 (SDV) (1) | 2023.12.24 |
재현 데이터(Synthetic Data) 생성 - 개념 (0) | 2023.12.09 |