본문 바로가기

통계학 기초

상관관계 분석의 실습 [Python 활용]

반응형

 

 

1. 활용 데이터셋

 

이전에 통계학에서 다루는 대표적인 상관 관계분석 모델을 이전 포스팅에서 알아봤다. 이번에는 실습을 해볼 차례로, 와인 데이터셋을 활용할 것이다. 이 데이터셋은 데이터 입문자들에게 아주 유용한 자료이니 비단 이 자료만이 아니더라도 활용해볼만한 가치가 있다고 생각한다. 

 

https://www.kaggle.com/datasets/yasserh/wine-quality-dataset?select=WineQT.csv 

 

Wine Quality Dataset

Wine Quality Prediction - Classification Prediction

www.kaggle.com

 

 

여기서는 총 13가지 Column들이 있는데, 실제 의미를 따지기 보다는 모델 실급에 적한한 변수들을 취사선택하여 실제 모델 해석하는 연습에 초점을 둘 것이다. 

 

※ Column들의 정보 정리

1 - fixed acidity (결합산)
2 - volatile acidity
3 - citric acid
4 - residual sugar
5 - chlorides
6 - free sulfur dioxide
7 - total sulfur dioxide
8 - density
9 - pH
10 - sulphates
11 - alcohol Output variable (based on sensory data)
12 - quality (score between 0 and 10)

(사실 저도 와알못이라 결합산, 유동산 등이 뭔지 모르고, 잔여당이 와인 품질에 어떤 영향력을 갖는지 이론적으로 1도 모릅니다... 그래서 그냥 모델링 연습용도)

 

 

2. 상관관계 분석을 위한 EDA

(1) 단일 변수 분포 파악 - Shaprio와 Skewness 측정을 통한 변수의 분류

 

1) Shapiro 모델을 통한 정규성 검정

Shaprio(샤피로) 모델은 변수가 정규 분포의 형태를 보이는지 아닌지 검증해주는 모델이다. 

 

H0: 변수의 분포는 정규 분포를 만족한다. 

H1: 변수의 분포는 정규 분포를 만족하지 않는다. 

 

 

2) Skewness 측정을 통한 변수 분류

 

왜도(Skewness)는 절대값이 3 미만일 때 크게 문제 삼지 않는 것이 추세 [1]이긴하다. 예를 들어, 왜도의 절대값이 2인 경우 Shapiro 모델상 정규 분포 결과는 나오지 않지만, 왜도가 크게 뒤틀렸다고 보지 않기 때문에 모델을 돌려도 적합하다는 판단을 내릴 수 있다. 

 

✅ Best Distribution: Shapiro 모델 H0 채택 & Skewness == 1

✅ Practical Distribution: | Skewness | < 3

 

Skewness를 통한 분포 관측 - 출처 삽입

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
variable_list = r1.columns
 
## 피어슨 대상 분석
pearson_variable = []
 
## 이외 모델 대상 분석
other_variable = []
 
 
for i in ipb(range(r1.shape[1])):
    variable_name = variable_list[i]
    variable = r1.iloc[:, i]
    ## 정규성 검정
    ## H0: 변수의 분포는 정규분포를 만족한다 VS H1: 변수의 분포는 정규분포를 만족하지 않는다. 
    shapiro_test = stats.shapiro(variable)
    
    ## p-value 0.05 이하라는 것은 귀무가설을 기각하고, 대체가설을 채택하는 것. 따라서 정규분포가 아니다. 
    ## 다만 이런 이상적인 경우는 거의 없으니 왜도 측정을 통한 변수 분류를 한다.
    if shapiro_test[1<= 0.05:
        
        ## 왜도 - 절대값 2 이내면 okay to go 
        if abs(stats.skew( variable, bias = False) ) <= 2:
            pearson_variable.append(variable_name)
            print('{}변수는 shaprio모델 결과 정규 분포를 만족하지 않습니다.(pvalue = {})'.format(var_name, round(shapiro_test[1], 2))
                  , '하지만 skewness가 {}임으로, 상관관계 분석을 진행 가능 추정'.format(abs(stats.skew( variable , bias = False) ))
                  , '===================='
                 , sep = '\n')
        else:
            other_variable.append(variable_name)
            print('{}변수는 shaprio모델 결과 정규 분포를 만족하지 않습니다.(pvalue = {})'.format(var_name, round(shapiro_test[1], 2))
                  , '또한 skewness가 {}임으로, 피어슨 모델은 채택하지 않습니다.'.format(abs(stats.skew(variable , bias = False) ))
                  , '===================='
                 , sep = '\n')
        
    else:
        pearson_variable.append(variable_name)
        print('{}변수는 shaprio모델 결과 정규 분포를 만족합니다.(pvalue = {})'.format(var_name, round(shapiro_test[1], 2))
              , '===================='
             , sep = '\n')
        
        
    
    
cs

 

 

 

모델 결과 Pearson Correlation Analysis에 적합한 변수는 총 10개이다. 다만, id 변수 같은 경우 변수보다는 identifier에 가깝기 때문에 분석에서 제외한다. 

 

 

(2) 변수 간 선형 관계 파악 - Seaborn Pair Plot 

 

Pair Plot은 변수 간 선형 관계가 있는지 알아 볼 수 있는 함수로 상관 관계를 찾을 때 굉장히 유용한 시각화 방법이다. 시각화 방법에 따라 정사각형 혹은 삼각형 형태로 할 수 있는데, 개인적으로 삼각형 형태를 선호한다. 

 

Pair Plot의 장점

- 모든 변수 간 상관 관계를 검증할 필요가 없다. 만약 실행했다면, nC이기 때문에 이 경우 9*8 / 2 = 36가지 Case를 검증해야 한다. 물론 for loop로 해버리면 그만이긴 하지만, 원론적으로 비효율적인 방법이라고 생각한다. 

 

- 특정 변수에서 관심있는 것을 선택하여 분석할 수 있다. 위의 경우 뚜렷한 양 & 음의 상관 관계에 있는 변수들을 뚜렷하게 관찰할 수 있다. 

 

 → 양의 상관관계 변수 목록

  • Density & Fixed Acidity
  • Citric Acid & Fixed Acidity

 → 음의 상관관계 변수 목록

  • Ph & Fixed Acidity
  • Density & Alcohol

 

(3) 스피어만 & 켄달타우 분석용 변수 목록

 

위에서 왜도와 Shapiro 결과에서 탈락한 변수들은 스피어만과 켄달 타우 분석 연습 변수로 사용하도록 한다. 

 

 

 

3. 상관관계 분석

 

(1) 피어슨 상관관계 분석 ( Pearson Correlation Analysis )

 

1) 중요 변수의 Pearson Correlation Test

  • 모든 변수 간 상관관계 계수의 측정

 

