선형회귀분석 사례 - seonhyeonghoegwibunseog salye

sklearn.datasets load_breast_cancer() 유방암 데이터 sklearn.model_selection train_test_split(X,y) 데이터 분할 sklearn.linear_model LinearRegression(...) 선형회귀모형 셋업 Ridge(...) 능형회귀모형 셋업 Lasso(...) Lasso 모형 셋업 ElasticNet(...) Elastic Net 모형 셋업 sklearn.linear_model.LinearRegression load_breast_cancer()0 선형회귀모형 적합 load_breast_cancer()1 선형회귀모형 예측 load_breast_cancer()2 예측오차 (\(R^2\))계산 load_breast_cancer()3 load_breast_cancer()4 최대 잔차 load_breast_cancer()5 평균절대값오차(MAE) load_breast_cancer()6 평균제곱오차(MSE) load_breast_cancer()7 결정계수(\(R^2\)) load_breast_cancer()8 평균절대퍼센트오차(MAPE)

만약 \(f(x)\)가 다음과 같은 선형함수면 이 함수를 **선형회귀모형(linear regression model)**이라고 한다. 선형회귀모형을 사용하는 회귀분석은 선형회귀분석이라고 한다.

\[ \hat{y} = w_0 + w_1 x_1 + w_2 x_2 + \cdots + w_D x_D = w_0 + w^Tx \]

위 식에서 독립변수 \(x=(x_1, x_2, \ldots, x_D)\)는 \(D\)차원 벡터다. 가중치 벡터 \(w=(w_0, \cdots, w_D)\)는 함수 \(f(x)\)의 계수(coefficient)이자 이 선형회귀모형의 **모수(parameter)**라고 한다.

상수항 결합

회귀분석모형 수식을 간단하게 만들기 위해 다음과 같이 상수항을 독립변수 데이터에 추가하는 것을 상수항 결합(bias augmentation)작업이라고 한다.

\[\begin{split} x_i = \begin{bmatrix} x_{i1} \\ x_{i2} \\ \vdots \\ x_{iD} \end{bmatrix} \rightarrow x_{i,a} = \begin{bmatrix} 1 \\ x_{i1} \\ x_{i2} \\ \vdots \\ x_{iD} \end{bmatrix} \end{split}\]

상수항 결합을 하게 되면 모든 원소가 1인 벡터가 입력 데이터 행렬에 추가된다.

\[\begin{split} X = \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1D} \\ x_{21} & x_{22} & \cdots & x_{2D} \\ \vdots & \vdots & \vdots & \vdots \\ x_{N1} & x_{N2} & \cdots & x_{ND} \\ \end{bmatrix} \rightarrow X_a = \begin{bmatrix} 1 & x_{11} & x_{12} & \cdots & x_{1D} \\ 1 & x_{21} & x_{22} & \cdots & x_{2D} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & x_{N1} & x_{N2} & \cdots & x_{ND} \\ \end{bmatrix} \end{split}\]

이렇게 되면 전체 수식이 다음과 같이 상수항이 추가된 가중치 벡터 \(w\)와 상수항이 추가된 입력 데이터 벡터 \(x\)의 내적으로 간단히 표시된다.

\[\begin{split} f(x) = w_0 + w_1 x_1 + w_2 x_2 + \cdots + w_D x_D = \begin{bmatrix} 1 & x_1 & x_2 & \cdots & x_D \end{bmatrix} \begin{bmatrix} w_0 \\ w_1 \\ w_2 \\ \vdots \\ w_D \end{bmatrix} = x_a^T w_a = w_a^T x_a \end{split}\]

일반적으로 선형회귀모형은 항상 상수항 결합을 하기 때문에 특별히 벡터 기호를 \(x_a\) 또는 \(w_a\)라고 표시하지 않아도 상수항 결합이 되어있는 것으로 볼 수 있다.

statsmodels 패키지는 상수항 결합을 위한

import statsmodels.api as sm

X = sm.add_constant(X0)
X
8 함수를 제공한다.

X0 = np.arange(10).reshape(5, 2)
X0

array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

import statsmodels.api as sm

X = sm.add_constant(X0)
X

