본문 바로가기

데이터분석&캐글

사람들이 선형회귀에 대해 잘못 알고있는 점

선형회귀를 코딩으로 접할 때마다 어떤 과정과 어떤 원리로 동작하는지 파악하려 했다.

그리고 선형회귀를 접한지 1년이 지난 지금, 선형대수, 코딩, 통계의 개념을 통해 흩어져 있던 퍼즐을 드디어 맞췄다. 

잘못된 개념으로 풀이하는 정보가 넘쳐났고, 찾아보더라도 파편적으로 공부했기 때문에 오래 걸렸던 것 같다.

그러니 한편으로는 나처럼 많은 사람들이 계속 잘못 알 수도 있겠다 라고 생각된다.

관련된 내용을 항목별로 나눠 적어보겠다. 

1. 숫자인 데이터면 컴퓨터는 선형모델을 만든다.

: 통계적으로 선형회귀 가정에는 선형성, 독립성, 정규성, 등분산성의 4가지 조건이 존재한다.

그래서 이 가정을 만족하지 않다면 선형회귀모델이 만들어지지 않기 때문에

모델이 만들어졌다면 이 모델은 어쨌든 유효하긴 하고, 파라미터 조정을 통해 조절하면 되는 것으로 착각할 수 있다.  

 

그러나 컴퓨터는 프로그래머들이 입력해놓은 연산처리 과정에 맞춰, 입력 데이터로 무조건 선형회귀모델을 만든다.

그 생성된 모델 결과가 통계적으로 유효한지, 본인의 의도대로 모델이 생성됬는지와는 별개이다. 

모델을 '유효'하게 만들기 위해서는 데이터 자체를 다시 전처리해야 할 수 있고, 데이터 자체가 선형회귀에 부적합할 수 있다. 

/ex. 아래 항목.4 예시 참고 


2. 선형회귀에서 선형이란 직선을 말하는 것이 아니다.

: 많은 사람들이 선형=직선 이라고 많이 설명하지만 아니다. '선형'은 선형대수에서 말하는 선형이다. 즉  +, 상수배를 만족하는 연산이라는 뜻이다. 각 회귀계수 간 선형관계로 표현할 수 있으면 선형이다.

이 다음 내용들을 통해 그 이유에 대해 피부로 느껴보자.

*참고 : 독립변수에 대해서 선형성을 요구하는 것도 아니다. ( y=a * x^2 형태도 선형)

 

*내용추가

출처 : https://specialscene.tistory.com/89

위 그림을 보면 외쪽은 확실히 단순선형회귀 그래프이다. 

그러나 오른쪽 그림을 보고 x가 선형성을 만족하지 않는 이유는 직선이 아니기 때문이구나! 라고 오해하면 안된다.

y=x^2형태로 표현 가능했다면 선형이다 (즉_ 위 그래프는 선형으로 표현이 가능함. 많은 교재가 이렇게 오류를 범한다...)

다만, 일반적으로 잘 피팅되는 곡선은 선형결합관계로 표현할 수 없는 식이 많기 때문에 그냥 그렇구나 라고 넘겨야 한다.

ex. y=x^3/8 는 선형X

 

~ 추가적으로 위 그림 같은 경우, 물론 본연의 'x' 라는 변수는 잃어버리지만

직선으로 나타나게끔 x의 차원을 나누면(독립변수 추가) 특정 차원(독립변수)은 선형이 될 수도 있음.

*혹은 다른 변수를 추가했는데 그 변수와의 상관관계로 인해 직선이 될 가능성도 없지는 않음

/ 아래 항목.5 참고, *관련해서 굉장히 좋은 포스팅임 : kkokkilkon.tistory.com/175

 


3. 다중선형회귀는 직선이 될 수 없다. 

: 혹자들이 말하는 다중회귀에서의 직선 관계는 각각의 칼럼/차원 안 에서만 가능하다.