모든 변수 간 상관관계 계수를 측정하려면 위와 같은 메소드를 쓰면 간단하게 실행할 수 있다. 다만, 여기서는 p-value를 볼 수 없기 때문에 검증된 숫자라고 보기 힘들다. 

 

  • 중요 변수 간 상관관계 검증

 

위에서 검증하기로 한 변수들은 역시나 p-value가 검증된 것을 볼 수 있다. 이와 같은 방식으로 가장 효율적이고 효과적으로 상관관계 분석을 진행할 수 있는 것이다. 

 

  • 상관계수 해석 방법
상관계수 범위 (절대값 기준) 해석의 방법
r ≥ 0.8 강한 상관 관계가 있다.
0.6 ≤ r <0.8 상관 관계가 있다
0.4 ≤ r <0.6 약한 상관관계가 있다
r <0.4 상관관계가 거의 없다.

 

 → 양의 상관관계 결과 및 해석

  • Density & Fixed Acidity: 0.68 → + 상관관계가 있다.
  • Citric Acid & Fixed Acidity: 0.67 → +상관관계가 있다.

 → 음의 상관관계 변수 목록

  • Ph & Fixed Acidity: -0.68  → - 상관관계가 있다.
  • Density & Alcohol: -0.49 → 약한 - 상관관계가 있다.

 

 

 

 

 

2) Heatmap을 통한 상관관계의 시각화

단순히 숫자만 보여주면 일반인들을 대상으로 커뮤니케이션할 때 비효율적인 면이 있다. 따라서 효과적인 모델 검증 결과를 가장 최적화하여 보여줄 수 있는 Heatmap을 사용해보도록 하자. 

 

 

 

 

 

 

(2) 스피어만 상관관계 분석 ( Spearman Correlation Analysis )

 

 

(3) 켄달타우 상관관계 분석 ( Kendall Correlation Analysis )

 

 

 

번외로 실시한 스피어만과 켄달타우 상관관계분석에서 유의하게 나온 변수는 Residual Sugar와 Cholrides이다. 다른 변수는 스피어만과 켄달타우 모두 유의하게 나왔다. 따라서 상호 상관관계가 있다고 볼 수 있을 것이다. 

 

 

4. 분석의 결론

 

Lesson 1. 변수의 특성에 따라 어떤 상관관계 모델을 선택하는지 이론적 학습

 

Lesson 2. 각 변수에 적절한 사전 검증 방법 실습

 

Lesson 3. 효율적인 모델 변수 선정 및 시각화 방법 적용 연습

 

 

 

 

Reference

- [1] West, S. G., Finch, J. F., &amp; Curran, P. J. (1995).&nbsp;Structural equation models with nonnormal variables: Problems and remedies.&nbsp;In R. H. Hoyle (Ed.),&nbsp;Structural equation modeling: Concepts, issues, and applications&nbsp;(p. 56–75). Sage Publications, Inc.

반응형