현대의 데이터 과학 및 머신러닝 분야에서 데이터의 양과 품질은 매우 중요한 요소입니다. 그러나 실제 데이터를 수집하고 관리하는 것을 종종 어려운 일입니다. 특히 표 형태의 데이터를 생성하거나 분석할 때는 데이터의 특성을 잘 이해하고 합성하는 것이 중요합니다. 이에 따라 GAN(Generative Adversarial Networks)와 같은 딥러닝 모델이 부상하였습니다.
GAN은 가짜 데이터를 생성하는데 있어서 매우 유용한 기술로, 특히 CTGAN(Conditional Tabular GAN)은 조건부 확률 밀도를 활용하여 표 형태의 데이터를 생성하는 데에 특화되어 있습니다. CTGAN은 실제 데이터의 특성을 잘 반영하면서 합성 데이터를 생성할 수 있는 능력으로 데이터 분석 및 모델 검증 등 다양한 분야에서 활용될 수 있습니다.
CTGAN으로 합성데이터 생성하는 방법
표 형태의 데이터를 합성 데이터로 생성할 때 조건부 확률 밀도를 활용하는 방법입니다. CTGAN을 통해 tabular data를 보다 좋은 성능으로 생성할 수 있다고 합니다.
이 모델은 NeurlIPS 2020 컨퍼런스에서 Modeling Tabular data using Conditional GAN이라는 제목의 논문으로 발표된 GAN 기반 딥러닝 합성기 입니다. SDV은 합성 데이터를 생성하고 평가하기 위한 공개 소스 사용 가능 Python 라이브러리 입니다. SDV 라이브러리로 데이터 패턴을 학습하여 합성데이터를 생성할 수 있습니다.
설치
- pip을 사용하여 SDV 1.0을 설치합니다.
pip install sdv
- conda를 사용하여 SDV 1.0을 설치합니다.
conda install -c pytorch -c conda-forge sdv
설치확인
SDV가 올바르게 설치되었는지 확인합니다.
import sdv
print(sdv.__version__)
필요한 라이브러리를 임포트 합니다.
import pandas as pd
from sdv.metadata import SingleTableMetadata
from sdv.single_table import GaussianCopulaSynthesizer
합성데이터 생성
데이터 로드
import pandas as pd
df = pd.read_csv("./data/train.csv")
메타데이터 추출
metadata = SingleTableMetadata()
metadata.detect_from_dataframe(df)
metadata.to_dict()
합성 데이터 모델 학습
1) GussianCopula 모델 사용하여 합성데이터 만들기
synthesizer = GaussianCopulaSynthesizer(metadata)
synthesizer.fit(df)
synthetic_data = synthesizer.sample(num_rows=100000)
2) CTGAN 모델 사용하여 합성데이터 만들기
from sdv.single_table import CTGANSynthesizer
# 모델 정의
synthesizer = CTGANSynthesizer(
metadata, # required
enforce_rounding=False,
epochs=100,
verbose=True
)
synthesizer.get_parameters()
metadata = synthesizer.get_metadata()
# 생성 모델 학습
synthesizer.fit(df)
# 합성 데이터 생성
synthetic_data = synthesizer.sample(num_rows=100000)
# 모델 저장
synthesizer.save(
filepath='my_synthesizer.pkl'
)
저장된 모델을 불러와서 합성 데이터 생성하기
rom sdv.single_table import CTGANSynthesizer
synthesizer = CTGANSynthesizer.load(
filepath='my_synthesizer.pkl'
)
synthetic_data = synthesizer.sample(num_rows=100000)
# 데이터 csv로 저장
synthetic_data.to_csv('./synthetic_data_train.csv', encoding='utf8', index=False)
합성 데이터 평가 1 - 데이터 유효성 평가
from sdv.evaluation.single_table import evaluate_quality
quality_report = evaluate_quality(
real_data=df,
synthetic_data=synthetic_data,
metadata=metadata)
quality_report.get_details(property_name='Column Shapes')
합성 데이터 평가 - 실제 데이터와 분포 비교 시각화
from sdv.evaluation.single_table import get_column_plot
fig = get_column_plot(
real_data=df,
synthetic_data=synthetic_data,
metadata=metadata,
column_name='대출금액'
)
fig.show()
더 다양하고 자세한 기능은 SDV 라이브러리의 Document를 확인할 수 있습니다.
결론적으로, CTGAN과 같은 GAN기반의 딥러닝 모델은 조건부 확률 밀도를 활용하여 표 형태의 데이터를 생성하는데 매우 유용한 도구입니다. CTGAN을 사용하면 실제 데이터와 유사한 패턴을 갖는 합성 데이터를 생성할 수 있으며, 이는 데이터 분석, 모델 검증 등 다양한 분야에서 유용하게 활용될 수 있습니다. 따라서 CTGAN과 SDV와 같은 도구를 활용하여 데이터 합성 및 분석에 대한 연구와 개발을 진행함으로써 데이터 기반 의사결정 및 문제 해결에 도움을 줄 수 있습니다.
'취미' 카테고리의 다른 글
[금융 데이터] 고객 대출 등급 분류 모델 개발 (0) | 2024.01.28 |
---|---|
[OCR] Tesseract 설치 방법 - 리눅스 환경 (0) | 2024.01.27 |
[Git] 깃허브 사용법 / 깃허브 시작하기 (0) | 2024.01.24 |
[Anaconda] Install Anaconda3, Jupyter notebook with CLI (0) | 2024.01.24 |
[STT] Python STT AWS Transcribe (0) | 2024.01.23 |