Skip to content

회귀분석 진단

회귀 분석의 가정

  • 선형성
    • 선형 회귀 분석에서는 자료가 선형인 경우 그 자료를 가장 잘 설명하는 모형을 만들 수 있음
    • 잔차: 실제 회귀 모형에서 나온 예측값과 실제값 사이의 거리
    • 선형이면 잔차가 적절하게 흩어져 있고 비선형이면 특정한 패턴을 보이면서 흩어져 있음
  • 등분산성
    • x가 증가함에 따라 분산이 증가하거나 감소하는 관계가 존재함
    • 등분산성을 만족하면 잔차가 적절하게 흩어져 있고 비선형이면 x가 커질수록 분산이 커짐
  • 독립성
    • 선형이면 잔차가 적절하게 흩어져 있고 비선형이면 특정한 패턴을 보이면서 흩어져 있음
    • 대부분의 자료는 독립성을 만족함
    • 경제학, 지리학 자료를 다룰 때 독립성을 만족하지 않는 문제가 발생하기도 함

다중공선성

그 다음에 다중공선성이란 게 있어요

이제 여기서 부터 할 거는 뭔가 회기분석을 할 때 그 결과가 좀 이상하게 나오는 게 그런 거에 대한 어떤 대응법 처치 법 이런 거를 좀 다를 건데 다중공선성은 뭐냐면 우리가 독립변수들끼리 서로 예측 가능하게 되는 게 독립변수들끼리 예측 가능하다는 건 뭐냐면 우리 중고차 데이터도 보면 이제 가격을 예측을 하는데 주행 거리도 들어가고 연식도 들어가고 이런 식으로 들어가는데 사실 주행 거리를 보면 연식을 어느 정도 알 수 있고 연식을 보면 주행 거리를 어느 정도 알 수 있고 이게 어느 정도일 때는 괜찮은데 지금도 보면 연식을 본다고 주행 거리를 완전히 알 수 있는 것도 아니고 주행 거리를 본다고 또 연식을 완전히 알 수 있는 건 아닌가요

근데 이게 너무 심해지면 다중공선성이라는 문제 다중공선성은 뭐냐면 서로 예측 가능해서 이거랑 이거가 사실상 거의 똑같아지는 그런 경우 그렇게 되면 추정치가 굉장히 불안정해지는 추정치가 불안정해진다는 게 무슨 얘기냐

하면 이런 경우를 생각해봅시다

우리가 독립변수가 두 개가 있어요

x1,2가 있어요

그래서 x1,2,3,4,5 x2가 2,4,6,8 이렇게 나갑니다

그런데 y가 있어요

y가 3 지금 보시면 x1을 보면 x2를 완벽하게 지킬 수 있어요

x1이 1이면 x1이 2면 4 x1이 3면 4면 8 얘네들은 반대로도 가능하고 얘네들은 하나를 보면 다른 하나를 알 수 있어요

이런 상태도 회기 분석을 하면 뭐가 문제냐

사실 그냥 예측만 잘하려고 하면 아무 문제도 없습니다 예측만 잘하려고 하면 어쩔 상관없는데 문제 여기 붙는 개수가 문제에요

뭐라고 개수를 붙여요

왜냐하면 여기 a랑 b가 둘 다 1이어도 예측이 잘 되죠

왜냐하면 7 파기 1 더하기 7 파기 하면 3 7 파기 더기 7 파기 4에도 그러니까 개수가 1,1이어도 예측이 잘 되는데 b를 0이라고 하고 a를 3이라고 해도 예측이 잘 돼요

3,9 파기 1은 3 3,9 파기 2는 3,9 파기 3은 그다음에 a를 0이라고 하고 b를 1.5라고 해도 역시 예측이 잘 됩니다

그러면 a는 1,b는 1일 때도 예측이 잘 되고 a는 3,b는 0일 때도 b는 0,b가 1.5일 때도 이런 예측이 잘 되는 경우가 무수히 많게 돼요

그러면 문제가 뭐냐

우리가 추장을 해

야 되는데 최소 제거법으로 추정을 하는데 제일 좋은 결과가 딱 하나가 있어야 뭘 추정이 되지

이렇게 좋은 결과가 여러 개 있으면 이 중에 뭘 해야 되냐

이런 게 문제야

뭐 어쩌라고 약간 얘도 답이고 얘도 돼요

복수 정답 같이 돼

그리고 이렇게 답이 여러 개 있기 때문에 만약에 여기 x1이 1이었다가 1.1로 바뀌어

그럼 이 중에 갑자기 정답이 1로 바뀝니다

얘를 들면 근데 1.1이었다가 데이터가 살짝 바뀌어서 0.9가 됐어요

그럼 갑자기 답이 이쪽으로 확 바뀌어

