모형비교
모형 비교
과대적합
만약에 주사위를 10번 던져서 1이 5번 나왔다고 했을 때, 이 주사위에서 1이 나올 확률은 50%라고 할 수 있을까요? 좀 지나치게 과도한 주장이라는 생각이 들죠? 아마 다음 번에도 10번 던져서 1이 5번 나올 거라고 장담하기는 어려울 겁니다. 이런 식으로 특정한 표본에 지나치게 맞춰서 추정을 하는 것을 과대적합(overfitting)이라고 합니다. 우리가 잘 아는 표현 중에 "성급한 일반화"와 비슷한 뜻입니다.
회귀분석에서 우리가 사용하는 최소제곱법은 과대적합이 생기기 쉽습니다. 왜냐하면 표본에서 잔차를 최소화하기 때문입니다. 만약 우리가 분석에 아무 관련이 없는 변수를 추가한다고 해봅시다. 최소제곱법의 특성상 잔차는 줄어들면 들었지 절대로 늘어날 수는 없습니다. 적합도 지수인 R제곱도 항상 늘어나게 됩니다.
이것이 무슨 뜻이냐하면, 종속변수와 전혀 관련이 없는 독립변수를 추가해도 R제곱이 좋아지는 것처럼 보인다는 것입니다. 그러면 온갖 쓸데 없는 변수들을 추가하게 되고, 따라서 과대적합은 더 심해지게 됩니다. 결과적으로 예측력은 더 떨어지게 됩니다.
무작위적으로 만든 데이터라도 독립변수만 많으면 R제곱이 100%에 가깝게 됩니다. 그거는 다 과적합의 의한 일종의 허상인 거죠.
존재하지 않는 거에서 억지로 패턴을 찾으니까 생겨나는 허상이고 실제로 우리가 그걸 가지고 예측을 하면은 하나도 안 맞게 됩니다.
Question
회귀분석에서 독립변수가 많을 수록 R제곱은 어떻게 됩니까?
- 높아진다
- 낮아진다
모형 선택
회귀분석에서 우리는 다양한 모형을 만들 수 있습니다. 이런 여러 가지 모형 중에 어떤 모형을 고를 것인가? 이것이 모형 선택(model selection) 문제입니다.
우리에게 무수히 많은 데이터가 있다면 그냥 R제곱이 가장 좋은 모형을 고르면 됩니다. 왜냐하면 표본의 크기가 커지면, 점점 모집단에 가까워지기 때문에 과대적합 문제가 없습니다.
데이터가 좀 적당히 많다고 하면 교차 검증(cross validation)을 시도해볼 수 있습니다.
데이터가 적다면 여러 가지 지표를 사용해봅니다. 이런 지표에는 수정 R제곱, AIC, BIC 등이 있습니다.
수정 R제곱(adjusted R-squared)은 말 그대로 R제곱을 수정한 것입니다. 따라서 높을 수록 좋은 지표입니다.
$$ 1 - \frac{(1-R^2)(N-1)}{N-p-1} $$
- $N$: 표본의 크기
- $p$: 독립변수의 개수
위의 식에서 다른 값이 다 똑같다고 할 때, 독립변수의 개수 $p$가 커지면 전체 값은 작아집니다.
Question
모형을 수정R제곱으로 비교할 때, 어떤 모형이 더 데이터를 잘 설명하는 모형입니까?
- 수정 R제곱이 높은 모형
-
수정 R제곱이 낮은 모형
AIC(Akaike Information Criterion)고 BIC(Bayesian Information Criterion)은 잔차제곱합을 수정한 지표입니다. 이 두 가지는 낮을 수록 좋습니다.
대체로 수정R제곱보다 AIC, AIC보다 BIC가 더 엄격한 지표입니다. 즉, 과대적합을 막는다는 목적에서 보면 BIC가 가장 좋은 지표라고 할 수 있습니다. 반대로 보면 BIC는 과소적합(underfitting)을 초래할 수 도 있습니다. 데이터가 충분히 많고, 실제 데이터 패턴이 좀 복잡할 것이라고 가정할 수 있으면 AIC를 쓰는 것이 더 나을 수 있습니다. 수록 줄어들지는 않고 무조건 증가하는 추세 - 설명력이 떨어지는 변수를 추가해도 결정 계수는 증가하게 됨 - 따라서 결정 계수가 높은 모형을 고른다면 변수가 많이 들어간 모형을 고르게 되는 잘못된 판단을 할 수도 있음
Question
모형을 AIC로 비교할 때, 어떤 모형이 더 데이터를 잘 설명하는 모형입니까?
- AIC가 높은 모형
- AIC가 낮은 모형
Question
모형을 BIC로 비교할 때, 어떤 모형이 더 데이터를 잘 설명하는 모형입니까?
- BIC가 높은 모형
- BIC가 낮은 모형
Question
독립변수의 개수가 다른 모형들을 비교할 때 사용할 수 없는 적합도지수는?
- R제곱
- 수정 R제곱
- AIC
- BIC
Python에서는 회귀분석 결과에 수정 R제곱, AIC, BIC를 모두 제공합니다.
R에서는 회귀분석 결과에 수정 R제곱만 보여줍니다. AIC, BIC는 별도로 계산합니다.
AIC(m)
BIC(m)
Question
중고차 데이터에서 다음 두 모형을 비교해보세요.
모형 1: price ~ mileage + year + model + my_car_damage
모형 2: price ~ mileage + year + model + my_car_damage + other_car_damage
적합도 지수를 사용하여 비교할 때 어떤 모형이 더 낫다고 할 수 있습니까?
- 모형 1
- 모형 2
- 결론 내릴 수 없다
Question
cement.xlsx를 다운받아 열어보세요.
변수 y
는 시멘트가 굳을 때 발생하는 열을 나타냅니다. 변수 x1
, x2
, x3
, x4
는 시멘트의 특정 성분의 비율을 나타냅니다.
모형 1 y ~ x1 + x2 + x3 + x4
로 다중회귀분석을 해보세요. 이때 수정 R제곱은 얼마입니까?
- 0.982
- 0.974
모형 1에서 x3
을 제거한 모형 2 y ~ x1 + x2 + x4
로 다중회귀분석을 해보세요. 이때 수정 R제곱은 얼마입니까?
- 0.982
- 0.976
수정 R제곱으로 비교하면 모형 1과 모형 2 중에 어느 쪽이 데이터에 더 잘 맞는 모형이라고 할 수 있습니까?
- 모형 1
- 모형 2
AIC로 비교하면 모형 1과 모형 2 중에 어느 쪽이 데이터에 더 잘 맞는 모형이라고 할 수 있습니까?
- 모형 1
- 모형 2
BIC로 비교하면 모형 1과 모형 2 중에 어느 쪽이 데이터에 더 잘 맞는 모형이라고 할 수 있습니까?
- 모형 1
- 모형 2
Question
bloodpress.xlsx를 다운받아 열어보세요.
변수 BP
는 혈압을 나타냅니다. 변수 Age
는 나이, Weight
는 체중입니다.
모형 1 BP ~ Weight
로 회귀분석을 해보세요. 이때 수정 R제곱은 얼마입니까?
- 0.903
- 0.897
모형 1에서 Age
을 추가한 모형 2 BP ~ Weight + Age
로 다중회귀분석을 해보세요. 이때 수정 R제곱은 얼마입니까?
- 0.991
- 0.99
수정 R제곱으로 비교하면 모형 1과 모형 2 중에 어느 쪽이 데이터에 더 잘 맞는 모형이라고 할 수 있습니까?
- 모형 1
- 모형 2
AIC로 비교하면 모형 1과 모형 2 중에 어느 쪽이 데이터에 더 잘 맞는 모형이라고 할 수 있습니까?
- 모형 1
- 모형 2
BIC로 비교하면 모형 1과 모형 2 중에 어느 쪽이 데이터에 더 잘 맞는 모형이라고 할 수 있습니까?
- 모형 1
- 모형 2
그 뭐냐면 우리가 최소제고법을 쓰게 되면 잔차 분산이 가장 작은 거를 작은 개수를 추정한단 말이에요
그러면 예를 들어 우리가 어떤 거를 예측을 하는 B+, Bx 이렇게 추정을 한다고 그 다음에 이 모형에다가 변수를 하나 더 추가를 해주는 거예요 이 Z라는 변수를 추가를 하는 그러면 우리가 최소제고법을 쓰니까 이 Z라는 변수를 추가한다고 해서 예측을 더 못하게 되면 안 되고 왜냐하면 만약에 Z라는 변수를 추가해서 예측을 더 못할 것 같다
그러면 C를 0으로 추정을 해버리면 그러면 Z를 추가 안 한 거하고 똑같으니까 얘는 최악의 경우에도 요거보다 성능이 떨어질 수는 없어요
R제고비라는 관계 성능이 같으면 같았지 떨어질 수는 없고 그 다음에 이제 우리가 어떤 랜덤한 노이즈가 있기 때문에 이 Z가 아무리 도움이 안 되는 변수라도 약간은 뭔가 상관관계가 Y랑 있는 것처럼 나왔어요
결과적으로 어떻게 되냐면 변수를 투입을 하면 모델의 변수를 추가를 하면 최악의 경우에도 이 개수가 0이고 아니면 뭔가 더 성능이 좋은 것처럼 나오거든요
근데 이 변수는 사실 쓸모없는 변수잖아요
원래 Y랑 관련없는 그래서 최소제고법을 써서 회기분석을 하면 어떻게 되냐면 이론적으로 아무 짝에도 쓸모없는 독립변수들을 무한히 추가할 수가 있게 된 거 그리고 그렇게 하더라도 R제고비 계속 올라가요
그러면은 쓸데없는 변수들이 모양이 자꾸 들어가니까 실제로는 모양이 오히려 더 잘 맞지 않게 되는 거에요
R제고비는 올라가지만 우리가 이제 새로운 데이터가 들어왔어요
새로운 데이터는 예측을 잘 못하게 돼
그래서 이런 거를 이제 과대적합이라고 하고요 오버해서 피팅한다고
이거죠
우리가 어떤 모델을 만드는 데 데이터가 실제로 뭔가 관련 있는 변수들만 가지고 모델을 만들어야 되는데 쓸데없는 변수들을 막 집어넣어 가지고 데이터에 어거지로 끼어맞춘 모델을 만들어요
그래서 이제 우리가 독립변수가 많아지면 종속변수랑 아무 관련이 없어도 잔차 분산이 절대로 커지진 않아요
잔차 분산은 무조건 작아지고 R제고비 식이 1-1-1-1-1-1 부터 분산이라서 예를 들면 우리 진안이를 이미 진안이를 조직게 같이 잘 맞추는 사람이다
그거는 별로 의미가 없습니다
왜냐하면 진안이래
뭔가 끼워 맞추면 항상 끼워 맞출 거리가 있거든요
예를 들어서 여러분이 농화다고 하는 점쟁이를 찾아갔는데 갑자기 점쟁이가 집 앞에 대추나무가 있지
막 이러는 거야
그래서 어 저희 집 앞에 나무가 하고 또 대추나무가 있었어도 뭐가 끼워 맞출 거리를 했고 없었어도 끼워 맞출 거리를 했고 항상 지나간 일은 다 끼워 맞출 수가 있거든요
그래서 우리가 데이터는 이미 가지고 있는 거기 때문에 여기다 끼워 맞추려고 하면 항상 뭔가 어거지로 끼워 맞출 여지가 있잖아요
그래서 독립변수를 많이 집어넣으면 뭔가
말도 안 되는 어거지로 끼워 맞추게 그래서 이거를 보정을 좀 해줘야 되는데 항상 뭐 보정하는 게 많아요
그래서 우리가 이게 지금 제대로 분석을 하고 있는 거냐 아니면 억지로 끼워 맞추고 있는 거냐
이거를 판단하는 지표를 세 가지를 제공하고 하나는 수정 알재고 또 하나는 수정 알재고는 알재고를 보정을 한 거예요
그래서 어떻게 보정을 했냐면 독립변수의 개수 대비해서 알재고가 얼마나 커졌냐
예를 들면 독립변수를 추가하면 원래 알재고가 이렇게 커지는데 이런 속도로 커지고 있느냐
이런 속도로 커지고 있느냐 이걸 보는 거예요
그래서 원래 한 이 정도 속도로는 알재고가 늘어날 수 있는데 그거보다 알재고가 더 좋아졌다 그러면 그거는 괜찮은 거죠
근데 원래 이 정도 속도로는 늘어나는데 그냥 독립변수를 아무거나 집어넣어도 이거에도 못 미친다
그럼 그거는 문제가 있는 거예요
그래서 수정 알재고는 알재고를 보정을 해서 이게 독립변수가 많아서 그냥 알재고리를 뻥 튀기가 된 건지 아니면 진짜로 이 변수가 설명력이 있어서 그런 건지 그걸 볼 수 있는 지표고 기본적으로는 클수록 그다음에 AIC나 BIC는 단차분산을 직접적으로 보정을 해요
단차분산은 작은 게 좋겠다 작을수록 썼어요
근데 왜 이렇게 지표가 3개나 있냐
이것들은 이론적인 보정이에요
그러니까 이게 정말로 어떤 변수를 넣는 게 좋은지 아닌지는 우리가 사실 통계만 가지고 알 수는 없어요
그래서 이뤄저런 이론적 가정을 해가지고 보정을 하는 거예요
그래서 이거는 꼭 맞는다는 보정은 없어요
수정 알재고나 AIC BIC가 꼭 맞는다는 보정은 없는데 우리가 이제 어쨌든 뭔가 참고할 꺼지거리가 필요하니까 이거를 사용을 하는 거죠
그래서 이제 어느 쪽이 더 좋느냐 지표가 3개인데 그래도 어느 쪽이 좋느냐
하면 약간 빡빡한 정도의 차이가 있습니다 수정 알재고비 제일 널널하고요 그다음에 AIC가 조금 빡빡한 그다음에 BIC는 제일 빡빡한 기준이에요
그래서 보통은 수정 알재고비로 괜찮다고 나와도 AIC로는 별로 안 괜찮다고 나오는데 그다음에 AIC로는 수정 알재고비랑 AIC가 다 괜찮다고 해도 BIC에서는 난 이건 인정 못해 이런 경우가 그래서 셋 다 인정하는 경우도 있고 그래서 이제 이쪽으로 갈수록 더 약간 기준이 빡빡하다
근데 또 기준이 너무 빡빡하면 넣어야 될 변수를 좀 못 넣을 때도 있거든
그래서 뭐 어느게 맞다라고 할 순 없지만 이런 정도의 절대적으로 그런 거 아닌데 대체로 이런 정도의 관계가 있고 그래서 잘 모르겠다
그럼 그냥 AIC를 쓰시면 돼요
약간 중간 정도의 빡빡함이 있으니까 BIC는 너무 까다롭고 수정 알재고비는 좀 널널하고 뭐 엄밀한 건 아니지만 AIC 정도면 중간이니까 괜찮겠지
뭐 이렇게 생각을 해볼 수 있어
그래서 이것도 이제 한번 실제로 해보면 우리 중부차 가격을 분석을 하는데 예를 들면은 모델 원은 가격을 예측을 해요
근데 뭐 말리지
당연히 중부차 가격 예측하는데 중요하겠죠
모델도 중요할 것 같고 그다음에 연식도 당연히 중요하죠
그다음에 내 차 보험 처리한 것도 뭐 중요하죠
보니까 야 이거 남의 차 보험 처리한 것도 이게 자동차 가격에 이미 내 차 가격은 반영이 돼 있잖아요
내 차가 부서진 거는 가격에 반영이 돼 있는데 이거 남의 차 반영한 것까지 넣어야 되나?
이런 게 의심이 될 수가 있어요
그래서 이럴 때 데이터라는 거로 분석을 해보면 지금 보시면은 여기 이제 어저스티드 알재고 알재고 밑에 있는 어저스티 알재고비 알재고비의 알재고비 독립변수의 개수가 하나 둘 셋 넷이니까 아 이거 넷이나 넣었어?
그러면 원래는 0.776인데 이거 0.773으로 약간 감을 해 줍니다
그다음에 이제 AIC는 3559 AIC는 3577이에요
그러면 수정 알재고 AIC BIC 기준으로 봤을 때 뭐 이 정도 수치가 나오죠
여기서 이제 두 번째 무대를 만드는데 여기다가 이제 다른 차 피액을 넣어보는 거예요 아덜카 그러면은 지금 보시면 원래는 알재고비 알재고비 0.776이었어요
그러면은 알재고비는 무조건 올라가게 돼 있어요
그래서 지금 알재고비는 올라갔죠
이거는 원래 그냥 독립변수를 추가하면 무조건 올라가기 때문에 어 알재고비 올라갔네
그럼 이게 좋네
이렇게 하시면 안 됩니다
원래 올라가는 애니까 이거는 뭐 서로 다른 독립변수의 개수가 서로 다른 모델을 비교할 때는 참고가 안 돼요
어느 쪽이 좋은지 이 뒤를 보셔야 된다
그래서 수정 알재고부를 보면 0.779 AIC를 보시면 3552 BIC를 보시면 3574요 그래서 뭐라고 얘기한 냐면 수정 알재고부는 큰 게 좋습니다
그래서 위하고 아래를 비교 보니까 아 큰 게 좋아요
그렇죠
0.779는 더 커졌죠 AIC를 보시면 AIC는 작은 게 좋거든요
단차분산을 보는데 3559에서 3552로 내려갔습니다
그러면은 아 이것도 좋아졌죠
BIC를 보니까 BIC도 작은 게 좋은데 7에서 4로 내려갔네요
그러면은 어떤 지표로 보는 시간에 이거는 아들카 데미지는 넣는 편이 낫겠다 이게 더 좋은 모델이다
라는 결과가 그래서 이런 경우에는 우리가 고민이 될 때 돌려보고 다른 거를 해보죠
예를 들면 우리 IQ 데이터가 있는데 어제 했던 그리고 또 똑같이 분석을 할 수 있죠
그래서 우리가 동작성 지능을 예측을 하는데 뇌랑 히랑 그 다음에 히만 가지고 분석을 할 수 있는 데이터는 알죠
아 대문자죠
뇌랑 히만 가지고 분석하면은 알재고부는 0.29 수정 알재고부는 0.25 그 다음에 AIC는 336.5 BIC는 341.5 그 다음에 여기다가 우리가 어제 기억나실지 모르겠는데 체중은 별로 통계적으로 유의하지 않았어요
그러면은 통계적으로 유의하지 않지만 이거를 넣을까 말까 통계적으로 유의하지 않다고 얘를 빼버리면 얘네하고 얘네가 이 웨이트가 통제가 안 된 상태가 되기 때문에 이 해석이 달라지거든요
그래도 웨이트를 너무 어떤가
이거를 해보는 거죠
웨이트를 넣어보니까 알재고부는 똑같이 0.29에요 알재고부는 차이가 없습니다
웨이트를 넣는다고 해서 알재고부가 떨어지진 않아요
절대 근데 수정 알재고부를 보시면 수정 알재고비 0.25인데 수정 알재고비 떨어집니다
그리고 AIC는 336이었는데 AIC는 작은 게 좋은 거거든요
AIC도 338로 늘어나요
BIC도 345.1로 늘어납니다
그럼 이런 경우에는 웨이트를 추가하면 예측력 자체를 떨어뜨리는 건 아니지만 얘는 좀 불필요한 독립변수인 것 같아요
얘는 빼자
이런 해서 우리가 모델을 여러 가지로 돌릴 수 있는데 이 독립변수를 넣을까
말까
고민이 될 때는 이런 식으로 수정 알재고비나 AIC BIC를 참고하셔가지고 넣었는데 수정 알재고비 올라가고 AIC BIC가 내려간다면 그 변수는 투입을 할 만해요
하지만 수정 알재고비 떨어지거나 AIC BIC가 커진다면 이거는 보류하는 게 좋겠습니다
알재고부는 이럴 때는 직접적으로 결정하는 데 쓰면 안 됩니다
알재고부는 무조건 올라가거나 아니면 못해도 그대로 있어요 제자리에서 요고도 습행창에 저는 어떻게 그다음에 이렇게 해보셨나요
교차 검증
방금 모델을 선택할 때 지표를 이용해서 선택을 하는 방법을 알아보는데요. 이런 방법들은 전부 하나같이 이론적으로 보정을 하는 방법입니다. 문제는 이론이라는 것은 일정한 가정을 하는 것이기 때문에 우리가 뭐가 맞느냐라고 하면 대답하기 어려운 문제가 생겨요. 데이터가 충분히 많으면 교차검증이라는 방법을 쓸 수 있는데 교차검증은 어떻게 하냐면 데이터를 여러 번 나눠놓는 겁니다. 우리가 지금 하려고 하는 것은 예측을 잘 하려고 하는 거니까 미래의 데이터가 있어야 하는데 미래의 데이터는 말 그대로 미래나 나오는 거잖아요. 현재 가진 데이터를 반으로 잘라요. 그래서 가진 데이터 중에 한 쪽은 과거의 역할을 하게 하고 한 쪽은 미래의 역할을 하게 한 다음에 이것만 분석을 하는 겁니다. 그리고 한 쪽의 분석 결과를 다른 쪽에 적용해서 만약에 예측이 잘 된다면 우리가 분석을 잘 한 거죠. 만약에 예측이 잘 안 된다면 우리가 분석을 잘못한 거죠. 그래서 이런 식으로 교차검증하는 게 사실 데이터가 많을 때는 제일 좋은 방법입니다. 왜냐하면 실제로 예측을 해보는 거죠.
교차검증은 데이터를 쪼개는 방법에 따라 여러 가지로 나뉩니다.
LOOCV(Leave-one-out cross-validation)는 크기가 $N$인 표본에서 1개만 뺀 나머지 $N-1$개로 분석을 합니다. 그리고 빼둔 나머지 1개를 예측을 해봅니다. 이렇게 $N$번 반복하는 방법입니다. 데이터가 많아지면 분석을 너무 많이 돌려야 하는 단점이 있습니다.
k-fold 교차검증은 표본을 $k$ 개의 같은 크기의 세트로 나눠서 하는 방법입니다. 예를 들어 $k = 3$이면, 데이터를 A, B, C 세 세트로 나눕니다. 그러면 A, B를 합쳐서 분석하고 C를 예측해보고, B와 C를 합쳐서 분석하고 A를 예측하고 마지막으로 C와 A를 합쳐서 분석하고 B를 예측해봅니다.
holdout은 간단하게 데이터를 분석 세트와 테스트 세트로 나눕니다. 분석 세트로 분석을 하고, 테스트 세트로 예측을 해봅니다.
from sklearn.model_selection import train_test_split
train_df, test_df = train_test_split( # 분할
df, # 원자료
test_size=0.2, # 테스트 데이터의 비율(0.2 = 20%)
random_state=42) # 난수 생성의 seed를을 고정(동일한 분할을 위해)
m = ols(price ~ year, train_df).fit() # 분석
y_pred = m.predict(test_df) # 예측
from sklearn.metrics import mean_squared_error
mean_squared_error (test_df.price, y_ pred) # 잔차 분산
R에서는 회귀분석 결과에 수정 R제곱만 보여줍니다. AIC, BIC는 별도로 계산합니다.
set.seed(42) # 난수 생성의 seed를을 고정(동일한 분할을 위해)
n = nrow(df) # 데이터의 행수
idx = sample(1:n, size=n*0.8) # 80%를 무작위 선택
train_df = df[idx,] # 선택된 80%를 분석용으로
test_df = df[-idx,] # 나머지 20%를 테스트용으로
m = lm(price ~ year, train_df) # 분석
y_pred = predict(test_df) # 예측
mean((test_df$price - y_pred)^2) # 잔차분산 계산
그래서 방금 해본 방법은 우리가 어떤 이론적인 지표를 가지고 계산을 하는 건데 항상 이론적인 지표라는 거는 굉장히 제한점이 말씀 그게 어떤 여러 가지 가정의 기본을 하고 있는데 그 가정이 다 맞는다는 보장이 없어요
제일 좋은 거는 데이터로 검증을 하면 제일 좋겠죠
그래서 우리가 어떤 회기 분석을 하는 목적은 예측을 하는 거니까 예측을 해가지고 실제로 맞는지
확인을 해보면 됩니다
그래서 새로 데이터를 모아서 비교를 해보면 되는데 문제는 우리가 새로 데이터를 모이려면 좀 추가적으로 비용이나 우리가 데이터를 모은 시간이 걸리니까 약간 눈속임을 할 수가 있어요
어떻게 하냐면 교차 검증이라는 건 데이터를 두 세트로 나누는 겁니다
우리가 이미 가지고 두 세트로 나눠서 이것만 분석을 해요
그럼 우리는 이걸 안 보고 분석을 했기 때문에 이 데이터는 어떻게 생긴지 모르는 상태로 분석을 한 거죠
그래서 이 분석 결과를 여기다 적용을 했을 때 우리가 분석할 때 보지 못했던 데이터도 잘 예측할 수 있다
그러면 우리 예측이 잘 되는 거고 만약에 이걸 잘 분석을 했는데 막상 여기가니까 잘 안 맞아
그러면 우리가 여기서 분석을 할 때 너무 과도하게 오버핏 했다는 뜻이 될 수가 있습니다
그래서 여러분들 수영공부 같은 거 할 때 문제 몇 개는 좀 빼놓고 있다가 내가 공부가 제대로 됐나 셀프 테스트를 할 수 있다
그런 종류의 접근이라고 생각을 해요
그래서 이거는 어떤 특별한 이론적 가정이 없기 때문에 훨씬 더 좋은 거라고 할 수 있습니다 단점은 얘네들 다 데이터가 너무 적어 버리면 통계에서 항상 그렇지만 데이터가 너무 적으면 또 모수에서 벗어난 모집단에서 너무 동떨어지는 결과가 나올 수 있습니다
그러면 그것도 그대로 문제니까 이 데이터도 많고 이 데이터도 많아야 합니다
얼마나 많아야 하느냐 라고 하면 그걸 간단히 얘기하기는 힘든데 어느 정도 많아야 하냐면 우리가 데이터를 두 개로 나눌 때 어떻게 나누든지 간에 결과가 별로 차이가 없을 정도 이것도 실제로 해볼 수 있겠죠
그래서 데이터를 어떻게 나눠도 결과가 크게 달라지지 않은 정도로 데이터가 많다 그러면 교차 검증을 교차 검증을 할 때 데이터를 쪼개는 방법이 여러 가지가 있어요
한 가지 방법은 데이터가 이렇게 있으면 이 중에 피계를 골라 가지고 그만큼을 테스트 데이터로 빼고 돌려보는 또는 리브 원 아웃이라고 해가지고 데이터가 있으면 여기서 하나만 테스트용으로 빼놓는 거야
그리고 예를 들면 데이터 100개가 있으면 한 개는 테스트용으로 빼놓고 99개를 분석해서 이 하나를 예측하는 거야
근데 이 빼 놓은 데이터가 하필 다른 특성을 가지고 있을 수 있으니까 다른 데이터를 또 하나 빼서 99개를 분석한 다음에 그걸 예측할 수 있어
그럼 데이터가 100개가 있으면 그걸 100번 할 수 있겠죠
그러니까 분석을 100번 해가지고 그 100번의 분석에서 전부 다 예측이 잘 맞는지를 볼 수 있어
근데 이거는 둘 다 너무 분석을 많이 반복을 해야 되기 때문에 현실적으로 하기가 쉽지 않습니다
그래서 보통은 이 두 가지 방법을 많이 쓰는데 k 폴드는 뭐냐면 데이터를 k세트로 나눠요
예를 들면 우리가 데이터를 3덩어리로 나눠는 거예요 A 3덩어리로 나눈 다음에 AB 2덩어리를 분석을 해요
그 다음에 C에다 적용을 해 보는 거예요 이 특이 잘 되나 그 다음에 BC 2덩어리를 분석해서 A에다 적용을 해 그 다음 마지막으로는 A하고 C를 분석한 다음에 B에다 적용을 해
그래서 데이터를 K가 3이다
그럼 3세트로 나눠서 3번 해 보는 거죠
3번 분석했을 때 결과가 일정하게 나오고 그 다음에 어떻게 분석해도 똑같이 하나의 모델이 더 좋다
그럼 그 모델은 잘 맞는 모델이라고 할 수 있어 이것도 여러 번 해다니까 번거롭단 말이에요 극단적으로는 홀드아웃이라고 해서 데이터를 한 번만 나눠는 겁니다
보통 랜덤하게 8대 2 정도로 나눠서 그래서 이 팔로 분석을 해서 이 위에다 적용을 해 보고 잘 되면 그냥 오케이 합니다
이렇게 하려면 데이터가 진짜 많아야겠죠
그래서 데이터가 아주 아주 아주 많으면 몇 천 개 몇 만 개 이렇게 있으면 홀드아웃을 해 질 수가 있고 데이터가 애매하면 K 폴드 그래서 우리가 교차 검증을 해 가지고 우리가 분석한 데이터 훈련호차라는 것은 우리가 분석한 데이터에서 나오는 옷차를 말하는 건데 만약에 우리가 분석을 했는데 분석이 잘 안 돼요
그리고 테스트를 해 봤는데 테스트를 당연히 잘 안 되겠죠
그러면 이거는 너무 모형을 단순하게 만든 거예요
그냥 모델 자체가 잘 안 맞는 거예요
이럴 때는 모델을 좀 복잡하게 만들어야 된다 독립병수도 추가하고 여러 가지 그 다음에 이제 분석할 때는 잘 됐는데 훈련호차는 나들 분석할 때는 잘 되는데 막상 테스트를 해 보니까 테스트가 잘 안 돼 이런 거는 뭐냐면 너무 모형을 복잡하게 만든 거예요 모형을 이 훈련용 데이터에다 끼어 맞춰 놓은 거라서 이거는 반대로 모형을 좀 단순하게 고쳐요
그 다음에 이제 제일 바람직한 거는 둘 다 잘 해야죠
훈련 때도 잘하고 테스트때도 잘하고 둘 다 잘 그럼 아니 훈련 때는 못 하는데 테스트에만 잘하는 경우도 있을 수 있지 않습니까
이거는 그냥 운이 좋은 거죠
이거는 사실 말이 안 되죠
분석을 했는데 여러분이 훈련 때는 잘 안 됐는데 어디 시합에 나와서 잘했어요
그럼 그냥 그거는 전문용으로 뽀로기라고 하죠
이거는 뭐 의미가 없습니다
우리가 의미가 없으니까 이건 논할 바가 없고 셋 중에 하나인데 둘 다 잘해야 된다
둘 다 못하면 모델을 좀 더 복잡하게 개성하고 훈련 때는 잘하다가 테스트에 가서 못하면 너무 쓸데없이 복잡하게 만들어야 되니까 좀 천해야 됩니다
일단 그렇게 생각하시면 되겠어요
그래서 이것도 해볼 건데 이거는 우리가 이제 함수가 있습니다
데이터를 쪼개주는 우리가 중고차 데이터를 한번 쪼개 보면 그래서 여기 트레인 테스트 스플릿 훈련과 테스트 데이터를 쪼개주는 함수고요 그다음에 우리가 이제 데이터를 쪼개면 되겠죠
트레인 DF랑 테스트 DF로 데이터를 두 발로 쪼갭니다
그래서 트레인 테스트 스플릿 한 다음에 원 자료를 넣어주고 그다음에 몇 대명수로 나눌지를 써줘요 0.2라고 나누면 테스트에 20%가 들어갑니다
이쪽으로는 20%가 아니니까 이쪽으로는 80%가겠죠
이렇게만 해도 되는데 이렇게 하면 트레인 DF를 보면 옆에 번호가 132번, 120번 이렇게 나가죠
이게 랜덤하게 들어가기 때문에 다시 한번 해보면 그 다음에 191번, 113번 한 번 더 하면 80번, 99번 이렇게 된다
그래서 데이터가 쪼갤 때마다 랜덤하게 다르게 쪼개져요
그래서 이게 데이터가 충분히 많으면 별 문제가 없는데 데이터가 적을 때는 어떤 데이터가 트레인이 들어가고 어떤 데이터가 테스트에 들어가냐에 따라서 테스트 결과가 조금씩 달라질 수 있어요
그럼 우리가 테스트 결과가 재현이 안 되니까 내가 어젯밤에 돌릴 때는 변수를 넣는 게 좋다고 나왔는데 오늘 돌리니까는 안 넣는 게 좋다네요
이렇게 왔다갔다 할 수 있거든요
그러면 내가 어제 잘못했나?
약간 원인을 알기가 힘들어요
그래서 어떻게 하냐면 여기다가 랜덤 스테이트라는 걸 넣어준다 이거는 여기 들어가는 숫자는 그냥 아무거나 써주십니다
2023년 2월 17일이니까 2,3,2,1,7 이런 식으로 써주십니다
강의자로에는 41라고 되는데 뭐 아무거나 하시면 돼요
랜덤 스테이트는 뭐냐면 컴퓨터에서 이 랜덤 넘버를 만들 때 어떻게 만드냐면 이 랜덤 스테이트라는 값을 이용해서 어떤 되게 랜덤하게 보이는 공식에 다 집어넣습니다
실제로는 컴퓨터가 랜덤하게 숫자를 만드는 게 아니에요
어떤 그냥 랜덤한 것처럼 보이는 어떤 공식이 있어요
그 공식을 이용해서 랜덤 넘버를 만드는 건데 만약에 이제 우리가 그냥 이렇게 돌리면 현재 시각을 공식에 다 집어넣습니다
시간은 계속 흐르기 때문에 결과가 계속 바뀌는 거예요
이거를 고정을 해주면 항상 10번, 256번입니다
분명히 랜덤하게 돌린 것 같지만 이 시작값이 똑같기 때문에 실제로 나오는 순서도 똑같게 돼요
만약에 이거를 2,3,2,1 이런 식으로 바꾸면 다른 결과가 나오게 됩니다
근데 2,3,2,1로 고정한 한에서는 항상 똑같은 결과가 나요
그래서 우리가 오늘 돌린 거 다르고 내일 돌린 거 다르고 이러면 정신없고 그다음에 수업에서 여러분하고 저하고 또 돌리기 결과가 다르면 정신없으니까 랜덤 스테이트를 고정을 해서 여러분하고 저하고 데이터를 똑같이 해보도록 하겠습니다
10번, 256번, 120번 이런 애들은 트레인 Df 들어가고 그다음에 30번, 164번, 194번 이런 애들은 테스트 Df 분석은 어떻게 하냐면 이때까지 하던 것처럼 분석하면 돼요
아까 했던 거를 똑같이 해볼까요?
그래서 Df 대신에 트레인 Df를 넣어준다
트레인 Df로 분석을 해서 레인디어 M1에다가 프리디크 함수를 써서 테스트 Df를 예측을 해봐요
그러면 중급차 가격이 이렇게 나오죠
이 테스트 Df는 트레인 Df랑 다른 데이터니까 이 데이터에 있는 거는 이 모델 원의 반영이 안 돼 있어요
그렇지만 가격이 나오는데 900만 원, 1180만 원 이렇게 나오는데 테스트 Df에 있는 가격을 보면 1100만 원, 930만 원 이렇게 나오죠
예측하고 예측은 900만 원이라고 했는데 1100만 원이니까 200만 원 5차가 있고 그다음에 예측을 1180만 원이라고 했는데 930만 원이라고 했으니까 또 150만 원?
이 정도 5차가 있고 이렇게 5차가 좀 있습니다
그럼 이게 5차가 얼마나 나느냐 이거를 잔차 분산을 계산을 해보면 되겠지
민스케어드 에러 라고 하면 잔차 분산을 계속하고 민스케어드 에러랑 예측한 와이프리드, 예측값입니다
예측값이랑 두 개를 넣어주면 왼쪽이 실제값이고 오른쪽이 예측값이죠
두 개를 빼서 재고패서 평균된 거에요
이름이 에러는 차이고 스퀘어드는 재고비고 미는 평균입니다
그래서 차이를 구해서 재고패서 평균된 거니까 이게 잔차 분산이에요
잔차 분산을 계산해 보면 2만 322가 됩니다
그럼 여기에서 우리가 아돌카 데미지를 넣어보는 거에요
아돌카 데미지를 넣어 어떻게 된 거야
이거를 M2라고 하면 되죠
M2의 잔차 분산은 2만 6천 4백십 M1으로 예측할 때는 한 2만 천 정도 예측을 했는데 5차가 있는데 아돌카 데미지를 넣고 예측을 해보니까 2만 6천이 나오고 그래서 지금 보시면 써머리를 보면 M2의 써머리를 보면 R재고비 0.766이고 M1의 써머리를 보면 R재고비 0.754에요
그러면 R재고업 측면으로 보면 이 모델이 M2가 M1보다 좋습니다
근데 그거는 트레인드에 대해서 그렇다는 거에요
트레인드에프는 연습을 할 때는 이걸 넣는 게 훨씬 잘하는데 자 이제 본 게임을 해봅시다 테스트 Df 가지고 본 게임을 해보니까 이건 잔차 분산이니까 에러기 때문에 더 작은 게 좋은 겁니다
본 게임을 뛰어보니까 자 좋아
그러면 연습은 끝났고 실전이 나 테스트 데이터 줄 테니까 네가 한번 예측을 해봐라
그러니까는 오히려 아돌카 데미지는 없는 게 더 잘하더라
그러면 우리는 이런 결과에 따르면 아돌카 데미지는 모델에 안 넣는 게 낫겠죠
우리가 왜냐하면 중고차 가격을 잘 예측하고 싶다 그러면 가격을 잘 예측하는 게 중요하잖아요
그러면 안 넣는 게 더 맞다고 그래서 우리가 이제 그러면 이런 경우에는 지금 AIC, BIC를 이용할 때는 넣는 게 좋다고 했는데 교차 검증을 하면 안 넣는 게 좋다고 나오잖아요
사실 이런 건 좀 애매한 건데 사실 뭐 뭐가 맞다고 할 수는 없어요
왜냐하면 지금 교차 검증 같은 경우도 데이터가 몇 번이 안 되거든요
트렌드, 오프, 사이즈를 219번 밖에 안 되고 테스트 데이터는 더 적습니다
55건 밖에 안 되니까 여기서 데이터 한 두 건이 어떻게 바뀌냐에 따라서 이 결론이 뒤집힐 수가 있어요
그래서 우리가 42 말고 5, 4, 2로 다시 한번 해보면 여기서는 20234 이렇게 나오고 여기서는 또 이제 1964에 나오죠
그러니까 랜덤 스테이트에 따라서 데이터가 어떻게 쪼개지냐에 따라서 아돌카 데미지를 넣는 게 좋다고 나올 때도 있고 그때는 이제 넣는 게 좋죠
넣는 게 더 잔차가 굉장히 작은 어떨 때는 또 안 넣는 게 좋고 이렇게 결과가 바뀔 수가 있습니다
그래서 이제 이런 식으로 결과가 들쭉라일쭉 하면 이 교차 검증 자체를 별로 믿을 수가 없다는 거죠
왜냐하면 그냥 좀 운이 좋으면 넣는 게 좋다고 나오고 운이 나쁘면 안 넣는 게 좋다고 나오니까 이런 경우는 애초에 교차 검증을 별로 믿을 수가 없는 데이터가 너무 적어서 별로 믿을 수가 없는 거기 때문에 이런 경우는 그래도 이론적 지표를 의존하는 게 좀 나을 수 있어요
우리가 데이터가 충분하면 몇 번 여러분 돌려봐도 항상 결과가 똑같이 나온다 항상 뭐 이거는 안 넣는 게 좋겠다고 나온다 넣는 게 좋겠다고 나온다
그러면 교차 검증 결과가 더 믿으시는 게 좋습니다
교차 검증은 데이터로 나오게 이것도 붙여드릴 테니까 따라서 해보실 수 있어요 올린 거 보시고 한번 따라서 해보시면 될 것 같고요 이게 좀 되게 생소한 개념이라서 잘 이해가 안 되실 수 있어요 검증 결론 도출하는 과정 한 번 듣고 이해가 잘 안 되실 수 있어요
그래서 어떻게 하냐면 처음부터 얘기 드릴까요
사실 이런 거는 정답이 없어요
정답이 있다는 얘기는 정답이 있다면 모델을 자동으로 만들 수 있습니다
모델을 자동으로 만들 수 있으면 데이터만 있으면 데이터만 컴퓨터한테 던져 주면 사실 조합하는 거 컴퓨터가 자동으로 하면 되잖아요
변수 넣고 빼고 이런 컴퓨터 컴퓨터가 자동으로 제일 좋은 모델을 찾아줄 거거든요
이게 된다는 거는 우리가 사실 데이터분석을 배울 필요가 없다는 거죠
컴퓨터한테 데이터만 던져
주는 알아서 다 하는 거니까 그래서 딱 정답이 있는 건 아니에요
우리가 한 이 정도로 생각할 수 있다
해서 여러 가지를 고려를 해야 됩니다
이 변수가 정말 말이 되나 이런 것도 좀 생각을 해봐야 되고 그래서 어떻게 하냐면 일단 기본 방법이 두 가지가 있어요
첫 번째는 이론적 지표를 사용하는 두 번째는 도차 검증을 해본 이론적 지표는 수정 알재고업은 크면 좋은 거고 AIC와 BIC는 작은 게 좋습니다
왜냐하면 애초에 그렇게 만들었어요
그래서 아까 했던 거는 아더카 데미지가 남의 차를 부서 가지고 보험 처리한 내용인데 남의 차 보험 처리한 거는 내 차랑 한 건 없잖아요
예를 들면 자동차 길이 갖다박지 않고 서로 으하고 피했는데 내 잘못이 커 그래가지고 남의 차가 어디 가들아야 될 것 같은데 받아서 아 죄송합니다
보험 처리네요 해드릴게요
그러면 내 보험금은 나갔지만 내 차는 뭐 아무 피해도 없잖아요
그럼 내 차 중복차 값을 깎으면 안 되는 거죠
그러니까 이거는 생각을 해보면 생각하게 따라서 넣는 게 맞을 수도 있고 안 할 수도 있고 그렇습니다
애매한 건데 그래서 이렇게 지표으로 비교해보면 수정 알재고업은 넣는 게 더 좋아졌어요
AIC도 넣는 게 좋고 맞아졌죠
BIC도 넣는 게 좋고 에이 그러면 넣는 게 낫겠다
라는 판단이에요
그럼 이제 교차 검증은 어떻게 하느냐 교차 검증은 아이사님 실제로 그리고 ARC, BLC를 어떻게 믿어요
실제 데이터 가지고 한번 실험을 해봅시다
이런 건 데이터를 두 개를 쪼개요
그래서 우리는 눈을 딱 가리고 트레인 DF만 분석을 할 겁니다
트레인 DF만 분석 테스트 DF는 안 봐요
네 안 봐
안 봐
안 봐 트레인 DF만 가지고 분석을 했어요
그럼 만약에 우리가 분석을 잘 했다고 치면 테스트 DF는 안 봤지만 누구도 잘 예측을 하겠죠
여러분들이 공부를 잘 열심히 하면은 공부를 제대로 하면 시험에 무슨 문제가 나오든지 다 풀 수 있잖아요
근데 공부를 제대로 안 하면 시험 문제를 보고 잘 못 풀 수도 있죠
아 이거 공부 안 했는데 막 이러면서 그러니까 이제 얘가 분석이 제대로 됐는지 안느는지 테스트 데이터 가지고 보는 거에요
그래서 여기 밀스케어드 에러가 이제 이거의 잔차 분산입니다
왜냐하면 잔차 분산이 어떻게 하냐면 잔차의 재고배 편균이거든요
그리고 여기 에러가 있는데 잔차하고 에러는 거의 비슷한 말이에요
똑같은 말은 아니지만 잔차의 재고배 스퀘어가 재고비란 뜻입니다
왜냐하면 정상학형이 스퀘어연대 정상학형 넓이고 할 때 변의 길이를 제고파죠 가로 4, 세로 4인 정상학형 있으면 넓이가 5, 16이잖아요
스퀘어란 말이 정상학형이란 뜻도 있고 재고비란 뜻의 평균 그래서 밀스케어드 에러는 잔차 분산이랑 똑같은 얘기 그래서 우리가 테스트 데이터를 가지고 예측을 한 다음에 이 테스트 데이터의 실제 가격하고 이게 실제 가격입니다
이거는 우리가 예상한 가격입니다
트레인 DF에 대한 분석을 바탕으로 예상한 가격인데 이 두 가지를 비교해서 잔차 분산 계산해 보니까 2만 1322가 나왔어요
잔차 분산은 어쨌든 잔차가 작으면 작아지는 거니까 이게 작은 게 좋습니다
그래서 잔차 분산은 작은 게 좋습니다
이름이 기본적으로 에러니까 에러는 작은 게 좋죠
이럴 때는 2만 1000 어쩌고 나왔습니다
근데 이게 큰지 작은지는 일단 모르겠어요
일단 그런 건 그렇고 그러면 우리가 아덜카 데미지를 넣고 똑같이 분석을 해봅시다
아덜카 데미지를 넣고 트레인 DF를 분석했죠
그 분석 결과가 M2에 들어가 있죠
그러면 고 분석 결과를 가지고 예측을 해보니까 테스트 DF를 예측을 해보니까 예측값이 나왔는데 잔차 분산 계산했더니 잔차 분산이 커졌어요
잔차 분산이 커졌다는 거는 잔차가 크다는 거고 잔차라는 거는 일종의 에러이기 때문에 에러가 크다는 거야
잘 안 맞는다는 거죠
이렇게 분석한 거 가지고 중고차 가격 예측하면 실제 데이터에서 예보다 못합니다
그러니까는 우리가 교차 검증을 해볼 때는 트레인 데이터로 분석을 해서 테스트에 예측을 해보는 건데 M1으로 예측했을 때가 M2로 예측했을 때보다 잔차가 작아요
그러니까는 잔차 분산이 더 작다는 거는 쉽게 생각하면 5차가 더 작다는 거랑 비슷하다고 없나?
5차가 작다
5차가 작은 게 좋은 거죠
그래서 M1이 더 좋구나 예측을 잘하는구나
라고 결론을 내릴 수 있습니다
그러면 M2처럼 우리가 예측을 잘한다는 목적에서는 아덜카 데미지는 굳이 넣을 필요가 없었던 거죠
이거 넣으면 괜히 예측에 방해만 됩니다
아덜카 데미지도 넣었더니 이게 다 빠졌죠
따로 해볼까요?
예를 들면 마이크 데미지를 빼버리자 보험 처리하는 게 뭔 선건이에요?
이렇게 하니까 마이크 데미지를 빼니까 그래도 또 5차가 늘어요
마이크 데미지는 넣는 게 5차가 줄어듭니다
마이크 데미지를 넣으니까 25,000에서 2만 천으로 5차가 줄었어요
근데 아덜카 데미지를 더 넣으면 2만 천에서 2만 6천으로 5차가 늘어난다
마이크 데미지를 빼면 5차가 25,000이에요
마이크 데미지를 넣으면 5차가 2만 천이에요
여기다가 아덜카 데미지를 또 다시 넣으면 5차가 2만 6천 25,000에 왔다가 마이크 데미지 넣으니까 2만 천으로 떨어졌는데 여기다가 아덜카 데미지 더 넣었더니 2만 6천으로 늘었다는 거죠
그러니까 이게 제일 좋은 모델이죠 예측을 제일 잘하는 모델이니까 여기가 M1입니다
M1을 쓰는 게 좋겠다
근데 이제 문제가 있습니다
뭐가 문제냐면 이 교차 검증은 테스트로 예측을 해보는 건데 이런 거 생각을 해보세요 여러분이 친구랑 게임을 합니다
친구랑 게임을 하는데 솔직히 여러분이 게임을 더 잘해요
게임을 더 잘해
근데 친구가 친구랑 한 판 했는데 아 오늘 갑자기 오랜만에 게임하려니까 몸이 약간 덜 풀렸어
근데 친구가 뽀로그로 이겼어요
친구가 여러분을 뽀로그로 한 판 이긴 그리고 나서 여러분이 이제 열받잖아요
아 다시 해
내가 지금 손이 안 풀려고 한 거예요
친구가 야 너 게임 못하잖아
이제 안 해야지 하고 도망갔습니다 도망가 나쁜 친구죠
그럼 여러분이 이제 열받잖아요
야 그런 게 어디있어
한 판 한 판 더 해 이렇게 되잖아요
그렇죠
이해 되시나요
그러니까 지금 테스트를 하는데 테스트를 한 판은 아니고 지금 테스트 데이터가 사이즈가 보면 사이즈가 55건 밖에 안 돼요
테스트 데이터가 작거든요
그러면 2만 천 대 2만 6천이긴 하지만 데이터가 조금만 달라지면 결과가 뒤집힐 수가 있다는 거예요 게임을 하는데 친구랑 컴퓨터 게임을 하는데 여러분이 잘해도 10판 하면 한 판 정도 질 수 있잖아요
10판은 해야 이게 공정한데 실력을 차이를 알 수 있는데 한 판만 해가지고 친구가 야 내가 이겼다
그래서 내가 너보다 게임 더 잘한다 이러면은 열받는다
지금은 데이터 55건짜리 가지고 얘가 더 좋다고 결론 내릴 수 있겠냐
이거의 의구심이 있는 거죠
테스트 자체가 너무 테스트를 적게 한 게 아닐까 여기서 이제 문제는 테스트 디에프가 55건 밖에 안 돼서 테스트를 너무 적게 한 게 아닌가
이런 의구심이 있습니다
그래서 이런 의구심을 풀어보려면 어떻게 하면 되냐면 데이터를 바꿔서 한번 해 보는 거죠
이 테스트 디에프랑 이 랜덤 스테이트를 바꾸면 데이터가 다 달라지거든요
아까는 아까는 트레인 디에프의 10번, 256번, 120번이 들어가고 테스트 디에프의 30, 164, 190번 이렇게 들어갔는데 이거를 랜덤 스테이트 번호를 바꾸면 랜덤 논버가 다르게 생성되기 때문에 테스트 디에프도 바뀌는 거예요
그래서 다시 분석을 해보면 이번에는 얘가 22,234인데 얘가 19,690 이제는 얘가 더 잔차가 작죠
데이터를 바꿔서 다시 해보니까 만약에 데이터가 충분히 많으면 이걸 데이터를 바꿔서 해도 결론이 똑같았을 텐데 데이터 조금 바꾸니까 결론이 달라진단 말이야
그래서 이런 의구심이 되니까 데이터를 바꿔서 다시 한번 해 보니까 결론이 바뀌는 거죠
0,2가 좋아
그러면 이거는 데이터를 이렇게 하면 M1이 좋다고 그러고 저렇게 하면 M2가 좋다고 하는 거니까 사실 테스트 자체를 믿을 수가 없죠
테스트가 믿을 수 없는 이유는 데이터가 너무 적으니까 데이터가 적어서 결과가 너무 둘 중 날쭉 한단 말이야
그러니까 이걸 가지고 어떠한 결론을 내리기에는 좀 그렇단 말이야
그래서 에이 이럴 거면 차라리 그냥 지표를 쓰자
이런 식으로 이제 가게 된 되게 이해가 되시는데 50분이니까 닦아주셨다가 하도록 여기까지 내용 중에 또 질문 있으시면 다음대로 그래서 우리의 모델을 고르는 방법을 알아 봤는데 그러면 모델을 어떻게 만들어지느냐 사실 모델을 만드는 좋은 방법은 없습니다
배경지 도매인이라는 건 어떤 분야를 말하는 거죠
분야에 대한 배경 지식이 좀 필요합니다
우리가 중고차 가격을 잘 예측하는 모델을 만들려면 중고차 시장에 대한 이해가 있어야 뭘 넣을지
뭘 뺄 수 있는지
잘 알 수 있겠죠
단계적 회귀분석
근데 이제 잘 알아도 약간 애매할 때가 있거든요 그걸 넣을까 말까 애매할 때는 여러 가지 방법이 있는데 한 가지 방법은 단계적 회기 분석이라는 거 이거는 별건 아니고 그냥 순서대로 넣거나 빼는 거예요
그래서 전진 선택이라는 거는 뭐냐면 넣을 때 일단 내가 생각할 때 ABCD가 후보인 것 같아요
그러면 하나씩 넣어보는 거야
그래서 뭐가 제일 괜찮은지를 일단 봐요
A가 제일 괜찮다 오케이 A는 픽스를 하고 그 다음에 추가로 B를 넣을 거냐 C를 넣을 거냐 D를 넣을 거냐 조합을 해보는 겁니다
해봤더니 B를 조합하는 게 좋네
만약에 B, C, D를 다 넣어봤는데 다 별로 시원찮아요
A에 비해서 시원찮아
그러면 그냥 A까지만 넣고 끝내면 근데 이제 B를 넣는데도 좋았어요
B를 넣는데도 좋았다
그러면 다른 조합을 해보는 거죠
AB는 이미 확정된 거고 C를 한번 넣어보고 D를 한번 넣어보는 거 이런 식으로 조합을 하나씩 추가하면서 하나씩 추가하는 방향으로 늘려가는 거를 전진 선택이라고 합니다
여기 보면 중간에 빼는 게 없거든요
A에서 B를 추가하고 B에서 C를 추가하고 하나씩 넣어가는 거지
중간에 AB 넣다가 다시 A뺐다가 이렇게 하진 않지
하나씩 하나씩 추가하는 방법을 전진을...
그럼 반대도 있겠죠
다 집어넣고 하나씩 빼는 거는 후진 선택이라고 해요
그래서 일단 ABCD를 다 집어넣고 그다음에 하나씩 빼 보는 겁니다
A도 한번 빼 보고 B도 한번 빼 보고 C도 한번 빼고 이런 식으로 하는 거를 우리가 단계적 회기분석이라고 합니다
그래서 이거는 별도의 회기분석 방법이라기 보다는 변수를 넣을 때 하나씩 넣어보느냐 아니면 하나씩 빼 보느냐
이런 식의 접근 방법을 말해요 그래서 우리가 이제 중고차 가격 데이터다
그러면 지금 이렇게 전진 선택을 한다 그러면 우리가 넣을 수 있는 게 이렇게 다섯 개잖아요
다섯 개면은 전진 선택은 어떻게 하냐면 일단 하나만 넣어보는 거야
말리지만 하나 넣어봅니다
그러면은 R제곱이 우리 AIC로 합시다
AIC가 3795에요
말리지만 넣었을 때는 3795 그러면 이제 말리지 말고 모델만 또 한번 넣어봐요 모델만 넣었을 때는 AIC가 3960 그러면 연식만 또 한번 넣어봅니다
연식만 넣으면 어떻게 돼요 연식만 넣으면 AIC가 364 하네요
원래 이제 다 해야 되지
만 일단 귀찮으니까 이거 세 개만 해봅시다
그럼 세 개 중에서 뭐가 제일 좋아요
이렇게 AIC는 작은 게 좋으니까 이어 넣는 게 좋죠
그럼 이어는 일단 이제 픽스를 하는 것도 이어는 픽스를 해놓고 그 다음에 이제 다시 이제 이게 이제 1단계가 끝났어요
이제 2단계로 가서 이어는 고정을 해놓은 상태에서 뭘 추가할까 말리지를 추가할까 아니면 모델을 추가할까 이거를 하는 거예요
그래서 말리지를 여기다 한번 넣어보는 말리지를 넣어보니까 AIC가 3586이네요
그 다음에 이제 모델을 말리지 대신에 모델도 한번 넣어보니까 AIC가 3643 그러면 모델을 넣는 게 나아요
말리지를 넣는 게 나요 말리지를 넣는 게 낫죠
그 다음에 원래는 3644였는데 3586으로 떨어졌으니까 추가하는 게 더 만약에 이게 베스트였다
그러면 원래 3644였는데 모델 집어넣어도 3644면 굳이 추가하는 의미가 없죠
그럼 더 추가하지 않고 스탑을 합니다
그래서 만약에 여기서 말리지를 추가하기로 했다
3단계는 이어 플러스 말리지는 고정입니다
그럼 이제 그 다음에 뭘 추가할까
이런 식으로 하나씩 하나씩 넣어보는 거예요
이렇게 하는 게 단계적 회기 분석이고 반대로 이제 다 집어넣은 상태에서 하나씩 하나씩 빼 보면 후진의 선택이에요
근데 이제 단계적 회기 분석의 경우에는 이제 한 가지 문제가 있는데 제가 전에도 얘기 드렸지만 분석을 너무 많이 한단 말이에요
자료만 가지고 넣었다 뺐다 넣었다 뺐다 넣었다 뺐다 하면서 계속 분석을 하기 때문에 약간 이상한 결과에 걸릴 가능성이 그래서 단계적 회기 분석은 너무 많이 하지는 마시고 아 이거 약간 긴감인가 할 때 조금만 조금만 더 넣어보거나 조금만 더 빼 보거나 이런 식으로 해 보시는 게 좋아요
그리고 뭐 전진하고 후진 중에 뭐가 더 좋냐
이거는 사실 딱히 어느 쪽이 더 좋다라고 얘기하고는 약간 상황에 따라서 그냥 자기 기분 대로 하시면 돼요
정답이 없기 때문에 그래서 너무 많이 하지 말고 조금만 우리가 이 변수를 넣어야 되는지
말아야 되는지
고민이 되면 하나씩 순서대로 넣어보든지 아니면 하나씩 순서대로 빼 보든지 이걸로 질문 있으시면 방금 작성한 포즈요 직접 한번 따라서 해보세요 해보시면은 가끔 아 이거 손으로 하려니까 너무 귀찮은데 프로그램 짜서 자동으로 하면 안 되나요?
그래서 뭐 자동으로 해도 되는데 그러면은 제가 아까 말한 거죠
너무 많이 하게 됩니다
그래서 약간 손으로 하다가 와 이거 귀찮다라고 생각하면 약간 뭐랄까 하면 안 되는 짓을 하고 있다는 신호로 받아들이셔야 된다
아 이걸 자동화 해야지 라고 하면은 안 돼요
우리 상관 분석할 때도 했지만 상관 생렬 같은 거 뽑다 보면 뭐 하나 튄다고 그랬잖아요
이렇게 많이 하다 보면 그 회기분석도 많이 하다 보면은 똑같이 튈 수가 있어요
그래서 이게 프로그램으로 짜서 자동화 하고 있으면 뭔가 잘못된 거 자동화해서는 안 될 걸 자동화를 하고 너무 많이 해서 귀찮은데요
하면 너무 많이 해서 안 될 걸 하고 있으니까 귀찮은 거죠
그래서 이거는 자동화를 하시면 안 되고 그냥 손으로 조금 해보고 몇 개 변수 몇 개 이거 넣을까 말까 애매할 때 자 그 다음에 이어서 해도 될까요
Question
중고차 데이터에서 price
를 예측하는 회귀분석을 해보세요. 모형 비교는 AIC, BIC, 수정R제곱 순서로 합니다.
전진 선택을 통해 적절한 모형을 찾아보세요. 단, 독립변수가 2개가 될 때까지만 해보세요. 모형의 관계식은 무엇입니까?
후진 선택을 통해 적절한 모형을 찾아보세요. 단, 독립변수가 3개가 될 때까지만 해보세요. 모형의 관계식은 무엇입니까?