ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pandas] Correlation 알아보기 ( DataFrame corr )
    AI-ML 2024. 3. 24. 10:26
    728x90
    반응형

     

    - 목차

     

    키워드.

    • 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
Designed by Tistory.