그러니까 추정치가 이랬다 저랬다 하는 거죠

데이터가 조금만 달라져도 추정치가 이쪽으로 확 갔다가 저쪽으로 확 갔다가 이렇게 된 거예요 그 추정치가 이렇게 불안정해지면 우리가 그 추정치를 믿을 수가 없는 거죠

그러니까 되게 특이한 현상인데 y 사체를 예측하는 데는 별 문제가 없어요

예측만 놓고 보면 뭐 예측은 잘 된다 예측은 잘 되는데 그 뭐는 변수가 중요하냐

이런 거를 할 때 예측이 안 돼 그 추정치를 믿을 수가 없으니까 우리가 가설 검정하거나 이럴 때 결과가 이상해지는 거예요

그래서 이 다중공선성 문제는 뭐 반드시 해결해야 되는 건 아닌데 유황이면 해결하는 게 좋습니다

그냥 하나로 없애버리면 되죠

얘는 어차피 필요 없어요

왜냐면 x1 보면 x2는 바로 나오는 거니까 사실 별로 필요가 없습니다

그래서 약간 쓸데없는 변수가 들어가면 다중공선성이 생기면 괜히 쓸데없이 추정치만 불안정하게 만드니까 이런 거는 제거를 해주는 그래서 다중공선성이 생기는 원인은 크게 두 가지가 있는데 하나는 우리가 자료 자체에 원래 뭔가 깊이 관련이 있는 어떤 게 있을까요

예를 들면 국적하고 언어가 있다

그럼 한국 사람이면 한국어를 쓰겠죠

일본 사람이면 일본어를 쓰겠죠

물론 한국 사람 중에 저는 그래도 일본어가 좋아요

이런 사람도 있고 일본 사람 중에 저는 한국어가 좋은데요

이런 사람도 있겠지만 대부분의 두 개가 일치한단 말이에요

그럼 변수에 우리 고객 데이터가 있는데 국적도 있고 이 사람 쓰는 언어도 있다

물론 같은 나라에 언어가 여러 개인 나라도 있기 때문에 스위스 이런 데는 언어가 4개씩 있고 인도 이런 데는 언어도 많으니까 딱 1대1로 대응하지는 않는데 만약에 우리가 한국하고 일본에만 서비스 그러면 한국 사람은 다 한국어 쓰고 거의 한국어 쓰고 일본 사람은 다 일본어 쓰니까 얘는 두 개가 거의 1대1로 대응이란 말이에요

그럼 둘 다 넣어서 회기분석을 하면 추정치가 좀 이상하게 나올 수 있어요 또는 우리가 분석을 하는데 자료를 수학적으로 변환하는 경우가 있거든요

예를 들어 학생이 국어, 영어, 수학을 보고 그러면 총점이 나와요

그럼 이 총점은 사실 국어 더하기, 영어 더하기, 수학이라서 이 세 가지 변수를 보면 무조건 총점을 알 수가 있습니다

왜냐하면 총점이라 합산이니까 근데 우리 회기분석할 때 아무 생각 없이 분석하다 보면 국어, 영어, 수학, 총점 이 4가지를 다 넣고 분석할 때가 있거든요

그러면 다중공선성이 생겨서 추정치가 좀 이상하게 될 수 있어요

이런 것도 좀 피해야 돼요

흔히 있는 상황이죠

그래서 우리가 더미코딩을 할 때도 보면 더미코딩 할 때도 보면 오늘 오전이 할 때 치료 방법이 A, B, C가 있으면 B하고 C에 해당되는 변수가 만들고 A에 해당되는 변수를 안 만들거든요

그래서 A는 그냥 둘 다 0, 0이라고 하고 1, 0, 0 이렇게 하고 끝나잖아요

A에 해당되는 변수가 없어요

왜 없냐 하면 다중공선성 때문에 만약에 A에 해당되는 변수를 넣으면 A는 여기가 1이겠죠

그러면 보시면 이 세 개를 보면 이 세 개를 더하면 항상 1이 되기 때문에 B하고 C를 보면 A를 예측할 수가 있어요

그럼 또 다중공선성인데 그래서 애초에 그냥 얘는 안 넣는 거야 B하고 C만 넣으면 B만 보고 C를 알 수가 없어요

왜냐하면 얘가 0일 때 C가 0일 수도 있고 1일 수도 있고 그러니까 한쪽을 보고 다른 쪽을 알 수가 없죠

물론 이쪽이 1이면 반드시 0이긴 한데 아닌 경우도 있어요

그래서 더미코딩 할 때는 항상 변수를 하나 덜 넣습니다

만약에 집단이 3개다

그럼 변수 2개만 넣고 집단이 2개다

변수 하나만 넣고 집단이 4개다

그래서 어떤 뭔가 수학적 변환이 들어간다

