본문 바로가기
오늘의 복습 정리

데이터 분석/이변량 분석(target이 범주일 때)

by misohee 2023. 2. 23.

범주(X)-->범주(Y) 데이터 분석

교차표 만들기

pd.crosstab(Y데이터열, X데이터열)

                 #(옵션) nomalize =  columns, index, all 중 기준으로 설정할 것 

                 #비율로 바꾸는 옵션           

  여성 남성
복숭아 알러지O 0.4 0.6
복숭아 알러지X 0.7 0.3

 Ex) normalize=index (행의 합: 1) 복숭아 알러지있는 사람 중의 여성 남성 비율

  여성 남성
복숭아 알러지O 0.2 0.1
복숭아 알러지X 0.8 0.9

 Ex) normalize=columns (열의 합: 1)  여성 중 복숭아 알러지가 있는 사람과 없는 사람의 비율

  여성 남성
복숭아 알러지O 0.1 0.2
복숭아 알러지X 0.4 0.3

 Ex) normalize=all (전체의 합: 1) 전체 사람 중 복숭아알러지가 있는 여성 비율

 

교차표 시각화

from statsmodels.graphics.mosaicplot import mosaic #패키지의 모듈의 하위모듈로부터 모자이크 함수 가져오기

mosaic( 데이터프레임, [ 행(X데이터열) , 열(Y데이터열) ])

plt.axhline( Y데이터열 .mean( )) # Y데이터의 전체평균 수평선 그리기

범주별 양과 비율을 그래프로 보여준다.

x축의 길이는 X축 범주의 비율이다.

Y축의 길이는 Y축 범주의 비율이다.

각 면적은 전체 면적을 1로 뒀을때 해당 범주에 속하는 데이터들의 비율이다.

 

해석

전체평균 선을 그리고,

전체평균선과 범주를 나눈 선이 멀리 떨어질수록 관련이 크다.

(아예 관련이 없다면 전체 평균선과 범주를 나눈 선이 겹친다.)

 

카이제곱 검정

1. 교차표 만들기

데이터 = pd.crosstab(Y데이터열X데이터열) #nomalize 옵션 사용하면 안됨

 

2. 카이제곱 검정

spst.chi2_contingency( 데이터 )

    출력되는 결과: 카이제곱 통계량,

                             p-value,

                             자유도,

                             기대빈도

 

카이제곱 통계량

((기대빈도와 실제 관측값의 차이)의 제곱/기대빈도 )들의 합

기대빈도 : 두 변수간 아무 관련이 없을때 기대되는 비율 (귀무가설이 참일때의 비율)

범주의 수가 늘어날수록 값은 커진다.

 

해석 :

카이제곱 통계량이 클수록 기대빈도(아무관련없는 때의 값)와 실제 관측값의 차이가 크다. (대립가설이 옳다)

카이제곱 통계량이 자유도의 약 2배보다 크면, 차이가 있다고 본다. (통상적으로)

자유도=범주의 수 - 1

카이제곱 검정에서 기준이 되는 자유도 계산법 :

(x변수의 자유도) X (y변수의 자유도)  #Ex) x변수가 4개의 범주, y변수가 6개의 범주를 가졌다면,

                                                                    3 X 5 = 15 (자유도 = 15), 카이제곱 통계량이 30보다 크면 차이가 크다고 본다.


숫자(X)-->범주(Y) 데이터 분석

시각화

kdeplot, histogram 그래프 그리기

sns.kdeplot (x, data, hue = y)

     옵션) common_norm=False (y범주 각각 kde그리기) #범주별 분포로 비교하는 그래프 그리기

              multiple = 'fill' (모든 구간에 대한 100%비율로 kde그리기) #범주별 비율로 비교하는 그래프 그리기

kde그래프] 두 변수가 아무 관련 없을 때와 실제 데이터의 그래프가 완전히 일치하면 두 변수는 전혀 관련이 없다.

 

해석: 범주별 분포로 그린 그래프가 겹치면 두 변수간 관계가 없다. 많이 떨어져있을수록 관련이 크다.

          (common_norm = False) 범주별 분포로 그린 그래프가 겹치는 지점

          = (multiple = 'fill') 범주별 비율로 그린 그래프가 전체 평균선과 겹치는 지점 

 

수치화

완전히 적절한 수치화(가설검정)방법은 없다.