-
[Pandas] Correlation 알아보기 ( DataFrame corr )AI-ML 2024. 3. 24. 10:26728x90반응형
- 목차
키워드.
- Correlation.
들어가며.
이번 글에서는 Pandas 의 Correlation 을 계산할 수 있는 corr 함수에 대해서 알아보도록 하겠습니다.
Correlation 은 두 Feature 의 상관관계를 -1 부터 1 까지의 값으로 표현합니다.
예를 들어, Correlation 을 통해서 키와 몸무게의 상관관계를 표현할 수 있는데요.
일반적으로 큰 키에 비례해서 몸무게가 증가하는 경향을 보입니다.
위와 같은 키와 몸무게와 같이 서로의 값이 증가하는 상관관계를 가지면 이들의 상관관계를 양의 값을 가집니다.
height 와 weight 는 서로 0.73 의 상관관계를 가집니다.
이처럼 Regression 문제에 접근할 때에 Correlation 을 유용하게 사용됩니다.
아래의 Dataset 은 Kaggle 의 Insurance 와 관련된 데이터셋입니다.
그리고 환자의 특성과 병원비용의 상관관계를 나타냅니다.
흡연 유무(smoker) 와 연령 (age) 가 병원비용 (charges) 와 큰 상관관계를 보임을 알 수 있습니다.
https://www.kaggle.com/code/hely333/eda-regression
이러한 방식으로 Regression 문제를 해결하기 위해서 Pandas 의 Corr 함수를 통한 Correlation 을 확인하는 것이 중요합니다.
Corr.
pandas 의 corr 함수는 DataFrame 에 적용되는 함수입니다.
DataFrame 의 corr 함수를 실행하게 되면,
DataFrame 의 각 Column 에 대응되는 Series 들 간의 상관계수 값을 확인할 수 있습니다.
아래 예시는 체중(weight) 과 신장(height) 데이터를 가지는 DataFrame 을 보여줍니다.
의도적으로 height 의 값을 weight 의 0.4 비율로 계산하였습니다.
그리고 체중과 신장 간의 상관관계를 계산할 수 있는 corr 함수를 사용해도록 하겠습니다.
import pandas as pd heights = list(map(lambda _: np.random.randint(150, 200), range(100))) weights = list(map(lambda height: height * 0.4 + np.random.randint(-20, 20), heights)) df = pd.DataFrame({"height": heights, "weight": weights}) type(df.corr())
pandas.core.frame.DataFrame
import pandas as pd heights = list(map(lambda _: np.random.randint(150, 200), range(100))) weights = list(map(lambda height: height * 0.4 + np.random.randint(-20, 20), heights)) df = pd.DataFrame({"height": heights, "weight": weights}) df.corr()
상관 관계가 없는 칼럼 추가하기.
아래 예시에선 gender 칼럼이 추가됩니다.
현실에선 gender 이 신장과 체중과 큰 관련이 있습니다.
여성의 신장과 몸무게가 남성보다 작은 경향이 존재하기 때문입니다.
하지만 아래 예시에선 gender 의 값은 height 와 weight 에 전혀 영향을 주지 않습니다.
이러한 상황에서 Correlation 값은 어떻게 정해질까요 ?
아래와 같이 weight 또는 height 칼럼과 gender 칼럼 간의 상관계수의 값은 매우 작은 값을 보입니다.
import pandas as pd heights = list(map(lambda _: np.random.randint(150, 200), range(100))) weights = list(map(lambda height: height * 0.4 + np.random.randint(-20, 20), heights)) gender = list(map(lambda _: np.random.choice([True, False]), range(100))) df = pd.DataFrame({"height": heights, "weight": weights, 'gender': gender}) df.head() df.corr()["weight"] df.corr()
상관 관계가 있는 칼럼 추가하기.
반대로 gender 가 height 와 weight 칼럼에 영향을 주도록 데이터셋을 수정합니다.
남성인 경우의 gender 의 값은 True, 여성의 경우의 gender 값은 False 로 설정합니다.
그리고 여성인 경우에 의도적으로 weight 와 height 의 값을 20만큼 감소시킵니다.
이러한 데이터셋의 경우에 gender 가 weight 와 height 에 영향을 끼치므로 상관계수의 값이 달라집니다.
import pandas as pd heights = list(map(lambda _: np.random.randint(150, 200), range(100))) weights = list(map(lambda height: height * 0.4 + np.random.randint(-20, 20), heights)) gender = list(map(lambda _: np.random.choice([True, False]), range(100))) df = pd.DataFrame({"height": heights, "weight": weights, 'gender': gender}) df["height"] = [row[0] - 20 if row[2] == False else row[0] for row in df.values] df["weight"] = [row[1] - 20 if row[2] == False else row[1] for row in df.values] df.head() df.corr()["weight"] df.corr()
반응형'AI-ML' 카테고리의 다른 글
[torchvision] RGB to Grayscale Image (0) 2024.03.31 [scikit-learn] LabelEncoder 알아보기 (0) 2024.03.29 Cross Entropy 알아보기 (0) 2024.03.08 [pytorch] nn.Embedding 알아보기 (0) 2024.03.08 pytorch - Conv2D 알아보기 ( CNN ) (0) 2024.03.03