그러면 수학적 변환이 다중공선성 있는 변수를 만들지 않도록 그러시면 하셔야 됩니다

특히 이런 식으로 구경수 있는데 총점이 변수로 들어가는 정도 얘는 애초에 넣을 필요가 없어요

아니면 얘를 넣고 나머지 세 개를 빼요

그래서 이제 다중공선성은 해결 방법이 여러 가지가 있는데 제일 쉬운 거는 그냥 없애는 거예요

제일 쉬운 거는 그냥 빼버리면 됩니다

애초에 여러 가지 방법이 있는데 널 필요가 없는 걸 빼야되죠

그럼 뭘 뺄 거냐 다중공선성을 알려주는 지표가 있어요 VIF라는 지표가 있어요 분산 팽창계수 라고 하는 뭔가

되게 무시무시한 이름인데 분산 팽창계수가 여기 보이면 여기 베타 제이 기울기를 말하는 기울기를 말하는 기울기 추정치에 분산이 있는데 기울기 추정치에 분산이라는 거는 기울기 추정치가 어떨 때는 이렇게 나오고 어떨 때는 저렇게 나오고 추정치가 이렇게 저렇게 나오는 그 분산을 말하는 건데 분산 팽창계수가 커지면 분산이 커집니다

그러면 추정치가 이랬다 저랬다 하는 거죠

이게 작아지면 추정치가 항상 일정하게 나와

그래서 분산 팽창계수가 이제 크면 그거는 추정치가 왔다 갔다 하니까 그거는 빼버리고 분산 팽창계수가 작으면 그거는 추정치가 항상 일정하게 나오는 거니까 그거는 쓰고 이렇게 됩니다

그래서 이거는 딱히 어떤 기준이 있는 건 아닌데 보통 교과서에 따라서 사람에 따라서 이게 10을 넘어가면 다중공능성이 있으니까 빼라 이렇게 말하는 사람도 있고 5를 넘어가면 빼라

이런 사람도 이거는 뭐 딱히 뭘 써야 된다

이런 건 없는데 안전하게 하려면 그냥 5만 넘어가도 뺴셔도 되고 아니면 난 좀 더 약간 변수를 그렇게 날리기 싫다 그러면 이거는 정답이 있는 건 아닌데 보통 한 5에서 10을 넘어가면은 빼게 됩니다

그래서 분산 팽창계수 계산은 그 계산에 있는 함수가 있어요

그래서 그냥 함수에다 넣으면 계산을 해주거든요

그래서 이게 코드가 좀 복잡한데 뭐를 좀 하나씩 그래서 스테츠 모델즈의 스테츠의 아웃라이어스 인플런스 라는 게 인포트, 베리언스, 인플레이션, 백퍼

그래서 이게 분산 팽창계수라고 해서 다중공선성이 있으면 얘가 커집니다

그래서 얘가 너무 큰 거는 잘라버리면 되죠

우리 회기분석을 평소처럼 하시면 돼요

가격을 마일리즈 플러스 모델 플러스 이어 마이크아, 데이터아 그다음에 데이터아는 그 다음에 여기서 피스를 하고요 피스를 하면 안 된다 피스를 하지 않고요 이제 여기 EXOG NAMES 하면은 이렇게 변수들이 이렇게 마이크아, 데이터아, 베리카, 데이터아 그러면 이제 생각해보면 내 차 피액이나 다른 차 피액이나 어차피 교통 사고가 났으면 내 차가 많이 깨졌으면 남의 차도 많이 깨졌겠지

이렇게 생각을 해볼 수 있거든요

그거를 그냥 생각을 하지 말고 분산 팽창계수를 구해서 정말로 그게 서로 영향이 있는지를 보면 어떻게 하냐면 4, I, C, M, X, IN, INUMERATE 여러분 포무는 배우셨죠

포무는 EXOG NAMES에 하나 둘 셋 넷 다섯 여섯 일곱 개가 있는데 일곱 개를 하나씩 다 해보는 거거든요

근데 여기 INUMERATE라고 하면 어떻게 되냐면 여기 I에 번호가 붙습니다

아이콘 마이크아에 보면 앞에 번호를 하나씩 붙여줘 0번, 1번, 2번, 3번 그래서 우리가 이제 VARIENCE 인플레이션 팩터에다가 M.

EXOG랑 I 이렇게 해주면 이걸 이용을 해가지고 이 I번째 VIF를 계산을 해줘 프린트를 해보면 VIF를 이렇게 계산을 해줘

그래서 여기 EX랑 같이 출력을 해주면 되겠죠

그래서 이게 VIF 계산한 거고 VIF, 이게 변수 이름이에요

분산 팽창계수 그래서 얘가 5를 넘으면 안 된다