쉽게 말하면, 지정 독립변수 하나만 따로 빼어 종속변수와 나란히 했을 때만 직선으로 표현 가능한 것으로

전체적인 데이터와의 관계를 두고 보았을 때는 직선일 수가 없다. 

 

흔히 y=wx+b 로 선형회귀를 설명한 뒤, 직선 그래프를 보여주며  선형을 설명한다. 그리고 이 개념을 그대로 y=WX+b 형태에 적용하며 간단히 끝내버리는 경우가 많다.

 

그렇게 되면 회귀를 제대로 이해하지 못한다. 

y=WX+B 조차 엄밀히 말하면 편의성을 도모하기 위함이지 틀린 식이다. 

본질적으로는 아래 식이 맞다. 

다만, 각 칼럼별 편향치(기본값)인 b1~bn값은 어짜피 상수임으로

전체 데이터의 편항치로 계산하여 b라고 표현하게되면 아래와 같다(통상적으로 이렇게 표현)

위 식은 우리가 중고등학교때 배운 직선으로 표현될 수 없다. x1부터 xn까지 각각이 하나의 차원이기 때문이다.

n차원은 그릴 수 없으니 3차원까지만 그려도 그래프는 다음과 같은 형식이다. 

(위 식과는 무관한 단순 예시이다.)

(출처 : Andrew NG lecture)

여기서 단순하게 x~xn = X로 묶어서 n차원을 1차원으로 축소시킬 수 있다.

그런 다음 x축에 놓고 그린다음 직선이 됐다고 얘기하면... 뭐 좋다, 일리 있는 말일 수 있다. 

그러나 그건, 집값(y) = W*(공공기관수&학교수&회사수&편의시설수&보안시설수)  이런 식으로 접근하겠다는 의미.

그렇게 되면 분석하고자 했던 각 칼럼별 의미를 파악할 수가 없을 뿐더러, 컴퓨터 또한 그렇게 계산하지 않는다. 

 

따라서 아래 다중회귀에서 

직선인 관계는 각각의 차원에서만 성립하며

전체적인 관계를 두고 보았을 때는 직선이 아니다. 

여기서 각각의 차원 안에서 성립한다는 말은

하나의 차원만 때어놓고 보면 종속변수와의 관계가 직선으로 표현될 수 있다는 말.

( ex. 'x1'차원에서 x1과 y와의 관계 : y=w1*x1 +b1)

 

추가적으로 아래식은 그래프는 한 프로젝트의 실제 다중회귀의 결과이다.

여기서 다중회귀가 직선일 수 있었던 이유는 연산 결과값으로 그린 그래프이기 때문이다.

실제값이 X축이고 Y축이 예측값인 전제에서 그린 그래프라는 것을 놓치지 말자.

 

정확하지 않아 단언할 수는 없지만, +와 상수배로 이루어진(선형관계) 결과를 분석하면,

'예측값~실제값'(모델결과)를 직선형태로 표현할 수 있더라.. 라는 의미에서 선형=직선이 쓰인 것이라면 일부 동의한다.


4. 선형회귀에서 데이터스케일링은 필수인가?

: 아니다, 데이터가 숫자로만 되어있다면 선형회귀모델은 항상 결과를 뱉어준다.

모델에서 회귀계수를 통해 의미를 도출해야할 경우에 데이터 스케일링이 필요하다.

즉, 대부분 이런 경우니니 필수라고 할 수 있겠다. 

이 과정을 이해하려면 컴퓨터가 어떻게 경사하강법을 통한 기울기 조정하는지 알고 있어야 한다.

요점을 말하면, 각각의 회귀계수는 각각 차원에서의 기울기를 뜻한다.  +각각을 선형으로 결합시킨 것

아래의 식으로 설명하면 

w1은 y와 x1과의 관계에서의 최소잔차기울기를 말하며

w2는 y와 x2와의 관계에서의 최소잔차기울기를 하는 것이다. 

 