array([[1., 0., 1.],
       [1., 2., 3.],
       [1., 4., 5.],
       [1., 6., 7.],
       [1., 8., 9.]])

최소자승법

최소자승법(OLS: Ordinary Least Squares)는 잔차제곱합(RSS: Residual Sum of Squares)를 최소화하는 가중치 벡터를 구하는 방법이다.

우리가 사용하는 예측 모형은 다음과 같이 상수항이 결합된 선형모형이다.

이때 잔차 벡터(residual vector) \(e\)는

\[ e = {y} - \hat{y} = y - Xw \]

이고 잔차 제곱합(RSS:residual sum of squares)은

\[\begin{split} \begin{aligned} y &= 36.4595 - 0.1080\,\text{CRIM} + 0.0464\,\text{ZN} + 0.0206\,\text{INDUS} + 2.6867 \,\text{CHAS} \\ & -17.7666\,\text{NOX} + 3.8099\,\text{RM} + 0.0007\,\text{AGE} -1.4756\,\text{DIS} + 0.3060\,\text{RAD} \\ & -0.0123\,\text{TAX} -0.9527\,\text{PTRATIO} + 0.0093 \,\text{B} -0.5248\,\text{LSTAT} \end{aligned} \end{split}\]

회귀분석은 종속 변수(목표)와 하나 이상의 독립 변수(예측 변수라고도 함) 간의 미래 사건을 예측하는 방법이다. 예를 들면, 난폭운전과 운전자에 의한 교통사고 총 건수 사이의 상관관계를 예측하거나 비즈니스 상황에서는 특정 금액을 광고에 사용했을 때와 그것이 판매에 미치는 영향 사이의 관계를 예측하는 데 사용할 수 있다.

회귀분석은 머신러닝의 일반적인 모델 중 하나이다. 회귀분석 모델은 수치적 가치를 추정한다는 측면에서 관측치가 어느 범주에 속하는지를 식별하는 분류 모델과 다르다.

회귀분석은 예측, 시계열 모델링 및 변수 간 인과관계 발견 등에 주로 사용된다.

회귀분석이 중요한 이유

회귀분석은 실제 응용 프로그램에서 넓게 활용되고 있다. 연속 숫자를 포함하는 모든 머신러닝 문제 해결에 필수적이며, 여기에는 다음을 비롯한 많은 예가 포함된다:

  • 금융 관련 예측(주택 가격 또는 주가)
  • 판매 및 프로모션 예측
  • 자동차 테스트
  • 날씨 분석 및 예측
  • 시계열 예측

회귀분석은 두 개 이상의 변수 사이에 유의미한 관계가 존재하는지 여부를 알려줄 뿐만 아니라 그 관계성에 대한 보다 구체적인 정보를 제공할 수 있다. 특히, 여러 변수가 종속 변수에 미치는 영향의 강도를 추정할 수 있다. 만약 한 변수(가령 가격)의 값을 변경하면 회귀분석을 통해 종속 변수(판매)에 어떤 영향을 미칠지 알 수 있다.

기업은 회귀분석을 사용하여 여러 척도로 측정된 변수의 효과를 검정할 수 있다. 활용할 수 있는 도구 상자에 회귀분석을 포함해두면, 예측 모델을 구축할 때 사용할 최상의 변수 집합을 평가하여 예측 정확도를 크게 높일 수 있다.

마지막으로 회귀분석은 데이터 모델링을 사용하여 머신러닝에서 회귀 문제를 해결하는 가장 좋은 방법이다. 차트에 데이터 포인트를 표시하고 이들을 관통하는 가장 적합한 선을 그어 각 데이터 포인트의 오류 가능성을 예측할 수 있다. 즉, 각 데이터 점이 선에서 멀리 떨어져 있을수록 예측 오차가 커진다(이 가장 적합한 선을 회귀선이라고 부르기도 한다).

회귀분석의 다양한 유형

1. 선형 회귀(Linear regression)

머신러닝에서 가장 일반적인 회귀분석 유형이라고 할 수 있는 선형 회귀는 예측 변수와 종속 변수로 구성되며, 이 둘은 선형 방식으로 서로 연관지어져 있다. 선형 회귀는 위에서 설명한 대로 가장 적합한 선, 즉 최적적합선을 사용한다.