그래서 프린트를 해보면 지금 인터셉트는 어차피 절편이기 때문에 해당상이 없거든요

그래서 얘는 그냥 넘어가면 되고 모델 요거는 K3가 1.0상 오케이 좋아요 말리지도 1.5 괜찮아요

이어는 1.69 이것도 괜찮죠

마이크아 데미지는 1.1로 이거는 괜찮죠

아돌카 데미지도 1.5 그러면 여기에는 빼만한 게 없다

그냥 둘 다 그냥 다 남겨두면 된다

이 분석에서는 다중공선성 문제를 의심해 볼 만한 뭐가 없다

5를 넘는 게 없으니까 근데 이제 이런 식으로 할 수 있거든요

예를 들면 Df가 이렇게 있는데 이거 두 개를 더해서 Df.

마이크아 데미지랑 Df.

아돌카 데미지랑 두 개를 합산을 하는 거야

그러면 이게 보험 처리한 초객이 되는 거죠

그래서 이거를 Df의 데미지라는 컬러므로 추가를 해주는 거에요 합산 점수는 이거 두 개를 더했기 때문에 사실은 이 두 개를 보면 이거를 알 수가 있어요

그래서 이거는 이 두 개 합이니까 이 두 개를 보면 당연히 데미지를 알 수가 있죠

이런 식으로 돼있는 데이터 많을 거 아니에요

두 개 합산 분석을 할 때 여기다 데미지를 넣으면 어떻게 되느냐

데미지를 넣으면 여기 보시면 이게 두 개가 다 INF라고 나오는데 이게 이제 무한입니다

분산평창 개수가 무한이 나오는 그러면 이거는 다중공사의 문제가 있겠구나 분산평창 개수가 5만 넘어도 제외하는데 5가 넘은 게 아니라 이건 무한이 크니까 얘네는 셋 중에 하나를 빼줘야 돼요

그래서 이렇게 보시면 되고 그다음에 강의 자료에 있는 거는 이거를 포문을 일일 돈 대신에 X땡땡 하고 이렇게 했는데 이렇게 하면 딕셔널이 형태로 만들어지고 그래서 이거는 편하시는 거를 쓰면 그래서 딕셔널이를 만들어서 키 값에는 변수 이름이 들어가고요

여기에는 분산평창 개수가 들어가요

이거는 편하신 대로 만드시고 또 강의자료 여기 점핏이 안 들어갑니다

이렇게 하셔도 되고 슬팅창에 올렸으니까 한번 따라 해볼게

그래서 분산평창 개수 이거는 회기 분석할 때 나중에 다 한 다음에 한번 돌려보시고 이게 숙자 크게 나온 거 있으면 뭐 빼주고 그냥 그렇다면 됩니다

사실 대부분은 그렇게 걱정하실 필요는 없어요

생긴다고 해서 큰 문제도 아닌데 있으면 이런 게 숙자가 큰 게 있으면 빼주면 보통 약간 사소한 실수 이런 거라서 그리고 사실 뭐 다중공산성 문제가 있다고 회기 분석이 안 돌아가거나 이러면 아 그래서 이럴 때 지금 다중공산성 있을 때 회기 분석 돌리면 어떻게 되는지

이게 M에서의 요리와 핏을 안 해줘 일단 핏하고 썸머리 보시면은 지금 돌아는 가요 돌아는 가죠 돌아는 가는데 이게 다 개수가 다 똑같고 약간 여기가 좀 개수가 좀 이상하게 됩니다

그래서 여기 밑에 보면 경고가 나오긴 하거든요

여기 보면은 뭐 어쩌

고 저쩌고 하면서 여기 멀티코어 리니얼이 이게 이제 다중공산성인데 아마도 다중공산성 있는 거 같아요

라고 경고를 해줍니다

그래서 1번은 경고가 항상 뜹니다

이 경고는 그냥 무조건 뜨는 경고가 상관없는데 이거는 가정에 대한 2번은 이게 가끔 경고가 달라요

예를 들면 우리가 이거를 데미지를 빼고 돌리면 데미지를 빼고 돌리면 컨디션 넘버가 크다

이런 식으로 뜨죠 데미지를 넣고 돌리면 아이장 밸류가 작다

뭐 이런 식으로 뜨거든요

그래서 이거는 약간 다중공산성 관련된 경고를 띄우는데 맞을 때도 있고 안일 때도 있습니다

지금은 다중공산성 있는 문제가 맞아요

데미지가 얘네 둘의 합이기 때문에 이거는 빼는 게 맞는데 아까 보면 이걸 빼도 경고가 안 뜨냐 경고는 뭐 항상 뜹니다

경고가 뜨는데 근데 경고가 아예 안 뜰 때도 있거든요

