본문 바로가기
데이터관련공부/Machine Learning

[분석알고리즘] 회귀 | 1. 선형 회귀 분석 (Linear Regression)

by 자유롭고 싶은 키털트 2023. 3. 7.

이번 포스팅에서는 머신러닝의 대표적인 알고리즘인 회귀 분석의 개념을 소개하고 선형 회귀 분석을 정리하여 다루겠습니다. 

 

Regression (회귀 분석) 이란?

 

- 주로 가격, 매출, 주가, 환율, 수량 같은 연속 변수, 수치형 변수를 예측하는데 활용되는 알고리즘입니다.

 

: 예를 들어 땅의 크기, 방 개수, 화장실 개수, 해당 집의 연식, 위치 등의 다양한 변수를 가지고 집의 가격을 예측하는 모델이 Regression 의 대표적인 예 라고 볼 수 있습니다.

 

- 다른 포스팅에서 다루겠지만 머신러닝 알고리즘 중에는 (True or False, 양성 혹은 음성 또는 특정 클래스) 분류를 위해 주로 활용되는 알고리즘 들도 있습니다. 이와 달리 회귀분석은 주로 연속 변수를 예측하는데 사용됩니다. 

 

: 예를 들어 결과값이 종양인지 아닌지를 결정(True or False) 하는 여부 같은 범주형 변수(Categorical variable) 를 예측해야 하는 경우에는 주로 regression 을 사용하지 않습니다.

 

- Regression 은 주로 Simple regression (독립변수가 1개) 과 Multi regression (독립변수가 여러 개) 으로 나뉩니다. 

 

- 우선, 회귀 분석을 이해하기 위해 우선 하기 두 가지 용어를 알아야 햡니다. 

변수 종류 설명
종속 변수 or 예측변수
Target Variable or Dependent Variable: 
내가 예측하려고 하는 변수 (Y값)
독립변수 or 설명변수
Indendent Variable
독립변수, 종속 변수 결과에 영향을 주는 변수 (X값)
예측을 위해 모델이 사용하는 속성들

 

 

- 하기 이미지를 보겠습니다.

 

: 하기 이미지에서 파란점주어진 데이터셋 내 실제 관측치를 의미합니다. X, Y 값에 따라 이 관측치들을 plotting 하여 산점도를 그려 보았습니다.

 : 빨간 선두 변수 X, Y 와의 관계를 보여주는 직선이며, 파란점들을 관통합니다. 

 

그렇다면, 두 변수 x, y 의 관계를 보여주는 이 빨간 직선은 어떻게 찾았을까요? 이 때 잔차 라는 개념을 사용합니다. 

 

: 잔차 (Residual error) 는 회귀 모델의 예측값과 실제 관측값의 차이를 의미합니다. 하기 이미지에서 관측값과 빨간 직선과의 거리 즉, random error 값잔차 라고 보면 됩니다. 

 

: 이 잔차의 제곱의 합 (이를 Mean Square Error, MSE 라고 함) 최소로 하며 관측치들을 관통하는 회귀선을 찾아 예측에 활용하게 됩니다. 

 

- 다시 말해, 산점도를 그려보고 그에 맞는 fitting line (i.g. 회귀선) 을 찾아 독립변수에 따른 종속 변수를 예측하는 모델이 Regression 이라고 할 수 있습니다.

 

출처: https://www.jmp.com/en_ca/statistics-knowledge-portal/what-is-multiple-regression/fitting-multiple-regression-model.html

 

 

- MSE 는 잔차의 제곱, 즉 아래 이미지에서 빨간 사각형의 넓이 라고 할 수 있습니다. 회귀선은 MSE 를 최소화 하는 값을 찾는 선입니다. Regression 에서는 이 회귀선을 찾아 Y 값을 예측하게 됩니다. 

