# [데이터 분석] 상관관계 분석

## 상관

---

**두 개의 양적 변수**

- 양적 변수 사이의 관계를 분석하는 방법으로 상관과 회귀가 있다

**산점도 scatter plot**

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154117_hVkZygR7AY1FaeCdEI?q=80&s=1280x180&t=outside&f=webp)

- 2개의 양적 변수로 이루어진 그래프

- 두 양적 변수의 관계를 시각화하여 어떤 관계가 있는지 대략적으로 파악 가능

**상관 correlation**

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154128_AZdKDnqsMAHOvEAr9p?q=80&s=1280x180&t=outside&f=webp)

- 2개의 확률변수 또는 데이터 사이의 관계썽을 의미

- 상관이 있다고 인과관계가 있는지는 알 수 없다

**회귀**

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154138_9KcZO7vWifUXS8joQq?q=80&s=1280x180&t=outside&f=webp)

- y=f(x)라는 함수로 두 변수 사이의 관계를 공식화

- x를 설명변수 또는 독립변수, y를 반응변수 또는 종속변수라 한다

- 2개의 양적 변수 간의 관계의 강도를 정량화하는 방법으로 **피어슨 상관계수**를 사용

## 상관관계

---

### 피어슨 상관계수

- 2개 양적 변수 사이의 선형 관계가 얼마나 직선 관계에 가까운가를 평가

- 상관계수라고 하면 보통 피어슨 상관계수를 말한다

r = \frac{\frac{1}{n}\sum^n_{i=1}{(x_i - \bar x)(y_i - \bar{y})}}{\sqrt{\frac{1}{n} \sum^n_{i=1}{(x_i - \bar x)^2}}\sqrt{\frac{1}{n}}\sum^n_{i=1}{(y_i - \bar{y})^2}}

- 분자: 공분산

- 분모: $x_i$와 $y_i$ 각각의 표준편차

- -1 ≤ r ≤ +1

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154226_EUS7zdJZiLp2F88kBT?q=80&s=1280x180&t=outside&f=webp)

- 양의 상관: x가 작아질수록 y도 함께 작아진다

- 음의 상관: x가 작아질수록 y는 커진다

- r가 1에 가까울수록 강한 상관관계를 갖는다

- r은 기울기의 영향을 받지 않는다

**정규성 검사**

- 평균 분산에 기반한 모수적인 방법

- 피어슨 상관계수의 경우 이상값을 하나만 추가해도 크게 달라진다

- 상관계수를 계산하기 전에 x축 데이터, y축 데이터를 샤피로-윌크 검정 등으로 정규성 검정
- → 정규성이 없다면 비모수 상관계수를 이용하는 것이 좋다

### 스피어만 순위 상관계수

p = 1- \frac{6\sum{d^2_i}}{n(n^2-1)}

- 적어도 하나 이상의 데이터에 정규성이 없을 때는 비모수 상관계수를 사용

- p는 피어슨 상관계수 r와 마찬가지로 -1~+1 사이의 실수값을 사용

### 켄달 순위상관계수

\tau = \frac{\text{(부합 데이터쌍의 수) - (비부합 데이터쌍의 수)}}{\frac{1}{2}n(n-1)}

- 스피어만 순위 상관계수와 유사

- 표준 크기 n이 매우 작을 때는 켄달 순위 상관계수를 사용한다

### 상관계수와 가설

- 표본의 크기가 작을 경우 가설검정을 실행한 결과 p<0.05임을 알고 나서 상관계수의 결과를 사용할 수 있다

- 표본의 크기가 클 경우는 p<0.05라고 하여 바로 상관이 있다고 판단하는 것이 아니라 r값의 크기를 기준으로 해석할 필요가 있다

## 선형회귀

---

### 회귀분석

f(x) = a + bx

- **회귀계수**: 회귀식 f(x)의 형태를 결정하는 파라미터 a, b

- 특정 평가 기준에 따라 회귀의 좋음을 평가

- 회귀 계쑤의 값을 구체적으로 구하는 것이 회귀분석의 큰 흐름

- $\epsilon$를 확률오차라고 할 때  $y=a+bx+\epsilon$를 회귀모형이라고 한다

- 회귀 분석을 할 때는 다음이 중요

    - 어떤 회귀식 적용?

    - 어떻게 회귀식을 데이터에 적용?

    - 얻은 회귀 모형을 어떻게 평가?

### 평가 방법

- a, b를 결정할 때 모형의 좋음을 판단하는 기준이 필요

- 데이터에 가능한 한 들어맞는 회귀모형이 좋은 모형이라고 할 수 있다

-   = 데이터와 회귀식의 차이가 가능한 작은 모형이 좋은 모형이다

**최소제곱법**

MSE = \sum^{n}_{i=1} {(\hat y_i - y_i)^2}

- My데이터와 모형 차이의 제곱을 모두 더한 값 E를 최소화하는 방법

- 어떻게 하더라도 회귀직선이 모든 데이터 점을 통과할 수는 없다

## Python

---

### 산점도 그래프

```javascript
import seaborn as sns
tips = sns.load_dataset('tips')
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='time', style='time')
```

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154622_9yYdTUhTalOVtgHzDx?q=80&s=1280x180&t=outside&f=webp)

### 상관계수

```javascript
import seaborn as sns
titanic = sns.load_dataset('titanic')
titanic_float64 = titanic.select_dtypes(include=['float64'])
print("pearson")
cor_pearson = titanic_float64.corr(method='pearson')
print(cor_pearson)

print("kendall")
cor_kendall = titanic_float64.corr(method='kendall')
print(cor_kendall)

print("spearman")
cor_spearman = titanic_float64.corr(method='spearman')
print(cor_spearman)
```

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154641_wxPdg7ztdwKcmr5nbn?q=80&s=1280x180&t=outside&f=webp)

```javascript
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
mask = np.triu(np.ones_like(cor_pearson, dtype=bool), k=1)
sns.heatmap(cor_pearson, annot=True, fmt=".2f", mask=mask)
plt.show()
sns.heatmap(cor_kendall, annot=True, fmt=".2f", mask=mask)
plt.show()
sns.heatmap(cor_spearman, annot=True, fmt=".2f", mask=mask)
plt.show()
```

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154659_rSG53G6tDHl2oAJ2gN?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154703_iHZdtoYHgkCign8mvN?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/154709_Yg32Xp71LGvMeDZzBq?q=80&s=1280x180&t=outside&f=webp)

For the site tree, see the [root Markdown](https://slashpage.com/yerim-devnote.md).