이거를 다 빼보면 이래도 뜨나요 하나 더 빼면 2월 이래도 뜨고 마일리즈를 빼면 경고가 아예 안 뜰 때가 있거든요

경고가 아예 안 뜨면 그냥 다중공산성이 아예 없기 때문에 뭐 걱정할 필요도 없고요 근데 이제 돌리면 다중공산성이 있을 것 같으면 경고를 띄워줘요

여기서 두 번째 경고가 다 다중공산성 관련 그래서 두 번째 경고가 뜨면 아 다중공산성이 있을 수도 있겠구나 하고 이 분산평창계수 계산해서 이렇게 크게 나오는 이거를 하나를 빼줌 이런 거는 넘어가고 그 다음에 잔차 분석 얘기를 좀 해보겠습니다

다중공선성(multicollinearity)

  • 독립변수들이 서로 예측가능할 경우
  • 조건수가 커짐
  • 데이터나 변수의 변화에 따라 추정된 계수가 크게 달라짐

조건수(condition number): 입력의 변화에 따른 출력의 변화를 나타내는 수

조건수가 크면 → 데이터가 조금만 달라져도 결과에 큰 차이

통상 30 이하

분산팽창계수

분산팽창계수(Variance Inflation Factor)

다중공선성을 판단하기 위한 기준

독립변수 $x_j$ 다른 독립변수들로 회귀분석 → $R_j^2$

$$ \text{VIF}_j = \frac 1 {1−R_j^2} $$

VIF > 10 또는 VIF > 5이면 다중공선성이 있다고 판단

바꿔말하면 독립변수간의 회귀분석에서 R제곱이 0.8 또는 0.9를 넘는 경우

다중공선성의 해결

데이터의 일부만으로 회귀분석을 수행해서 분석 결과에 차이가 나는지 확인

데이터를 더 많이 수집

독립변수를 표준화 또는 평균중심화(mean-centering, 각 값에서 평균을 빼는 것)

불필요한 더미 변수를 제거 (예: 범주가 3종일 때 더미변수도 3종이면 다중공선성이 생김)

VIF가 높은 독립변수를 제거

정규화 regularization

잔차 분석

잔차 분석은 뭐냐면 우리가 이제 회기분석을 하면 이런 선을 하나 찾는 거란 말이야 선을 찾으면 우리의 실제 데이터는 이 선상에 있는 게 선에서 삐져나가 있거든요

어떤 거는 많이 삐져나가 있고 어떤 건 조금 삐져나가 있는데 이 잔차 패턴이 어떻게 되느냐

이런 거를 좀 분석을 할 필요까지는 없는데 가끔 해볼 때가 있습니다

왜냐하면 잔차라는 게 기본적으로 우리가 예측을 하면 이게 가운데로 선을 뚫고 나가니까 기본적으로 이제 이쪽으로나 이쪽으로나 고르게 있어야 되거든요

위아래로 고르게 있어야 됩니다

만약에 위로는 되게 많이 삐져나가는데 아래쪽은 별로 안 삐져나간다

그럼 이쪽만 틀리는 거잖아요

그건 뭐가 좀 이상한 거죠

너무 선이 아래로 간다 선을 좀 더 높여야 될 수도 그래서 이제 우리가 잔차 분석은 반드시 필요한 건 아닌데 추가적으로 좀 해보면 약간 모델을 고칠 힌트 같은 걸 또 모드실 수 있어요

그래서 잔차 분석은 보통 예측이 잘 되면 그렇게 중요하진 않아요

근데 이제 모형을 개선하는 힌트를 준다

그래서 이제 우리 데이터도 한번 보면 다시 한번 중고차 데이터에서 가격을 예측을 하는데 마일리즈를 같이 해서 예측을 해봐요

이렇게 하는데 우리가 이걸 그래프로 그려보면 그래프로만 그려봐도 이게 여기에는 지금 데이터가 다 이쪽에서는 보시면 차가 주인거리가 짧을 때는 전부 이 선 위에 있습니다

예상하는 것보다 가격이 다 위쪽에 있어요

그리고 여기서는 또 약간 예상하는 것보다 가격이 아래쪽으로 치우쳐 있어요

주인거리가 다시 길어지면 우리의 예상보다 가격이 다 위에 있습니다

그러니까는 어떨 때는 예상보다 위에 있고 어떨 때는 예상보다 밑에 있고 어떨 때는 또 다시 예상보다 위에 있고 우리가 일관성이 없고 어떨 때는 너무 싸

게 예측하고 이건 너무 싸게 예측한 거죠

이거는 좀 비싸게 예측한 거고 이건 또 싸게 예측한 거고 우리가 한쪽으로 치우쳐 있어요

그래서 왜 그러냐 하면 사실 이 그래프를 보시면 그림이 사실 직선으로 떨어지는 게 아니라 약간 휘어있거든요

