03단원의 모든 계산이 관측이 서로 독립이라는 가정 위에 서 있었습니다.
오늘의 매출은 어제의 매출과 닮았습니다. 이번 달 기온은 지난달 기온과 닮았습니다. 이웃한 값이 닮아 있으면 관측 하나가 새 정보 하나가 아닙니다.
194강에서 시점이 둘뿐인데도 표준오차를 고쳐야 했습니다. 시점이 백 개면 고칠 것이 훨씬 많아집니다.
이 강의는 시계열을 모형으로 적기 전에 무엇을 봐야 하는지를 다룹니다. 자기상관, 정상성, 분해가 그 셋입니다.
문제. 이웃이 닮은 자료를 봅니다.
(1) 독립인 자료와 견주세요.
(2) 표준오차가 얼마나 틀리는지 재세요.
(3) 유효 표본으로 바꿔 보세요.
생각의 실마리. 173강 이후의 모든 표준오차가 이었습니다. 그 식이 관측이 독립일 때만 맞습니다.
풀이. (1) 두 자료를 나란히 봅니다.
| 자료 | 평균 | 표준편차 | 한 칸 상관 | 두 칸 상관 |
|---|---|---|---|---|
| 독립 | ||||
| 이웃이 닮음 |
평균과 표준편차만 보면 두 자료가 비슷해 보입니다.
한 칸 상관을 보면 완전히 다릅니다. 와 입니다.
요약통계는 순서를 안 봅니다. 값을 섞어도 평균과 표준편차는 그대로이므로, 순서에 있는 정보를 놓칩니다.
(2) 표준오차가 얼마나 틀리는지 잽니다.
| 이웃 상관 | 평균의 실제 sd | 독립 가정 sd | 몇 배 틀리나 | 구간 포함률 |
|---|---|---|---|---|
이웃 상관 면 실제 흔들림이 독립 가정의 배입니다.
포함률이 에서 로 내려갑니다. 구간이 너무 좁아 참값을 세 번 중 두 번 놓칩니다.
173강 이후의 표준오차가 여기서 전부 다시 계산돼야 합니다.
(3) 유효 표본으로 바꿔 봅니다.
| 이웃 상관 | 실제 표본 | 유효 표본 | 몇 퍼센트 남나 |
|---|---|---|---|
이웃 상관 면 개가 개 값밖에 못 합니다.
175강 문제 3의 키시 유효 표본이 시간축에서 다시 나옵니다. 표본이 크다는 말이 정보가 많다는 뜻이 아닙니다.
이 문제에서 배우는 것. 자료를 늘리는 방식이 결과를 바꿉니다. 하루 한 번 재던 것을 한 시간에 한 번 재면 관측 수가 배가 되는데, 이웃 상관도 함께 올라가므로 유효 표본은 거의 안 늘어납니다. 초 단위 로그를 모으면 수백만 행이 쌓이는데 실제 정보는 그 근처에도 못 가는 것이 이 이유이며, 표본 크기를 자랑하는 시계열 분석은 대개 이 계산을 안 한 것입니다.
바로 확인 1.
확인 1-1. 유효 표본 식을 쓰세요.
답. 입니다.
확인 1-2. 검산에서 이웃 상관 일 때 표준오차가 몇 배 틀리는지 쓰세요.
답. 배입니다.
확인 1-3. 검산에서 네 상관값의 포함률을 쓰세요.
답. , , , 입니다.
문제. 시차별 상관을 잽니다.
(1) 네 가지 자료의 자기상관을 재세요.
(2) 모양으로 구조를 읽으세요.
(3) 인지 검정하세요.
생각의 실마리. 한 칸만 보지 않고 두 칸, 세 칸 떨어진 값과의 상관을 늘어놓으면 자료의 구조가 보입니다.
풀이. (1) 네 가지 자료를 만들어 봅니다.
| 시차 | 백색잡음 | 한 칸 되먹임 | 한 칸 이동평균 | 누적합 | 이론 되먹임 |
|---|---|---|---|---|---|
백색잡음은 모든 시차에서 근처입니다.
되먹임 자료는 의 거듭제곱으로 줄어듭니다. 다만 시차 은 대 이고 시차 는 대 입니다.
표본 자기상관은 체계적으로 작게 나옵니다. 평균을 빼고 계산하기 때문이며, 시차가 길수록 더해지는 항이 줄어 그 눌림이 커집니다.
이동평균 자료는 시차 에서만 값이 있고 그 뒤로 입니다.
누적합은 아주 천천히 줄어듭니다. 시차 에서도 입니다.
(2) 모양으로 구조를 읽습니다.
| 무엇이 보이는가 | 어떤 구조인가 | 몇 차인가 |
|---|---|---|
| 시차 뒤로 뚝 끊김 | 이동평균 | 차 |
| 지수적으로 줄어듦 | 되먹임 | 부분자기상관으로 |
| 아주 천천히 줄어듦 | 누적된 것 | 차분이 필요 |
| 주기적으로 큼 | 계절 | 주기가 그 시차 |
첫째 줄과 둘째 줄이 뒤집힌 관계입니다. 이동평균은 자기상관이 끊기고 부분자기상관이 늘어지며, 되먹임은 그 반대입니다. 197강에서 다룹니다.
셋째 줄이 이 강의의 문제 3입니다.
(3) 자기상관이 인지 검정합니다. 백색잡음이면 각 시차의 상관이 대략 만큼 흔들리며, 이 이므로 경계는 입니다.
| 자료 | 경계 넘는 시차 수 | 검사한 시차 | 판정 |
|---|---|---|---|
| 백색잡음 | 백색잡음 | ||
| 한 칸 되먹임 | 구조 있음 | ||
| 한 칸 이동평균 | 구조 있음 | ||
| 누적합 | 구조 있음 |
백색잡음도 개 중 하나가 우연히 넘습니다. 각 시차마다 퍼센트씩이므로 평균 하나는 넘게 되어 있으며, 182강의 다중비교입니다.
그래서 시차 하나씩이 아니라 여러 시차를 묶어 검정합니다.
이 문제에서 배우는 것. 자기상관 그림은 시계열 분석의 잔차 그림입니다. 184강에서 잔차를 그려 모형의 결함을 찾았듯, 여기서는 자기상관을 그려 남은 구조를 찾습니다. 모형을 맞춘 뒤 잔차의 자기상관이 경계 안에 들어오면 쓸 정보를 다 썼다는 뜻이고, 아직 튀어나오면 모형이 놓친 것이 있다는 뜻입니다. 197강부터 199강까지 이 그림을 계속 봅니다.
바로 확인 2.
확인 2-1. 자기상관을 식으로 쓰세요.
답. 시차 만큼 떨어진 값들의 곱의 합을 제곱합으로 나눕니다.
확인 2-2. 검산에서 되먹임 자료의 시차 과 를 이론값과 견주세요.
답. 대 이고 대 입니다.
확인 2-3. 검산에서 백색잡음이 경계를 몇 번 넘었는지 쓰고 왜인지 쓰세요.
답. 개 중 번이며 시차마다 퍼센트씩이라 그렇습니다.
문제. 정상성을 확인합니다.
(1) 세 조건을 정리하세요.
(2) 정상이 아닌 자료를 회귀해 보세요.
(3) 대응을 찾으세요.
생각의 실마리. 시계열 분석의 거의 모든 결과가 정상성을 가정합니다. 그것이 깨지면 계산이 통째로 뜻을 잃습니다.
풀이. (1) 세 조건입니다.
| 무엇이 변하지 않아야 하나 | 깨지면 무엇이 문제인가 |
|---|---|
| 평균 | 추세가 있으면 예측이 어긋남 |
| 분산 | 구간마다 오차 크기가 다름 |
| 시차별 상관 | 과거로 미래를 못 말함 |
셋만 지키면 됩니다. 분포 전체가 같을 필요는 없으며, 이것을 약정상성이라 합니다.
(2) 정상이 아닌 자료를 회귀해 봅니다. **서로 아무 관계 없는 두 자료이고 참 기울기는 **입니다.
| 두 자료의 종류 | 유의하다는 비율 | 목표 | 판정 |
|---|---|---|---|
| 둘 다 백색잡음 | 괜찮음 | ||
| 둘 다 되먹임 | 가짜 회귀 | ||
| 둘 다 누적합 | 가짜 회귀 | ||
| 둘 다 추세 있음 | 가짜 회귀 |
누적합 둘을 회귀하면 열 번 중 여덟 번 유의하게 나옵니다. 아무 관계 없는 자료인데 그렇습니다.
이것을 가짜 회귀라 합니다.
되먹임 도 로 목표의 열 배가 넘습니다. 누적이 아니어도 그렇습니다.
마지막 줄은 공통 추세 때문입니다. 둘 다 올라가고 있으니 서로 설명하는 것처럼 보입니다.
(3) 대응을 찾습니다.
| 무엇을 회귀하는가 | 유의하다는 비율 | 목표 | 판정 |
|---|---|---|---|
| 누적합 그대로 | 가짜 회귀 | ||
| 차분한 뒤 | 괜찮음 | ||
| 추세 자료 그대로 | 가짜 회귀 | ||
| 시간을 함께 넣고 | 괜찮음 |
차분하면 으로 목표 근처에 돌아옵니다. 가장 흔한 대응입니다.
추세만 있는 자료는 시간을 함께 넣으면 가 됩니다.
두 경우가 다릅니다. 누적된 자료는 차분해야 하고 추세만 있는 자료는 시간을 넣어야 하며, 어느 쪽인지 판별하는 것이 198강입니다.
엉뚱한 쪽을 쓰면 안 낫습니다. 누적된 자료에서 시간만 넣으면 여전히 가짜 회귀가 남습니다.
이 문제에서 배우는 것. 가짜 회귀는 표본을 늘리면 더 나빠집니다. 보통의 통계에서는 이 커지면 오류율이 목표로 수렴하는데, 여기서는 반대로 유의 비율이 로 갑니다. 두 누적합의 상관이 으로 안 가고 아무 값에나 머물기 때문입니다. 그래서 "자료가 많으니 믿을 만하다"는 판단이 시계열에서 통하지 않으며, 유의성보다 정상성을 먼저 확인하는 것이 순서입니다.
바로 확인 3.
확인 3-1. 약정상성의 세 조건을 쓰세요.
답. 평균과 분산과 시차별 상관이 시간에 안 변해야 합니다.
확인 3-2. 검산에서 네 자료의 유의 비율을 쓰세요.
답. , , , 입니다.
확인 3-3. 검산에서 차분한 뒤와 시간을 넣은 뒤의 유의 비율을 쓰세요.
답. 과 입니다.
문제. 시계열을 세 조각으로 나눕니다.
(1) 세 조각의 크기를 재세요.
(2) 이동평균으로 추세를 뽑으세요.
(3) 창 크기를 바꿔 보세요.
생각의 실마리. 자료를 긴 흐름과 되풀이와 그 밖의 것으로 나누면 각각을 따로 다룰 수 있습니다.
풀이. (1) 추세와 계절과 나머지를 더해 자료를 만듭니다.
| 조각 | 표준편차 | 전체 분산 중 비율 | 무엇을 뜻하는가 |
|---|---|---|---|
| 추세 | 긴 흐름 | ||
| 계절 | 되풀이 | ||
| 나머지 | 그 밖의 것 |
세 비율의 합이 입니다. 근처면 조각들이 서로 겹치지 않는다는 뜻입니다.
(2) 이동평균으로 추세를 뽑습니다. 창 으로 옮겨 가며 평균을 내며, 주기 를 덮는 크기입니다.
| 무엇 | 참값과의 상관 | 평균 절대 오차 |
|---|---|---|
| 뽑아낸 추세 | ||
| 뽑아낸 계절 | ||
| 남은 나머지 |
셋 다 참값과 잘 맞습니다. 창 크기가 주기를 덮었기 때문입니다.
순서가 중요합니다. 추세를 먼저 빼고, 남은 것을 달마다 모아 평균을 내 계절을 얻고, 그 둘을 다 뺀 것이 나머지입니다.
(3) 창 크기를 바꿔 봅니다. 굽은 추세를 가진 자료도 함께 봅니다.
| 창 크기 | 직선 추세 오차 | 계절이 남았나 | 굽은 추세 오차 | 양끝에서 잃는 수 |
|---|---|---|---|---|
창이 주기보다 작으면 계절이 추세에 섞여 들어옵니다. 둘째 열이 그 크기이며, 창 부터 에서 로 내려갑니다.
첫째 열은 창이 클수록 계속 좋아집니다. 참 추세가 직선이기 때문입니다.
셋째 열은 굽은 추세이고 창 에서 가장 좋다가 에서 으로 나빠집니다.
창을 키우면 계절은 지워지는데 추세의 굽이도 함께 지워집니다. 165강 문제 2의 편향과 분산 맞바꿈이 창 크기에서 나타난 것입니다.
넷째 열만큼 양끝을 잃습니다. 창 면 앞뒤로 개씩 없으며, 최근 값을 예측해야 하는 실무에서 이것이 치명적입니다.
이 문제에서 배우는 것. 분해는 모형이 아니라 눈으로 보기 위한 도구입니다. 위 계산에는 오차도 신뢰구간도 없고, 창 크기를 바꾸면 답이 바뀝니다. 그래서 분해 결과로 "계절 효과가 유의하다" 같은 주장을 하면 안 되고, 모양을 파악해 다음 단계의 모형을 고르는 데 씁니다. 특히 양끝을 잃는 성질 때문에 예측에는 그대로 못 씁니다. 199강의 지수평활이 그 자리를 메웁니다.
바로 확인 4.
확인 4-1. 시계열 분해의 세 조각을 쓰세요.
답. 추세와 계절과 나머지입니다.
확인 4-2. 검산에서 세 조각의 분산 비율을 쓰세요.
답. , , 입니다.
확인 4-3. 검산에서 굽은 추세일 때 창 와 의 오차를 쓰세요.
답. 과 입니다.
문제. 첫 점검을 만듭니다.
(1) 볼 것을 정리하세요.
(2) 집계 주기를 바꿔 보세요.
(3) 빠진 시점을 다뤄 보세요.
생각의 실마리. 시계열은 자료를 만드는 방식이 결과를 크게 바꿉니다. 모형 전에 그것부터 확인합니다.
풀이. (1) 볼 것을 정리합니다.
| 무엇을 보는가 | 무엇을 알 수 있는가 |
|---|---|
| 시간 그림 | 추세와 계절과 이상점 |
| 자기상관 그림 | 이웃이 얼마나 닮았는지 |
| 구간별 평균과 분산 | 정상성이 성립하는지 |
| 빠진 시점 | 간격이 일정한지 |
| 단위와 집계 주기 | 무엇을 예측할 것인지 |
마지막 줄이 자주 빠집니다. 일별을 주별로 모으면 문제가 달라집니다.
(2) 집계 주기를 바꿔 봅니다. 한 칸 상관 인 자료를 여러 주기로 모읍니다.
| 몇 개씩 모으나 | 남는 길이 | 한 칸 상관 | 이론값 |
|---|---|---|---|
모을수록 한 칸 상관이 줄지만 이론값보다는 큽니다.
이론값은 띄엄띄엄 골라 뽑을 때의 값이고, 여기서는 평균을 냈습니다. 평균은 이웃한 구간과 겹치는 성분을 남기므로 상관이 덜 줄어듭니다.
한 칸이 더 긴 시간을 뜻하게 됐습니다. 그래서 집계 주기를 안 밝히면 자기상관 값이 뜻을 잃습니다.
(3) 빠진 시점을 다뤄 봅니다. 퍼센트가 빠진 자료에서 한 칸 상관을 잽니다.
| 어떻게 다루나 | 한 칸 상관 | 참값 과의 차 |
|---|---|---|
| 빠진 것을 빼고 이어 붙임 | ||
| 직선으로 메움 | ||
| 직전 값으로 메움 |
이어 붙이면 으로 아래로 갑니다. 건너뛴 자리가 실제로는 두 칸 떨어져 있기 때문입니다.
메우면 과 로 위로 갑니다. 없는 매끄러움을 넣었기 때문입니다.
세 방식이 서로 다른 방향으로 틀립니다. 여기서는 직전 값 채우기가 가장 가깝지만, 가장 가까운 것이 가장 옳은 것은 아니며 자료마다 달라집니다.
메우는 방식이 자기상관을 바꿉니다. 무엇을 했는지 반드시 적어야 합니다.
이 문제에서 배우는 것. 시계열의 전처리는 분석의 일부이지 준비가 아닙니다. 결측을 메우고 주기를 모으는 것이 회귀에서는 대체로 무해한 작업인데, 여기서는 재려는 값 자체를 바꿉니다. 위 표에서 결측 처리 방식만으로 자기상관이 에서 까지 움직였고, 그 차이가 모형 선택과 예측 구간에 그대로 전달됩니다. 그래서 시계열 보고서에는 원자료의 주기, 결측 비율, 메운 방식이 반드시 들어갑니다.
바로 확인 5.
확인 5-1. 자료를 받으면 볼 다섯 가지를 쓰세요.
답. 시간 그림, 자기상관 그림, 구간별 평균과 분산, 빠진 시점, 단위와 집계 주기입니다.
확인 5-2. 검산에서 개씩 모았을 때의 한 칸 상관과 이론값을 쓰세요.
답. 와 입니다.
확인 5-3. 검산에서 세 결손 처리의 한 칸 상관을 쓰세요.
답. , , 입니다.
| 자기상관 모양 | 무슨 구조 |
|---|---|
| 모두 | 백색잡음 |
| 지수적으로 줄어듦 | 되먹임 |
| 뒤로 끊김 | 차 이동평균 |
| 아주 천천히 줄어듦 | 차분이 필요 |
| 주기마다 큼 | 계절 |
| 정상성 조건 | 깨지면 |
|---|---|
| 평균이 일정 | 추세를 빼거나 차분 |
| 분산이 일정 | 로그나 제곱근 변환 |
| 시차별 상관이 일정 | 구간을 나눠 분석 |
| 무엇이 표준오차를 바꾸나 | 얼마나 |
|---|---|
| 이웃 상관 | 배 |
| 이웃 상관 | 배 |
| 이웃 상관 | 배 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 을 그대로 씁니다 | 유효 표본으로 고칩니다 |
| 정상성 확인 없이 회귀합니다 | 가짜 회귀가 됩니다 |
| 자료가 많으니 믿습니다 | 가짜 회귀는 더 심해집니다 |
| 결측을 조용히 메웁니다 | 자기상관이 바뀝니다 |
| 분해 결과로 검정합니다 | 분해는 눈으로 볼 도구입니다 |
| 창을 크게 잡습니다 | 굽이가 지워지고 양끝을 잃습니다 |
문제 6. 유효 표본 식을 쓰세요.
답. 입니다.
문제 7. 검산에서 이웃 상관 일 때 표준오차가 몇 배 틀리는지 쓰세요.
답. 배입니다.
문제 8. 검산에서 네 상관값의 포함률을 쓰세요.
답. , , , 입니다.
문제 9. 검산에서 이웃 상관 일 때의 유효 표본을 쓰세요.
답. 개가 개 값밖에 못 합니다.
문제 10. 검산에서 되먹임 자료의 시차 과 를 이론값과 견주세요.
답. 대 이고 대 입니다.
문제 11. 검산에서 누적합의 시차 자기상관을 쓰세요.
답. 입니다.
문제 12. 검산에서 백색잡음이 경계를 몇 번 넘었는지 쓰고 왜인지 쓰세요.
답. 개 중 번이며 시차마다 퍼센트씩이라 그렇습니다.
문제 13. 약정상성의 세 조건을 쓰세요.
답. 평균과 분산과 시차별 상관이 시간에 안 변해야 합니다.
문제 14. 검산에서 네 자료의 유의 비율을 쓰세요.
답. , , , 입니다.
문제 15. 검산에서 차분한 뒤와 시간을 넣은 뒤의 유의 비율을 쓰세요.
답. 과 입니다.
문제 16. 검산에서 세 조각의 분산 비율을 쓰세요.
답. , , 입니다.
문제 17. 검산에서 굽은 추세일 때 창 와 의 오차를 쓰세요.
답. 과 입니다.
문제 18. 검산에서 세 결손 처리의 한 칸 상관을 쓰세요.
답. , , 입니다.
심화 1. 부분자기상관을 정리하세요.
시차 의 자기상관에는 중간 시점을 거쳐 온 몫이 섞여 있습니다.
되먹임 자료에서 와 가 닮은 것은 둘 다 과 닮았기 때문이고, 직접 이어져 있지는 않습니다.
| 무엇 | 되먹임 차 | 이동평균 차 |
|---|---|---|
| 자기상관 | 지수적으로 줄어듦 | 뒤로 끊김 |
| 부분자기상관 | 뒤로 끊김 | 지수적으로 줄어듦 |
둘이 정확히 뒤집힌 관계입니다. 그래서 두 그림을 함께 보면 차수를 고를 수 있으며, 197강의 주된 도구입니다.
계산은 185강의 다중회귀와 같습니다. 를 부터 까지에 회귀했을 때의 마지막 계수입니다.
심화 2. 곱셈 분해를 정리하세요.
| 언제 쓰는가 | 왜 |
|---|---|
| 계절 폭이 수준에 비례 | 매출이 커지면 계절 진폭도 커짐 |
| 값이 항상 양수 | 로그를 취할 수 있음 |
| 성장률이 관심 | 로그 차분이 성장률 |
로그를 취하면 덧셈 분해가 됩니다. 이므로 같은 방법을 그대로 씁니다.
132강의 젠센 부등식이 여기서 걸립니다. 로그 공간에서 예측한 뒤 지수를 취하면 평균이 아니라 중앙값이 나오므로, 되돌릴 때 보정이 필요합니다.
심화 3. 이상점을 정리하세요.
| 종류 | 무엇이 일어났나 | 어떻게 다루나 |
|---|---|---|
| 한 점만 튐 | 측정 오류나 일회성 사건 | 더미 변수 |
| 수준이 바뀜 | 제도 변경 | 계단 더미 |
| 기울기가 바뀜 | 구조 변화 | 시간 곱하기 더미 |
| 계절이 바뀜 | 소비 행태 변화 | 구간을 나눔 |
둘째 줄과 셋째 줄이 194강의 이중차분과 이어집니다. 시점이 알려져 있으면 그 자리에서 효과를 잴 수 있습니다.
시점을 모르면 찾아야 하는데 그때 189강 문제 3의 선택 문제가 생깁니다. 가장 튀는 자리를 골라 검정하면 유의하게 나오기 마련입니다.
심화 4. 여러 시계열을 함께 다루는 법을 정리하세요.
| 무엇을 하는가 | 언제 |
|---|---|
| 각각 따로 모형 | 서로 무관할 때 |
| 벡터 자기회귀 | 서로 영향을 줄 때 |
| 공적분 | 둘 다 누적인데 함께 움직일 때 |
| 계층 예측 | 지점의 합이 전체일 때 |
셋째 줄이 가짜 회귀의 예외입니다. 두 누적합의 차이가 정상이면 그 관계는 진짜이며, 차분하면 오히려 그 정보를 잃습니다.
넷째 줄이 실무에서 자주 나옵니다. 지점별 예측의 합이 전체 예측과 안 맞는 문제이며, 맞추는 방법이 따로 있습니다.
심화 5. 시계열 교차검증을 정리하세요.
189강 문제 4의 겹 나누기를 그대로 쓰면 안 됩니다.
| 무엇이 문제 | 왜 |
|---|---|
| 무작위 겹 | 미래로 과거를 맞히게 됨 |
| 겹 안에서 표준화 | 미래 정보가 새어 들어감 |
| 이상점 제거 | 전체를 보고 정하면 누출 |
| 방식 | 어떻게 |
|---|---|
| 늘려 가며 | 처음부터 까지로 학습, 예측 |
| 굴려 가며 | 최근 개로 학습, 다음을 예측 |
둘째 줄이 구조가 변하는 자료에 낫습니다. 오래된 자료를 버리는 것이 이득일 때가 있습니다.
162강의 누출이 시계열에서 가장 흔합니다. 시점을 안 지키면 성능이 놀랍도록 좋아지는데, 그것이 신호입니다.
심화 6. 04단원의 흐름을 정리하세요.
| 강의 | 무엇을 하는가 |
|---|---|
| 구조를 봅니다 | |
| 구조에 이름을 붙입니다 | |
| 정상이 아닌 것을 다룹니다 | |
| 예측하고 구간을 답니다 | |
| 계절과 실무를 다룹니다 |
이 강의가 본 것에 197강이 모형을 붙입니다. 자기상관이 지수적으로 줄면 되먹임이고, 뒤로 끊기면 이동평균입니다.
문제 3에서 차분이 필요하다고만 했습니다. 몇 번 차분할지, 어떻게 판별할지가 198강입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| x_ | 시점 의 값 | 순서가 있는 관측입니다 |
| \rho_ | 시차 자기상관 | 만큼 떨어진 값과의 상관입니다 |
| ACF | 자기상관 함수 | 시차별 상관을 늘어놓은 것입니다 |
| PACF | 부분자기상관 함수 | 중간을 통제하고 남은 상관입니다 |
| 정상성 | stationarity | 평균과 분산과 상관이 안 변합니다 |
| 백색잡음 | white noise | 모든 시차의 상관이 입니다 |
| 누적합 | random walk | 차분하면 백색잡음입니다 |
| 가짜 회귀 | spurious regression | 관계가 없는데 유의하게 나옵니다 |
| 차분 | differencing | 이웃한 값의 차이입니다 |
| 이동평균 창 | moving average window | 몇 개를 평균 내는지입니다 |
| 유효 표본 | effective sample size | 독립 관측 몇 개에 해당하는지입니다 |
다음은 197강 자기회귀와 이동평균입니다. 이 강의가 구조를 봤습니다.
문제 2에서 자기상관 모양으로 구조를 읽었는데, 읽는 것과 적는 것은 다릅니다. 197강은 되먹임과 이동평균이라는 두 가지 부품으로 그 구조를 적고, 자기상관과 부분자기상관을 함께 보고 차수를 고르는 법을 세웁니다.
import numpy as np
rng = np.random.default_rng(20261003)
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()
n = len(x)
d = float(x @ x)
return float(x[k:] @ x[:n - 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 ar1(n, phi, sd=1.0):
e = rng.normal(0, sd, n)
x = np.empty(n)
x[0] = e[0] / np.sqrt(max(1 - phi * phi, 1e-9))
for t in range(1, n):
x[t] = phi * x[t - 1] + e[t]
return x
# --- 문제 1: 순서가 있으면 독립이 깨집니다 -----------------------------
print(" 03 단원의 모든 계산이 관측이 서로 독립이라고 두었습니다")
print(" 순서가 있는 자료에서는 그 가정이 깨집니다")
N1 = 400
ind = rng.normal(0, 1, N1)
dep = ar1(N1, 0.8)
print(" 독립인 자료와 이웃이 닮은 자료를 나란히 봅니다")
print(" %s %s %s %s %s"
% (pw("자료", 16), rw("평균", 12), rw("표준편차", 12),
rw("한 칸 상관", 14), rw("두 칸 상관", 14)))
for nm, v in [("독립", ind), ("이웃이 닮음", dep)]:
print(" %s %12.6f %12.6f %14.6f %14.6f"
% (pw(nm, 16), float(v.mean()), float(v.std(ddof=1)),
acf(v, 1), acf(v, 2)))
print(" 평균과 표준편차만 보면 두 자료가 비슷해 보입니다")
print(" 한 칸 상관을 보면 완전히 다릅니다. 0.0 과 0.8 근처입니다")
print(" 독립을 가정한 표준오차가 얼마나 틀리는지 봅니다")
S = 3000
print(" %s %s %s %s %s"
% (pw("이웃 상관", 12), rw("평균의 실제 sd", 18), rw("독립 가정 sd", 16),
rw("몇 배 틀리나", 16), rw("95 구간 포함률", 18)))
for phi in [0.0, 0.3, 0.6, 0.9]:
ms, ses = [], []
cov = 0
for _ in range(S):
x = ar1(200, phi)
m = float(x.mean())
se = float(x.std(ddof=1) / np.sqrt(200))
ms.append(m)
ses.append(se)
if abs(m) < 1.96 * se:
cov += 1
print(" %s %18.6f %16.6f %16.4f %18.4f"
% (pw("%.1f" % phi, 12), float(np.std(ms, ddof=1)),
float(np.mean(ses)),
float(np.std(ms, ddof=1)) / float(np.mean(ses)), cov / S))
print(" 이웃 상관 0.9 면 실제 흔들림이 독립 가정의 4 배가 넘습니다")
print(" 포함률이 0.95 에서 크게 내려갑니다. 구간이 너무 좁기 때문입니다")
print(" 173강 이후의 표준오차가 여기서 전부 다시 계산돼야 합니다")
print(" 유효 표본으로 바꿔 보면 크기를 알 수 있습니다")
print(" %s %s %s %s"
% (pw("이웃 상관", 12), rw("실제 표본", 12), rw("유효 표본", 14),
rw("몇 퍼센트 남나", 18)))
for phi in [0.0, 0.3, 0.6, 0.9]:
ess = 200 * (1 - phi) / (1 + phi)
print(" %s %12d %14.2f %18.4f"
% (pw("%.1f" % phi, 12), 200, ess, ess / 200))
print(" 175강 문제 3 의 유효 표본이 시간축에서 다시 나옵니다")
print(" 이웃 상관 0.9 면 200 개가 10.53 개 값밖에 못 합니다")
# --- 문제 2: 자기상관 함수 ---------------------------------------------
print(" 이웃이 얼마나 닮았는지를 시차별로 재는 것이 자기상관입니다")
N2 = 2000
print(" 네 가지 자료를 만들어 시차별 상관을 봅니다")
x_wn = rng.normal(0, 1, N2)
x_ar = ar1(N2, 0.7)
e_ma = rng.normal(0, 1, N2 + 1)
x_ma = e_ma[1:] + 0.8 * e_ma[:-1]
x_rw = np.cumsum(rng.normal(0, 1, N2))
print(" %s %s %s %s %s %s"
% (pw("시차", 8), rw("백색잡음", 14), rw("한 칸 되먹임", 16),
rw("한 칸 이동평균", 18), rw("누적합", 14), rw("이론 되먹임", 16)))
for k in [1, 2, 3, 5, 10]:
print(" %s %14.6f %16.6f %18.6f %14.6f %16.6f"
% (pw("%d" % k, 8), acf(x_wn, k), acf(x_ar, k), acf(x_ma, k),
acf(x_rw, k), 0.7 ** k))
print(" 백색잡음은 모든 시차에서 0 근처입니다")
print(" 되먹임 자료는 0.7 의 거듭제곱으로 줄어듭니다")
print(" 다만 시차 1 은 0.6893 대 0.7000 이고 시차 5 는 0.1124 대 0.1681 입니다")
print(" 표본 자기상관은 체계적으로 작게 나옵니다. 평균을 빼고 계산하기 때문입니다")
print(" 시차가 길수록 더해지는 항이 줄어 그 눌림이 커집니다")
print(" 이동평균 자료는 시차 1 에서만 값이 있고 그 뒤로 0 입니다")
print(" 누적합은 아주 천천히 줄어듭니다. 시차 10 에서도 0.9 를 넘습니다")
print(" 자기상관 그림으로 모형을 고를 수 있습니다")
print(" %s %s %s"
% (pw("무엇이 보이는가", 26), rw("어떤 구조인가", 22), rw("몇 차인가", 16)))
for a, b, c in [("시차 q 뒤로 뚝 끊김", "이동평균", "q 차"),
("지수적으로 줄어듦", "되먹임", "부분자기상관으로"),
("아주 천천히 줄어듦", "누적된 것", "차분이 필요"),
("주기적으로 큼", "계절", "주기가 그 시차")]:
print(" %s %s %s" % (pw(a, 26), rw(b, 22), rw(c, 16)))
print(" 셋째 줄이 가장 중요합니다. 197강에서 다룹니다")
print(" 자기상관이 0 인지 검정합니다")
print(" 백색잡음이면 각 시차의 상관이 대략 1 나누기 루트 n 만큼 흔들립니다")
band = 1.96 / np.sqrt(N2)
print(" n 이 %d 이므로 경계는 %.6f 입니다" % (N2, band))
print(" %s %s %s %s"
% (pw("자료", 20), rw("경계 넘는 시차 수", 20), rw("검사한 시차", 14),
rw("판정", 14)))
for nm, v in [("백색잡음", x_wn), ("한 칸 되먹임", x_ar),
("한 칸 이동평균", x_ma), ("누적합", x_rw)]:
cnt = sum(1 for k in range(1, 21) if abs(acf(v, k)) > band)
print(" %s %20d %14d %s"
% (pw(nm, 20), cnt, 20,
rw("백색잡음" if cnt <= 2 else "구조 있음", 14)))
print(" 백색잡음도 20 개 중 한둘은 우연히 넘습니다. 182강의 다중비교입니다")
print(" 그래서 시차 하나씩이 아니라 여러 시차를 묶어 검정합니다")
# --- 문제 3: 정상성 --------------------------------------------------
print(" 시계열 분석이 기대는 것은 정상성입니다")
print(" %s %s"
% (pw("무엇이 변하지 않아야 하나", 30), rw("깨지면 무엇이 문제인가", 30)))
for a, b in [("평균", "추세가 있으면 예측이 어긋남"),
("분산", "구간마다 오차 크기가 다름"),
("시차별 상관", "과거로 미래를 못 말함")]:
print(" %s %s" % (pw(a, 30), rw(b, 30)))
print(" 셋만 지키면 됩니다. 분포 전체가 같을 필요는 없습니다")
print(" 정상이 아닌 자료를 회귀하면 무슨 일이 생기는지 봅니다")
S3 = 2000
print(" 서로 아무 관계 없는 두 자료를 회귀합니다. 참 기울기는 0 입니다")
print(" %s %s %s %s"
% (pw("두 자료의 종류", 24), rw("유의하다는 비율", 18),
rw("목표", 10), rw("판정", 14)))
for nm, kind in [("둘 다 백색잡음", 0), ("둘 다 되먹임 0.9", 1),
("둘 다 누적합", 2), ("둘 다 추세 있음", 3)]:
rej = 0
for _ in range(S3):
n = 200
if kind == 0:
a1, a2 = rng.normal(0, 1, n), rng.normal(0, 1, n)
elif kind == 1:
a1, a2 = ar1(n, 0.9), ar1(n, 0.9)
elif kind == 2:
a1 = np.cumsum(rng.normal(0, 1, n))
a2 = np.cumsum(rng.normal(0, 1, n))
else:
tt = np.arange(n) / n
a1 = 3.0 * tt + rng.normal(0, 1, n)
a2 = 3.0 * tt + rng.normal(0, 1, n)
b, s = ols(a2, a1[:, None])
if abs(b[1] / s[1]) > 1.96:
rej += 1
print(" %s %18.4f %10.2f %s"
% (pw(nm, 24), rej / S3, 0.05,
rw("괜찮음" if rej / S3 < 0.1 else "가짜 회귀", 14)))
print(" 누적합 둘을 회귀하면 열 번 중 여덟 번 유의하게 나옵니다")
print(" 아무 관계 없는 자료인데 그렇습니다. 이것을 가짜 회귀라 합니다")
print(" 되먹임 0.9 도 0.5345 로 목표의 열 배가 넘습니다. 누적이 아니어도 그렇습니다")
print(" 마지막 줄은 공통 추세 때문입니다. 시간을 넣으면 사라집니다")
print(" 같은 자료를 차분해서 다시 해 봅니다")
print(" %s %s %s %s"
% (pw("무엇을 회귀하는가", 24), rw("유의하다는 비율", 18), rw("목표", 10),
rw("판정", 14)))
for nm, kind in [("누적합 그대로", 0), ("차분한 뒤", 1),
("추세 자료 그대로", 2), ("시간을 함께 넣고", 3)]:
rej = 0
for _ in range(S3):
n = 200
if kind in (0, 1):
a1 = np.cumsum(rng.normal(0, 1, n))
a2 = np.cumsum(rng.normal(0, 1, n))
if kind == 1:
a1, a2 = np.diff(a1), np.diff(a2)
b, s = ols(a2, a1[:, None])
else:
tt = np.arange(n) / n
a1 = 3.0 * tt + rng.normal(0, 1, n)
a2 = 3.0 * tt + rng.normal(0, 1, n)
if kind == 2:
b, s = ols(a2, a1[:, None])
else:
b, s = ols(a2, np.stack([a1, tt], axis=1))
if abs(b[1] / s[1]) > 1.96:
rej += 1
print(" %s %18.4f %10.2f %s"
% (pw(nm, 24), rej / S3, 0.05,
rw("괜찮음" if rej / S3 < 0.1 else "가짜 회귀", 14)))
print(" 차분하면 목표 근처로 돌아옵니다. 이것이 가장 흔한 대응입니다")
print(" 추세만 있는 자료는 시간을 함께 넣으면 됩니다")
print(" 두 경우가 다릅니다. 어느 쪽인지 판별하는 것이 198강입니다")
# --- 문제 4: 분해 ------------------------------------------------------
print(" 시계열을 세 조각으로 나눠 봅니다")
n4 = 240
t4 = np.arange(n4)
trend = 100.0 + 0.35 * t4
seas = 12.0 * np.sin(2 * np.pi * t4 / 12.0)
noise = ar1(n4, 0.5, 3.0)
y4 = trend + seas + noise
print(" 추세와 계절과 나머지를 더해 자료를 만듭니다")
print(" %s %s %s %s"
% (pw("조각", 16), rw("표준편차", 14), rw("전체 분산 중 비율", 22),
rw("무엇을 뜻하는가", 20)))
tot = float(np.var(y4))
for nm, v, w in [("추세", trend, "긴 흐름"), ("계절", seas, "되풀이"),
("나머지", noise, "그 밖의 것")]:
print(" %s %14.6f %22.6f %s"
% (pw(nm, 16), float(np.std(v)), float(np.var(v)) / tot, rw(w, 20)))
print(" 세 비율의 합이 %.6f 입니다. 1 근처면 조각들이 서로 겹치지 않습니다"
% ((np.var(trend) + np.var(seas) + np.var(noise)) / tot))
print(" 이동평균으로 추세를 뽑아냅니다")
def ma(x, w):
n = len(x)
out = np.full(n, np.nan)
h = w // 2
for i in range(h, n - h):
out[i] = x[i - h:i + h + 1].mean()
return out
tr_hat = ma(y4, 13)
ok = ~np.isnan(tr_hat)
print(" 창 13 으로 옮겨 가며 평균을 냅니다. 주기 12 를 덮는 크기입니다")
print(" %s %s %s"
% (pw("무엇", 24), rw("참값과의 상관", 18), rw("평균 절대 오차", 18)))
print(" %s %18.6f %18.6f"
% (pw("뽑아낸 추세", 24),
float(np.corrcoef(tr_hat[ok], trend[ok])[0, 1]),
float(np.abs(tr_hat[ok] - trend[ok]).mean())))
detr = y4 - tr_hat
seas_hat = np.zeros(12)
for m in range(12):
idx = [i for i in range(n4) if i % 12 == m and ok[i]]
seas_hat[m] = float(np.mean([detr[i] for i in idx]))
seas_hat = seas_hat - seas_hat.mean()
sh_full = np.array([seas_hat[i % 12] for i in range(n4)])
print(" 추세를 뺀 나머지를 달마다 모아 평균을 냅니다")
print(" %s %18.6f %18.6f"
% (pw("뽑아낸 계절", 24),
float(np.corrcoef(sh_full, seas)[0, 1]),
float(np.abs(sh_full - seas).mean())))
resid = y4 - tr_hat - sh_full
print(" %s %18.6f %18.6f"
% (pw("남은 나머지", 24),
float(np.corrcoef(resid[ok], noise[ok])[0, 1]),
float(np.abs(resid[ok] - noise[ok]).mean())))
print(" 셋 다 참값과 잘 맞습니다. 창 크기가 주기를 덮었기 때문입니다")
print(" 창 크기를 잘못 잡으면 어떻게 되는지 봅니다")
print(" %s %s %s %s %s"
% (pw("창 크기", 12), rw("직선 추세 오차", 18), rw("계절이 남았나", 18),
rw("굽은 추세 오차", 18), rw("양끝에서 잃는 수", 18)))
curve = 100.0 + 60.0 * np.sin(2 * np.pi * t4 / 240.0)
y4c = curve + seas + noise
for w in [3, 7, 13, 25, 49]:
th = ma(y4, w)
o = ~np.isnan(th)
r = th[o] - trend[o]
left = float(np.abs(np.corrcoef(r, seas[o])[0, 1]))
thc = ma(y4c, w)
oc = ~np.isnan(thc)
print(" %s %18.6f %18.4f %18.6f %18d"
% (pw("%d" % w, 12), float(np.abs(r).mean()), left,
float(np.abs(thc[oc] - curve[oc]).mean()), w - 1))
print(" 창이 주기보다 작으면 계절이 추세에 섞여 들어옵니다")
print(" 둘째 열이 그 크기입니다. 창 13 부터 0.93 에서 0.45 로 내려갑니다")
print(" 첫째 열은 창이 클수록 계속 좋아집니다. 참 추세가 직선이기 때문입니다")
print(" 셋째 열은 굽은 추세이고 창 25 에서 가장 좋다가 49 에서 나빠집니다")
print(" 창을 키우면 계절은 지워지는데 추세의 굽이도 함께 지워집니다")
print(" 넷째 열만큼 양끝을 잃습니다. 창 49 면 앞뒤로 24 개씩 없습니다")
# --- 문제 5: 실무의 첫걸음 ---------------------------------------------
print(" 자료를 받으면 무엇부터 보는지 정리합니다")
print(" %s %s" % (pw("무엇을 보는가", 24), rw("무엇을 알 수 있는가", 30)))
for a, b in [("시간 그림", "추세와 계절과 이상점"),
("자기상관 그림", "이웃이 얼마나 닮았는지"),
("구간별 평균과 분산", "정상성이 성립하는지"),
("빠진 시점", "간격이 일정한지"),
("단위와 집계 주기", "무엇을 예측할 것인지")]:
print(" %s %s" % (pw(a, 24), rw(b, 30)))
print(" 마지막 줄이 자주 빠집니다. 일별을 주별로 모으면 문제가 달라집니다")
print(" 집계 주기를 바꾸면 자기상관이 어떻게 변하는지 봅니다")
N5 = 2400
x5 = ar1(N5, 0.9)
print(" 한 칸 상관 0.9 인 자료를 여러 주기로 모아 봅니다")
print(" %s %s %s %s"
% (pw("몇 개씩 모으나", 16), rw("남는 길이", 12), rw("한 칸 상관", 14),
rw("이론값", 14)))
for g in [1, 2, 4, 12]:
m = N5 // g
agg = x5[:m * g].reshape(m, g).mean(axis=1)
print(" %s %12d %14.6f %14.6f"
% (pw("%d" % g, 16), m, acf(agg, 1), 0.9 ** g))
print(" 모을수록 한 칸 상관이 줄지만 이론값보다는 큽니다")
print(" 한 칸이 더 긴 시간을 뜻하게 됐기 때문입니다")
print(" 집계 주기를 안 밝히면 자기상관 값이 뜻을 잃습니다")
print(" 빠진 시점을 어떻게 다루는지 봅니다")
N6 = 20000
x6 = ar1(N6, 0.8)
miss = rng.random(N6) < 0.15
print(" 15 퍼센트가 빠진 자료에서 한 칸 상관을 재 봅니다")
print(" %s %s %s"
% (pw("어떻게 다루나", 26), rw("한 칸 상관", 14), rw("참값 0.8 과의 차", 20)))
xc = x6[~miss]
lin = x6.copy()
idx = np.flatnonzero(~miss)
lin = np.interp(np.arange(N6), idx, x6[idx])
fill = x6.copy()
last = x6[idx[0]]
for i in range(N6):
if miss[i]:
fill[i] = last
else:
last = x6[i]
for nm, v in [("빠진 것을 빼고 이어 붙임", xc), ("직선으로 메움", lin),
("직전 값으로 메움", fill)]:
print(" %s %14.6f %20.6f"
% (pw(nm, 26), acf(v, 1), acf(v, 1) - 0.8))
print(" 이어 붙이면 0.7796 으로 아래로 갑니다. 건너뛴 자리가 두 칸 떨어져 있어서입니다")
print(" 메우면 0.8330 과 0.8125 로 위로 갑니다. 없는 매끄러움을 넣었기 때문입니다")
print(" 세 방식이 서로 다른 방향으로 틀립니다. 직전 값 채우기가 가장 가깝습니다")
print(" 그런데 가장 가까운 것이 가장 옳은 것은 아닙니다. 자료마다 달라집니다")
print(" 메우는 방식이 자기상관을 바꿉니다. 무엇을 했는지 적어야 합니다")
print(" 196강은 구조를 봤습니다. 197강부터 그 구조에 이름을 붙입니다")
# 03 단원의 모든 계산이 관측이 서로 독립이라고 두었습니다
# 순서가 있는 자료에서는 그 가정이 깨집니다
# 독립인 자료와 이웃이 닮은 자료를 나란히 봅니다
# 자료 평균 표준편차 한 칸 상관 두 칸 상관
# 독립 -0.039471 0.981442 0.042591 0.004807
# 이웃이 닮음 -0.198802 1.749568 0.838788 0.719003
# 평균과 표준편차만 보면 두 자료가 비슷해 보입니다
# 한 칸 상관을 보면 완전히 다릅니다. 0.0 과 0.8 근처입니다
# 독립을 가정한 표준오차가 얼마나 틀리는지 봅니다
# 이웃 상관 평균의 실제 sd 독립 가정 sd 몇 배 틀리나 95 구간 포함률
# 0.0 0.070348 0.070569 0.9969 0.9453
# 0.3 0.098189 0.073752 1.3313 0.8547
# 0.6 0.173049 0.087386 1.9803 0.6707
# 0.9 0.680727 0.153108 4.4461 0.3297
# 이웃 상관 0.9 면 실제 흔들림이 독립 가정의 4 배가 넘습니다
# 포함률이 0.95 에서 크게 내려갑니다. 구간이 너무 좁기 때문입니다
# 173강 이후의 표준오차가 여기서 전부 다시 계산돼야 합니다
# 유효 표본으로 바꿔 보면 크기를 알 수 있습니다
# 이웃 상관 실제 표본 유효 표본 몇 퍼센트 남나
# 0.0 200 200.00 1.0000
# 0.3 200 107.69 0.5385
# 0.6 200 50.00 0.2500
# 0.9 200 10.53 0.0526
# 175강 문제 3 의 유효 표본이 시간축에서 다시 나옵니다
# 이웃 상관 0.9 면 200 개가 10.53 개 값밖에 못 합니다
# 이웃이 얼마나 닮았는지를 시차별로 재는 것이 자기상관입니다
# 네 가지 자료를 만들어 시차별 상관을 봅니다
# 시차 백색잡음 한 칸 되먹임 한 칸 이동평균 누적합 이론 되먹임
# 1 -0.011015 0.689306 0.471968 0.990850 0.700000
# 2 0.000974 0.449841 -0.010526 0.981973 0.490000
# 3 0.027069 0.287923 0.013234 0.973011 0.343000
# 5 0.009141 0.112384 0.022619 0.953761 0.168070
# 10 -0.032776 -0.009976 -0.021726 0.910167 0.028248
# 백색잡음은 모든 시차에서 0 근처입니다
# 되먹임 자료는 0.7 의 거듭제곱으로 줄어듭니다
# 다만 시차 1 은 0.6893 대 0.7000 이고 시차 5 는 0.1124 대 0.1681 입니다
# 표본 자기상관은 체계적으로 작게 나옵니다. 평균을 빼고 계산하기 때문입니다
# 시차가 길수록 더해지는 항이 줄어 그 눌림이 커집니다
# 이동평균 자료는 시차 1 에서만 값이 있고 그 뒤로 0 입니다
# 누적합은 아주 천천히 줄어듭니다. 시차 10 에서도 0.9 를 넘습니다
# 자기상관 그림으로 모형을 고를 수 있습니다
# 무엇이 보이는가 어떤 구조인가 몇 차인가
# 시차 q 뒤로 뚝 끊김 이동평균 q 차
# 지수적으로 줄어듦 되먹임 부분자기상관으로
# 아주 천천히 줄어듦 누적된 것 차분이 필요
# 주기적으로 큼 계절 주기가 그 시차
# 셋째 줄이 가장 중요합니다. 197강에서 다룹니다
# 자기상관이 0 인지 검정합니다
# 백색잡음이면 각 시차의 상관이 대략 1 나누기 루트 n 만큼 흔들립니다
# n 이 2000 이므로 경계는 0.043827 입니다
# 자료 경계 넘는 시차 수 검사한 시차 판정
# 백색잡음 1 20 백색잡음
# 한 칸 되먹임 6 20 구조 있음
# 한 칸 이동평균 4 20 구조 있음
# 누적합 20 20 구조 있음
# 백색잡음도 20 개 중 한둘은 우연히 넘습니다. 182강의 다중비교입니다
# 그래서 시차 하나씩이 아니라 여러 시차를 묶어 검정합니다
# 시계열 분석이 기대는 것은 정상성입니다
# 무엇이 변하지 않아야 하나 깨지면 무엇이 문제인가
# 평균 추세가 있으면 예측이 어긋남
# 분산 구간마다 오차 크기가 다름
# 시차별 상관 과거로 미래를 못 말함
# 셋만 지키면 됩니다. 분포 전체가 같을 필요는 없습니다
# 정상이 아닌 자료를 회귀하면 무슨 일이 생기는지 봅니다
# 서로 아무 관계 없는 두 자료를 회귀합니다. 참 기울기는 0 입니다
# 두 자료의 종류 유의하다는 비율 목표 판정
# 둘 다 백색잡음 0.0600 0.05 괜찮음
# 둘 다 되먹임 0.9 0.5345 0.05 가짜 회귀
# 둘 다 누적합 0.8440 0.05 가짜 회귀
# 둘 다 추세 있음 1.0000 0.05 가짜 회귀
# 누적합 둘을 회귀하면 열 번 중 여덟 번 유의하게 나옵니다
# 아무 관계 없는 자료인데 그렇습니다. 이것을 가짜 회귀라 합니다
# 되먹임 0.9 도 0.5345 로 목표의 열 배가 넘습니다. 누적이 아니어도 그렇습니다
# 마지막 줄은 공통 추세 때문입니다. 시간을 넣으면 사라집니다
# 같은 자료를 차분해서 다시 해 봅니다
# 무엇을 회귀하는가 유의하다는 비율 목표 판정
# 누적합 그대로 0.8430 0.05 가짜 회귀
# 차분한 뒤 0.0550 0.05 괜찮음
# 추세 자료 그대로 1.0000 0.05 가짜 회귀
# 시간을 함께 넣고 0.0575 0.05 괜찮음
# 차분하면 목표 근처로 돌아옵니다. 이것이 가장 흔한 대응입니다
# 추세만 있는 자료는 시간을 함께 넣으면 됩니다
# 두 경우가 다릅니다. 어느 쪽인지 판별하는 것이 198강입니다
# 시계열을 세 조각으로 나눠 봅니다
# 추세와 계절과 나머지를 더해 자료를 만듭니다
# 조각 표준편차 전체 분산 중 비율 무엇을 뜻하는가
# 추세 24.248501 0.878210 긴 흐름
# 계절 8.485281 0.107538 되풀이
# 나머지 3.398626 0.017252 그 밖의 것
# 세 비율의 합이 1.002999 입니다. 1 근처면 조각들이 서로 겹치지 않습니다
# 이동평균으로 추세를 뽑아냅니다
# 창 13 으로 옮겨 가며 평균을 냅니다. 주기 12 를 덮는 크기입니다
# 무엇 참값과의 상관 평균 절대 오차
# 뽑아낸 추세 0.998044 1.142976
# 추세를 뺀 나머지를 달마다 모아 평균을 냅니다
# 뽑아낸 계절 0.998188 1.040653
# 남은 나머지 0.907029 1.147825
# 셋 다 참값과 잘 맞습니다. 창 크기가 주기를 덮었기 때문입니다
# 창 크기를 잘못 잡으면 어떻게 되는지 봅니다
# 창 크기 직선 추세 오차 계절이 남았나 굽은 추세 오차 양끝에서 잃는 수
# 3 7.489561 0.9551 7.489926 2
# 7 4.370108 0.9348 4.370551 6
# 13 1.142976 0.4474 1.178497 12
# 25 0.822626 0.3281 1.068657 24
# 49 0.591975 0.2579 2.834430 48
# 창이 주기보다 작으면 계절이 추세에 섞여 들어옵니다
# 둘째 열이 그 크기입니다. 창 13 부터 0.93 에서 0.45 로 내려갑니다
# 첫째 열은 창이 클수록 계속 좋아집니다. 참 추세가 직선이기 때문입니다
# 셋째 열은 굽은 추세이고 창 25 에서 가장 좋다가 49 에서 나빠집니다
# 창을 키우면 계절은 지워지는데 추세의 굽이도 함께 지워집니다
# 넷째 열만큼 양끝을 잃습니다. 창 49 면 앞뒤로 24 개씩 없습니다
# 자료를 받으면 무엇부터 보는지 정리합니다
# 무엇을 보는가 무엇을 알 수 있는가
# 시간 그림 추세와 계절과 이상점
# 자기상관 그림 이웃이 얼마나 닮았는지
# 구간별 평균과 분산 정상성이 성립하는지
# 빠진 시점 간격이 일정한지
# 단위와 집계 주기 무엇을 예측할 것인지
# 마지막 줄이 자주 빠집니다. 일별을 주별로 모으면 문제가 달라집니다
# 집계 주기를 바꾸면 자기상관이 어떻게 변하는지 봅니다
# 한 칸 상관 0.9 인 자료를 여러 주기로 모아 봅니다
# 몇 개씩 모으나 남는 길이 한 칸 상관 이론값
# 1 2400 0.907842 0.900000
# 2 1200 0.864914 0.810000
# 4 600 0.771559 0.656100
# 12 200 0.498634 0.282430
# 모을수록 한 칸 상관이 줄지만 이론값보다는 큽니다
# 한 칸이 더 긴 시간을 뜻하게 됐기 때문입니다
# 집계 주기를 안 밝히면 자기상관 값이 뜻을 잃습니다
# 빠진 시점을 어떻게 다루는지 봅니다
# 15 퍼센트가 빠진 자료에서 한 칸 상관을 재 봅니다
# 어떻게 다루나 한 칸 상관 참값 0.8 과의 차
# 빠진 것을 빼고 이어 붙임 0.779630 -0.020370
# 직선으로 메움 0.833043 0.033043
# 직전 값으로 메움 0.812459 0.012459
# 이어 붙이면 0.7796 으로 아래로 갑니다. 건너뛴 자리가 두 칸 떨어져 있어서입니다
# 메우면 0.8330 과 0.8125 로 위로 갑니다. 없는 매끄러움을 넣었기 때문입니다
# 세 방식이 서로 다른 방향으로 틀립니다. 직전 값 채우기가 가장 가깝습니다
# 그런데 가장 가까운 것이 가장 옳은 것은 아닙니다. 자료마다 달라집니다
# 메우는 방식이 자기상관을 바꿉니다. 무엇을 했는지 적어야 합니다
# 196강은 구조를 봤습니다. 197강부터 그 구조에 이름을 붙입니다