Py) ML - 선형 회귀

Py) ML - 선형 회귀

Python에서 선형 회귀(Linear Regression) 분석을 하는 방법을 알아보자.


※ 본 내용에서 사용하는 model_regression_ins_charges.csv 파일은 별도로 다운로드 받아야 한다.
model_regression_ins_charges.csv 다운받기 [클릭]

이론

선형 회귀(Linear Regression)는 독립변수와 수치형 종속변수 간의 관계를 모델링하는 가장 기본적인 머신러닝 모델 중 하나이다. 선형 회귀는 독립변수와 종속변수 간의 관계를 가장 잘 설명하는 직선을 찾는 것이다. 이때, 독립변수는 여러 개일 수 있으며, 이를 다중 선형 회귀(Multiple Linear Regression)라고 한다. 그리고 선형 회귀는 통계학에서도 다루는데 이는 일반화 선형 모형(GLM, Generalized Linear Model)을 뜻하며 해당 내용은 별도의 게시물에서 다룬다.

선형 회귀 모델을 구현하기 위해서는 sklearn 라이브러리의 LinearRegression() 클래스를 사용한다. 해당 클래스의 공식 문서에서 안내하는 파라미터는 다음과 같다.

fit_intercept : 유형 - bool, 기본값 - True

  • 설명: 모델 학습에 상수항을 포함할지 여부를 지정(False설정시 상수항 미포함)
  • 입력값 범위: {True, False}

copy_X : 유형 - bool, 기본값 - True

  • 설명: 독립변수 데이터 복사 여부를 지정
  • 입력값 범위: {True, False}

n_jobs : 유형 - int, 기본값 - None

  • 설명: 모델 학습에 사용할 CPU 코어 개수를 지정(None설정시 기본적으로 1개 코어 사용)
  • 입력값 범위: {None, int}

positive : 유형 - bool, 기본값 - False

  • 설명: 계수를 강제로 양수로 지정(True설정시 계수를 양수로 제한)
  • 입력값 범위: {True, False}

예제 코드

먼저 다음과 같이 라이브러리와 데이터를 준비하고 사용하는 데이터와 관련된 전처리 코드는 [Py) 전처리 - ML 회귀모델용 - 01] 게시글을 참고하자.
model_regression_ins_charges.csv 다운받기 [클릭]

1
2
3
4
5
6
7
8
import pandas as pd

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error # 회귀모델 평가(MSE, RMSE)
from sklearn.metrics import mean_absolute_percentage_error # 회귀모델 평가(MAPE)

df_ins = pd.read_csv("data/model_regression_ins_charges.csv")
df_ins.head(2)
id charges gender is_smoker age bmi children region_B region_C region_D Xgrp
0 10182 4796 0 0 0.326087 0.641916 0.2 0.0 0.0 0.0 train
1 11118 12949 1 0 0.826087 0.476190 0.8 0.0 0.0 0.0 train

“Xgrp” 변수을 기준으로 학습과 평가 데이터세트로 나눈 후 학습에 불필요한 “id”, “Xgrp” 변수를 제거한다.

1
2
3
4
5
6
df_train = df_ins.loc[df_ins["Xgrp"] == "train", ]
df_test = df_ins.loc[df_ins["Xgrp"] == "test", ]
df_train = df_train.drop(columns = ["id", "Xgrp"]).reset_index(drop = True)
df_test = df_test.drop( columns = ["id", "Xgrp"]).reset_index(drop = True)

df_train.head(2)
charges gender is_smoker age bmi children region_B region_C region_D
0 4796 0 0 0.326087 0.641916 0.2 0.0 0.0 0.0
1 12949 1 0 0.826087 0.476190 0.8 0.0 0.0 0.0

LinearRegression() 클래스를 사용하여 학습을 진행한다. 여기서 필요시 각 파라미터를 조정하여 학습을 진행할 수 있다.

1
2
3
4
5
6
model_r = LinearRegression() # 모델 생성
model_r.fit(X = df_train.drop(columns = "charges"),
y = df_train["charges"])
pred = model_r.predict(df_test.drop(columns = "charges"))
pred[:4]
## array([31558.17682083, 14762.66571704, 7830.78414913, 8256.86662456])

학습된 모델을 평가하기 위해 RMSE와 MAPE를 계산해본다.

1
2
3
4
5
mean_squared_error(y_true = df_test["charges"], y_pred = pred) ** 0.5
## 6409.047415983903

mean_absolute_percentage_error(y_true = df_test["charges"], y_pred = pred)
## 0.45517603709900756
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×