이번 포스팅에서는 머신러닝의 대표적인 알고리즘인 회귀 분석의 개념을 소개하고 선형 회귀 분석을 정리하여 다루겠습니다.
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 이라고 할 수 있습니다.
- MSE 는 잔차의 제곱, 즉 아래 이미지에서 빨간 사각형의 넓이 라고 할 수 있습니다. 회귀선은 MSE 를 최소화 하는 값을 찾는 선입니다. Regression 에서는 이 회귀선을 찾아 Y 값을 예측하게 됩니다.
- 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
|
#### 나이와 의료비용 사이의 상관관계
x = data['age']
y = data['charges']
plt.figure(figsize=(10, 5))
plt.scatter(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
|
cs |

- 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 형태로 변환하고,
x = np.array(data['age'])
y = np.array(data['charges'])
# .fit 에 학습되는 데이터는 2차원 array 여야 하므로 reshape 로 차원을 맞춰 주었다..
x = x.reshape(1338, 1)
y = y.reshape(1338, 1)
# 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=(10, 5))
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에 가까울수록 회귀선 근처에 관측값들이 분포하고 있음을 알 수 있습니다.
- 결정 계수의 높음이 반드시 모델의 적합성을 항상 보장한다고 할 수는 없지만 일반적으로 높은 결정 계수는 긍정적인 신호입니다. 결정 계수 이외의 모델의 적합성 및 성능을 판별하는 방법은 다른 포스팅에서 다루었으니 참고 바랍니다.
[예측성능평가] 모델 성능 평가 기법 (Model Performance Evaluation)
[예측성능평가] 모델 성능 평가 기법 (Model Performance Evaluation)
머신 러닝을 통해 구현한 학습 모델이 얼마나 실제 종속 변수를 정확하게 예측하는지를 평가할 수 있습니다. 이 때, 모델링 전 데이터 분할 단계에서 분할해 놓은 평가 데이터 (Test data) 를 이용
borakeepgoing.tistory.com
Appendix: Python 으로 Jupyter notebook 상에서 Regression 실행
참고자료>>
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
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
책: 파이썬 머신러닝 판다스 데이터 분석 (정보문화사, 저자: 오승환)
'데이터관련공부 > Machine Learning' 카테고리의 다른 글
[분석알고리즘] 회귀 | 4. Regression Tree (0) | 2023.03.15 |
---|---|
K-Means Clustering (0) | 2023.03.13 |
Support Vector Machine (Classification) (0) | 2023.03.11 |
Decision Tree (의사결정나무) (Classfication) (0) | 2023.03.09 |
K-Nearest Neighbours (KNN) (Classfication) (0) | 2023.03.09 |