5-2. 회귀분석(모델링)

2019. 2. 25. 23:34

회귀분석과 로지스틱 회귀분석

  1. 회귀분석(Regression) : 관심있는 Y에 대해, X가 어떻게? 얼마나? Y에 영향을 주는지 알아보는 분석방법
  2. 로지스틱 회귀분석(Logistic Regression) : 관심있는 Y가 0 or 1일때, X가 어떻게? 얼마나? Y에 영향을 주는지 분석
    • 보통 ML과 DL의 성능에 대해서 reference로서 로지스틱 회귀분석을 먼저 제시하기도 한다.

회귀분석의 Workflow

  1. 모델링
    1) 단순 선형회귀 : Y에 영향을 주는 X가 1개
    2) 다중or중 선형회귀 : Y에 영향을 주는 X가 2개 이상

    • 다중공선성의 문제발생 : 2개 이상의 X가 서로 영향을 끼침.
  2. 모형 해석
    1) 계수 해석
    2) 표준화 계수b(베타)
    3) 계수의 유의성

  3. 모형 설명력
    1) 모형의 유의성
    2) 모델 설명력

  4. 모형 선택
    1) 변수선택기법 : 모형비교, 측도로서 AIC와 BIC

  5. 예측
    1) 잔차(residual) : 실제값 - 예측값 -> 찌꺼기인데 추세/패턴이 있는지 가정체크후 있다면 모델에 변수로 추가

1. 모델링

수학적 모형(오차없이 y=ax+b)과 다르게 통계적 모형으로서, 같은 input(x들)이라도 다른 y를 가지는 경우를 설명하기 위해 회귀방정식에는 항상 오차(엡실론)를 수반하는 형태를 가진다.

이 때, b0 = 절편, b1 = 기울기, e=오차(통계적 모형에서만 가짐)를 의미한다.
기울기 b1x가 1단위 증가할 때, y의 증가량으로 해석해야한다.
오차 e는 확률변수이며, 통계적 모형에만 적용되는 변수이다.

선형회귀는 독립변수와 종속변수의 1차 방정식을 전제로 한 선형성의 관계를 전제하여 분석한다. 그리고 데이터를 이용하여, 오차(e)를 최소화하는 방식으로 회귀방정식의 회귀계수와 회귀선을 구해야한다.
회귀선은 오차를 최소로하는 회귀방정식의 회귀계수들(b0, b1, b2 ..)을 다 구하여, 그래프상 가장 잘 설명하는 직선 하나를 찾은 것이다.

사실 회귀분석은 영국의 화학자 프랜스시 골턴이 발견한,
키 큰 부모 -> 자식들의 키는 점점 더 커지는 것이 아니라 평균으로 회귀하는 경향을 보고 만들어낸 개념이다.
독립변수 : 아버지의 키
종속변수 : 아들의 키
의 단순 선형회귀 문제로서, 키작은부모 -> 키큰자식(평균으로 가게끔), 키큰부모-> 키작은자식(평균으로가게끔)평균을 유지하려는 현상을 발견한 개념이 회귀인 것이다.

그리고 회귀분석에서 아버지의 키의 X가 1개만 있는 것이 아니라 여러개의 X들이 존재하는 것을 알 수 있다.
즉, 회귀분석이란 변수들의 관련성 규명을 위해, 어떤 수리적 모형을 가정, 측정된 데이터로 모형의 변수들을 추정하는 통계적인 방법이다.
Y에 영향을 주는 독립변수들 X에 어떤 것이 있고, 얼마나 영향을 주는지를 알아낸 뒤, 다음 Y값을 예측하는데 사용된다. 사실 예측력은 떨어지나 설명이 가능해서 자주 사용하는 분석방법이라고 한다.

예를 들어,
광고비용(X)가 매출액(Y)에 얼마나 영향을 줄까? -> 오차를 최소로하는 회귀선의 기울기로 해석한다. 광고비용 1단위 증가시 매출액 얼마나 증가했나?
공부(X)가 성적향상(Y)에 얼마나 영향을 줄까? -> 회귀선의 기울기로 해석
즉, X가 어떤 것들이 있는지 안 상태로서 선형회귀 = 회귀방정식+오차를 구한 뒤, 오차를 최소로하는 회귀선에서 기울기로 영향을 해석하면 된다.


위의 데이터에서는, X가 1개인 단순 선형회귀이며,
같은 speed(X)라도 다른 dist(Y)를 가지는데, 이는 오차(e)가 존재하기 때문이다.
dist = b0 + b1*speed + e 로 회귀식을 놓고, e를 최소화하는 b0, b1를 구해야할 것이다.

