파이썬3를 활용한 통계 분석 - 선형 회귀
회귀 분석이란 ?
-
회귀 분석(Regression analysis)
이란통계적으로 데이터를 분석하는 방법 -
회귀 분석이란 한 개 이상의 변수를 다룰 때 특정 변수가 다른 변수와 어떤 관계를 맺는지 분석하고,
이를 바탕으로 모델을 정의해 값을 예측하는 기법이다. -
예를 들어 ‘발이 큰 사람이 키도 크다’라고 한다면 이를 확인하기 위해 약 100명의 발 길이와 키를 모아 두 데이터 사이에 실제로 이러한 관계가 존재하는지 분석 할 수 있다.
관련 모듈 설치
-
행렬, 벡터 등의 수학 계산을 위한 자료 구조 관련 함수를 제공하는 NumPy 라이브러리
-
과학과 관련된 수치 분석, 확률 분포 등 다양한 통계 관련 함수를 제공하는 SciPy 라이브러리
-
이를 그래프로 표현하기 위한 Matplotlib 라이브러리
-
다음과 같이 pip 명령어를 이용하여 설치한다.
pip3 install numpy scipy matplotlib
회귀 분석 예제
아래의 표 1은 어떤 공장의 월별 생산 금액과 전기 사용량을 나타낸 것이다.
이 데이터를 바탕으로 ‘특정 월의 생산 금액이 크다면 전기 사용량도 크다’고 가정할 수 있다.
이 가정이 정말 맞는것인지, 만약 그렇다면 특정 생산 금액에 해당하는 전기 사용량도 예측 가능한지 알아보자.
월별 생산 금액을 변수 x로, 이 때 전기 사용량을 y로
나타내면
위 데이터는 다음과 같이 x,y로 구성된 쌍으로 표현가능하다.
(Xi, Yi) = (3.52, 2.48),(2.58, 2.27) …
이 때 두 변수 간에 어떤 선형적 관계
가 있는지 분석할 수 있으며,
이를 상관 분석(Correleation Analysis)
라고 한다.
또한 이러한 상관 관계의 정도를 파악하는 값을 상관 계수(Correlation Coefficient)
라고 하며,
이 값의 범위는 -1 ~ 1 사이 이다.
예를 들어 발이 큰 사람이 실제로 키가 크다면 두 변수 사이에는 강한 양의 상관 관계
가 존재하며,
상관 계수의 값은 1에 가까울 것이다.
반면 두 변수 사이에 특별한 상관 관계가 존재하지 않으면 상관 계수의 값은 0에 가까울 것이다.
두 변수 사이에 음의 상관 관계
가 존재한다면 상관 계수의 값은 -1에 가까워진다.
두 변수 사이에 상관 관계
가 존재
한다면 통계적
으로 모델
을 작성할 수 있다.
Yi = B0 + B1 * Xi + Ei
여기서 Yi를 종속 변수
, Xi를 독립 변수
라 한다.
종속 변수와 독립 변수 간의 관계식을 결정하는 B0와 B1는 데이터로부터 추정할 수 있으며,
이를 각각 절편(intercept)
, 기울기(slope)
라 한다.
Ei는 오차항
으로 우리가 작성한 모델과 실제 데이터 값과의 차이를 나타낸다.
from scipy import stats
x = [3.52, 2.58, 3.31, 4.07, 4.62, 3.98, 4.29, 4.83, 3.71, 4.61, 3.90, 3.20]
y = [2.48, 2.27, 2.47, 2.77, 2.98, 3.05, 3.18, 3.46, 3.03, 3.25, 2.67, 2.53]
# 선형 모델의 기울기, 절편, 상관 계수, p-value, 에러의 표준 편차
# p-value는 통계학에서 예측 불확실성의 정도를 나타내는 값으로
# 일반적으로 0.05 미만일 때 유의미하다 본다.
# 이번 예제에서 상관 계수는 0.892로 두 변수 간에 양의 상관 관계가 있으며
# 통계학적으로도 유의미하다는 것을 알 수 있다.
slope, intercept, r_value, p_value, stderr = stats.linregress(x,y)
print(r_value) # 상관 계수
print(r_value**2)
print(p_value)
print(4*slope + intercept) # 전기 사용량 예측