2022. 10. 17. 15:02ㆍ코딩공부/Python
예를 들어, GDP와 기대수명 간의 관계, 키와 몸무게 간의 관계를 보자면 각각 두 변수 간의 선형적 관계를 상관(Correlation)이라고 하며, 이러한 관계에 대한 분석을 상관분석(correlation analysis)라고 합니다.
당뇨와 그에 영향을 미치는 변수들 간의 관계를 분석해보자!
먼저 데이터는 sklearn에서 제공하는 datasets을 불러왔다
import pandas as pd
import numpy as np
from sklearn import datasets
data = datesets.load_diabetes()
데이터가 dictionary 형태이므로 어떤 key를 가지는지 확인해 보면
이렇게 나오고 여기서 data, target, feature_name 세가지 key만 사용할 것이다.
데이터의 형태의 길이가 같은지 확인해보아야 한다!
여기서 target은 당뇨병의 수치이고 나멎 feature names에 속하는 age, sex, bmi등은 변수이다
즉, 442명의 사람들을 상대로 10가지 특성을 나열한 것
bmi 변수와 당뇨병의 수치(target)가 어떤 관계를 가지는지 살펴보자!
우선 상관계수를 파악하기 전에 산점도를 그려 두 변수 간에 관련성을 시각적으로 파악할 수있다
산점도는 직교 좌표계를 이용해 두개 변수 간의 관계를 나타내는 방법이다.
X = df.bmi.values
Y = df.index.values
import matplotlib.pyplot as plt
plt.scatter(X, Y, alpha=0.5)
plt.title('TARGET ~ BMI')
plt.xlabel('BMI')
plt.ylabel('TARGET')
plt.show()
matplotlib에서 제공하는 scatter()을 통해 그린 결과이다
두 변수는 서로 양의 관계를 이루는 것으로 보인다
산점도를 이용하면 두 변수간의 직선적인 관계를 대략적으로 파악은 가능하지만, 두 변수 사이의 관계를 어떠한 수치로 표현하지는 않는다.
그렇기에 우리는 두 변수 간의 관계를 수치로 표현하기 위해 공분산 또는 상관계수를 이용한다.
공분산은 2개의 확률변수의 상관정도를 나타내는 값인데, 만약2개의 변수 중 하나의 값이 상승하는 경향을 보일 때 다른 값도 상승하면서 공분산의 값은 양수, 반대로 다른 값이 하강하는 경향을 보이면 공분산의 값은 음수가 나옴
공분산을 구하는 방법은 여러가지가 있는데 직접 식을 계산하면
이러한 결과가 나오고
더 편하게 사용하려면 numpy의 cov()를 이용하면 된다.
결과는 두 방법 모드 비슷한 값이 나왔고 양의 값이 나왔다는 것을 알 수 있다
공분산은 상관관계의 상승 혹은 하강하는 경향을 이해할 수는 있으나 2개 변수의 측정 단위의 크기에 따라 값이 달라지므로 절대적 정도를 파악하기에는 한계가 있다. 즉, 2.15가 어느 정도의 양의 상관관계인지를 가늠하기 쉽지 않다.
그래서 공분산을 표준화 시킨 상관계수를 좀 더 많이 사용한다.
상관계수는 각 변수의 표준편차를 분모로 나누어 주면 된다.
당연히 numpy의 corrcoef()함수를 이용하면,
상관계수는 -1에서 1사이의 값을 가지기에는 0일 경우에는 두 변수 간의 선형관계가 전혀 없다는 것을 뜻합니다.
보통 0.3과 0.7사이면, 뚜렷한 양적 선형관계로 0.7과 1.0 사이는 강한 양적 선형관계로 간주한다고 함
위에 나온 0.58은 BMI와 당뇨병수치(Target)는 뚜렷한 양적 선형관계를 이루고 있다고 볼 수 있다.
주의할 점은 상관계수 분석 자체가 특이 값이 민감하게 반응하기 때문데 데이터 pre-processing에 항상 주의를 기울여야 하고 상관관계는 두 변수 간의 관련성을 의미할 뿐, 원인과 결과 방향을 알려주지는 않는다
상관계수 값 자체가 유의미한가를 검정할 수도 있다
그 중 하나로 p-value를 많이 이용하는데, scipy 패키지의 stats.pearsonr()을 이용하면 상관계수와 p-value를 동시에 얻을 수 있다.
import scipy.stats as stats
stats.pearsonr(X,Y)
뒤 결과 값이 p-value인데, 귀무가설 "상관관계가 없다"에 대한 검정 결과 p-value가 3.46e-42라는 0에 아주 가까운 값이 나왔으므로 귀무가설을 기각 할 수 있움을 알 수 있습니다.
'코딩공부 > Python' 카테고리의 다른 글
[Python] CSV 파일을 Jupyter Notebook에 불러오는 방법 (0) | 2023.04.23 |
---|---|
[Python] csv파일에 행과 열 추출한 후 평균내기 (0) | 2022.12.08 |
[Python] 크롤링(1) 크롤링에 대하여 (0) | 2022.11.11 |
[Python]데이터 프레임 특정 열, 행 추출 (0) | 2022.11.10 |
[Python] Matplotlib에 대하여 (0) | 2022.10.18 |