euny!
errorlog
euny!
전체 방문자
오늘
어제
  • 분류 전체보기 (22)
    • Python (13)
    • 데이터분석 (3)
    • WIL (4)
    • SQL (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 크롤링
  • BeautifulSoup
  • 웹크롤링
  • SQL
  • 웹스크래핑
  • ㅗ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
euny!

errorlog

Correlation Coefficient : 상관계수
데이터분석

Correlation Coefficient : 상관계수

2023. 1. 5. 16:31

상관계수 (Correlation Coefficient)

- numpy를 이용하여 데이터의 상관계수를 구하기

- python으로 직접구현하여 데이터의 상관계수를 구하기

물론 numpy를 사용하는 것이 퍼포먼스적으로 월등하게 좋지만, 연습겸 공부겸 하여 구현해보려고 한다.

data1 = [80, 85, 100, 90, 95]
data2 = [70, 80, 100, 95, 95]
data3 = [100, 90, 70, 90, 80]

분산(variance)

- 1개의 이산정도를 나타낸다.

- 편차(평균과의 차이) 제곱의 평균

- 표준편차 = 분산의 제곱근

A가 B보다 분산이 작다

python으로 직접 구현

def variance(data):
    var = 0
    x_ = sum(data) / len(data)
    for xi in data:
        var += (xi - x_) ** 2
    return var / len(data)
variance(data1), variance(data2), variance(data3)
>> (50.0, 126.0, 104.0)

numpy를 이용하여 구하기

np.var(data1), np.var(data2), np.var(data3) 
>> (50.0, 126.0, 104.0)

공분산(covariance)

- 2개의 확률변수의 상관정도를 나타낸다.

- 평균 평차곱

- 방향성은 보여줄 수 있으나 강도를 나타내는데 한계가 있다.

   - 표본데이터의 크기에 따라서 값의 차이가 큰 단점이 있다.

python 으로 직접 구현

def covariance(x, y):
    cov = 0
    x_ = sum(x) / len(x)
    y_ = sum(y) / len(y)
    for xi, yi in zip(x, y):
        cov += (xi - x_) * (yi - y_)
    return cov / (len(x) - 1)	# 여기서 -1은 자유도이다. 데이터가 전체 데이터가 아니라면 -1 추가해줌
covariance(data1, data2), covariance(data1, data3)
>> (93.75, -87.5)

numpy 사용하기

np.cov(data1, data2)[0, 1], np.cov(data1, data3)[0, 1]
>> (93.75, -87.5)

공분산의 한계 : 방향성은 보여줄 수 있으나, 강도는 보여줄 수 없다.

data4 = [data * 10 for data in data1]
data5 = [data * 10 for data in data3]

covariance(data1, data3), covariance(data4, data5)
>> (-87.5, -8750.0)

상관계수(correlation coefficient)

- 공분산의 한계를 극복하기 위해 만들어졌다.

- -1 ~ 1 까지의 수를 가지며 0과 가까울 수록 상관도가 적음을 의미한다.

- x의분산과 y의 분산을 곱한 결과의 제곱근을 나눠주면 x나 y의 변화량이 클수록 0에 가까워진다.

python 으로 직접 구현

 

def cc(x, y):
    cov = covariance(x, y)
    var = (variance(x) * variance(y)) ** 0.5
    return cov / var
# 1과 가까울수로 강한 양의 상관관계
# -1과 가까울수록 강한 음의 상관관계
# 0과 가까울수록 관계없음
cc(data1, data2), cc(data1, data3), cc(data4, data5)
>> (0.944911182523068, -0.970725343394151, -0.970725343394151)

numpy 사용하기

np.corrcoef(data1, data2)[0, 1], np.corrcoef(data1, data3)[0, 1], np.corrcoef(data4, data5)[0, 1]
>> (0.9449111825230682, -0.970725343394151, -0.970725343394151)

결정계수(cofficient of determination: R-squared)

- x로부터 y를 예측할 수 있는 정도

- 상관계수의 제곱 ( 상관계수를 양수화)

- 수치가 클수록 회기분석을 통해 예측할 수 있는 수치의 정도가 더 정확함

cc(data1, data2) ** 2, cc(data1, data3) ** 2
>> (0.8928571428571428, 0.9423076923076923)

 

'데이터분석' 카테고리의 다른 글

[Pandas] 네이버 증권 사이트의 종목토론실 데이터 수집하기  (0) 2023.01.12
Conditional Probability : 조건부 확률  (0) 2023.01.03
    '데이터분석' 카테고리의 다른 글
    • [Pandas] 네이버 증권 사이트의 종목토론실 데이터 수집하기
    • Conditional Probability : 조건부 확률
    euny!
    euny!

    티스토리툴바