top of page

4.2 회귀분석

키워드 : 단순 선형 회귀, Linear regression, 다항 회귀, Polynomial regression, 로지스틱 회귀, Logistic regression, 서포트 벡터 머신 회귀, Support Vector Regression, 머신러닝, 기계학습, 군집분석, 회귀분석, 분류 분석, NLP, 자연어, 지리적 분석, 지도학습, 비지도학습, 클러스터링, 딥러닝, AI, 파이썬, 데이터 분석, 데이터 시각화, EDA, 데이터 수집, 데이터 모델링

01. 회귀분석의 개념

회귀분석은 데이터 분석 분야에서 중요한 분석 기법 중 하나로, 독립 변수와 종속 변수 간의 인과 관계를 파악하여 종속변수(y)를 예측하는 기법을 말합니다. 종속 변수(Dependent Variable)는 예측하거나 설명하려는 연속형 변수로, 밑의 식에서 y에 해당합니다. 독립 변수(Independent Variable)는 종속 변수에 영향을 미치는 설명 변수로, 밑의 식에서 x에 해당합니다. 즉, 종속변수인 y를 예측하기 위해 f(x)라는 모델을 만드는 것이 회귀분석입니다.

Untitled.png

회귀분석은 데이터의 유형과 목적에 따라 다양한 형태로 변형되어 사용됩니다. 여기에는 선형 회귀, 다항 회귀, 로지스틱 회귀 등이 있습니다. 분석의 목적과 데이터의 특성에 따라 적절한 회귀 모델을 선택하시면 됩니다.

02. 회귀분석의 목적 및 활용

회귀분석은 위에서 언급한 것 처럼 y를 예측하기 위해 f(x)라는 회귀식을 만들어내는 것이 그 목적입니다. 음주운전을 x, 교통사고 총 발생건수를 y로 둔 후, x를 바탕으로 y를 예측할 수 있는 f(x)모델을 만드는 것이 예가 될 수 있습니다. 회귀분석은 예측, 시계열 모델링 등에 주로 사용됩니다.

03. 회귀분석의 종류

3.1 단순 선형 회귀(Linear regression)

선형 회귀 분석은 독립변수와 종속변수 사이에 직선적인 형태가 있다고 가정하는 것을 말합니다. 직선적인 형태란 독립변수 (x)가 일정하게 증가하면, 종속변수 (y)도 그에 비례해서 증가하거나 또는 감소하는 형태를 말합니다. 선형 회귀는 가장 예측치를 잘 표현할 수 있는 최적의 적합선을 사용하여 모델을 만듭니다.

Untitled (1).png

선형회귀는 간단한 형태로 쉽게 사용할 수 있다는 장점이 있으나, 특이치의 영향을 잘 받는다는 단점이 있어 빅데이터를 대상으로 모델을 사용시 주의를 기울여야 합니다.

선형 회귀를 파이썬 코드로 표현하는 것은 다음과 같이 진행합니다.

from sklearn.linear_model import LinearRegression

# LinearRegression()을 변수에 선언해줍니다.

lin_reg = LinearRegression()

# 자신의 데이터를 기반으로 X와 y를 선언해준 후 아래의 코드를 실행하면, 데이터를 기반으로 선형회귀 모델이 fitting 됩니다.

lin_reg.fit(X, y)

# predict 기능을 통해 예측값을 구할 수 있습니다.

y_predicted = lin_reg.predict(X)

선형회귀의 예제는 다음과 같습니다.

Untitled (2).png

위의 그래프는 시간의 흐름에 따른 강남 아파트의 가격 변화입니다. 시간이 X, 강남 아파트가 Y로 X가 증가할 수록 Y가 증가하는 직선 형태의 관계를 가지는 것을 살펴볼 수 있습니다. 따라서 이는 단순 선형 회귀 모델 형태를 띄고 있습니다. 이를 통해 강남아파트의 가격이 앞으로 어떻게 변할 것인지 예측할 수 있습니다.

3.2 다항 회귀(Polynomial regression)

다항회귀란, 비선형 데이터를 학습하기 위해 선형 모델을 사용하는 기법입니다.

3.1의 단순 선형 회귀를 이용하여 선형이 아닌 데이터의 관계를 표현하는 것은 어렵습니다. 따라서 하나의 독립변수 (x)에 대한 차수를 확장해가며 단항식이 아닌 2차, 3차 이상의 회귀 모델을 도출하는 것이 다항 회귀 입니다. 단순 선형회귀가 일차방정식과 같다면, 다항 회귀는 이차, 삼차 이상의 방정식이라고 생각하면 이해하기 쉽습니다.

Untitled (3).png

다항 회귀는 비선형 관계를 가지고 있는 데이터를 잘 설명해준다는 장점이 있지만, 고차 다항 회귀 모델로 갈 수록 데이터에 과대적합될 가능성이 있습니다.

(과대적합이란 모델이 훈련데이터에 너무 최적화되어있어서 모델이 과도하게 복잡한 상태를 말합니다.) 따라서 적절한 다항 차수를 선택하는 것이 좋습니다.

아래는 다항회귀를 구현하는 파이썬 코드입니다.

from sklearn.preprocessing import PolynomialFeatures

# 2차 방정식 구현을 위해 degree에 2를 넣었습니다.

# 변수에 다항회귀 모델을 선언해줍니다.

poly_features = PolynomialFeatures(degree = 2)

# X를 모델에 fitting 시킨 후 변형 시킵니다.

X_poly = poly_features.fit_transform(X)

# 단순회귀 모델을 변수에 선언해줍니다.

lin_reg = LinearRegression()

# 단순회귀 모델에 아까 변형시킨 X_poly를 X값으로 넣은 후 fitting 시킵니다.