초록선은 MSE 를 최소화 하는 회귀선이다. (출처: https://www.dataquest.io/blog/understanding-regression-error-metrics/)

 

 

- Regression 은 다양한 알고리즘이 존재합니다.

  • Ordinal regression
  • Poisson regression
  • Fast forest quantile regression
  • Linear, Polynomial, Lasso, Stepwise, Ridge regression
  • Bayesian linear regression
  • Neural network regression
  • Decision forest regression
  • Boosted decision tree regression
  • KNN (K-nearest neighbors)

 

단순 선형 회귀 분석이란? Simple Linear Regression 

 

- 두 변수가 선형 관계가 있을 때, 즉, 어떤 독립변수 X가 다른 변수 Y 에 영향을 줄 때, 종속 변수 1개, 독립 변수 1개로 두 변수 간의 관계를 직선 형태로 설명하는 알고리즘을 뜻합니다. 

 

- 보통 두 관계를 보여주는 직선은 보통 하기와 같은 1차 함수의 공식으로 나타냅니다. 여기서 베타 0 은 Intercept (절편), 베타 1은 Coefficient (계수 혹은 기울기) 을 의미합니다. 변수 X, Y 에 대한 데이터가 있을 때 일차 방정식의 절편과 기울기를 찾는 과정이 단순 회귀 분석의 알고리즘입니다. 

 

Python 이나 R 을 사용할 경우 절편, 계수 등은 값은 Scikit learn 같은 라이브러리가 자동으로 계산해 줍니다.

 

 

Scikit-learn 의 LinearRegression

 

단순 선형 회귀 모델은 사이킷런의 LinearRegression() 으로 구현할 수 있습니다. LinearRegression 은 최소 자승법을 사용한 OLS (Ordinary Least Square) 방식으로 선형 회귀 모델을 구현합니다. 

 

속성:

  • coef_   : 선형 회귀 문제에 대해 추정된 계수를 구함
  • intercept_  : 선형 회귀 문제에 대해 절편을 구함

 

메소드:

  • fit(X, y): 모델을 학습시킨다
  • predict: 선형 모델을 사용해 예측한다
  • score(X, y): 예측 모델의 결정 계수(R squared) 를 반환 한다. 
from sklearn.linear_model import LinearRegression

lr = LinearRegression()

 

단순 선형 회귀 사용 예시

 

- 케글에서 제공하는 보험 가입자 데이터를 다운 받겠습니다. 각 보험자별로 나이, 성별, bmi, 흡연 여부 등의 정보가 있으며 그에 따른 보험료를 예측해 보는 선형 회귀 모델을 만들어 보겠습니다. 

 

- 독립변수는 age, sex, bmi, children, smoker, region 변수 이며, 종속 변수 혹은 예측 변수는 charges 입니다. 

 

https://www.kaggle.com/datasets/thedevastator/prediction-of-insurance-charges-using-age-gender

 

Prediction of Insurance Charges

A Study of Customers Insurance Charges

www.kaggle.com

 

 

- 단순 선형 회귀 모델을 만들 예정이므로 독립변수로 1개를 선택합니다. age 를 가지고 charges 를 예측해 보는 모델을 만들겠습니다. 우선 age 와 charges 의 관계를 산점도로 그려 살펴 보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
#### 나이와 의료비용 사이의 상관관계
 
= data['age']
= data['charges']
 
plt.figure(figsize=(105))
plt.scatter(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
cs

 

x축은 age, y축은 charge (보험료)를 나타낸다.

- X와 y 값을 선택하고 (age 및 charge), 2차원 array 로 변환해 준 후, LinearRegression 을 불러와 fit 메소드를 이용하여 학습시킵니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# x, y축 array 형태로 변환하고, 
 
= np.array(data['age'])
= np.array(data['charges'])
 
# .fit 에 학습되는 데이터는 2차원 array 여야 하므로 reshape 로 차원을 맞춰 주었다..
 
= x.reshape(13381)
= y.reshape(13381)
 
# linearRegression 회귀 모델 임포트
lr = LinearRegression()
 
# 모델에 훈련
lr.fit(x, y)
cs

 

- coef_ 와 intercept_ 속성을 이용하여 선형 회귀식의 절편과 계수(기울기) 를 구해 보았습니다.

- 또한, score 메소드로 결정 계수를 구했습니다. 결정 계수는 약 0.9 로 낮기 때문에 age 변수 하나만으로는 보험료를 예측하기 충분하지 않다고 판단할 수 있습니다.

 

1
2
3
4
5
6
7
8
# 절편과 계수 구하기
 
print('선형 회귀 모델 결과')
print('절편', lr.intercept_, '계수', lr.coef_)
 
# 결정 계수 (r-squared) 구하기
 
print('결정 계수', round(lr.score(x, y), 3))
cs

 

- 위에서 구한  coef_ 와 intercept_ 값으로 일차 방정식인 회귀식을 도출할 수 있습니다.

y = 3156.89 + 257.72 * x

 

- age 값을 새로 3개를 대입 (19, 64, 45) 하여 charge 값을 예측해 봅시다. 위 회귀식에 대입 하여도 되지만, predict 메소드를 사용하여도 됩니다.

 

1
2
3
4
5
6
# 새로운 샘플 입력 시도
 
x_new = [[19], [64], [45]]
y_hat = lr.predict(x_new)
 
print(y_hat)
cs

 

 

- 이번엔 age, charge 데이터 및 회귀선을 같이 표현해 보겠습니다. 회귀선은 x_new 값과 그 예측값들을 관통하는 선입니다. 

1
2
3
4
5
6
7
8
plt.figure(figsize=(105))
 
plt.plot(x, y, 'b.')  # blue 색으로 마커의 모양은 . 이다
plt.plot(x_new, y_hat, '-r'# red 색으로, line 을 그려라
 
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
cs

 

 

 

단순 선형 회귀 평가

 

그렇다면, 내가 도출해낸 선형 회귀 모델 (선형 회귀선) 이 얼마나 관측치들을 잘 설명하는지 (good fit) 인지 어떤 기준을 가지고 판별할 수 있을까요?

 

이를 보여주는 메트릭스 두 가지를 살펴 보겠습니다. 일단 첫번째로, Correlation 을 보고, 두번째로 결정계수인 r-squared 을 살펴보겠습니다.

 

 

메트릭스1: 상관관계 (Correlation)

 

우선 CORREL() 과 같은 공식을 사용하여 X 와 Y 값이 얼마나 상관관계가 있는지 살펴볼 수 있습니다. -1 혹은 1에 가까울수록 양의 상관관계(+) 혹은 음의 상관관계(-)가 크다고 볼 수 있습니다.

 

 

메트릭스2: 결정계수 (R-Square)

 

- 상관관계가 있다고 해도, 회귀선으로 얼마나 해당 모델을 잘 예측하고 설명할 수 있는지는 다른 문제입니다. 이 때 볼 수 있는 메트릭스가 결정 계수 (R-Square) 라는 메트릭스 인데요.

 

- 결정 계수는 0과 1사이에 위치하는데, 1에 가까울수록:

 

  • 종속 변수(y) 는 해당 모델에 의해 잘 설명된다고 해석할 수 있습니다. 
  • 관측치들이 회귀선에 일치합니다.
  • 관측치들이 회귀선에 가까이 분포해 있습니다.
  • R2 이 0.7 이라면, y 값 즉, 종속변수 변동의 70% 는 독립 변수로 설명된다고 해석할 수 있다. 

 

- 하기 그림에서 왼쪽은 결정 계수가 15%, 오른쪽은 85% 를 보여줍니다. 1에 가까울수록 회귀선 근처에 관측값들이 분포하고 있음을 알 수 있습니다.

왼쪽 이미지는 R Square, 결정 계수가 15%, 오른쪽은 85% (출처: https://www.mygreatlearning.com/blog/r-square/)

 

 

- 결정 계수의 높음이 반드시 모델의 적합성을 항상 보장한다고 할 수는 없지만 일반적으로 높은 결정 계수는 긍정적인 신호입니다. 결정 계수 이외의 모델의 적합성 및 성능을 판별하는 방법은 다른 포스팅에서 다루었으니 참고 바랍니다. 

 

 

 

 

[예측성능평가] 모델 성능 평가 기법 (Model Performance Evaluation)

 

[예측성능평가] 모델 성능 평가 기법 (Model Performance Evaluation)

머신 러닝을 통해 구현한 학습 모델이 얼마나 실제 종속 변수를 정확하게 예측하는지를 평가할 수 있습니다. 이 때, 모델링 전 데이터 분할 단계에서 분할해 놓은 평가 데이터 (Test data) 를 이용

borakeepgoing.tistory.com

 

 

 

 

 

 

Appendix: Python 으로 Jupyter notebook 상에서 Regression 실행

 


 

참고자료>>

 

https://www.coursera.org/learn/machine-learning-with-python/lecture/5SxtZ/evaluation-metrics-in-regression-models

 

Evaluation Metrics in Regression Models - Regression | Coursera

Video created by IBM for the course "Machine Learning with Python". In this module, you will get a brief intro to regression. You learn about Linear, Non-linear, Simple and Multiple regression, and their applications. You apply all these methods ...

www.coursera.org

 

https://www.jmp.com/en_ca/statistics-knowledge-portal/what-is-multiple-regression/fitting-multiple-regression-model.html

 

Fitting the Multiple Linear Regression Model

Fitting the Multiple Linear Regression Model

www.jmp.com

https://www.mygreatlearning.com/blog/r-square/

 

An Introduction to R - Square

R-square is a goodness-of-fit measure for linear regression models. This statistic indicates the percentage of the variance in the dependent variable.

www.mygreatlearning.com

 

책:  파이썬 머신러닝 판다스 데이터 분석 (정보문화사, 저자: 오승환)

반응형