최소잔차기울기도 어쨋든 기울기로서 y-value/x-value 의 기울기 연산 평균으로 만들어진다.  

따라서 X의 스케일 자체가 크면 클수록 회귀계수는 낮게 측정되어 중요도가 낮다고 평가될 것이다. 

 

아래 예를 살펴보자. 

x1은 1~100의 스케일에서 50개 랜덤추출

x2는 1,000~100,000 스케일에서 50개 랜덤추출

y는 1,000,000 ~100,000,000 스케일에서 50개 랜덤추출 한뒤, 회귀분석을 돌렸다. 

독립변수의 스케일 자체가 클수록 회귀계수가 낮게 측정되었다.

그렇지 않지만 이 회귀모델이 유효하다고 하면,  x1이 x2보다 y에 엄청난 영향을 미치는 변수라고 판단하게 된다.

따라서 이런 일이 발생하지 않으려면 데이터 스케일링을 해줘야 한다. 

*실제 데이터라면 다른 단위를 맞추기 위한 스케일링이 진행될 수 있겠다.


5. 컴퓨터가 선형회귀를 구하는 방법 : 경사하강법

결론먼저! 

데이터 : [튜닝 할 수 있는 횟수_Round] or [식에 입력할 값_자원]
모델 :  [예측값 도출 식!! (값X)] 제공 
경사하강법 : [손실함수 편미분으로 모델(식)의 튜닝값 구하기]
손실함수 : [실제값 - 예측값] 의 계산법

사람처럼 식의 연산을 통해 회귀를 계산한다. (연역)

컴퓨터는 식에 대이터를 하나씩 집어 넣으면서 회귀를 계산해 나간다. (귀납)

 

 

1. 테이블(데이터셋)의 각 칼럼 수 대로  x1, x2, x3, .... xn 으로 식이 구성된다. (다항회귀)

2. 모델은 데이터를 어떻게 연산할지에 대한 식을 제공한다. 선형회귀면 y=ax+b

3. 컴퓨터가 모델로 부터 y=(w1*x1)+(w2*x2)+(w3*x3)+(wn...xn)+b 라는 식을 전달받으면 행(Row)_데이터 입력순서에 따라 값(X, y)을 집어넣는다. 
[ex] 만약 첫번째 행이 10, 37, 23 ... 128 이라고 할 때
128 = w1*10 + w2*37 + w3*23 ....  인 식이다. 

3. 경사하강법을 통해 W 값을 구할 때는 각각 칼럼별로 따로 연산이 이뤄진다. 
[ex] w1에 대해 편미분하면 w2 ~ wn 은 모두 상수로 취급되어 사라지기 때문이다.
> 즉, 각각의 컬럼별로 회귀계수가 구해진다. ex. w1의 회귀계수를 구하기 위해 w2가 고려되는 것은 아님
이 때문에 선형회귀 전제 가정에서 독립변수 간 독립성을 요구했던 거임.
*이제 결론을 낼 수 있는 내용!!
선형성 ~ 회귀계수 간 선형관계를 통해 결합시켜야 하니까
정규성 ~ 중심극한 정리를 통한 모평균 추정, 불편추정량등 모수를 측정하기 위한 전제
등분산성 ~ 독립성이 다른변수와의 관계 였다면 등분산성은 독립변수 자체에 대한 얘기
               독립변수가 어떤 패턴을 갖고 있는거면 안에 그 패턴을 갖게 하는 숨겨진 특성(독립변수)를 추출해내야 함(데이터가 충분하면 그 칼럼은 쓰지 말자)


4. 실제 새로운 데이터가 입력된다 했을 때는 각각 따로 값이 입력되고, 총합으로 계산된다. 
x1 데이터는 w1에 매칭되고
x2 데이터는 w2에 매칭되고
xn 데이터는 wn에 매칭된 후 
예측결과값=(w1*x1)+(w2*x2)+(w3*x3)+(wn...xn)+b 

