모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!
🩸 저번 글에서는 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 로부터 구해진 값들을 가지고 실제 데이터프레임을 만들어보고 시각화 한 후 분석까지 진행하겠습니다😊😊.
'🐍 파이썬 데이터 분석 프로젝트 > 🫀 심혈관질환 데이터 분석' 카테고리의 다른 글
🫀 심혈관질환 데이터 분석 10. 주성분분석 (0) | 2023.02.02 |
---|---|
🫀 심혈관질환 데이터 분석 09. Kulczynski (0) | 2023.02.01 |
🫀 심혈관질환 데이터 분석 07. 패턴분석 (0) | 2023.01.31 |
🫀 심혈관질환 데이터 분석 06. 패턴분석 데이터 전처리 (0) | 2023.01.31 |
🫀 심혈관질환 데이터 분석 05. 상관관계 분석 (0) | 2023.01.31 |