그래서 실제 데이터가 비선형이면 우리가 직선으로 그었기 때문에 서로 잘 맞질 않습니다

그래서 우리가 이거는 사실 독립변수가 하나기 때문에 그냥 눈으로 봐도 이거는 좀 선이 안 맞는다는 걸 알 수 있어요

모델을 좀 고쳐야겠구나 이제 다중해기로 가면 변수가 많으니까 눈으로 보고 고치기가 어렵거든요

그래서 잔차 분석 같은 걸 통해서 어디서 좀 안 맞는지

이런 거를 보고 또 코드를 그러면 잔차 분석을 하려면 어떻게 하느냐 m.

reged 이러면 여기 잔차를 보여주고 r.

m.

reged 그래서 15에서 히스토그램을 그려보면 이렇게 나오는데 지금 전반적으로 보면 한 0을 기준으로 해서 좌우 대칭에 가깝기는 한데 약간 마이너스 쪽으로 조금 치우쳐 있어요

마이너스 쪽으로 조금 꼬리가 깁니다

그 얘기는 뭐냐면 우리의 예측을 하는데 플러스든 마이너스든 틀릴 수는 있는데 플러스로 100만 원 틀리면 마이너스로도 100만 원 틀려야 되는데 약간 플러스로는 지금 뭐 많이 틀려봐야 한 600만 원 밖에 안 틀리는데 마이너스로는 많이 틀릴 때 800만 원까지 틀릴 수 있어요

왜 그러냐면 우리가 이제 여기 선이 있으면 한 6쯤이겠죠

마이너스로 많이 틀린단 말이에요

근데 플러스로는 많이 틀려봐야 한 6만 컨밖에 안 틀려요

틀리는 정도가 다른 거죠

그래서 약간 좀 치우쳐 있다

근데 뭐 심하진 않죠

심하진 않지만 조금 틀릴 때 플러스마이너스를 고르게 틀린 게 아니라 약간 마이너스로 많이 틀릴 때가 있다

이런 거를 좀 그것도 여기 붙여서 추가할 때가 그 다음에 이제 외도와 천도라는 게 있는데 외도는 뭐냐면 분포가 한쪽으로 치우친 거를 외도라고 합니다

그래서 분포가 이제 플러스면은 정규분포는 보통 이렇게 좌우대층으로 생겼죠

근데 이제 외도가 플러스다 외도가 플러스면은 이렇게 가다가 이쪽으로 이렇게 늘어지는 형태를 오른쪽 꼬리가 이렇게 외도가 마이너스면 반대로 왼쪽으로 이렇게 늘어지는 형태로 외도가 이제 이쪽으로 치우친다는 거는 뭔가

되게 예를 들면 우리가 가격을 예측하는데 가격이 한 고방고마하다가 되게 위로 삐져나가는 차들 반대로 외도가 마이너스라는 거는 이렇게 고방고마하다가 마이너스로 삐져나가는 차들 그래서 우리가 아까 히스토그램을 눈으로 볼 때는 약간 마이너스로 좀 삐져나가는 것처럼 보여요

약간 여기 마이너스로 삐져나가는 거죠

이제 눈으로 보면은 정확하지 않으니까 이거를 수치화해서 볼 수 있는데 애초에 이거는 그냥 밑에 나옵니다

SQ라고 해서 나오거든요

SQ가 0이면은 좌우 대칭이에요 좌우 대칭인데 0.03이니까 이거는 뭐 그렇게 좌우 대칭이 심하게 깨진 것 같지는 않아요

0에 거의 0이니까 그래서 눈으로 보기에는 조금 치우쳐 보이지만 뭐 사실 심하지 않다

이 정도면은 거의 좌우 대칭이다

이렇게 볼 수 있고 그다음에 이제 쿠르토시스 라고 있습니다

쿠르토시스는 천도라고 하는 건데 이 쿠르토시스가 너무 높으면은 천도가 사물을 기준해서 너무 높으면은 데이터가 너무 중심으로 몰려있는 데이터가 여기가 우리의 예측이면은 우리가 직선을 그으면 여기가 우리의 예측이니까 대충 이 근처에는 많이 몰려 있지만 주변에도 좀 퍼져 있고 이런 식으로 되어야 되는데 천도가 너무 높다는 거는 여기에 막 너무 너무 몰려있는 거야 바깥쪽은 없고 그다음에 천도가 너무 낮다는 거는 데이터가 이렇게 바깥으로 퍼져 있다는 거에요

이게 잔차 분산하고는 조금 다른 개념인데 잔차 분산은 정규분포 모양은 정규분포 모양인데 이게 많이 퍼져 있냐 적게 퍼져 있냐

이거면 천도는 애초의 모양 자체가 정규분포 모양조차도 아닌 거죠