lin_reg.fit(X_poly,y)

다항회귀의 예시는 다음과 같습니다.

Untitled (4).png

예를 들어 Y를 행복지수, X를 급여라고 해봅시다. 이때 f(x)의 모델은 이차식의 형태를 보입니다. 해석을 하면, 급여가 높아질 수록 어느 정도까지는 행복 지수가 높아지지만, 특정 급여 이상이 되면 오히려 행복지수가 떨어진다는 것을 알 수 있습니다. 이것이 다항회귀의 예시가 될 수 있습니다.

3.3 로지스틱 회귀(Logistic regression)

로지스틱 회귀란 종속변수가 연속형 변수가 아닌 범주형 변수인 경우에 시행하는 회귀분석입니다.

다시 말해 0 또는 1, 참 또는 거짓, 질병의 발생 유무 등 둘 중 어떤 값을 가지는 지 예측하는 경우에 로지스틱 회귀 분석이 사용됩니다.

로지스틱 회귀는 회귀분석에도 사용되나, 코드를 조금만 바꾸면 ‘로지스틱 분류’ 기법으로 사용되어 데이터를 분류하는 기능으로도 사용됩니다.

이는 다음 장에서 연재될 예정입니다.

Untitled (5).png

위의 사진에서 왼쪽 그래프의 빨간 점을 보시면, 종속변수가 0,1로만 나오는 데이터는 선형 회귀로 설명하기 어렵습니다. 우리가 얻고싶은건 0,1의 값인데 선형회귀의 경우 y 값의 범위가 무한대이기 때문입니다. 한편, 오른쪽 그래프는 Y가 0과 1 사이의 범위 안의 수만 가질 수 있도록 변형을 해준 S자형 그래프입니다. 여기서 Y값이 0.5 이하이면 0, 0.5 이상이면 1로 치환함으로써 종속변수가 0,1로만 표현되게 할 수 있습니다. 이를 통해 범주형 변수인 y값을 쉽게 예측할 수 있게 됩니다.

로지스틱 회귀는 선형 회귀 모델을 기반으로 하기 때문에 간단하고 이해하기 쉽고, 이상치에 강하다는 장점이 있으나, 간단하고 선형적이기 때문에 복잡한 관계를 모델링하기 어려워 과소적합의 문제가 발생할 수 있습니다. ( 과소적합이란, 모델이 너무 간단하여 모델이 예측을 잘 하지 못하는 것을 말합니다.) 따라서 고차원 데이터나 비선형 관계를 다루기 어려울 수 있습니다.

로지스틱 회귀는 다음과 같은 코드로 구현할 수 있습니다.

from sklearn.linear_model import LogisticRegression

Log_reg = LogisticRegression()

# 자신의 데이터로 train_data와 target_data를 지정해줍니다.

Log_reg.fit(train_data,target_data)

# 아래의 코드를 통해 위에서 피팅시킨 모델이 어떻게 분류를 하는지 결과를 볼 수 있습니다.

y_pred = Log_reg.predict(train_data)

로지스틱 회귀의 예시는 다음과 같습니다.

Untitled (6).png

로지스틱 모델의 경우 시험의 합격을 예시로 들 수 있습니다.

공부한 시간이 많을 수록 시험에 합격할 확률이 높아진다고 가정해봅시다. 이럴 때 선형모델을 사용하면 확률이 0과 1 밖으로 빠져나가기 때문에 적합하지 않습니다. 이런 케이스에는 로지스틱 모델을 적용시켜 공부를 일정시간 이상 한 경우 합격, 그게 아닐 경우에는 불합격으로 볼 수 있습니다.

3.4 서포트 벡터 머신 회귀(Support Vetor Regression)

서포트 벡터 머신 회귀에서 가장 핵심이 되는 것은 아래의 그래프에서 볼 수 있는 결정경계 (빨간 선)입니다. 빨간선인 결정경계 자체를 구하는 것은 ‘회귀’분석이고, 이 선을 기준으로 데이터를 구분하는 것은 ‘분류’분석입니다. 서포트 벡터 머신이 분류로 활용되는 예는 다음 시간에 더 자세하게 다룰 예정입니다.

서포트 벡터 머신 회귀를 설명하기 위해서는 용어에 대한 간략한 설명이 필요합니다.

Untitled (7).png

서포트 벡터 머신 회귀선(빨간색 선)을 구할 때, 서포트 벡터란 Margin을 정하는 기준이 되는 데이터를 말합니다. Margin은 서포트 벡터 기준 그 안쪽 범위의 영역으로, Margin의 영역을 벗어나는 데이터에 대해서는 무시하고 Margin에 영역 안에 있는 데이터에 대해서만 모델(회귀선/빨간선)에 반영합니다. 따라서 서포트 벡터 머신 회귀는 이상값에 민감하지 않다는 특징이 있습니다. 이러한 데이터를 통해 만들어진 회귀 선은 직선 형태가 될 수도, 곡선 형태가 될 수도 있습니다. 이것이 바로 서포트 벡터 머신 회귀 (SVR) 입니다. 마진이 좁을 수록 데이터를 대표하는 회귀선을 잘 만들 수 있습니다.

서포트 벡터 머신 회귀는 비선형 관계를 모델링 할 수 있고 이상치의 영향을 적게 받는다는 장점이 있으나, 커널 유형, 커널 파라미터, C(마진 오류 허용) 등 여러 하이퍼파라미터를 조정해야 한다는 특징이 있습니다.

서포트 벡터 머신 회귀모델의 파이썬 코드는 다음과 같습니다.

from sklearn.svm import LinearSVR

svm_reg=LinearSVR()

svm_reg.fit(X,y)

04. 참고 자료

bottom of page