🐍 파이썬 데이터 분석 프로젝트/🫀 심혈관질환 데이터 분석

🫀 심혈관질환 데이터 분석 08. 카이제곱검정

nyamin9 2023. 2. 1. 12:40

모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!

 

 


 

🩸 저번 글에서는 support, confidence, lift를 가지고 함께 등장하는 attribute 들을 알아보았습니다. 이번 글에서는 이 수치들이 가질 수 있는 문제들을 해결하기 위한  Null-Invariant Measures 를 사용하여 패턴을 분석할 것입니다.

 

🩸 코드 진행의 이해를 위해 이번 글에서 사용할 데이터프레임을 먼저 살펴보겠습니다.

 

 

📌 1. pre_tran : 수치형/범주형 attribute가 섞여있던 원래 데이터를 범주형 데이터로 만든 것

 

📌 2. transaction : pre_tran을 사용하여 만든 최종 트랜잭션 데이터 - Boolean 표현형

 

 


🫀 1. Null-Invariant Measures 개념

 

🩸 transaction dataframe에서 Null data의 개수가 많은 경우를 미연에 방지하기 위해서 Null Invariant한 metric을 사용합니다.

 

🩸 대표적으로  Jaccard, kulczynski, IR, chi-square, p-value 를 사용합니다.

 

▪ Jaccard : 교집합/합집합. 두 집합이 동일하면 1, 공통의 원소가 하나도 없으면 0

 

 kulczynski : (0.5) * ((교집합/X) + (교집합/Y)). 두 집합이 동일하면 1, 공통의 원소가 하나도 없으면 0

       

    ▪ 0.5를 기준으로 두 집합의 관계가 negative인지 positive 인지 파악

 

 IR : |X-Y| / 합집합. 데이터의 분포 형태를 파악하는 데 사용.

 

 chi-square : 데이터의 연관관계 분석. 그 값이 클수록 서로 연관성이 깊은 집합임을 의미.

 

 p-value : 유의확률을 제공해 대립가설 채택 여부를 판단.

 

 

🩸 일반적으로 chi-square가 크고, kulczynski가 작으면 negative하다고 말할 수 있습니다.

 

 

🩸 예를 들어, kulczynski가 0.1 이고 IR이 0.98, chi-square가 111 정도로 나타나면

 

  ▪ 두 집합의 관계는 negative하며, 데이터의 분포가 불균형적이라는 것을 의미합니다.

 

 


🫀 2. chi-square 계산

 

# chi-square 계산(original cardio dataframe의 attribute 기준)
# scipy.stats의 chi2_contingency를 통해서 contingency table 생성.
# contingency table을 바탕으로 chi-square와 p-value 계산.

pre_tran_2 = pre_tran.drop('cardio', axis = 1)
chi_list_origin = pd.DataFrame()

from scipy.stats import chi2_contingency

for i in range(len(pre_tran_2.columns)):
    f=pre_tran_2.columns[i]
    contigency = pd.crosstab(pre_tran_2[f],pre_tran['cardio'])
    chi, p, dof, expected = chi2_contingency(contigency)
    chi_list_origin = chi_list_origin.append((pd.DataFrame
                      ({'chi' :chi, 'p-value':p}, index = [pre_tran_2.columns[i]+" & cardio"])))
    
chi_list_origin = chi_list_origin.sort_values('chi', ascending = False)
chi_list_origin

 

 

 

📌 위의 데이터프레임처럼 각 original dataframe의 attribute와 cardio 간의 chi-square 값과 p-value 값이 구해집니다.

 

📌 이렇게 수치만으로 비교하면 번거로우니까 한번 시각화해서 살펴보도록 하겠습니다.

 

# Category Data 기준 Attribute의 Cardio와의 chi-square 연산 결과 시각화

fig = go.Figure()
fig.add_trace(
    go.Scatter(
    x = chi_list_origin.index, y = chi_list_origin['chi'], 
    mode = 'markers+lines+text',
    text = chi_list_origin['chi'].round(3), 
    textposition = 'top right', 
    textfont_size = 15))

fig.update_layout(
    {
        'title' : {'text':'Attribute-Cardio 별 Chi-Square 값', 'font':{'size' : 25}},
        'xaxis' : {'showticklabels':True, 'tickfont' : {'size' : 15}},
        'template' : 'plotly_white'
    })

fig.show()

 

 


🩸 이렇게 해서 별로 길지 않은 코딩을 통해 간단하게 chi-square 값과 p-value를 구할 수 있었습니다. 하지만 1절에서 개념을 살펴볼 때 보았듯 chi-square 값만 가지고 이들간의 관계를 단정짓기는 어렵습니다. 따라서 이 값들 뿐만 아니라 다른 Null-invariant measure들까지 사용해서 복합적으로 분석할 것입니다.

 

🩸 다음 글에서는 이러한 measure 로부터 구해진 값들을 가지고 실제 데이터프레임을 만들어보고 시각화 한 후 분석까지 진행하겠습니다😊😊.