그러니까 이렇게 종형으로 생겨야 되는데 뭐 이렇게 볼록 이렇게 생겼다

이렇게 하면 정규분포 모양조차 아니거든요

그래서 너무 이게 심하지 않은가 이거를 보는 건데 보통 한 3을 기준으로 합니다

그래서 3을 기준으로 너무 높거나 낮으면 그것도 조금 이상한 건데 지금 우리 데이터는 뭐 그냥 특별히 뭐 그렇게 그것도 이상한 거잖아요

그냥 3근 특별히 이것도 뭐 눈에 띄는 건 아니죠

그다음에 이제 또 뭐 그닥 중요하진 않은데 정귤성 이런 게 있어요

잔차가 정규분포 비슷하게 생겼냐

이거는 자크베라 검정 결과를 보면 되는데 이것도 제공을 해줍니다

여기 자크베라를 보면 여기 JB라고 나오는 게 자크베라거든요

이거는 규모가설이 정규분포를 따른다

잔차가 정규분포를 따른다

잔차가 정규분포를 따른다는 얘기는 우리가 예상을 이렇게 하면 여기가 정규분포 형태를 따른다고 하면은 이 근처에 데이터가 많이 있고 옆으로 갈수록 뜨문뜨문 하다

이런 얘기 근데 만약에 정규분포를 안 따르면 예를 들면 이런 경우가 있어요

예를 들면 우리가 예측은 이걸로 했는데 실제 데이터는 이쪽에만 하고 이쪽에만 하는 거예요

그럼 평균으로 예측을 하니까 우리가 예측을 여기로 하면 막기는 대충 맞는데 실제 데이터는 이쪽 아니면 이쪽에 있으니까 평균적으로는 맞지만 제대로는 잘 안 맞는 거에요

통계학자 농담 중에 그런 게 있어요

통계학자들이 사냥을 갔는데 오리 사냥을 갔어요

오리가 날아가는데 한 명은 위로 1m 빛나가게 쏘고 다른 한 명은 아래로 1m 빛나가게 쏘고 그러니까 통계학자들이 환호를 하면서 와 우리가 평균적으로 맞췄어 라고 했다는 좀 썰렁한 약간 사양식 개그 약간 영어 개그가 약간 이런 그러니까 이 정규�성을 너무 위배하는 경우는 이런 경우가 있어요

오리가 우리가 총을 썼는데 위로도 빛나가고 아래로도 빛나가고 그럼 와 평균적으로 맞췄었는데 아무 의미가 없죠

그래서 이런 거는 이제 우리가 정규방 검정을 해보면 사실 정규방 검정 안 해봐도 그려보면 알 수 있는데 우리가 아까 히스토그램 그려보면 이 영이 우리가 예측하는 선이거든요

예측하는 선 근처에 잔차들이 몰려 있냐 하면 근처에 몰려 있죠

그래서 혹시나 해서 검정을 보면 귀무가설이 기각이 안 됩니다

이게 정규문포 다 치고 가설 검정을 한 거니까 이게 기각이 되면 정규문포가 아닌 거예요

근데 이 경우에는 정규문포 다

라고 할 수 있게 이때도 사실 이것도 별문적이다

이 데이터는 전반적으로 봐서 그렇게 크게 문제가 있는 거는 아닌 거 같다

그래서 만약에 이걸 봐가지고 이 숫자가 좀 이상하다 그래서 뭐 스크류가 너무 심하다거나 특히 사실 코노토시스는 별로 고칠기가 심지 않는데 너무 한쪽으로 치우쳤다 그러면 좀 조정을 해주고 이것도 이제 정규성이 유배된다

그러면 또 조정을 해줍니다

어떻게 조정을 한지는 우리 다음 시간에 바를 거고 그래서 이걸 보고 이거는 뭐 무조건 이거면 이거다 이런 건 아니고 약간 이제 이걸 보면서 이게 정규성에서 벗어나니까 또 너무 치우쳤으니까 이걸 좀 보정을 해줘야겠다 모델을 우리가 분석 모델인데 이걸 좀 수정을 해줘야겠다

이런 생각을 이거는 참고용 참고를 해주시면 그 다음에 이제 사실 회기분석에서도 등분산성은 중요합니다

회기분석은 기본적으로 등분산을 가정을 하거든요

이게 만약에 2분산이 되면 회기분석도 계산 방법을 바꿔야 돼요

분산 분석도 등분산일 때랑 2분산일 때랑 계산 방법이 다르잖아요

근데 이제 회기분석은 2분산 계산 바꾸는 게 약간 번잡하기 때문에 자른 안 고치는 그래도 한번 해볼 필요가 있어요

그래서 이제 보면은 우리가 이제 주행거리가 이렇게 쭉 있으면 sns.

statterplot 한 다음에 가로축은 df.

