197강 문제 1에서 가 인 자료와 인 자료를 봤습니다. 시차 상관이 와 으로 비슷했는데 성질은 전혀 다릅니다.
196강 문제 3에서 정상이 아닌 자료를 회귀하면 열 번 중 여덟 번 가짜로 유의하게 나왔습니다. 그 자료를 정상으로 만드는 것이 이 강의입니다.
그런데 정상이 아닌 자료가 두 종류입니다. 추세만 있는 것과 누적된 것이며, 처리 방법이 서로 다릅니다. 엉뚱한 쪽을 쓰면 안 낫거나 오히려 나빠집니다.
이 강의는 두 종류를 가리는 법, 차분의 대가, 차분을 몇 번 할지 정하는 절차를 다룹니다.
문제. 두 종류를 가릅니다.
(1) 무엇이 다른지 정리하세요.
(2) 두 자료를 만들어 견주세요.
(3) 두 처리를 각각 해 보세요.
생각의 실마리. "올라가고 있다"는 같은데 왜 올라가는지가 다릅니다. 하나는 시간이 원인이고 하나는 과거 충격이 안 사라지는 것입니다.
풀이. (1) 두 종류입니다.
| 어떤 자료인가 | 무엇을 해야 하나 | 엉뚱한 처리를 하면 |
|---|---|---|
| 추세만 있음 | 시간을 빼거나 넣음 | 차분하면 잡음이 늘어남 |
| 누적된 것 | 차분함 | 시간을 빼도 안 정상 |
앞을 추세 정상이라 하고 뒤를 차분 정상이라 합니다.
(2) 두 자료를 만들어 견줍니다. 둘 다 위로 올라가는 그림이고 눈으로는 구분되지 않습니다.
| 무엇 | 시차 상관 | 앞 절반 분산 | 뒤 절반 분산 |
|---|---|---|---|
| 추세 정상 | |||
| 차분 정상 |
둘 다 시차 상관이 에 가깝습니다. 이것만으로는 못 가립니다.
(3) 두 처리를 각각 해 봅니다.
| 자료와 처리 | 시차 상관 | 시차 상관 | 판정 |
|---|---|---|---|
| 추세 정상에서 시간을 뺌 | 정상으로 보임 | ||
| 추세 정상을 차분 | 정상으로 보임 | ||
| 차분 정상에서 시간을 뺌 | 구조 남음 | ||
| 차분 정상을 차분 | 정상으로 보임 |
첫 줄과 넷째 줄이 제대로 된 처리입니다.
셋째 줄은 시간을 빼도 시차 상관이 로 그대로입니다. 누적은 시간을 빼서 안 사라집니다.
둘째 줄은 정상이 되긴 하는데 시차 상관이 으로 커집니다. 필요 없는 차분을 하면 없던 이동평균 구조가 생깁니다.
두 실수의 무게가 다릅니다. 차분해야 할 자료에 시간을 넣으면 아무것도 못 고치고, 안 해도 될 차분을 하면 고치긴 하되 잡음을 얻습니다.
이 문제에서 배우는 것. 두 종류가 미래에 대해 전혀 다른 말을 합니다. 추세 정상 자료는 오늘의 충격이 시간이 지나면 사라지고 긴 흐름으로 되돌아오는데, 차분 정상 자료는 오늘의 충격이 영원히 수준에 남습니다. 그래서 "경기 충격이 몇 년 뒤 회복되는가"가 이 구분에 걸려 있고, 경제학에서 이 물음을 두고 오래 다툰 이유입니다. 자료가 짧으면 자료로는 못 가르며, 문제 3에서 그 한계를 수치로 봅니다.
바로 확인 1.
확인 1-1. 정상이 아닌 자료의 두 종류와 각각의 처리를 쓰세요.
답. 추세 정상은 시간을 다루고 차분 정상은 차분합니다.
확인 1-2. 검산에서 차분 정상에서 시간을 뺐을 때의 시차 상관을 쓰세요.
답. 로 구조가 그대로 남습니다.
확인 1-3. 검산에서 추세 정상을 차분했을 때의 시차 상관을 쓰세요.
답. 으로 없던 구조가 생깁니다.
문제. 차분의 대가를 잽니다.
(1) 이미 정상인 자료를 차분해 보세요.
(2) 예측 성능으로 재세요.
(3) 되돌릴 때 무엇이 달라지는지 보세요.
생각의 실마리. 차분은 정상으로 만드는 도구이지 공짜가 아닙니다.
풀이. (1) 백색잡음을 차분해 봅니다. 이미 정상인 자료입니다.
| 무엇 | 분산 | 시차 상관 | 시차 상관 |
|---|---|---|---|
| 원래 자료 | |||
| 한 번 차분 | |||
| 두 번 차분 |
분산이 에서 로 커집니다.
백색잡음을 차분하면 시차 상관이 이론적으로 입니다. 한 번 더 차분하면 입니다.
없던 구조를 만들어 낸 것입니다. 이것을 과잉 차분이라 합니다.
(2) 예측 성능으로 잽니다. 차분 정상 자료를 여러 번 차분해 한 칸 앞을 예측합니다.
| 몇 번 차분 | 한 칸 앞 제곱오차 | 판정 |
|---|---|---|
| 모자람 | ||
| 맞음 | ||
| 지나침 | ||
| 지나침 |
한 번이 가장 좋지만 안 한 것과 대 로 거의 같습니다.
한 칸 앞만 보면 되먹임 두 개가 누적을 흉내 낼 수 있기 때문입니다. 부족한 차분의 대가는 한 칸 앞이 아니라 먼 지평과 표준오차에서 나옵니다.
지나친 차분은 한 칸 앞에서 바로 드러납니다. 과 입니다.
차분 횟수는 늘리면 좋은 것이 아닙니다. 정확히 맞춰야 합니다.
(3) 되돌릴 때를 봅니다.
| 무엇을 예측했나 | 원래 값으로 어떻게 되돌리나 |
|---|---|
| 한 번 차분한 값 | 마지막 값에 더합니다 |
| 두 번 차분한 값 | 두 번 누적해서 더합니다 |
| 로그 차분한 값 | 누적한 뒤 지수를 취합니다 |
| 예측 구간 | 누적하면서 분산도 함께 쌓입니다 |
마지막 줄이 중요합니다. 차분 자료의 구간을 그대로 못 씁니다.
| 몇 칸 앞 | 차분 자료 구간 폭 | 원래 값 구간 폭 |
|---|---|---|
차분 자료의 구간은 안 변하는데 원래 값의 구간은 에 비례해 넓어집니다.
누적합의 예측 구간은 끝없이 넓어집니다. 197강 문제 4에서 정상 자료의 예측 분산이 전체 분산으로 수렴했던 것과 정반대입니다.
이 문제에서 배우는 것. 차분 자료에서 잘 맞는 모형이 원래 값에서도 잘 맞는 것은 아닙니다. 차분한 값의 결정계수가 낮게 나오는 것을 보고 모형이 나쁘다고 판단하기 쉬운데, 원래 값으로 되돌리면 결정계수가 가 되는 일이 흔합니다. 어제 값을 그대로 쓰기만 해도 그렇게 됩니다. 그래서 차분한 자료의 성능 지표를 원래 값의 성능처럼 보고하면 안 되고, 무엇을 예측했는지가 늘 함께 붙어야 합니다.
바로 확인 2.
확인 2-1. 과잉 차분이 무엇인지 쓰세요.
답. 필요 없는 차분을 해서 없던 구조와 잡음을 만드는 것입니다.
확인 2-2. 검산에서 백색잡음을 두 번 차분했을 때의 분산과 시차 상관을 쓰세요.
답. 와 입니다.
확인 2-3. 검산에서 차분 횟수별 한 칸 앞 제곱오차를 쓰세요.
답. , , , 입니다.
문제. 검정으로 가립니다.
(1) 계수가 인지 검정하세요.
(2) 표본을 늘려 보세요.
(3) 반대 방향의 검정과 함께 읽으세요.
생각의 실마리. 에서 가 인지를 묻습니다. 차분한 값을 원래 값에 회귀해 계수가 인지 보면 됩니다.
풀이. (1) 검정합니다. 계수가 이면 누적이고 음수면 정상입니다.
| 자료 | 통계량 평균 | 퍼센트 기준 | 기각 비율 |
|---|---|---|---|
| 누적합 | |||
| 되먹임 | |||
| 되먹임 | |||
| 되먹임 |
누적합에서는 만 잘못 기각합니다. 오류율이 대체로 지켜집니다.
되먹임 는 정상인데도 만 가려냅니다. 누적합의 과 거의 같아 검정력이 없습니다.
기준값이 인 것에 주의합니다. 보통의 검정 기준 이 아니며, 귀무가설 아래에서 분포가 정규가 아니기 때문입니다.
(2) 표본을 늘려 봅니다.
| 자료 길이 | 되먹임 를 정상이라 판정 | 되먹임 를 정상이라 판정 |
|---|---|---|
는 개면 으로 다 가려냅니다.
는 개에서 이고 개가 되어야 이 됩니다.
가 개로 되는 일을 는 개로도 겨우 합니다. 검정력은 계수가 에 얼마나 가까운지와 자료 길이가 함께 정합니다.
(3) 반대 방향의 검정을 봅니다. 귀무가설을 정상으로 두는 검정입니다.
| 자료 | 통계량 평균 | 퍼센트 기준 | 기각 비율 |
|---|---|---|---|
| 백색잡음 | |||
| 되먹임 | |||
| 누적합 | |||
| 추세만 있음 |
되먹임 는 정상인데도 로 잘못 기각합니다. 이 검정도 에 가까운 자료에서는 믿기 어렵습니다.
두 검정의 귀무가설이 반대이므로 결론을 함께 봐야 합니다.
| 첫째 검정 | 둘째 검정 | 결론 |
|---|---|---|
| 정상이라 함 | 정상이라 함 | 정상입니다 |
| 누적이라 함 | 누적이라 함 | 차분이 필요합니다 |
| 누적이라 함 | 정상이라 함 | 판단을 미룹니다 |
| 정상이라 함 | 누적이라 함 | 추세를 의심합니다 |
셋째 줄이 자료가 짧을 때 흔합니다. 둘 다 검정력이 모자란 자리입니다.
이 문제에서 배우는 것. 단위근 검정에서 기각하지 못한 것이 "누적이다"라는 증거가 아닙니다. 178강 문제 4에서 말한 "귀무가설을 못 버린 것과 참인 것은 다르다"가 여기서 특히 심각한데, 에서 개로 검정력이 이기 때문입니다. 그런데 실무에서는 "단위근 검정을 통과했으므로 차분한다"는 문장이 흔합니다. 자료의 성격과 대상에 대한 지식이 검정보다 먼저이며, 그래서 문제 5의 마지막에 "자료가 아니라 대상이 정한다"는 문장이 옵니다.
바로 확인 3.
확인 3-1. 단위근 검정이 무엇을 회귀하는지 쓰세요.
답. 차분한 값을 원래 값에 회귀해 계수가 인지 봅니다.
확인 3-2. 검산에서 누적합과 되먹임 의 기각 비율을 쓰세요.
답. 과 으로 거의 같습니다.
확인 3-3. 검산에서 반대 방향 검정이 되먹임 를 기각하는 비율을 쓰세요.
답. 이며 정상인데도 절반 가까이 기각합니다.
문제. ARIMA를 씁니다.
(1) 세 글자의 뜻을 쓰세요.
(2) 차수를 골라 보세요.
(3) 예측으로 견주세요.
생각의 실마리. 차분과 197강의 두 부품을 합치면 ARIMA가 됩니다.
풀이. (1) 세 글자입니다.
| 세 글자 | 무엇을 뜻하는가 |
|---|---|
| 되먹임 차수입니다 | |
| 차분 횟수입니다 | |
| 이동평균 차수입니다 |
196강의 판정과 197강의 두 그림과 이 강의의 검정이 순서대로 쓰입니다.
(2) 차수를 골라 봅니다. 참 자료는 **한 번 누적된 되먹임 **입니다.
| AIC | 잔차 시차 | 판정 | ||
|---|---|---|---|---|
| 가장 작음 | ||||
| 가장 작음 | ||||
| 가장 작음 | ||||
차분 횟수가 다르면 AIC를 서로 못 견줍니다. 자료가 달라지기 때문입니다.
가 이고 가 인 와 가 이고 가 인 이 붙어 있는데, 서로 다른 자료에 대한 값이라 견줄 수 없습니다.
를 먼저 검정으로 정하고 그다음에 같은 안에서 와 를 고릅니다.
같은 안에서만 보면 가 일 때 가 인 쪽이 가장 작습니다. 참 구조와 같습니다.
(3) 예측으로 견줍니다. 앞 개로 맞추고 뒤 개를 한 칸씩 예측합니다.
| 무엇으로 예측 | 제곱오차 | 판정 |
|---|---|---|
| 차분 없이 되먹임 | ||
| 한 번 차분 뒤 되먹임 | 가장 좋음 | |
| 한 번 차분 뒤 되먹임 | ||
| 두 번 차분 뒤 되먹임 |
가운데 두 줄이 과 로 거의 같습니다. 참 구조가 그 안에 있습니다.
두 번 차분한 마지막 줄은 으로 두 배가 됩니다. 과잉 차분의 대가입니다.
첫 줄은 차분을 안 한 값을 예측한 것이라 다른 자를 쓴 셈입니다.
예측 오차로 견줄 때는 무엇을 예측했는지 먼저 맞춰야 합니다.
이 문제에서 배우는 것. 자동 차수 선택 도구가 이 순서를 내부에서 지킵니다. 를 검정으로 먼저 정하고, 그 안에서 정보 기준으로 와 를 훑는 것이 표준 구현입니다. 그것을 모르고 모든 조합의 AIC를 한 표에 늘어놓으면 위 표의 첫째와 셋째 줄을 견주게 되며, 자료가 다른 값을 비교하는 셈이 됩니다. 자동 도구를 쓰더라도 가 무엇으로 정해졌는지는 직접 확인해야 합니다.
바로 확인 4.
확인 4-1. ARIMA의 세 글자가 무엇인지 쓰세요.
답. 되먹임 차수와 차분 횟수와 이동평균 차수입니다.
확인 4-2. 검산에서 가 다른 두 AIC를 왜 못 견주는지 쓰세요.
답. 와 이 서로 다른 자료에 대한 값이기 때문입니다.
확인 4-3. 검산에서 네 예측 방식의 제곱오차를 쓰세요.
답. , , , 입니다.
문제. 절차를 세웁니다.
(1) 순서를 정리하세요.
(2) 로그 변환을 해 보세요.
(3) 차분 대신 쓸 것을 정리하세요.
생각의 실마리. 차분이 첫 단계가 아닙니다. 분산부터 안정시켜야 합니다.
풀이. (1) 순서를 정리합니다.
| 단계 | 무엇을 하는가 |
|---|---|
| 그림 보기 | 추세와 분산 변화 확인 |
| 분산 안정 | 로그나 제곱근 변환 |
| 단위근 검정 | 두 검정을 함께 |
| 차분 | 필요한 만큼만 |
| 자기상관 확인 | 과잉 차분 신호 보기 |
| 모형 적합 | 197강의 절차 |
둘째 줄이 첫째입니다. 분산이 변하면 차분해도 정상이 안 됩니다.
(2) 로그 변환을 해 봅니다. 수준이 커질수록 흔들림도 커지는 자료입니다.
| 무엇 | 앞 절반 표준편차 | 뒤 절반 표준편차 | 몇 배 |
|---|---|---|---|
| 원자료 | |||
| 차분만 | |||
| 로그 뒤 차분 |
차분만 하면 뒤쪽 흔들림이 배로 여전히 큽니다. 차분은 평균을 다루는 도구이지 분산을 다루는 도구가 아닙니다.
로그를 먼저 취하면 로 두 구간의 흔들림이 비슷해집니다.
로그 차분은 성장률입니다. 해석도 자연스러워집니다.
(3) 차분 대신 쓸 것을 정리합니다.
| 무엇 | 언제 | 무엇을 조심 |
|---|---|---|
| 차분 | 누적된 자료 | 과잉 차분 |
| 시간 넣기 | 추세만 있을 때 | 미래로 못 늘림 |
| 로그 | 분산이 수준에 비례 | 되돌릴 때 젠센 |
| 계절 차분 | 주기마다 되풀이 | 200강에서 |
| 공적분 | 둘이 함께 움직일 때 | 차분하면 정보 손실 |
둘째 줄의 함정을 봅니다. 추세를 넣은 모형은 먼 미래에 발산합니다.
| 몇 칸 앞 | 추세 모형 예측 | 차분 모형 예측 |
|---|---|---|
추세 모형은 끝없이 올라가고 차분 모형은 마지막 값에 머뭅니다.
둘 중 무엇이 옳은지는 자료가 아니라 대상이 정합니다. 주가는 뒤쪽이 맞고 인구는 앞쪽이 맞습니다.
이 문제에서 배우는 것. 차분은 되돌릴 수 없는 정보 손실을 동반합니다. 다섯째 줄의 공적분이 그 예인데, 두 누적 자료가 함께 움직이는 관계가 있을 때 각각을 차분하면 그 관계가 사라집니다. 196강 문제 3에서 "차분하면 가짜 회귀가 사라진다"고 했는데, 진짜 관계가 있을 때도 함께 사라집니다. 그래서 차분은 정상성이라는 문제를 푸는 대신 다른 물음에 답하지 못하게 되는 거래이며, 무엇을 묻고 있는지가 먼저입니다.
바로 확인 5.
확인 5-1. 차분보다 먼저 할 일을 쓰세요.
답. 분산을 안정시키는 변환입니다.
확인 5-2. 검산에서 차분만 했을 때와 로그 뒤 차분했을 때의 흔들림 비를 쓰세요.
답. 과 입니다.
확인 5-3. 추세 모형과 차분 모형의 먼 미래 예측이 어떻게 다른지 쓰세요.
답. 추세 모형은 칸 앞에서 까지 가고 차분 모형은 에 머뭅니다.
| 정상이 아닌 종류 | 처리 | 충격이 |
|---|---|---|
| 추세 정상 | 시간을 다룸 | 사라집니다 |
| 차분 정상 | 차분함 | 남습니다 |
| 분산이 커짐 | 로그 변환 | 해당 없음 |
| 계절 | 계절 차분 | 강 |
| 차분 횟수 | 무엇이 일어나나 |
|---|---|
| 모자람 | 가짜 회귀와 무너진 예측 |
| 맞음 | 정상이 되고 예측이 좋음 |
| 지나침 | 분산이 늘고 음의 상관이 생김 |
| 검정 | 귀무가설 | 약점 |
|---|---|---|
| 단위근 | 누적이다 | 에 가까우면 검정력 없음 |
| 반대 방향 | 정상이다 | 에 가까우면 잘못 기각 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 차분을 넉넉히 합니다 | 정확히 맞춥니다 |
| 검정 통과를 증거로 씁니다 | 검정력을 확인합니다 |
| 분산 문제를 차분으로 풉니다 | 로그를 먼저 씁니다 |
| 가 다른 AIC를 견줍니다 | 자료가 다릅니다 |
| 차분 자료의 지표를 보고합니다 | 무엇을 예측했는지 밝힙니다 |
문제 6. 정상이 아닌 자료의 두 종류와 각각의 처리를 쓰세요.
답. 추세 정상은 시간을 다루고 차분 정상은 차분합니다.
문제 7. 검산에서 차분 정상에서 시간을 뺐을 때의 시차 상관을 쓰세요.
답. 입니다.
문제 8. 검산에서 추세 정상을 차분했을 때의 시차 상관을 쓰세요.
답. 입니다.
문제 9. 검산에서 백색잡음을 두 번 차분했을 때의 분산과 시차 상관을 쓰세요.
답. 와 입니다.
문제 10. 검산에서 차분 횟수별 한 칸 앞 제곱오차를 쓰세요.
답. , , , 입니다.
문제 11. 검산에서 칸 앞 원래 값 구간 폭을 쓰세요.
답. 입니다.
문제 12. 단위근 검정이 무엇을 회귀하는지 쓰세요.
답. 차분한 값을 원래 값에 회귀해 계수가 인지 봅니다.
문제 13. 검산에서 누적합과 되먹임 의 기각 비율을 쓰세요.
답. 과 으로 거의 같습니다.
문제 14. 검산에서 되먹임 가 길이 과 에서 얼마나 가려지는지 쓰세요.
답. 와 입니다.
문제 15. 검산에서 반대 방향 검정이 되먹임 를 기각하는 비율을 쓰세요.
답. 입니다.
문제 16. 검산에서 가 다른 두 AIC를 왜 못 견주는지 쓰세요.
답. 와 이 서로 다른 자료에 대한 값이기 때문입니다.
문제 17. 검산에서 네 예측 방식의 제곱오차를 쓰세요.
답. , , , 입니다.
문제 18. 검산에서 차분만 했을 때와 로그 뒤 차분했을 때의 흔들림 비를 쓰세요.
답. 과 입니다.
심화 1. 단위근 검정의 여러 형태를 정리하세요.
| 형태 | 무엇을 넣나 | 기준값 |
|---|---|---|
| 절편도 추세도 없음 | 없음 | 가장 작음 |
| 절편만 | 상수 | 중간 |
| 절편과 추세 | 상수와 시간 | 가장 큼 |
어느 형태를 쓰느냐가 결론을 바꿉니다. 추세가 있는 자료에 추세를 안 넣으면 누적이라고 잘못 판정합니다.
차분한 값에 시차를 몇 개 넣을지도 정해야 합니다. 잔차에 자기상관이 남으면 검정이 틀리므로 넣는데, 많이 넣으면 검정력이 떨어집니다.
그래서 같은 자료에 여러 설정을 돌려 결론이 유지되는지 보는 것이 관례입니다.
심화 2. 구조 변화가 있는 자료를 정리하세요.
어느 시점에 수준이 한 번 바뀐 자료는 누적이 아닌데도 누적으로 판정됩니다.
| 무엇 | 왜 |
|---|---|
| 계단 모양 자료 | 평균이 두 개라 안 되돌아옴 |
| 검정 결과 | 단위근을 못 버림 |
| 실제 구조 | 각 구간 안에서는 정상 |
변화 시점을 알면 더미를 넣어 검정합니다. 그러면 정상이라는 결론이 나옵니다.
시점을 모르고 찾으면 189강 문제 3의 선택 후 추론이 됩니다. 가장 잘 맞는 시점을 고른 뒤 검정하면 기준값을 조정해야 합니다.
심화 3. 공적분을 정리하세요.
| 무엇 | 뜻 |
|---|---|
| 둘 다 누적 | 각각은 정상이 아님 |
| 어떤 조합이 정상 | 함께 움직임 |
| 차분하면 | 그 관계가 사라짐 |
예를 들어 두 시장의 가격이 각각은 누적인데 차이는 정상인 경우입니다.
196강 문제 3의 가짜 회귀와 이 경우를 가려야 합니다. 회귀 잔차가 정상이면 공적분이고, 잔차가 여전히 누적이면 가짜입니다.
오차 수정 모형이 그 관계를 담습니다. 차분한 값에 직전의 어긋남을 설명변수로 넣어, 벌어지면 되돌아오는 힘을 적습니다.
심화 4. 분수 차분을 정리하세요.
차분 횟수가 꼭 정수일 필요는 없습니다.
| 자기상관이 | |
|---|---|
| 지수적으로 줄어듦 | |
| 거듭제곱으로 천천히 줄어듦 | |
| 안 줄어듦 |
가운데 줄을 장기 기억이라 합니다. 정상인데도 자기상관이 아주 오래 남습니다.
과 사이에서 고르면 되므로 과잉 차분과 부족 차분 사이를 미세하게 조절할 수 있습니다.
금융 자료에서 이 성질이 관찰됩니다. 수익률 자체는 상관이 없는데 절댓값은 오래 상관이 남습니다.
심화 5. 차분의 대안으로서의 상태공간을 정리하세요.
| 무엇 | 어떻게 |
|---|---|
| 국소 수준 모형 | 수준이 천천히 변한다고 둠 |
| 국소 추세 모형 | 기울기도 변한다고 둠 |
| 칼만 필터 | 관측이 올 때마다 갱신 |
추세 정상과 차분 정상 사이의 중간을 표현할 수 있습니다. 수준의 변화 크기를 으로 두면 추세 정상이고 크게 두면 차분 정상입니다.
199강의 지수평활이 이 모형의 특수한 경우입니다. 겉보기에 아주 다른 두 방법이 같은 것을 하고 있습니다.
빠진 시점을 자연스럽게 다룹니다. 196강 문제 5의 결손 처리 문제가 여기서는 문제가 아닙니다.
심화 6. 이 강의가 남긴 문제를 정리하세요.
| 무엇을 했나 | 무엇이 남았나 |
|---|---|
| 정상으로 만듦 | 예측을 어떻게 |
| 차수를 고름 | 구간을 어떻게 |
| 한 칸 앞을 봄 | 여러 칸 앞은 |
| 계절을 미룸 | 강 |
199강은 예측 자체를 다룹니다. 197강 문제 4에서 구간의 포함률이 까지 내려갔는데, 계수 추정 오차가 들어가면 왜 그렇게 되는지와 그 대응을 봅니다.
지수평활이라는 다른 계열의 방법도 함께 봅니다. ARIMA처럼 정상성을 요구하지 않으면서도 비슷하게 잘 맞습니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| \Delta x_ | 차분 | 빼기 입니다 |
| 차분 횟수 | 몇 번 차분했는지입니다 | |
| ARIMA | 차분 자기회귀 이동평균 | 차분과 197강을 합친 것입니다 |
| 단위근 | unit root | 되먹임 계수가 입니다 |
| 추세 정상 | trend stationary | 시간을 빼면 정상입니다 |
| 차분 정상 | difference stationary | 차분하면 정상입니다 |
| 과잉 차분 | overdifferencing | 필요 없는 차분입니다 |
| 로그 차분 | log difference | 성장률입니다 |
| 공적분 | cointegration | 각각은 누적인데 조합이 정상입니다 |
| 오차 수정 | error correction | 어긋남이 되돌아오는 힘입니다 |
| 구조 변화 | structural break | 어느 시점에 성질이 바뀝니다 |
다음은 199강 예측과 예측구간입니다. 이 강의가 자료를 정상으로 만들었습니다.
197강 문제 4에서 칸 앞 구간의 포함률이 까지 내려갔습니다. 계수를 안다고 치고 계산했기 때문인데, 실제로는 계수도 추정한 것입니다. 199강은 그 오차를 구간에 넣는 법과 지수평활이라는 다른 계열의 방법을 다룹니다.
import numpy as np
rng = np.random.default_rng(20261005)
def pw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return str(s) + " " * max(k, 0)
def rw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return " " * max(k, 0) + str(s)
def acf(x, k):
x = x - x.mean()
d = float(x @ x)
return float(x[k:] @ x[:len(x) - k]) / d
def ols(y, X):
A = np.concatenate([np.ones((len(y), 1)), X], axis=1)
b, *_ = np.linalg.lstsq(A, y, rcond=None)
r = y - A @ b
s2 = float(r @ r) / (len(y) - A.shape[1])
V = s2 * np.linalg.inv(A.T @ A)
return b, np.sqrt(np.diag(V))
def gen_ar1(n, phi, sd=1.0, burn=500):
m = n + burn
e = rng.normal(0, sd, m)
x = np.zeros(m)
for t in range(1, m):
x[t] = phi * x[t - 1] + e[t]
return x[burn:]
def df_stat(x, lags=1, trend=False):
d = np.diff(x)
n = len(d) - lags
cols = [x[lags:lags + n]]
for j in range(1, lags + 1):
cols.append(d[lags - j:lags - j + n])
if trend:
cols.append(np.arange(n, dtype=float))
X = np.stack(cols, axis=1)
b, s = ols(d[lags:lags + n], X)
return float(b[1] / s[1])
def kpss_stat(x):
n = len(x)
r = x - x.mean()
S = np.cumsum(r)
lag = int(4 * (n / 100.0) ** 0.25)
s2 = float(r @ r) / n
for k in range(1, lag + 1):
w = 1.0 - k / (lag + 1.0)
s2 += 2.0 * w * float(r[k:] @ r[:n - k]) / n
return float((S @ S) / (n * n * s2))
# --- 문제 1: 정상이 아닌 자료의 종류 -----------------------------------
print(" 197강 문제 1 에서 phi 가 0.99 인 자료와 1 인 자료를 봤습니다")
print(" 시차 20 상관이 0.8179 와 1.0000 으로 비슷했는데 성질은 전혀 다릅니다")
print(" 정상이 아닌 자료가 두 종류입니다. 처리 방법이 서로 다릅니다")
print(" %s %s %s"
% (pw("어떤 자료인가", 22), rw("무엇을 해야 하나", 22),
rw("엉뚱한 처리를 하면", 26)))
for a, b, c in [("추세만 있음", "시간을 빼거나 넣음", "차분하면 잡음이 늘어남"),
("누적된 것", "차분함", "시간을 빼도 안 정상")]:
print(" %s %s %s" % (pw(a, 22), rw(b, 22), rw(c, 26)))
print(" 앞을 추세 정상이라 하고 뒤를 차분 정상이라 합니다")
print(" 두 자료를 만들어 성질을 견줍니다")
n1 = 600
t1 = np.arange(n1, dtype=float)
ts = 0.05 * t1 + gen_ar1(n1, 0.5)
ds = np.cumsum(rng.normal(0, 1, n1)) + 0.05 * t1
print(" 둘 다 위로 올라가는 그림이고 눈으로는 구분되지 않습니다")
print(" %s %s %s %s"
% (pw("무엇", 20), rw("시차 1 상관", 14), rw("앞 절반 분산", 16),
rw("뒤 절반 분산", 16)))
for nm, v in [("추세 정상", ts), ("차분 정상", ds)]:
print(" %s %14.6f %16.6f %16.6f"
% (pw(nm, 20), acf(v, 1), float(np.var(v[:n1 // 2])),
float(np.var(v[n1 // 2:]))))
print(" 둘 다 시차 1 상관이 1 에 가깝습니다. 이것만으로는 못 가립니다")
print(" 두 처리를 각각 해 보고 무엇이 남는지 봅니다")
print(" %s %s %s %s"
% (pw("자료와 처리", 26), rw("시차 1 상관", 14), rw("시차 10 상관", 14),
rw("판정", 16)))
rows = [("추세 정상에서 시간을 뺌", ts - ols(ts, t1[:, None])[0][1] * t1),
("추세 정상을 차분", np.diff(ts)),
("차분 정상에서 시간을 뺌", ds - ols(ds, t1[:, None])[0][1] * t1),
("차분 정상을 차분", np.diff(ds))]
for nm, v in rows:
a1, a10 = acf(v, 1), acf(v, 10)
print(" %s %14.6f %14.6f %s"
% (pw(nm, 26), a1, a10,
rw("정상으로 보임" if abs(a10) < 0.15 else "구조 남음", 16)))
print(" 첫 줄과 넷째 줄이 제대로 된 처리입니다")
print(" 셋째 줄은 시간을 빼도 상관이 그대로입니다. 누적은 안 사라집니다")
print(" 둘째 줄은 정상이 되긴 하는데 시차 1 상관이 음수로 커집니다")
print(" 필요 없는 차분을 하면 없던 이동평균 구조가 생깁니다")
# --- 문제 2: 과잉 차분 -------------------------------------------------
print(" 차분을 한 번 더 하면 어떻게 되는지 봅니다")
S = 1500
print(" 백색잡음을 차분해 봅니다. 이미 정상인 자료입니다")
wn = rng.normal(0, 1, 4000)
print(" %s %s %s %s"
% (pw("무엇", 20), rw("분산", 14), rw("시차 1 상관", 14),
rw("시차 2 상관", 14)))
for nm, v in [("원래 자료", wn), ("한 번 차분", np.diff(wn)),
("두 번 차분", np.diff(np.diff(wn)))]:
print(" %s %14.6f %14.6f %14.6f"
% (pw(nm, 20), float(np.var(v)), acf(v, 1), acf(v, 2)))
print(" 차분할수록 분산이 커지고 시차 1 상관이 음수가 됩니다")
print(" 백색잡음을 차분하면 시차 1 상관이 이론적으로 -0.5 입니다")
print(" 한 번 더 차분하면 -0.6667 로 더 커집니다")
print(" 없던 구조를 만들어 낸 것입니다. 이것을 과잉 차분이라 합니다")
print(" 예측 성능으로 대가를 재 봅니다")
print(" 차분 정상 자료를 여러 번 차분해 한 칸 앞을 예측합니다")
def fit_ar_pred(tr, te, p):
n = len(tr) - p
A = np.stack([tr[p - j:p - j + n] for j in range(1, p + 1)]
+ [np.ones(n)], axis=1)
b, *_ = np.linalg.lstsq(A, tr[p:p + n], rcond=None)
errs = []
for i in range(p, len(te)):
f = float(np.dot(b[:p], te[i - p:i][::-1]))
f += b[p]
errs.append((te[i] - f) ** 2)
return float(np.mean(errs))
print(" %s %s %s"
% (pw("몇 번 차분", 14), rw("한 칸 앞 제곱오차", 20), rw("판정", 16)))
base = np.cumsum(gen_ar1(3000, 0.5))
for d in [0, 1, 2, 3]:
z = base.copy()
for _ in range(d):
z = np.diff(z)
tr, te = z[:2400], z[2400:]
e = fit_ar_pred(tr, te, 2)
print(" %s %20.6f %s"
% (pw("%d" % d, 14), e,
rw("모자람" if d == 0 else ("맞음" if d == 1 else "지나침"), 16)))
print(" 한 번이 가장 좋지만 안 한 것과 0.9505 대 0.9499 로 거의 같습니다")
print(" 한 칸 앞만 보면 되먹임 두 개가 누적을 흉내 낼 수 있기 때문입니다")
print(" 부족한 차분의 대가는 한 칸 앞이 아니라 먼 지평과 표준오차에서 나옵니다")
print(" 지나친 차분은 한 칸 앞에서 바로 드러납니다. 1.1402 와 1.9007 입니다")
print(" 차분 횟수는 늘리면 좋은 것이 아닙니다. 정확히 맞춰야 합니다")
print(" 차분한 자료의 예측을 되돌려야 합니다")
print(" %s %s"
% (pw("무엇을 예측했나", 26), rw("원래 값으로 어떻게 되돌리나", 30)))
for a, b in [("한 번 차분한 값", "마지막 값에 더합니다"),
("두 번 차분한 값", "두 번 누적해서 더합니다"),
("로그 차분한 값", "누적한 뒤 지수를 취합니다"),
("예측 구간", "누적하면서 분산도 함께 쌓입니다")]:
print(" %s %s" % (pw(a, 26), rw(b, 30)))
print(" 마지막 줄이 중요합니다. 차분 자료의 구간을 그대로 못 씁니다")
print(" h 칸 앞 구간의 폭이 루트 h 에 비례해 넓어집니다")
print(" %s %s %s"
% (pw("몇 칸 앞", 12), rw("차분 자료 구간 폭", 20), rw("원래 값 구간 폭", 20)))
for h in [1, 4, 9, 16]:
print(" %s %20.6f %20.6f"
% (pw("%d" % h, 12), 2 * 1.96, 2 * 1.96 * np.sqrt(h)))
print(" 누적합의 예측 구간은 끝없이 넓어집니다. 197강의 정상 자료와 다릅니다")
# --- 문제 3: 단위근 검정 -----------------------------------------------
print(" 어느 쪽인지 검정으로 가립니다")
print(" 차분한 값을 원래 값에 회귀해 계수가 0 인지 봅니다")
print(" 계수가 0 이면 누적이고 음수면 정상입니다")
S3 = 1500
print(" %s %s %s %s"
% (pw("자료", 22), rw("통계량 평균", 16), rw("5 퍼센트 기준", 18),
rw("기각 비율", 14)))
crit = -2.88
for nm, kind in [("누적합", 0), ("되먹임 0.5", 1), ("되먹임 0.9", 2),
("되먹임 0.99", 3)]:
vals = []
for _ in range(S3):
nn = 300
if kind == 0:
z = np.cumsum(rng.normal(0, 1, nn))
else:
z = gen_ar1(nn, {1: 0.5, 2: 0.9, 3: 0.99}[kind])
vals.append(df_stat(z, lags=1))
vals = np.array(vals)
print(" %s %16.4f %18.2f %14.4f"
% (pw(nm, 22), float(vals.mean()), crit, float((vals < crit).mean())))
print(" 누적합에서는 0.05 근처만 잘못 기각합니다. 오류율이 지켜집니다")
print(" 되먹임 0.5 는 거의 언제나 정상이라고 바르게 판정합니다")
print(" 되먹임 0.99 는 정상인데도 거의 못 가려냅니다. 검정력이 없습니다")
print(" 정상에 가까운 자료와 누적을 자료만으로 가리는 것은 어렵습니다")
print(" 표본이 길어지면 나아지는지 봅니다")
print(" %s %s %s"
% (pw("자료 길이", 14), rw("되먹임 0.9 를 정상이라 판정", 30),
rw("되먹임 0.99 를 정상이라 판정", 32)))
for nn in [100, 300, 1000, 3000]:
c9, c99 = 0, 0
for _ in range(400):
c9 += df_stat(gen_ar1(nn, 0.9), lags=1) < crit
c99 += df_stat(gen_ar1(nn, 0.99), lags=1) < crit
print(" %s %30.4f %32.4f"
% (pw("%d" % nn, 14), c9 / 400, c99 / 400))
print(" 길이가 늘면 나아집니다. 0.9 는 300 개면 1.0000 으로 다 가려냅니다")
print(" 0.99 는 1000 개에서 0.2775 이고 3000 개가 되어야 0.9950 이 됩니다")
print(" 0.9 가 300 개로 되는 일을 0.99 는 3000 개로도 겨우 합니다")
print(" 검정력은 계수가 1 에 얼마나 가까운지와 자료 길이가 함께 정합니다")
print(" 반대 방향의 검정도 있습니다")
print(" 귀무가설을 정상으로 두고 누적을 대립으로 두는 검정입니다")
print(" %s %s %s %s"
% (pw("자료", 22), rw("통계량 평균", 16), rw("5 퍼센트 기준", 18),
rw("기각 비율", 14)))
kcrit = 0.463
for nm, kind in [("백색잡음", 0), ("되먹임 0.9", 1), ("누적합", 2),
("추세만 있음", 3)]:
vals = []
for _ in range(600):
nn = 300
if kind == 0:
z = rng.normal(0, 1, nn)
elif kind == 1:
z = gen_ar1(nn, 0.9)
elif kind == 2:
z = np.cumsum(rng.normal(0, 1, nn))
else:
z = 0.05 * np.arange(nn) + rng.normal(0, 1, nn)
vals.append(kpss_stat(z))
vals = np.array(vals)
print(" %s %16.4f %18.3f %14.4f"
% (pw(nm, 22), float(vals.mean()), kcrit, float((vals > kcrit).mean())))
print(" 되먹임 0.9 는 정상인데도 0.4717 로 잘못 기각합니다")
print(" 이 검정도 1 에 가까운 자료에서는 믿기 어렵습니다. 앞의 검정과 같습니다")
print(" 두 검정의 귀무가설이 반대라 결론을 함께 봐야 합니다")
print(" %s %s %s"
% (pw("첫째 검정", 18), rw("둘째 검정", 18), rw("결론", 26)))
for a, b, c in [("정상이라 함", "정상이라 함", "정상입니다"),
("누적이라 함", "누적이라 함", "차분이 필요합니다"),
("누적이라 함", "정상이라 함", "판단을 미룹니다"),
("정상이라 함", "누적이라 함", "추세를 의심합니다")]:
print(" %s %s %s" % (pw(a, 18), rw(b, 18), rw(c, 26)))
print(" 셋째 줄이 자료가 짧을 때 흔합니다. 둘 다 검정력이 모자란 자리입니다")
# --- 문제 4: 차분과 모형을 함께 ---------------------------------------
print(" 차분과 197강의 모형을 합치면 ARIMA 가 됩니다")
print(" %s %s"
% (pw("세 글자", 14), rw("무엇을 뜻하는가", 30)))
for a, b in [("p", "되먹임 차수입니다"), ("d", "차분 횟수입니다"),
("q", "이동평균 차수입니다")]:
print(" %s %s" % (pw(a, 14), rw(b, 30)))
print(" 196강의 판정과 197강의 두 그림과 이 강의의 검정이 순서대로 쓰입니다")
print(" 차수를 자동으로 고르는 절차를 흉내 내 봅니다")
true_d = 1
data = np.cumsum(gen_ar1(1500, 0.6))
print(" 참 자료는 한 번 누적된 되먹임 0.6 입니다")
print(" %s %s %s %s %s"
% (pw("d", 6), pw("p", 6), rw("AIC", 14), rw("잔차 시차 1", 16),
rw("판정", 14)))
best = None
for d in [0, 1, 2]:
z = data.copy()
for _ in range(d):
z = np.diff(z)
for pp in [1, 2]:
m = len(z) - pp
A = np.stack([z[pp - j:pp - j + m] for j in range(1, pp + 1)]
+ [np.ones(m)], axis=1)
b, *_ = np.linalg.lstsq(A, z[pp:pp + m], rcond=None)
r = z[pp:pp + m] - A @ b
s2 = float(r @ r) / m
aic = m * np.log(s2) + 2 * (pp + 1)
tag = "가장 작음" if best is None or aic < best[0] else ""
if best is None or aic < best[0]:
best = (aic, d, pp)
print((" %s %s %14.4f %16.6f %s"
% (pw("%d" % d, 6), pw("%d" % pp, 6), aic, acf(r, 1),
rw(tag, 14))).rstrip())
print(" 차분 횟수가 다르면 AIC 를 서로 못 견줍니다. 자료가 달라지기 때문입니다")
print(" d 가 0 이고 p 가 2 인 65.5642 와 d 가 1 이고 p 가 1 인 65.2933 이 그렇습니다")
print(" 두 값이 붙어 있지만 서로 다른 자료에 대한 값이라 견줄 수 없습니다")
print(" d 를 먼저 검정으로 정하고 그다음에 같은 d 안에서 p 와 q 를 고릅니다")
print(" 같은 d 안에서만 보면 d 가 1 일 때 p 가 1 인 쪽이 가장 작습니다")
print(" 같은 자료에 여러 모형을 맞춰 예측으로 견줍니다")
tr = data[:1200]
te = data[1200:]
print(" 앞 1200 개로 맞추고 뒤 300 개를 한 칸씩 예측합니다")
print(" %s %s %s"
% (pw("무엇으로 예측", 26), rw("제곱오차", 16), rw("판정", 16)))
res = []
for nm, d, pp in [("차분 없이 되먹임 2", 0, 2), ("한 번 차분 뒤 되먹임 1", 1, 1),
("한 번 차분 뒤 되먹임 2", 1, 2),
("두 번 차분 뒤 되먹임 2", 2, 2)]:
ztr, zte = tr.copy(), te.copy()
lastv = []
for _ in range(d):
lastv.append(ztr[-1])
ztr = np.diff(ztr)
zte = np.diff(np.concatenate([[tr[-1]], zte]))
m = len(ztr) - pp
A = np.stack([ztr[pp - j:pp - j + m] for j in range(1, pp + 1)]
+ [np.ones(m)], axis=1)
b, *_ = np.linalg.lstsq(A, ztr[pp:pp + m], rcond=None)
errs = []
for i in range(pp, len(zte)):
f = float(np.dot(b[:pp], zte[i - pp:i][::-1])) + b[pp]
errs.append((zte[i] - f) ** 2)
res.append((nm, float(np.mean(errs))))
mn = min(r[1] for r in res)
for nm, e in res:
print((" %s %16.6f %s"
% (pw(nm, 26), e, rw("가장 좋음" if e == mn else "", 16))).rstrip())
print(" 가운데 두 줄이 1.0053 과 1.0068 로 거의 같습니다. 참 구조가 그 안에 있습니다")
print(" 두 번 차분한 마지막 줄은 2.0346 으로 두 배가 됩니다. 과잉 차분의 대가입니다")
print(" 첫 줄은 차분을 안 한 값을 예측한 것이라 다른 자를 쓴 셈입니다")
print(" 예측 오차로 견줄 때는 무엇을 예측했는지 먼저 맞춰야 합니다")
# --- 문제 5: 실무 -------------------------------------------------------
print(" 실무에서 차분을 정하는 순서를 정리합니다")
print(" %s %s" % (pw("단계", 24), rw("무엇을 하는가", 30)))
for a, b in [("그림 보기", "추세와 분산 변화 확인"),
("분산 안정", "로그나 제곱근 변환"),
("단위근 검정", "두 검정을 함께"),
("차분", "필요한 만큼만"),
("자기상관 확인", "과잉 차분 신호 보기"),
("모형 적합", "197강의 절차")]:
print(" %s %s" % (pw(a, 24), rw(b, 30)))
print(" 둘째 줄이 첫째입니다. 분산이 변하면 차분해도 정상이 안 됩니다")
print(" 분산이 변하는 자료에 로그를 취해 봅니다")
n5 = 800
lvl = np.exp(0.004 * np.arange(n5))
y5 = lvl * (1.0 + 0.15 * gen_ar1(n5, 0.6))
print(" 수준이 커질수록 흔들림도 커지는 자료입니다")
print(" %s %s %s %s"
% (pw("무엇", 26), rw("앞 절반 표준편차", 20), rw("뒤 절반 표준편차", 20),
rw("몇 배", 12)))
for nm, v in [("원자료", y5), ("차분만", np.diff(y5)),
("로그 뒤 차분", np.diff(np.log(y5)))]:
h = len(v) // 2
a_, b_ = float(np.std(v[:h])), float(np.std(v[h:]))
print(" %s %20.6f %20.6f %12.4f"
% (pw(nm, 26), a_, b_, b_ / a_))
print(" 차분만 하면 뒤쪽 흔들림이 여전히 큽니다")
print(" 로그를 먼저 취하면 두 구간의 흔들림이 비슷해집니다")
print(" 로그 차분은 성장률입니다. 해석도 자연스러워집니다")
print(" 차분 대신 쓸 수 있는 것들을 정리합니다")
print(" %s %s %s"
% (pw("무엇", 20), rw("언제", 26), rw("무엇을 조심", 24)))
for a, b, c in [("차분", "누적된 자료", "과잉 차분"),
("시간 넣기", "추세만 있을 때", "미래로 못 늘림"),
("로그", "분산이 수준에 비례", "되돌릴 때 젠센"),
("계절 차분", "주기마다 되풀이", "200강에서"),
("공적분", "둘이 함께 움직일 때", "차분하면 정보 손실")]:
print(" %s %s %s" % (pw(a, 20), rw(b, 26), rw(c, 24)))
print(" 둘째 줄의 함정을 봅니다. 추세를 넣은 모형은 먼 미래에 발산합니다")
print(" %s %s %s"
% (pw("몇 칸 앞", 12), rw("추세 모형 예측", 18), rw("차분 모형 예측", 18)))
lastv = 30.0
slope = 0.05
for h in [10, 100, 1000]:
print(" %s %18.4f %18.4f"
% (pw("%d" % h, 12), lastv + slope * h, lastv))
print(" 추세 모형은 끝없이 올라가고 차분 모형은 마지막 값에 머뭅니다")
print(" 둘 중 무엇이 옳은지는 자료가 아니라 대상이 정합니다")
print(" 주가는 뒤쪽이 맞고 인구는 앞쪽이 맞습니다")
print(" 198강은 정상으로 만드는 법을 봤습니다. 199강은 예측을 다룹니다")
# 197강 문제 1 에서 phi 가 0.99 인 자료와 1 인 자료를 봤습니다
# 시차 20 상관이 0.8179 와 1.0000 으로 비슷했는데 성질은 전혀 다릅니다
# 정상이 아닌 자료가 두 종류입니다. 처리 방법이 서로 다릅니다
# 어떤 자료인가 무엇을 해야 하나 엉뚱한 처리를 하면
# 추세만 있음 시간을 빼거나 넣음 차분하면 잡음이 늘어남
# 누적된 것 차분함 시간을 빼도 안 정상
# 앞을 추세 정상이라 하고 뒤를 차분 정상이라 합니다
# 두 자료를 만들어 성질을 견줍니다
# 둘 다 위로 올라가는 그림이고 눈으로는 구분되지 않습니다
# 무엇 시차 1 상관 앞 절반 분산 뒤 절반 분산
# 추세 정상 0.986073 21.649744 19.814273
# 차분 정상 0.978335 29.049348 22.234133
# 둘 다 시차 1 상관이 1 에 가깝습니다. 이것만으로는 못 가립니다
# 두 처리를 각각 해 보고 무엇이 남는지 봅니다
# 자료와 처리 시차 1 상관 시차 10 상관 판정
# 추세 정상에서 시간을 뺌 0.448256 -0.002928 정상으로 보임
# 추세 정상을 차분 -0.305416 -0.015592 정상으로 보임
# 차분 정상에서 시간을 뺌 0.978593 0.794269 구조 남음
# 차분 정상을 차분 0.001378 -0.031599 정상으로 보임
# 첫 줄과 넷째 줄이 제대로 된 처리입니다
# 셋째 줄은 시간을 빼도 상관이 그대로입니다. 누적은 안 사라집니다
# 둘째 줄은 정상이 되긴 하는데 시차 1 상관이 음수로 커집니다
# 필요 없는 차분을 하면 없던 이동평균 구조가 생깁니다
# 차분을 한 번 더 하면 어떻게 되는지 봅니다
# 백색잡음을 차분해 봅니다. 이미 정상인 자료입니다
# 무엇 분산 시차 1 상관 시차 2 상관
# 원래 자료 1.006642 0.028423 -0.014260
# 한 번 차분 1.955874 -0.478022 -0.031041
# 두 번 차분 5.782585 -0.651194 0.131556
# 차분할수록 분산이 커지고 시차 1 상관이 음수가 됩니다
# 백색잡음을 차분하면 시차 1 상관이 이론적으로 -0.5 입니다
# 한 번 더 차분하면 -0.6667 로 더 커집니다
# 없던 구조를 만들어 낸 것입니다. 이것을 과잉 차분이라 합니다
# 예측 성능으로 대가를 재 봅니다
# 차분 정상 자료를 여러 번 차분해 한 칸 앞을 예측합니다
# 몇 번 차분 한 칸 앞 제곱오차 판정
# 0 0.950529 모자람
# 1 0.949949 맞음
# 2 1.140247 지나침
# 3 1.900671 지나침
# 한 번이 가장 좋지만 안 한 것과 0.9505 대 0.9499 로 거의 같습니다
# 한 칸 앞만 보면 되먹임 두 개가 누적을 흉내 낼 수 있기 때문입니다
# 부족한 차분의 대가는 한 칸 앞이 아니라 먼 지평과 표준오차에서 나옵니다
# 지나친 차분은 한 칸 앞에서 바로 드러납니다. 1.1402 와 1.9007 입니다
# 차분 횟수는 늘리면 좋은 것이 아닙니다. 정확히 맞춰야 합니다
# 차분한 자료의 예측을 되돌려야 합니다
# 무엇을 예측했나 원래 값으로 어떻게 되돌리나
# 한 번 차분한 값 마지막 값에 더합니다
# 두 번 차분한 값 두 번 누적해서 더합니다
# 로그 차분한 값 누적한 뒤 지수를 취합니다
# 예측 구간 누적하면서 분산도 함께 쌓입니다
# 마지막 줄이 중요합니다. 차분 자료의 구간을 그대로 못 씁니다
# h 칸 앞 구간의 폭이 루트 h 에 비례해 넓어집니다
# 몇 칸 앞 차분 자료 구간 폭 원래 값 구간 폭
# 1 3.920000 3.920000
# 4 3.920000 7.840000
# 9 3.920000 11.760000
# 16 3.920000 15.680000
# 누적합의 예측 구간은 끝없이 넓어집니다. 197강의 정상 자료와 다릅니다
# 어느 쪽인지 검정으로 가립니다
# 차분한 값을 원래 값에 회귀해 계수가 0 인지 봅니다
# 계수가 0 이면 누적이고 음수면 정상입니다
# 자료 통계량 평균 5 퍼센트 기준 기각 비율
# 누적합 -1.5127 -2.88 0.0660
# 되먹임 0.5 -8.6925 -2.88 1.0000
# 되먹임 0.9 -4.0736 -2.88 0.9933
# 되먹임 0.99 -1.8843 -2.88 0.0840
# 누적합에서는 0.05 근처만 잘못 기각합니다. 오류율이 지켜집니다
# 되먹임 0.5 는 거의 언제나 정상이라고 바르게 판정합니다
# 되먹임 0.99 는 정상인데도 거의 못 가려냅니다. 검정력이 없습니다
# 정상에 가까운 자료와 누적을 자료만으로 가리는 것은 어렵습니다
# 표본이 길어지면 나아지는지 봅니다
# 자료 길이 되먹임 0.9 를 정상이라 판정 되먹임 0.99 를 정상이라 판정
# 100 0.3075 0.0600
# 300 1.0000 0.0725
# 1000 1.0000 0.2775
# 3000 1.0000 0.9950
# 길이가 늘면 나아집니다. 0.9 는 300 개면 1.0000 으로 다 가려냅니다
# 0.99 는 1000 개에서 0.2775 이고 3000 개가 되어야 0.9950 이 됩니다
# 0.9 가 300 개로 되는 일을 0.99 는 3000 개로도 겨우 합니다
# 검정력은 계수가 1 에 얼마나 가까운지와 자료 길이가 함께 정합니다
# 반대 방향의 검정도 있습니다
# 귀무가설을 정상으로 두고 누적을 대립으로 두는 검정입니다
# 자료 통계량 평균 5 퍼센트 기준 기각 비율
# 백색잡음 0.1688 0.463 0.0483
# 되먹임 0.9 0.5822 0.463 0.4717
# 누적합 2.6478 0.463 0.9667
# 추세만 있음 5.0550 0.463 1.0000
# 되먹임 0.9 는 정상인데도 0.4717 로 잘못 기각합니다
# 이 검정도 1 에 가까운 자료에서는 믿기 어렵습니다. 앞의 검정과 같습니다
# 두 검정의 귀무가설이 반대라 결론을 함께 봐야 합니다
# 첫째 검정 둘째 검정 결론
# 정상이라 함 정상이라 함 정상입니다
# 누적이라 함 누적이라 함 차분이 필요합니다
# 누적이라 함 정상이라 함 판단을 미룹니다
# 정상이라 함 누적이라 함 추세를 의심합니다
# 셋째 줄이 자료가 짧을 때 흔합니다. 둘 다 검정력이 모자란 자리입니다
# 차분과 197강의 모형을 합치면 ARIMA 가 됩니다
# 세 글자 무엇을 뜻하는가
# p 되먹임 차수입니다
# d 차분 횟수입니다
# q 이동평균 차수입니다
# 196강의 판정과 197강의 두 그림과 이 강의의 검정이 순서대로 쓰입니다
# 차수를 자동으로 고르는 절차를 흉내 내 봅니다
# 참 자료는 한 번 누적된 되먹임 0.6 입니다
# d p AIC 잔차 시차 1 판정
# 0 1 731.8393 0.599712 가장 작음
# 0 2 65.5642 0.012455 가장 작음
# 1 1 65.2933 0.013088 가장 작음
# 1 2 65.9265 0.000737
# 2 1 348.1261 -0.024627
# 2 2 316.7120 -0.026191
# 차분 횟수가 다르면 AIC 를 서로 못 견줍니다. 자료가 달라지기 때문입니다
# d 가 0 이고 p 가 2 인 65.5642 와 d 가 1 이고 p 가 1 인 65.2933 이 그렇습니다
# 두 값이 붙어 있지만 서로 다른 자료에 대한 값이라 견줄 수 없습니다
# d 를 먼저 검정으로 정하고 그다음에 같은 d 안에서 p 와 q 를 고릅니다
# 같은 d 안에서만 보면 d 가 1 일 때 p 가 1 인 쪽이 가장 작습니다
# 같은 자료에 여러 모형을 맞춰 예측으로 견줍니다
# 앞 1200 개로 맞추고 뒤 300 개를 한 칸씩 예측합니다
# 무엇으로 예측 제곱오차 판정
# 차분 없이 되먹임 2 1.025309
# 한 번 차분 뒤 되먹임 1 1.005320 가장 좋음
# 한 번 차분 뒤 되먹임 2 1.006791
# 두 번 차분 뒤 되먹임 2 2.034643
# 가운데 두 줄이 1.0053 과 1.0068 로 거의 같습니다. 참 구조가 그 안에 있습니다
# 두 번 차분한 마지막 줄은 2.0346 으로 두 배가 됩니다. 과잉 차분의 대가입니다
# 첫 줄은 차분을 안 한 값을 예측한 것이라 다른 자를 쓴 셈입니다
# 예측 오차로 견줄 때는 무엇을 예측했는지 먼저 맞춰야 합니다
# 실무에서 차분을 정하는 순서를 정리합니다
# 단계 무엇을 하는가
# 그림 보기 추세와 분산 변화 확인
# 분산 안정 로그나 제곱근 변환
# 단위근 검정 두 검정을 함께
# 차분 필요한 만큼만
# 자기상관 확인 과잉 차분 신호 보기
# 모형 적합 197강의 절차
# 둘째 줄이 첫째입니다. 분산이 변하면 차분해도 정상이 안 됩니다
# 분산이 변하는 자료에 로그를 취해 봅니다
# 수준이 커질수록 흔들림도 커지는 자료입니다
# 무엇 앞 절반 표준편차 뒤 절반 표준편차 몇 배
# 원자료 1.313348 5.856662 4.4593
# 차분만 0.488279 2.208877 4.5238
# 로그 뒤 차분 0.189894 0.176168 0.9277
# 차분만 하면 뒤쪽 흔들림이 여전히 큽니다
# 로그를 먼저 취하면 두 구간의 흔들림이 비슷해집니다
# 로그 차분은 성장률입니다. 해석도 자연스러워집니다
# 차분 대신 쓸 수 있는 것들을 정리합니다
# 무엇 언제 무엇을 조심
# 차분 누적된 자료 과잉 차분
# 시간 넣기 추세만 있을 때 미래로 못 늘림
# 로그 분산이 수준에 비례 되돌릴 때 젠센
# 계절 차분 주기마다 되풀이 200강에서
# 공적분 둘이 함께 움직일 때 차분하면 정보 손실
# 둘째 줄의 함정을 봅니다. 추세를 넣은 모형은 먼 미래에 발산합니다
# 몇 칸 앞 추세 모형 예측 차분 모형 예측
# 10 30.5000 30.0000
# 100 35.0000 30.0000
# 1000 80.0000 30.0000
# 추세 모형은 끝없이 올라가고 차분 모형은 마지막 값에 머뭅니다
# 둘 중 무엇이 옳은지는 자료가 아니라 대상이 정합니다
# 주가는 뒤쪽이 맞고 인구는 앞쪽이 맞습니다
# 198강은 정상으로 만드는 법을 봤습니다. 199강은 예측을 다룹니다