본 흐름에서는 벗어나지만,

3번 내용을 이해하면 단순선형회귀에서의 가정으로 확장시켜면 이제는 내용을 쉽게 이해할 수 있다. 

(중요참고)선형회귀 가정

독립성 ~ 연산 목적이 각 컬럼별로 최소잔차회귀계수를 구하기 위한 것 > 모델은 독립변수 간 상관관계는 계산 못함.

              ㄴ 다중공선성을 통한 변수선택 개념 도입의 이유

선형성 ~ 모델 학습 결과로 구한 회귀계수는 선형관계를 통해 결합시켜야 하니까
정규성 ~ 중심극한 정리를 통한 모평균 추정, 불편추정량 등 > 모수를 측정하기 위한 전제
등분산성 ~ 독립성이 다른변수와의 관계 였다면 등분산성은 독립변수 자체에 대한 얘기
               독립변수가 어떤 패턴을 갖고 있는거면 안에 그 패턴을 갖게 하는 숨겨진 특성(독립변수)를 추출해내야 함 

              (데이터가 충분하면 굳이 그 칼럼은 쓰지 말자..)

 

선형회귀에서 손실함수로는 최소자승법(제곱값이 최소)이 사용된다.

데이터로 값을 입력받고 > 모델을 통해 식에 적용시킨 뒤 > 예측값과 실제값의 차이 방법을 결정한 다음 >

어떻게 최소값을 구할지에 대한 내용이 경사하강법이다.

 

 

epoh=1000 (입력하는 데이터 = Row : 1~1000) 정도면

어느정도 회귀계수가 구해진다고 한다. 

*경사하강법 그래프를 보면 항상 지그재그 이지만,
항상 지그재그가 아닐 수 있다. 

* 간단히 머리속에 집어넣을 때 파라미터 튜닝과정은
데이터 : [튜닝_Round] 
모델 : [예측값]
경사하강법 : [손실함수 편미분으로 튜닝값 구하기]
손실함수 : [실제값 - 예측값] 의 계산법

*경사하강법 원리는
https://www.youtube.com/watch?v=ve6gtpZV83E < 영상 

6.다항회귀 vs 다중회귀 언제 무엇을 써야하는가?

종속변수와 각각의 독립변수의 관계를 살펴보자. 

데이터 마다 다르다. 또 데이터 안에서도 칼럼마다 다를 수 있다.

 

칼럼별(독립변수 별로) 종속변수의 관계를 살펴보았을 때

직선으로 그려지는 독립변수들은 다중회귀로

곡선으로 그려지는 독립변수들은 다항회귀를 적용한다.

 

다항회귀는 똑같은 선형회귀이지만, 독립변수-종속변수 관계가 직선이 아닐 때 활용한다.

항의 차수는 곡선이 몇번 휘어지느냐에 따른 것으로 n차 => n-1 휘어짐 이다. 

일반적으로 3차 이상으로는 사용하지 않는다고 한다. (인공신경망이 훨 좋겠지)

https://dodonam.tistory.com/236

위 그래프로 예를 들어보자.

하나의 독립변수(칼럼)과 하나의 종속변수 만이 존재하는 데이터를 시각화한 것이다.

 

여기서 파란색은 단순선형회귀

빨간색과 초록색은 다항회귀이다. 

재밌는 점은 아래 식을 봐보자

단순선형에서 다중회귀로 가도 꽤 복잡해지는데

다항회귀가 다중다항으로 가면 얼마나 복잡할지 벌써 속이 쓰리다(....안쓰는 이유를 알겠네)

 

따라서 원리를 모르면 모든 데이터를 모두 다중회귀에 때려넣겠지만

원리를 안다면 종속변수와의 관계에서 꼭 곡선이 필요한 회귀를 그려야하는 독립변수만 따로 모아 돌릴 것이다.