maliz로 하고 새로축은 잔차하로 하면은 지금 보시면 이게 가로축이 그 거리고 새로축이 잔차인데 보면은 그러니까 회기분석이 가정사 잔차가 일정해야 되거든요

잔차가 거리가 짧을 때도 거리가 짧을 때 한 이 정도였으면은 이때 앞에서 이 정도였으면은 뒤로 가도 이 정도가 되어야 된 거 지금 여러분이 눈으로 보셔도 알겠지만 이게 약간 이런 식으로 이렇게 줄어들어요

그러니까 앞에서는 그 가격을 예측하면 잘 안 맞는데 뒤에서는 예측하면은 그래도 오차가 크게 안 나는 거죠

그러니까 앞하고 뒤하고 주행거...

근데 사실 약간 이렇게 될 수밖에 없는데 왜냐하면 중고차 가격이라는 게 앞에는 새 차니까 옵션에 따라서 색깔에 따라서 가격이 천차 완별인데 뒤로 가면은 어차피 다 한 200만 원으로 수렴한다고 그래

다 썩은 차가 되가지고 원래 색깔이 빨간색이었던 파란색이었던 뭐 차 옵션이 뭐였던 다 가격이 비슷해집니다 뒤로 갈수록 이렇게 잔차가 줄어들 수 밖에 없어요 다양성이 없어지니까 다 그냥 날른 차가 되는 거죠

그래서 뭐 좀 이렇게 될 수는 있는데 이제 원래는 이제 이렇게 되면은 계산 방법을 조금 바꿔줘야 됩니다

근데 보통은 사실 회기분석에 저는 크게 문제나 안 돼요

왜냐하면 어차피 우리의 0을 기준으로 위아래로만 고르게 있으면 사실 이렇게 뒤로 갈수록 이렇게 좁아지는 거는 사실 큰 문제나 아닙니다 큰 문제나 아니지만 이게 이제 너무 심하다거나 아니면은 이런 경우도 있어요

예를 들면은 쌀 때는 뭐 이쪽에만 있고 비쌀 때는 이쪽에만 있고 이런 식으로 된다든가 뭐 이런 거는 좀 문제가 될 수도 있습니다

그래서 이것도 이제 한번 그려보고 위아래가 대칭인지 그다음에 시간이 지나도 일정한지 이거를 이것도 복사해서 코드에다가 추가해야 됩니다

자, 이거 위에는 코드 고쳐드렸고요 이거 한번 쭉 한번 살펴보시고 이거는 사실 약간 참고형 수치니까 딱 이래야 된다 저래야 된다

이런 거는 잘 없습니다

그래서 한번 쭉 보시면 될 것 같고요 이거를 이제 약간 문제가 있을 때 어떻게 조정을 하느냐 이거를 다음 시간에 질문 있으시면 질문해 주시고요

우리는 10분 쉬고 3시에 다시 사요

다시 시작하기로 그래서 우리 이제 이전 시간에 흑이분석을 할 때 모델 단차를 봐가지고 괜찮은지 아닌지 한번 살펴보는 얘기를 했는데 좀 뭐 이상해요

그러면 모델을 고쳐봐야겠죠

  • 회귀 분석의 예측과 실제값의 차이
  • 잔차의 분포에서 주목하는 특성들
    • 왜도
    • 첨도
    • 정규성
    • 등분산성
  • 예측만 잘 된다면 크게 중요하지는 않으나, 모형을 개선하는 힌트를 준다 (비선형적 요소 포함 등)

잔차

r = m.resid

히스토그램

import seaborn as sns
sns.histplot(r)

잔차

r = resid(m)

히스토그램

hist(r)

왜도와 첨도

왜도(skewness): 분포의 비대칭성

첨도(kurtosis): 분포가 한 점에 몰린 정도(정규분포의 첨도 = 3) - 첨도가 높다(첨도 > 3) → 데이터가 중심에 몰려 있음 - 첨도가 낮다(첨도 < 3) → 데이터가 바깥으로 퍼져 있음

사이파이 임포트

import scipy as sp

왜도

sp.stats.skew(r)

첨도

sp.stats.kurtosis(r)

moments 패키지 설치 필요

install.packages('moments')

왜도

moments::skewness(r)

첨도

moments::kurtosis(r)

정규성

정규성(normality): 잔차가 정규분포에 가까운 성질을 가지고 있는가? - Q-Q 플롯: 정규분포를 따른다고 할 때, 이론적 예측값과 실제값을 비교한 플롯

Q-Q 플롯

sp.stats.probplot(m.resid, plot=plt)

등분산성 시각화

sns.scatterplot(df.x, r)

Q-Q 플롯

qqnorm(r)
qqline(r)

등분산성 시각화

plot(df$x, r)