회귀식(Y = b0 + b1X + e)를 구하는 방법을 앞에서 계쏙 오차를 최소화한다고 했다.
사실, 구체적으로는 각 데이터의 실제값y와 회귀식의 값 yi의 차이인 오차(e)에 대해, 모든 오차들의 제곱의 합이 최소가 되는 회귀계수들을 구하는 방법인 최소제곱법(OLS, Ordinary Least Square)를 이용한다.
가상의 단순선형 회귀식 Y = b0 + b1X +e 에서 오차e를 좌변에 나머지를 우변에 이항한다.
e = Y - b0 - b1X
그리고, 각 데이터들을 입력하여 나오는 모든 e값들을 제곱해서 더한다.
오차의 제곱의 합을 S라 두면, 아래와 같은식이 나온다.

  1. 오차제곱의합(S, SSE)를 절편(a, b0)에 대해 편미분한다.
  2. 오차제곱의합(S, SSE)를 기울기(b, b1)에 대해서 편미분한다.
  3. 두 연립방정식을 이용하여, 절편(a)와 기울기(b)를 구할 수 있다.

이러한 방식으로 회귀계수(b0, b1-절편과 기울기)를 구하면, 회귀식이 완성된다.
이 때, 더이상 오차는 없어지고 하나의 회귀식이 만들어지는 것이다.

  • R에서는 lm()함수를 사용하면, 안에서 자동으로 b0, b1을 구해준다.
  • coefficients가 회귀계수 = Intercept(절편) + df$칼럼명(해당X앞에 곱해진 기울기)
  • lm()의 결과를 그대로 산점도 위에 abline()으로 그려주면, 그래프 상으로 회귀식을 그려줄 수 있다.
  • ggplot으로 그릴 때는, 산점도(geom_point()) + geom_smooth(method="lm")으로 자동으로 그려준다. 이 때, 신뢰구간까지 같이 그려지는데, n수가 적은 곳은 conf.interval이 넓고, n수가 많은 곳은 conf.interval이 좁다고 해석하면 된다. 좁을 수록 명사수.

사실 lm()에는 회귀계수( 절편, 해당X의 기울기들)만 있는 것이 아니라, 결과물로서 모델이 생성된다.

  • lm()결과를 reg_model변수에 저장하고, 새로운 데이터를 만들어서 predict( 모델변수명, 새로운데이터) 형식으로 predict()함수를 사용한다.


다중 공선성

이제 다중 회귀분석에 대해 다시 알아보자. Y에 영향을 미치는 X가 여러개 이므로 X to Y뿐만 아니라 X끼리 영향을 미치는 문제인 다중 공선성(Multicollinearity)의 문제가 발생한다. 즉, 독립변수(X)들간에 강한 상관관계가 나타나는 문제이다. 이것들을 어떻게 파악하고 어떻게 해결해야할까?

X들끼리의 강한 상관관계로 정보가 많아져서 Y를 예측하는데 더 좋다고 생각할 수 도 있으나, 최소제곱 추정지(OLS)의 공식상, 설명변수(X)들간의 상관관계가 높으면 OLS추정치의 분산이 불안정해진다고 한다.
다른 관점으로서 각 X들 앞에 곱해져있는 회귀계수들의 해석으로서 생각해 볼 수 있다.
X앞에 곱해져있던 b1은 가정이 있다.
다른 변수(X)들이 일정한 상황에서, 해당 X가 한단위 증가할 때 Y의 증가량이다. 즉, 다른 X들은 일정해서, 해당 X에 영향을 주지 않는 상태에서의 계수를 의미한다. 회귀계수의 정의자체가 서로 영향을 주지 않는 상태가 기본 전제인 것이다.
예를 들어, Yi = b0 + b1*X1 + b2*X2 인 상황에서, b1(기울기, X1의 회귀계수)의 해석은, X2가 일정한 상황에서 정해진 계수로서 해석하는 것이다.

만약, X1 : 태어난 날짜, X2 : 나이 처럼 X1과 X2가 완전한 상관관계(하나가 일정할 때, 를 가정이 불가능)에 있는 경우, 다중공선성 문제가 크게 발생하므로 -> 회귀계수를 정확하게 추정하기 어렵다.
또한, X1 : 상품의 내구도, X2 : 불량률 처럼 X1과 X2가 negative 상관관계가 너무 높은 경우도 다중공선성이 발생한다(하나를 일정하게 둘 수가 없다)