변수들이 서로 선형적으로 연결되어 있는 경우 선형 회귀를 사용한다. 광고 지출 증가가 판매에 미치는 영향을 예측할 때 등이 예가 될 수 있다. 그러나 선형 회귀분석은 특이치에 영향을 받기 쉬우므로 빅데이터 집합을 분석하는 데 사용해서는 안 된다.

2. 로지스틱 회귀(Logistic regression)

종속 변수에 이산 값이 있는 경우, 다시 말해 0 또는 1, 참 또는 거짓, 흑 또는 백, 스팸 또는 스팸 아닌 것 등의 두 가지 값 중 하나만 취할 수 있는 경우 로지스틱 회귀를 사용하여 데이터를 분석할 수 있다.

로지스틱 회귀는 S자형 곡선을 사용하여 대상 변수와 독립 변수 사이의 관계를 표시한다. 그러나 로지스틱 회귀 분석 방식은 대상 변수에서 거의 동일한 값이 발생하는 대규모 데이터 세트에서 가장 효과가 있다는 사실에 유의해야 한다. 이 경우, 변수들의 순위를 지정할 때 문제를 일으킬 수 있기 때문에 서로 상관성이 높은 독립 변수들이 데이터 집합에 포함되어서는 안 된다. (이것은 multicollinearity, 즉 다중공선성이라고 알려진 현상으로, 회귀 분석에서 사용된 모델의 일부 예측 변수가 다른 예측 변수와 상관 정도가 높아, 데이터 분석 시 부정적인 영향을 미치는 현상을 의미한다.)

3. 리지 회귀(Ridge regression)

그러나, 불가피하게 독립 변수들 사이에 높은 상관 관계가 있는 경우라면 리지 회귀가 더 적합한 접근방식이다. 다중 회귀라고도 불리는 리지 회귀는 정규화 또는 규제화(regularization) 기법으로 알려져 있으며 모델의 복잡성을 줄이는 데 사용된다. 또한 ‘리지 회귀 페널티’로 알려진 약간의 편향, 즉 바이어스(bias)를 사용하여 모델이 과대적합(overfitting)에 덜 취약하게 만든다.

4. 라쏘 회귀(Lasso regression)

라쏘 회귀는 리지 회귀와 같이 모델의 복잡성을 줄여주는 또 다른 정규화 기법이다. 회귀 계수의 절대 사이즈를 금지함으로써 복잡성을 줄인다. 리지 회귀와는 다르게 아예 계수 값을 0에 가깝게 만든다.

그 장점은 기능 선택을 사용할 수 있다는 것이다. 데이터 집합에서 기능 세트를 선택하여 모델을 구축할 수 있다. 라쏘 회귀는 필요한 요소들만 사용하고 나머지를 0으로 설정함으로써 과대적합을 방지할 수 있다.

5. 다항 회귀(Polynomial regression)

다항 회귀는 선형 모델을 사용하여 비선형 데이터 집합을 모델링한다. 이것은 동그란 모양의 구멍에 네모난 모양의 못 또는 말뚝을 끼워 넣는 것과 같다. 다항 회귀는 독립 변수가 여러 개인 선형 회귀를 뜻하는 다중 선형 회귀와 비슷한 방식으로 작동하지만, 비선형 곡선을 사용한다. 즉, 데이터 포인트가 비선형 방식으로 존재할 때 사용한다.

모델은 이 데이터 포인트들을 지정된 수준의 다항식 특성으로 변환하고 선형 모델을 사용하여 모델화한다. 선형 회귀에서 볼 수 있는 직선이 아닌 곡선의 다항식 선을 사용하여 최적적합을 수행한다. 그러나 이 모델은 과대적합으로 나타나기 쉬우므로 이상한 결과치를 피하기 위해서는 끝 부분의 곡선을 분석하는 것이 좋다.

회귀 분석에는 위에서 소개한 것들보다 더 많은 종류가 있지만, 이 다섯 가지가 가장 일반적으로 사용되는 것들이다. 가장 적합한 모델을 선택하면 데이터가 가진 잠재력을 최대한 활용하여 더 큰 인사이트를 얻을 수 있다.