필요성
.csv 파일에 있는 여러가지 feature 을 활용해 어떠한 질병을 예측할 때, 1 라벨 (걸렸음) 이 0 라벨보다 당연히 훨씬 적을 것이다. 이 때 활용할 수 있는 tabular gan 이 새로 등장하여서 사용해보았다.
설치법
(맨 처음 나온 TGAN 업그레이드 버전이다. TGAN 은 텐플 1로 작성되어있어서 cuda 11 과 버전 충돌이 있기도 하고 메모리를 너무 많이 잡아먹는 문제가 있다.)
나는 conda 가상환경이 이상한지 계속 pip 으로 제대로 깔리지 않아서 우선 경로를 제대로 지정해주었다.
pip -t /home/jy/anaconda3/envs/KOG/lib/python3.7/site-packages/ install ctgan
사용법
그 이후 사용법은 ct gan 깃헙에 너무 친절하게 나와있어서 큰 문제가 없었다.
ct-gan 변수의 분포 점검 1) 연속형 변수
연속형 변수의 경우 Kolmogorov-Smirnov test 를 사용할 수 있다고 한다.
분포가 얼마나 일치하는지를 알아보고 싶은 두 연속형 변수 x,y를 밑 코드에 넣어준다.
from scipy.stats import ks_2samp
ks_2samp(x, y)
ct-gan 변수의 분포 점검 2) 범주형 변수
범주형 변수의 경우 카이제곱 검정을 사용할 수 있다고 한다.
카이제곱 검정은 이전에 잠깐 공부했던 적이 있는데, 복습할 겸 다시 조금 더 공부해보았다.
카이제곱분포의 목적은 세 가지이다.
- 적합도 검정 (Goodness of fit) ; 확인하려는 변수가 특정 분포를 따르는지 fit 여부를 결정
- 독립성 검정 ; 두 범주형 변수가 서로 독립적인지
- 동질성 검정 ; 두 범주형 변수가 같은 분포를 따르는지
독립성 검정과 동질성 검정은 동일하고 확률값도 동일하지만 결국 목적이 다르므로, 해석되는 의미가 달라진다고 한다.
카이제곱 검정 복습
가령 증강하기 전 라벨 1의 특징을 가진 데이터가 30개였고 그 중 성별 변수 20개는 남성이고 10개는 여성이었으며, 총 130명을 더 증강하였는데 이 증강된 데이터 130명의 성별 변수 50개는 남성이고 80개는 여성이라면
statext 를 사용하여서 원래 성별 변수와 증강된 성별 변수가 얼마나 통계적으로 비슷한지 가늠할 수 있다.
Typical example of the data set:
Sample 1: { 20 10 }
Sample 2: { 50 80 }
testing...
이렇게 넣어주면
CHI-SQUARE INDEPENDENCE TEST
Ho: Rows and columns are independent.
Ha: There is a relationship between rows and columns.
(significance level = 0.05)
Observed
(Expected)
20 10 | 30
(13.1250) (16.8750) |
50 80 | 130
(56.8750) (73.1250) |
--------------------------------------
70 90 | 160
DF = 1
Chi-Sq = (20 - 13.125)^2 / 13.125 +
(10 - 16.875)^2 / 16.875 +
(50 - 56.875)^2 / 56.875 +
(80 - 73.125)^2 / 73.125
= 7.8795
Critical value: ChiSq(1, 0.05) = 3.8415
p-value: P(>ChiSq) = 0.005
Reject Ho at the significance level = 0.05
이렇게 나온다 !