연속 변수와 이진 변수 사이의 상관 관계를 측정하는 방법
피어슨 상관계수와 유사하지만, 이진 변수를 고려한 것이 특징이다.
Scipy의 pointbiserialr
from scipy.stats import pointbiserialr
correlation_org_lst, correlation_dealout_lst = [], []
p_value_org_lst, p_value_dealout_lst = [], []
feature_lst = train.columns[1:-1].to_list()
# 점 이연 상관계수 계산 및 출력
for feature in feature_lst:
correlation_org, p_value_org = pointbiserialr(train[feature], train['Outcome'])
correlation_org_lst.append(correlation_org)
p_value_org_lst.append(p_value_org)
# 데이터프레임 생성
correlation_dict = {'Feature': feature_lst,
'correlation_org': correlation_org_lst,
'p_value_org' : p_value_org_lst}
correlation_df = pd.DataFrame(correlation_dict)
display(correlation_df)
Python
복사
Feature | correlation_org | p_value_org |
Pregnancies | 0.211340 | 5.102077e-08 |
Glucose | 0.460108 | 1.798069e-35 |
BloodPressure | 0.049459 | 2.072204e-01 |
SkinThickness | 0.052094 | 1.840018e-01 |
Insulin | 0.123246 | 1.616097e-03 |
BMI | 0.294390 | 1.676326e-14 |
DiabetesPedigreeFunction | 0.173584 | 8.283545e-06 |
Age | 0.218183 | 1.818929e-08 |
점 이연 상관관계 시각화
import matplotlib.pyplot as plt
import seaborn as sns
# Seaborn barplot
plt.figure(figsize=(16, 8))
plt.subplot(2,2,1)
sns.barplot(x='Feature', y='correlation_org', data=correlation_df)
plt.gca().set_title("Point Biserial Correlation [original train]")
plt.gca().set_xticklabels(feature_lst, rotation=30)
plt.subplot(2,2,2)
sns.barplot(x='Feature', y='p_value_org', data=correlation_df)
plt.gca().set_xticklabels(feature_lst, rotation=30)
plt.gca().set_title("p_value [original train]")
plt.show()
Python
복사
BloodPressure과 Skin Thickness 변수를 제외하고 나머지 변수들에 대해서는 타겟 변수와 유의미한 상관관계가 있다고 판단할 수 있다.