이러한 X들간의 상관관계를 확인하는 방법은 2가지 정도로 압축된다.

  1. X들간의 산점도그리기 : 직선성으로서 강한 상관관계를 보이면, 동시에 넣으면 안된다
  2. X들간의 VIF(Variation Inflation Factor) 혹은 공차한계(Tolerance) 계산

참고사이트 : https://datascienceschool.net/view-notebook/36176e580d124612a376cf29872cd2f0/

VIF의 역수가 Tolerance = 1 - R^2이다.

이 때, Ri^2i번째 X를 종속변수(Y)로 취급하여 회귀모형을 만든 후 Xi에 대한 나머지 X들의 모형 설명력이다.
예를 들어, Y ~ X1+ X2+ X3 모델에서, X1에 대한 VIF를 구하기 위해서 R1^2을 구해야한다. 구하는 방식은 X1 ~ X2 + X3의 모델을 만든 뒤 R1^2이 계산된다. 그 값이 0.9가 나왔다면, R1^2 0.9 = X2와 X3로 X1을 90% 설명할 수 있다.
그러면 VIF는 1 / ( 1- 0.90) 이 되고, Tolerance는 1-0.90이 된다.
이 때, VIF가 4이상 혹은 6이상 넘어가면, 해당 X는 다중공선성을 의심할 수 있다. VIF가 10(R^2 - 0.9)이상이면 보통 다중공선성 문제가 있다고 한다.

같은 이치로서, X1이 만약 다중공선성이 의심되면, 그것과 짝을 이루는 Xi가 반드시 존재할 것이다. 만약, X1과 강한 상관관계의 다중공선성을 가진 X2가 있다면, 둘중에 하나는 제거해야한다.

  • R에서는 car패키지안의 vif()함수를 이용해서 각 X에 대한 VIF를 나열해준다.

  • vif( model ) > 4라는 마스크를 만들고, True인 것을 찾아내면 된다.

  • 만약, 그러한 X가 존재한다면 최소 2개가 있을 것이다.(서로 연관)-> 1개만 선택해야한다.



다중회귀분석

Y에 영향을 끼치는 X가 여러개 있을 때는,linear combination이라는 선형결합 or 가중합으로 연결된다. 이것은 앞서, 1차 방정식으로 전제가 된다고 했다. 또한 다른 변수들이 일정할 때를 가정한 뒤, 해당 변수의 가중치(회귀계수)를 곱하는 보정이 들어간 것이다.
여기까지 만들어지는 것이 다중회귀 모형이다. 여기에는 e(엡실론)이 포함되어있다.

다음으로, 측정된 데이터들을 이용하여 OLS를 통해 오차의 제곱의 합을 최소로 하는 다중 회귀식을 구한다. e가 사라지고, 하나의 회귀식이 만들어진다.

하지만, 측정된 데이터 = 표본을 통해 만들어진 것이니, 결국에는 모집단을 추정하는 추정 다중회귀식이 만들어진다.

R에서는 lm( Y ~ X, data=)로 만들어진 단순선형회귀 모형(모델)에 대해, X를 추가해나가면서 다중선형회귀 모델이 되는 과정에서 자동으로 내부에서 회귀계수(기울기)를 보정하여 각각의 보정된 회귀계수가 summary()의 결과로 나타난다. 이 때 $coef로서, 회귀계수만 인덱싱해서 살펴보면 단순회귀와 다중회귀일때, 같은X에 대해서 다른 회귀계수가 나오는 것을 확인할 수 있다.

  • summary( lm( BMI ~ TC, data = acs) )$coef
  • summary( lm( BMI ~ TC + age + sex , data = acs) )$coef
  • TC의 Estimate=추정된 회귀계수값을 확인해보면, 변수를 추가할 때마다 회귀계수가 달라지며, 해석은 TC 한단위가 증가시 BMI의 증가량이 어떻게 변하는지 보면 된다.
  • 같이 등장하는 Pr( >|t|)는회귀계수에 대한 p-value이며,
    맨 마지막줄의 F-statistic의 p-value모형 자체의 p-value이다.
  • 즉, lm( Y ~ X의 선형모델 )은 OLS로 회귀모형을 생성
  • summary( lm())은 회귀계수 및 통계수치를 확인할 수 있다.
  • 각 회귀계수는 해당변수에 대해 다른 변수들이 일정할 때~의 가정이 있는 상태에서, 해당변수가 한 단위 증가시 종속변수가 얼마나 증가.감소하는지 로 해석하면 된다.

+ Recent posts