필요성

.csv 파일에 있는 여러가지 feature 을 활용해 어떠한 질병을 예측할 때, 1 라벨 (걸렸음) 이 0 라벨보다 당연히 훨씬 적을 것이다. 이 때 활용할 수 있는 tabular gan 이 새로 등장하여서 사용해보았다.

ct 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 를 사용할 수 있다고 한다.

Kolmogorov-Smirnov test

관련 스택익스채인지 답변

분포가 얼마나 일치하는지를 알아보고 싶은 두 연속형 변수 x,y를 밑 코드에 넣어준다.

from scipy.stats import ks_2samp
ks_2samp(x, y)

ct-gan 변수의 분포 점검 2) 범주형 변수

범주형 변수의 경우 카이제곱 검정을 사용할 수 있다고 한다.

카이제곱 검정은 이전에 잠깐 공부했던 적이 있는데, 복습할 겸 다시 조금 더 공부해보았다.

카이제곱분포의 목적은 세 가지이다.

  • 적합도 검정 (Goodness of fit) ; 확인하려는 변수가 특정 분포를 따르는지 fit 여부를 결정
  • 독립성 검정 ; 두 범주형 변수가 서로 독립적인지
  • 동질성 검정 ; 두 범주형 변수가 같은 분포를 따르는지

독립성 검정과 동질성 검정은 동일하고 확률값도 동일하지만 결국 목적이 다르므로, 해석되는 의미가 달라진다고 한다.

카이제곱 검정 복습

선택 영역_342

가령 증강하기 전 라벨 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

이렇게 나온다 !