196강 문제 4에서 계절을 분해로 뽑아내기만 했습니다. 197강부터 199강까지는 계절을 계속 미뤄 왔습니다.
담는 방법이 셋이고, 서로 다른 것을 가정합니다. 자료가 어느 쪽인지 보고 골라야 합니다.
그리고 계절은 자료가 만드는 것이 아니라 달력이 만드는 것일 때가 있습니다. 월 매출이 매년 떨어지는 것이 그런 예입니다.
이 강의는 계절을 다루는 세 방법, 달력 효과, 여러 주기, 그리고 04단원과 S8 과목 전체를 하나의 순서로 정리합니다.
문제. 세 방법을 견줍니다.
(1) 무엇을 가정하는지 정리하세요.
(2) 매끄러운 계절에 써 보세요.
(3) 뾰족한 계절에 써 보세요.
생각의 실마리. 계절을 담는다는 것은 "이 달이 몇 번째 달인지"를 모형에 알려 주는 것입니다. 알려 주는 방식이 여럿입니다.
풀이. (1) 세 방법입니다.
| 어떻게 담나 | 몇 개의 계수 | 무엇을 가정하나 |
|---|---|---|
| 계절 더미 | 주기 빼기 개 | 해마다 같은 값 |
| 삼각함수 쌍 | 몇 쌍이든 | 매끄럽게 되풀이 |
| 계절 차분 | 개 | 이웃한 해가 닮음 |
세 방법이 서로 다른 것을 가정합니다.
(2) 매끄러운 계절에 써 봅니다. 주기 이고 계절 폭이 인 자료이며 길이는 입니다.
| 무엇으로 | 계수 개수 | 학습 제곱오차 | 검증 제곱오차 |
|---|---|---|---|
| 추세만 | |||
| 추세와 더미 | |||
| 추세와 삼각함수 |
계절을 안 담으면 검증 제곱오차가 입니다. 담으면 이 됩니다.
더미 개와 삼각함수 개가 과 로 비슷한 값을 냅니다.
계절 모양이 매끄러우면 삼각함수가 적은 계수로 같은 일을 합니다.
(3) 뾰족한 계절에 써 봅니다. 한 달만 튀어 오르는 자료입니다.
| 무엇으로 | 계수 개수 | 검증 제곱오차 |
|---|---|---|
| 더미 | ||
| 삼각함수 쌍 | ||
| 삼각함수 쌍 |
뾰족한 계절은 삼각함수 몇 쌍으로 못 담습니다. 가 될 것이 입니다.
쌍을 늘리면 으로 나아지지만 계수가 개가 되어 더미의 값어치가 사라집니다.
계절 모양을 먼저 그려 보고 방법을 골라야 합니다.
이 문제에서 배우는 것. 주기가 길수록 더미의 값이 비싸집니다. 월별 자료는 더미가 개뿐이라 부담이 없는데, 주별 자료는 개이고 일별의 연간 계절은 개입니다. 그래서 긴 주기에는 삼각함수가 사실상 유일한 선택이며, 문제 4의 시간별 자료가 그 자리입니다. 반대로 짧은 주기에 뾰족한 모양이면 더미를 씁니다. 189강 문제 2의 계수 개수와 설명력의 맞바꿈이 여기서 주기의 길이로 나타납니다.
바로 확인 1.
확인 1-1. 계절을 담는 세 방법과 각각의 가정을 쓰세요.
답. 더미는 해마다 같은 값을, 삼각함수는 매끄러운 되풀이를, 계절 차분은 이웃한 해가 닮았음을 가정합니다.
확인 1-2. 검산에서 매끄러운 계절의 세 검증 제곱오차를 쓰세요.
답. , , 입니다.
확인 1-3. 검산에서 뾰족한 계절의 세 검증 제곱오차를 쓰세요.
답. , , 입니다.
문제. 계절을 차분으로 없앱니다.
(1) 여러 차분을 견주세요.
(2) 필요한지 판정하세요.
(3) 계절 폭이 자라면 어떻게 하는지 보세요.
생각의 실마리. 주기만큼 떨어진 값을 뺍니다. 개월 자료면 작년 같은 달을 뺍니다.
풀이. (1) 여러 차분을 견줍니다.
| 무엇 | 분산 | 시차 상관 | 시차 상관 |
|---|---|---|---|
| 원자료 | |||
| 한 칸 차분 | |||
| 계절 차분 | |||
| 둘 다 |
한 칸 차분만 하면 시차 상관이 으로 그대로 남습니다.
계절 차분을 하면 그 자리가 이 됩니다. 지나쳐 반대로 갔습니다.
둘 다 하면 시차 상관이 로 음수가 됩니다. 분산은 에서 로 조금 줄지만 없던 음의 상관이 생겼습니다.
198강 문제 2의 과잉 차분 신호가 여기서는 분산이 아니라 상관에서 나타납니다.
(2) 필요한지 판정합니다. 계절 세기를 재서 문턱과 견줍니다.
| 자료 | 계절 세기 | 계절 차분이 필요한가 |
|---|---|---|
| 계절 폭 | 예 | |
| 계절 폭 | 아니오 | |
| 계절 없음 | 아니오 | |
| 계절이 커져 감 | 예 |
추세를 먼저 뺀 뒤에 계산합니다. 안 그러면 추세가 세기를 눌러 버립니다.
셋째 줄이 입니다. 계절이 없으면 계절 차분을 하면 안 됩니다.
문턱 은 관례일 뿐입니다. 자료와 목적에 따라 달라집니다.
넷째 줄은 계절 폭이 자라는 자료인데 세기만으로는 그것이 안 보입니다.
(3) 계절 폭이 자라면 어떻게 하는지 봅니다. 수준이 커질수록 계절 폭도 커지는 자료입니다.
| 무엇 | 앞 년 계절 폭 | 뒤 년 계절 폭 | 몇 배 |
|---|---|---|---|
| 원자료 | |||
| 로그를 취한 뒤 |
원자료는 뒤쪽 계절 폭이 앞쪽의 배입니다.
로그를 취하면 로 두 구간의 폭이 거의 같아집니다.
198강 문제 5의 로그 변환이 계절에도 그대로 쓰입니다.
이 문제에서 배우는 것. 계절 세기 하나로 판정하면 놓치는 것이 있습니다. 위 표의 넷째 줄이 그 예인데, 세기가 로 첫째 줄과 비슷하지만 성질이 전혀 다릅니다. 하나는 해마다 같은 계절이고 다른 하나는 자라는 계절이며, 전자에는 더미가 맞고 후자에는 안 맞습니다. 그래서 지표 하나로 요약하기 전에 그림을 보는 것이 순서이고, 196강 문제 5의 첫 줄이 "시간 그림"이었던 이유입니다.
바로 확인 2.
확인 2-1. 계절 차분이 무엇인지 쓰세요.
답. 주기만큼 떨어진 값을 빼는 것입니다.
확인 2-2. 검산에서 네 자료의 시차 상관을 쓰세요.
답. , , , 입니다.
확인 2-3. 검산에서 로그를 취하기 전후의 계절 폭 비를 쓰세요.
답. 과 입니다.
문제. 견주고 보정합니다.
(1) 계절 자료의 기준선을 세우세요.
(2) 지평을 늘려 보세요.
(3) 달력 효과를 보정하세요.
생각의 실마리. 199강 문제 1에서 정상 자료는 평균을, 누적 자료는 바로 앞 값을 기준선으로 썼습니다. 계절 자료는 또 다릅니다.
풀이. (1) 기준선을 세웁니다.
| 무엇으로 예측 | 제곱오차 | 기준선 대비 |
|---|---|---|
| 평균만 말함 | ||
| 바로 앞 값 | ||
| 지난 주기 같은 자리 | ||
| 추세와 더미 |
바로 앞 값은 계절 자료에서 나쁩니다. 한 칸 사이에 계절이 움직이기 때문입니다.
지난 주기 같은 자리가 로 훨씬 낫습니다. 이것이 계절 기준선입니다.
모형은 그보다 나아야 값어치가 있습니다. 이므로 퍼센트 나은 셈입니다.
(2) 지평을 늘려 봅니다.
| 몇 칸 앞 | 추세와 더미 | 지난 주기 같은 자리 | 모형이 몇 배 나은가 |
|---|---|---|---|
계절 모형은 지평이 늘어도 성능이 거의 안 떨어집니다. 이 입니다.
계절과 추세가 시간의 함수라 를 넣기만 하면 되기 때문입니다.
199강 문제 4의 되먹임 모형과 다릅니다. 그쪽은 칸 앞에서 기억이 사라져 평균만 말하게 됐습니다.
모형이 몇 배 나은지는 에서 으로 줄어듭니다. 기준선도 지평이 길어질수록 상대적으로 나아지기 때문입니다.
(3) 달력 효과를 봅니다.
| 무엇 | 무엇을 담나 | 어디에 쓰나 |
|---|---|---|
| 요일 | 주 단위 되풀이 | 일별 자료 |
| 공휴일 | 그날과 앞뒤 | 소매와 물류 |
| 달의 길이 | 에서 일 | 월별 매출 |
| 영업일 수 | 주말과 휴일 제외 | 월별 생산 |
| 움직이는 명절 | 해마다 날짜가 다름 | 설과 추석 |
마지막 줄이 한국 자료에서 특히 중요합니다. 설과 추석이 해마다 다른 달에 걸리므로 달 더미로는 안 잡힙니다.
달의 길이만 보정해도 얼마나 달라지는지 봅니다. 하루 매출이 일정한데 월별 합계를 보는 자료입니다.
| 무엇을 보나 | 월 대 월 비 | 무엇을 뜻하나 |
|---|---|---|
| 월별 합계 | 퍼센트 감소 | |
| 하루 평균으로 고친 뒤 | 변화 없음 |
보정을 안 하면 매년 월에 퍼센트 가까이 떨어지는 것처럼 보입니다.
실제로는 날이 사흘 적을 뿐입니다. 달력이 만든 가짜 계절입니다.
이 문제에서 배우는 것. 달력 효과는 모형을 정교하게 해서 못 고칩니다. 위 자료에 계절 더미를 넣으면 월 더미가 퍼센트로 추정되어 예측은 잘 맞는데, 해석이 완전히 틀립니다. "월에 수요가 준다"는 결론으로 인력과 재고를 줄이면 하루당으로는 오히려 부족해집니다. 그래서 전처리 단계에서 하루 평균으로 고치는 것이 순서이며, 191강에서 말한 "설계가 계산보다 먼저"가 시계열에서는 달력이 모형보다 먼저로 나타납니다.
바로 확인 3.
확인 3-1. 계절 자료의 기준선을 쓰세요.
답. 지난 주기의 같은 자리 값입니다.
확인 3-2. 검산에서 네 방법의 제곱오차를 쓰세요.
답. , , , 입니다.
확인 3-3. 검산에서 달의 길이를 보정하기 전후의 월 대 월 비를 쓰세요.
답. 과 입니다.
문제. 어려운 경우를 다룹니다.
(1) 실무의 주기들을 정리하세요.
(2) 두 주기를 함께 담으세요.
(3) 계절이 변할 때를 보세요.
생각의 실마리. 실무 자료에는 계절이 하나가 아닙니다. 시간별 전력은 하루와 주와 해가 모두 있습니다.
풀이. (1) 주기들을 정리합니다.
| 자료 | 어떤 주기들 | 무엇이 어려운가 |
|---|---|---|
| 시간별 전력 | 하루와 주와 해 | 주기가 정수가 아님 |
| 일별 매출 | 주와 해 | 라 더미가 안 맞음 |
| 분별 접속 | 하루와 주 | 값이 아주 많음 |
| 월별 판매 | 해 | 가장 단순함 |
더미로는 주기가 정수가 아닌 계절을 못 담습니다. 삼각함수를 씁니다.
(2) 두 주기를 함께 담습니다. 시간별 자료이고 하루 주기와 주 주기가 있습니다.
| 무엇을 담나 | 계수 개수 | 검증 제곱오차 |
|---|---|---|
| 아무것도 | ||
| 하루만 | ||
| 하루와 주 | ||
| 하루 쌍과 주 쌍 |
하루 주기만 담아도 이 이 됩니다. 그것이 가장 큰 성분입니다.
주 주기를 더하면 로 더 줄어듭니다.
쌍을 더 늘리는 것은 값어치가 없습니다. 가 로 오히려 조금 나빠지며, 참 모양이 삼각함수 하나이기 때문입니다.
(3) 계절이 변할 때를 봅니다. 계절 폭이 처음의 배까지 자라는 자료입니다.
| 무엇으로 | 검증 제곱오차 | 치우침 평균 |
|---|---|---|
| 전체로 맞춘 더미 | ||
| 최근 년만으로 더미 | ||
| 로그를 취하고 더미 |
전체로 맞추면 이고 치우침도 로 큽니다.
최근 년만 쓰면 으로 크게 나아집니다.
로그는 로 오히려 나빠집니다. 여기서는 안 듣습니다.
문제 2의 자료는 수준이 자라면서 폭도 자랐지만 여기는 수준이 그대로입니다. 로그는 폭이 수준에 비례할 때만 듣습니다.
계절이 변하는지와 어떻게 변하는지를 함께 봐야 합니다.
이 문제에서 배우는 것. 같은 처방이 자료에 따라 정반대로 작동합니다. 로그 변환은 문제 2에서 계절 폭 비를 에서 로 고쳤는데, 여기서는 을 로 만들었습니다. 차이는 폭이 수준에 비례하느냐이며, 그것은 그림을 보면 바로 압니다. 시계열 실무에서 "로그를 취하고 차분한다"가 관용구처럼 쓰이는데, 왜 그러는지 확인하지 않으면 절반은 헛일입니다.
바로 확인 4.
확인 4-1. 주기가 정수가 아닐 때 무엇을 쓰는지 쓰세요.
답. 삼각함수를 씁니다.
확인 4-2. 검산에서 네 가지 담기의 검증 제곱오차를 쓰세요.
답. , , , 입니다.
확인 4-3. 검산에서 계절이 자랄 때 세 방법의 검증 제곱오차를 쓰세요.
답. , , 입니다.
문제. 전체를 정리합니다.
(1) 실무 절차를 모으세요.
(2) 단순한 방법과 견주세요.
(3) S8 네 단원을 정리하세요.
생각의 실마리. 196강부터 200강까지 흩어져 있던 것을 하나의 순서로 모읍니다.
풀이. (1) 절차를 모읍니다.
| 단계 | 무엇을 하나 | 어디서 |
|---|---|---|
| 자료 점검 | 주기와 결측과 단위 | 강 문제 |
| 그림 보기 | 추세와 계절과 이상점 | 강 문제 |
| 분산 안정 | 로그나 제곱근 | 강 문제 |
| 계절 처리 | 더미나 삼각함수나 차분 | 강 문제 |
| 정상성 | 단위근 검정 | 강 문제 |
| 차수 고르기 | 두 그림과 정보 기준 | 강 문제 |
| 잔차 검사 | 묶음 검정 | 강 문제 |
| 검증 | 앞에서 뒤로 굴리며 | 강 문제 |
| 보고 | 기준선과 지평과 포함률 | 강 문제 |
아홉 단계 중 통계 계산은 다섯째부터 일곱째뿐입니다. 나머지 여섯은 자료를 이해하고 결과를 검증하는 일입니다.
(2) 단순한 방법과 견줍니다.
| 무엇으로 | 검증 제곱오차 | 계수 개수 |
|---|---|---|
| 지난 주기 같은 자리 | ||
| 계절 차분에 평균 더하기 | ||
| 추세와 더미 |
계수 개짜리 모형이 계수 개보다 나은지가 첫 물음입니다.
계수 하나짜리가 으로 이미 기준선보다 낫습니다. 계절 차분에 평균만 더한 것입니다.
199강 문제 1의 기준선 원칙이 계절에서도 그대로입니다.
(3) S8 네 단원을 정리합니다.
| 단원 | 무엇을 묻나 | 무엇을 가정하나 |
|---|---|---|
| 검정의 실제 | 다른가 | 표본이 독립이고 무작위 |
| 회귀분석 | 얼마나 어떻게 | 함수 형태와 오차 구조 |
| 인과추론 | 바꾸면 어떻게 되나 | 설계나 지렛대 |
| 시계열 | 다음은 어떻게 되나 | 정상성과 구조가 안 변함 |
네 단원이 서로 다른 물음이고 서로 다른 가정을 집니다.
가정을 밝히지 않은 결론은 어느 단원에서도 쓸 수 없습니다. 그것이 S8 전체를 관통하는 하나의 문장입니다.
이 문제에서 배우는 것. 네 단원의 가정이 서로를 무너뜨립니다. 단원의 검정은 관측이 독립이라고 두는데 단원에서 그것이 깨졌고, 단원의 회귀는 계수를 관계로만 읽는데 단원에서 그것을 인과로 옮기려면 새 가정이 필요했습니다. 그래서 한 자료에 네 단원의 도구를 순서대로 적용하면 앞의 결론이 뒤에서 뒤집히는 일이 생기며, 실무에서 그것이 재현되지 않는 분석의 가장 흔한 원인입니다. 어느 도구를 쓰는지가 곧 어느 가정을 지는지입니다.
바로 확인 5.
확인 5-1. 시계열 실무 아홉 단계 중 통계 계산이 몇 번째인지 쓰세요.
답. 다섯째부터 일곱째까지이며 나머지 여섯은 이해와 검증입니다.
확인 5-2. 검산에서 세 방법의 검증 제곱오차와 계수 개수를 쓰세요.
답. 에 개, 에 개, 에 개입니다.
확인 5-3. S8 네 단원이 각각 무엇을 묻는지 쓰세요.
답. 다른가, 얼마나 어떻게, 바꾸면 어떻게 되나, 다음은 어떻게 되나입니다.
| 계절 담기 | 언제 |
|---|---|
| 더미 | 주기가 짧고 모양이 뾰족함 |
| 삼각함수 | 주기가 길거나 정수가 아님 |
| 계절 차분 | 계절이 해마다 조금씩 변함 |
| 여럿 함께 | 주기가 둘 이상 |
| 기준선 | 어떤 자료 |
|---|---|
| 평균 | 정상 |
| 바로 앞 값 | 누적 |
| 지난 주기 같은 자리 | 계절 |
| 지난 주기에 추세 | 계절과 추세 |
| 달력 효과 | 어디서 |
|---|---|
| 달의 길이 | 월별 합계 |
| 영업일 수 | 월별 생산 |
| 요일 | 일별 자료 |
| 움직이는 명절 | 한국 월별 자료 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 계절 세기만 보고 판정합니다 | 그림을 함께 봅니다 |
| 계절 차분을 늘 합니다 | 필요한지 먼저 봅니다 |
| 달력을 안 보정합니다 | 가짜 계절이 생깁니다 |
| 계절이 일정하다고 둡니다 | 변하는지 확인합니다 |
| 로그를 관용적으로 씁니다 | 폭이 수준에 비례할 때만 |
| 계절 기준선을 안 잽니다 | 계수 개와 견줍니다 |
문제 6. 계절을 담는 세 방법과 각각의 가정을 쓰세요.
답. 더미는 해마다 같은 값을, 삼각함수는 매끄러운 되풀이를, 계절 차분은 이웃한 해가 닮았음을 가정합니다.
문제 7. 검산에서 매끄러운 계절의 세 검증 제곱오차를 쓰세요.
답. , , 입니다.
문제 8. 검산에서 뾰족한 계절의 세 검증 제곱오차를 쓰세요.
답. , , 입니다.
문제 9. 계절 차분이 무엇인지 쓰세요.
답. 주기만큼 떨어진 값을 빼는 것입니다.
문제 10. 검산에서 네 자료의 시차 상관을 쓰세요.
답. , , , 입니다.
문제 11. 검산에서 로그를 취하기 전후의 계절 폭 비를 쓰세요.
답. 과 입니다.
문제 12. 계절 자료의 기준선을 쓰세요.
답. 지난 주기의 같은 자리 값입니다.
문제 13. 검산에서 네 방법의 제곱오차를 쓰세요.
답. , , , 입니다.
문제 14. 검산에서 달의 길이를 보정하기 전후의 월 대 월 비를 쓰세요.
답. 과 입니다.
문제 15. 검산에서 네 가지 담기의 검증 제곱오차를 쓰세요.
답. , , , 입니다.
문제 16. 검산에서 계절이 자랄 때 세 방법의 검증 제곱오차를 쓰세요.
답. , , 입니다.
문제 17. 검산에서 계절 자료의 세 방법과 계수 개수를 쓰세요.
답. 에 개, 에 개, 에 개입니다.
문제 18. S8 네 단원이 각각 무엇을 가정하는지 쓰세요.
답. 독립과 무작위, 함수 형태와 오차 구조, 설계나 지렛대, 정상성과 구조 불변입니다.
심화 1. 계절 ARIMA를 정리하세요.
| 무엇 | 뜻 |
|---|---|
| 이웃한 시점의 구조 | |
| (P,D,Q)_ | 주기만큼 떨어진 시점의 구조 |
| 곱한 형태 | 둘이 상호작용함 |
항공 승객 모형이라 불리는 가 고전입니다. 계수 둘로 추세와 계절을 함께 담습니다.
차분을 두 번 하는 셈이라 이고 입니다. 문제 2의 넷째 줄이 그 자료이며, 그 뒤에 이동평균 항이 붙습니다.
곱한 형태가 시차 과 에도 자기상관을 만듭니다. 계절 자리 옆의 자기상관이 그 신호입니다.
심화 2. 계절을 미리 걷어 내는 것을 정리하세요.
통계청이 발표하는 계절조정 값이 그것입니다.
| 무엇 | 왜 |
|---|---|
| 계절조정 | 추세를 바로 보려고 |
| 발표 뒤 수정 | 새 자료로 계절이 다시 추정됨 |
| 양끝 문제 | 강 문제 의 창 |
계절조정 값이 나중에 바뀝니다. 새 자료가 들어오면 과거의 계절 추정도 함께 바뀌기 때문입니다.
정책 판단이 그 수정으로 뒤집힌 사례가 있습니다. "전분기 대비 성장"이 나중에 마이너스가 되는 식입니다.
원자료와 조정값을 함께 봐야 하는 이유입니다.
심화 3. 계절 자료의 이상점을 정리하세요.
| 종류 | 예 |
|---|---|
| 명절 이동 | 설이 월과 월을 오감 |
| 일회성 사건 | 파업이나 재난 |
| 정책 변경 | 세율이나 규제 |
| 코로나 같은 충격 | 여러 해에 걸침 |
넷째 줄이 최근 시계열 실무의 큰 문제입니다. 년 자료를 그대로 쓰면 계절 추정이 통째로 흔들립니다.
대응은 그 구간을 더미로 빼거나 아예 제외하는 것인데, 둘 다 임의적입니다.
무엇을 했는지 밝히는 것이 유일한 정직한 대응입니다.
심화 4. 계층 구조가 있는 계절을 정리하세요.
| 무엇 | 예 |
|---|---|
| 지점의 합이 전체 | 매장별과 전사 |
| 품목의 합이 분류 | 상품과 카테고리 |
| 시간의 합이 상위 | 일별과 월별 |
계절 모양이 계층마다 다릅니다. 전체는 매끄러운데 지점 하나는 뾰족할 수 있습니다.
199강 심화 3의 조화가 여기서 필요합니다. 각각 예측하고 합이 맞도록 조정합니다.
아래에서 위로 올릴 때 계절이 상쇄되어 사라지는 일도 있습니다. 지점마다 성수기가 다르면 그렇습니다.
심화 5. 계절 자료의 검증을 정리하세요.
| 몇 주기 | 무엇이 가능한가 |
|---|---|
| 미만 | 계절을 못 추정함 |
| ~ | 겨우 추정하되 불안정 |
| 이상 | 안정적 |
월별 자료로 계절을 담으려면 최소 년, 되도록 년이 필요합니다.
199강 문제 5의 굴려 가며 검증에서 창이 주기보다 짧으면 안 됩니다. 계절을 못 배웁니다.
주기가 길수록 자료가 오래 쌓여야 하는데, 그동안 구조가 변합니다. 이것이 연간 계절 추정의 근본적 어려움입니다.
심화 6. S8 다음을 정리하세요.
| 무엇이 달라지나 | 어디서 |
|---|---|
| 목표가 설명에서 예측으로 | S |
| 가정 대신 검증으로 | S |
| 자료가 표에서 이미지와 글로 | S 이후 |
| 사람에게 미치는 영향 | S |
S8이 물은 것은 "무엇이 참인가"였습니다. 다음 과목이 묻는 것은 **"무엇이 잘 맞는가"**입니다.
196강 문제 3의 가짜 회귀와 193강 문제 5의 AUC가 그 자리였습니다. 예측이 목표가 되면 그 구분이 더 흐려지므로, S8에서 세운 가정 목록이 계속 필요합니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 주기 | 계절이 되풀이되는 길이입니다 | |
| \Delta_ | 계절 차분 | 주기만큼 떨어진 값을 뺍니다 |
| 계절 더미 | seasonal dummy | 주기마다 하나씩 두는 표시입니다 |
| 삼각함수 쌍 | Fourier terms | 사인과 코사인 한 쌍입니다 |
| 계절 세기 | seasonal strength | 계절이 분산의 몇 할인지입니다 |
| SARIMA | 계절 ARIMA | 보통 부품과 계절 부품을 곱합니다 |
| 계절 기준선 | seasonal naive | 지난 주기의 같은 자리입니다 |
| 달력 효과 | calendar effect | 날 수와 요일이 만드는 변동입니다 |
| 계절조정 | seasonal adjustment | 계절을 걷어 낸 값입니다 |
| 여러 계절 | multiple seasonality | 주기가 둘 이상입니다 |
여기서 S8 데이터 분석 추론과 모형을 마칩니다. 강부터 강까지 네 단원이 네 물음을 다뤘습니다.
네 물음이 각각 다른 가정을 지고 그만큼만 답했습니다. 가정을 밝히지 않은 결론은 어느 단원에서도 쓸 수 없습니다.
다음 과목은 예측을 목표로 삼는 기계학습입니다. 목표가 "무엇이 참인가"에서 **"무엇이 잘 맞는가"**로 바뀌는데, 그 둘이 다르다는 것을 이 과목이 되풀이해 보였습니다. S9는 그 긴장을 정면으로 다룹니다.
import numpy as np
rng = np.random.default_rng(20261007)
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 gen_ar1(n, phi, sd=1.0, burn=400):
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 lsq(y, X):
A = np.concatenate([np.ones((len(y), 1)), X], axis=1)
b, *_ = np.linalg.lstsq(A, y, rcond=None)
return b, y - A @ b
# --- 문제 1: 계절을 어떻게 담는가 --------------------------------------
print(" 196강 문제 4 에서 계절을 분해로 뽑아내기만 했습니다")
print(" 이제 모형 안으로 들입니다. 담는 방법이 셋입니다")
print(" %s %s %s"
% (pw("어떻게 담나", 20), rw("몇 개의 계수", 16), rw("무엇을 가정하나", 26)))
for a, b, c in [("계절 더미", "주기 빼기 1 개", "해마다 같은 값"),
("삼각함수 쌍", "몇 쌍이든", "매끄럽게 되풀이"),
("계절 차분", "0 개", "이웃한 해가 닮음")]:
print(" %s %s %s" % (pw(a, 20), rw(b, 16), rw(c, 26)))
print(" 세 방법이 서로 다른 것을 가정합니다. 자료가 어느 쪽인지 봐야 합니다")
n1 = 480
m1 = 12
t1 = np.arange(n1)
seas_t = np.array([0.0, 1.2, 2.5, 4.0, 6.5, 9.0, 10.0, 8.5, 5.5, 3.0, 1.0, 0.2])
y1 = 20.0 + 0.02 * t1 + seas_t[t1 % m1] + gen_ar1(n1, 0.4, 1.2)
print(" 세 방법을 같은 자료에 써 봅니다")
print(" 주기 12 이고 계절 폭이 10 인 자료입니다. 길이는 480 입니다")
tr1, te1 = y1[:400], y1[400:]
D = np.zeros((n1, m1 - 1))
for k in range(m1 - 1):
D[t1 % m1 == k + 1, k] = 1.0
F = []
for h in [1, 2]:
F.append(np.sin(2 * np.pi * h * t1 / m1))
F.append(np.cos(2 * np.pi * h * t1 / m1))
F = np.stack(F, axis=1)
print(" %s %s %s %s"
% (pw("무엇으로", 20), rw("계수 개수", 12), rw("학습 제곱오차", 16),
rw("검증 제곱오차", 16)))
for nm, X in [("추세만", t1[:, None].astype(float)),
("추세와 더미", np.concatenate([t1[:, None].astype(float), D], axis=1)),
("추세와 삼각함수", np.concatenate([t1[:, None].astype(float), F],
axis=1))]:
b, _ = lsq(tr1, X[:400])
A = np.concatenate([np.ones((n1, 1)), X], axis=1)
pred = A @ b
print(" %s %12d %16.6f %16.6f"
% (pw(nm, 20), X.shape[1] + 1,
float(np.mean((tr1 - pred[:400]) ** 2)),
float(np.mean((te1 - pred[400:]) ** 2))))
print(" 계절을 안 담으면 제곱오차가 훨씬 큽니다")
print(" 더미 11 개와 삼각함수 4 개가 비슷한 값을 냅니다")
print(" 계절 모양이 매끄러우면 삼각함수가 적은 계수로 같은 일을 합니다")
print(" 계절 모양이 들쭉날쭉하면 달라집니다")
seas_j = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 0.0, 0.0])
y1b = 20.0 + seas_j[t1 % m1] + gen_ar1(n1, 0.4, 1.2)
tr1b, te1b = y1b[:400], y1b[400:]
print(" 한 달만 튀어 오르는 자료입니다")
print(" %s %s %s"
% (pw("무엇으로", 20), rw("계수 개수", 12), rw("검증 제곱오차", 16)))
for nm, X in [("더미", D), ("삼각함수 2 쌍", F),
("삼각함수 4 쌍", np.stack(
[f(2 * np.pi * h * t1 / m1)
for h in [1, 2, 3, 4] for f in (np.sin, np.cos)], axis=1))]:
b, _ = lsq(tr1b, X[:400])
A = np.concatenate([np.ones((n1, 1)), X], axis=1)
pred = A @ b
print(" %s %12d %16.6f"
% (pw(nm, 20), X.shape[1] + 1,
float(np.mean((te1b - pred[400:]) ** 2))))
print(" 뾰족한 계절은 삼각함수 몇 쌍으로 못 담습니다")
print(" 쌍을 늘리면 나아지지만 계수가 늘어 더미의 값어치가 사라집니다")
print(" 계절 모양을 먼저 그려 보고 방법을 골라야 합니다")
# --- 문제 2: 계절 차분 --------------------------------------------------
print(" 계절도 차분으로 없앨 수 있습니다")
print(" 주기만큼 떨어진 값을 뺍니다. 12 개월 자료면 작년 같은 달을 뺍니다")
print(" %s %s %s %s"
% (pw("무엇", 22), rw("분산", 14), rw("시차 1 상관", 14), rw("시차 12 상관", 16)))
for nm, v in [("원자료", y1), ("한 칸 차분", np.diff(y1)),
("계절 차분", y1[m1:] - y1[:-m1]),
("둘 다", np.diff(y1[m1:] - y1[:-m1]))]:
print(" %s %14.6f %14.6f %16.6f"
% (pw(nm, 22), float(np.var(v)), acf(v, 1), acf(v, 12)))
print(" 한 칸 차분만 하면 시차 12 상관이 0.6743 으로 그대로 남습니다")
print(" 계절 차분을 하면 그 자리가 -0.4777 이 됩니다. 지나쳐 반대로 갔습니다")
print(" 둘 다 하면 시차 1 상관이 -0.2333 으로 음수가 됩니다")
print(" 분산은 3.3355 에서 3.1238 로 조금 줄지만 없던 음의 상관이 생겼습니다")
print(" 198강 문제 2 의 과잉 차분 신호가 분산이 아니라 상관에서 나타납니다")
print(" 계절 차분이 필요한지 판정합니다")
print(" 계절 세기를 재서 문턱과 견줍니다")
def seas_strength(x, m):
n = len(x) // m * m
tt = np.arange(n, dtype=float)
A = np.stack([np.ones(n), tt], axis=1)
b, *_ = np.linalg.lstsq(A, x[:n], rcond=None)
r = x[:n] - A @ b
z = r.reshape(-1, m)
within = float(np.mean(np.var(z, axis=0)))
total = float(np.var(r))
return max(0.0, 1.0 - within / total)
print(" %s %s %s"
% (pw("자료", 26), rw("계절 세기", 14), rw("계절 차분이 필요한가", 24)))
cases = [("계절 폭 10", y1), ("계절 폭 2", 20.0 + 0.02 * t1
+ 0.2 * seas_t[t1 % m1] + gen_ar1(n1, 0.4, 1.2)),
("계절 없음", 20.0 + 0.02 * t1 + gen_ar1(n1, 0.4, 1.2)),
("계절이 커져 감", 20.0 + (1 + t1 / 240.0) * seas_t[t1 % m1]
+ gen_ar1(n1, 0.4, 1.2))]
for nm, v in cases:
st = seas_strength(v - np.arange(len(v)) * 0.0, m1)
print(" %s %14.6f %s"
% (pw(nm, 26), st, rw("예" if st > 0.6 else "아니오", 24)))
print(" 추세를 먼저 뺀 뒤에 계산합니다. 안 그러면 추세가 세기를 눌러 버립니다")
print(" 셋째 줄이 0 근처입니다. 계절이 없으면 계절 차분을 하면 안 됩니다")
print(" 문턱 0.6 은 관례일 뿐입니다. 자료와 목적에 따라 달라집니다")
print(" 넷째 줄은 계절 폭이 자라는 자료입니다. 세기만으로는 그것이 안 보입니다")
print(" 계절 폭이 자라면 로그를 먼저 취합니다")
y2 = 20.0 * np.exp(0.002 * t1) * (1.0 + 0.25 * seas_t[t1 % m1] / 10.0) \
* np.exp(gen_ar1(n1, 0.4, 0.05))
print(" 수준이 커질수록 계절 폭도 커지는 자료입니다")
print(" %s %s %s %s"
% (pw("무엇", 26), rw("앞 4 년 계절 폭", 20), rw("뒤 4 년 계절 폭", 20),
rw("몇 배", 12)))
for nm, v in [("원자료", y2), ("로그를 취한 뒤", np.log(y2))]:
h = len(v) // 2
a_ = float(np.max(v[:h].reshape(-1, m1).mean(axis=0))
- np.min(v[:h].reshape(-1, m1).mean(axis=0)))
b_ = float(np.max(v[h:].reshape(-1, m1).mean(axis=0))
- np.min(v[h:].reshape(-1, m1).mean(axis=0)))
print(" %s %20.6f %20.6f %12.4f" % (pw(nm, 26), a_, b_, b_ / a_))
print(" 원자료는 뒤쪽 계절 폭이 앞쪽의 1.6428 배입니다")
print(" 로그를 취하면 두 구간의 폭이 거의 같아집니다")
print(" 198강 문제 5 의 로그 변환이 계절에도 그대로 쓰입니다")
# --- 문제 3: 계절 모형과 예측 -------------------------------------------
print(" 계절 자료의 기준선은 지난 주기의 같은 자리입니다")
print(" 199강 문제 1 의 기준선이 계절 자료에서는 달라집니다")
tr3, te3 = y1[:400], y1[400:]
print(" %s %s %s"
% (pw("무엇으로 예측", 26), rw("제곱오차", 16), rw("기준선 대비", 14)))
b_full, _ = lsq(tr3, np.concatenate([t1[:400, None].astype(float), D[:400]],
axis=1))
A_te = np.concatenate([np.ones((80, 1)), t1[400:, None].astype(float),
D[400:]], axis=1)
pred_dm = A_te @ b_full
base3 = None
rows3 = [("평균만 말함", np.full(80, float(tr3.mean()))),
("바로 앞 값", y1[399:479]),
("지난 주기 같은 자리", y1[388:468]),
("추세와 더미", pred_dm)]
for nm, p in rows3:
e = float(np.mean((te3 - p) ** 2))
if base3 is None:
base3 = e
print(" %s %16.6f %14.4f" % (pw(nm, 26), e, e / base3))
print(" 바로 앞 값은 계절 자료에서 나쁩니다. 한 칸 사이에 계절이 움직입니다")
print(" 지난 주기 같은 자리가 훨씬 낫습니다. 이것이 계절 기준선입니다")
print(" 모형은 그보다 나아야 값어치가 있습니다")
print(" 예측 지평이 주기를 넘으면 무엇이 달라지는지 봅니다")
print(" %s %s %s %s"
% (pw("몇 칸 앞", 12), rw("추세와 더미", 18), rw("지난 주기 같은 자리", 24),
rw("모형이 몇 배 나은가", 22)))
for h in [1, 3, 6, 12, 24]:
em, eb = [], []
for i in range(400, n1 - h):
em.append((y1[i + h] - float(
np.concatenate([[1.0], [float(i + h)], D[i + h]]) @ b_full)) ** 2)
eb.append((y1[i + h] - y1[i + h - m1]) ** 2)
a_, b2_ = float(np.mean(em)), float(np.mean(eb))
print(" %s %18.6f %24.6f %22.4f"
% (pw("%d" % h, 12), a_, b2_, b2_ / a_))
print(" 계절 모형은 지평이 늘어도 성능이 거의 안 떨어집니다")
print(" 계절과 추세가 시간의 함수라 h 를 넣기만 하면 되기 때문입니다")
print(" 199강 문제 4 의 되먹임 모형과 다릅니다. 그쪽은 기억이 사라졌습니다")
print(" 달력 효과를 넣어 봅니다")
print(" %s %s %s"
% (pw("무엇", 22), rw("무엇을 담나", 26), rw("어디에 쓰나", 22)))
for a, b, c in [("요일", "주 단위 되풀이", "일별 자료"),
("공휴일", "그날과 앞뒤", "소매와 물류"),
("달의 길이", "28 에서 31 일", "월별 매출"),
("영업일 수", "주말과 휴일 제외", "월별 생산"),
("움직이는 명절", "해마다 날짜가 다름", "설과 추석")]:
print(" %s %s %s" % (pw(a, 22), rw(b, 26), rw(c, 22)))
print(" 마지막 줄이 한국 자료에서 특히 중요합니다. 달 더미로는 안 잡힙니다")
print(" 달의 길이만 보정해도 얼마나 달라지는지 봅니다")
days = np.array([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], dtype=float)
daily = 100.0
y3 = daily * days[t1 % m1] * (1.0 + 0.02 * rng.normal(0, 1, n1))
print(" 하루 매출이 일정한데 월별 합계를 보는 자료입니다")
print(" %s %s %s"
% (pw("무엇을 보나", 26), rw("2 월 대 1 월 비", 20), rw("무엇을 뜻하나", 22)))
jan = float(np.mean(y3[t1 % m1 == 0]))
feb = float(np.mean(y3[t1 % m1 == 1]))
print(" %s %20.6f %s" % (pw("월별 합계", 26), feb / jan, rw("9.7 퍼센트 감소", 22)))
print(" %s %20.6f %s"
% (pw("하루 평균으로 고친 뒤", 26),
(feb / 28.0) / (jan / 31.0), rw("변화 없음", 22)))
print(" 보정을 안 하면 매년 2 월에 10 퍼센트 가까이 떨어지는 것처럼 보입니다")
print(" 실제로는 날이 사흘 적을 뿐입니다. 달력이 만든 가짜 계절입니다")
# --- 문제 4: 여러 계절과 실무 -------------------------------------------
print(" 실무 자료에는 계절이 여럿입니다")
print(" %s %s %s"
% (pw("자료", 20), rw("어떤 주기들", 26), rw("무엇이 어려운가", 24)))
for a, b, c in [("시간별 전력", "하루와 주와 해", "주기가 정수가 아님"),
("일별 매출", "주와 해", "365.25 라 더미가 안 맞음"),
("분별 접속", "하루와 주", "값이 아주 많음"),
("월별 판매", "해", "가장 단순함")]:
print(" %s %s %s" % (pw(a, 20), rw(b, 26), rw(c, 24)))
print(" 더미로는 주기가 정수가 아닌 계절을 못 담습니다. 삼각함수를 씁니다")
n4 = 24 * 7 * 20
t4 = np.arange(n4)
day = 8.0 * np.sin(2 * np.pi * t4 / 24.0 - 1.2)
wk = 3.0 * np.sin(2 * np.pi * t4 / (24 * 7))
y4 = 50.0 + day + wk + gen_ar1(n4, 0.6, 1.5)
print(" 두 주기를 함께 담아 봅니다")
tr4, te4 = y4[:2688], y4[2688:]
print(" 시간별 자료이고 하루 주기와 주 주기가 있습니다")
print(" %s %s %s"
% (pw("무엇을 담나", 24), rw("계수 개수", 12), rw("검증 제곱오차", 16)))
def fourier(t, period, K):
cols = []
for h in range(1, K + 1):
cols.append(np.sin(2 * np.pi * h * t / period))
cols.append(np.cos(2 * np.pi * h * t / period))
return np.stack(cols, axis=1)
for nm, X in [("아무것도", np.zeros((n4, 0))),
("하루만", fourier(t4, 24, 2)),
("하루와 주", np.concatenate([fourier(t4, 24, 2),
fourier(t4, 24 * 7, 2)], axis=1)),
("하루 4 쌍과 주 2 쌍", np.concatenate([fourier(t4, 24, 4),
fourier(t4, 24 * 7, 2)],
axis=1))]:
if X.shape[1] == 0:
pred = np.full(n4, float(tr4.mean()))
k = 1
else:
b, _ = lsq(tr4, X[:2688])
pred = np.concatenate([np.ones((n4, 1)), X], axis=1) @ b
k = X.shape[1] + 1
print(" %s %12d %16.6f"
% (pw(nm, 24), k, float(np.mean((te4 - pred[2688:]) ** 2))))
print(" 하루 주기만 담아도 크게 줄어듭니다. 그것이 가장 큰 성분입니다")
print(" 주 주기를 더하면 조금 더 줄어듭니다")
print(" 쌍을 더 늘리는 것은 값어치가 작습니다. 참 모양이 삼각함수 하나이기 때문입니다")
print(" 계절이 시간에 따라 변하면 어떻게 되는지 봅니다")
n5 = 480
amp = 1.0 + 1.5 * t1 / n5
y5 = 20.0 + amp * seas_t[t1 % m1] + gen_ar1(n5, 0.4, 1.2)
print(" 계절 폭이 처음의 2.5 배까지 자라는 자료입니다")
tr5, te5 = y5[:400], y5[400:]
print(" %s %s %s"
% (pw("무엇으로", 30), rw("검증 제곱오차", 16), rw("치우침 평균", 16)))
b5, _ = lsq(tr5, D[:400])
p5 = (np.concatenate([np.ones((n1, 1)), D], axis=1) @ b5)[400:]
b6, _ = lsq(tr5[-120:], D[280:400])
p6 = (np.concatenate([np.ones((n1, 1)), D], axis=1) @ b6)[400:]
lg = np.log(y5)
b7, _ = lsq(lg[:400], D[:400])
p7 = np.exp((np.concatenate([np.ones((n1, 1)), D], axis=1) @ b7)[400:])
for nm, p in [("전체로 맞춘 더미", p5), ("최근 10 년만으로 더미", p6),
("로그를 취하고 더미", p7)]:
print(" %s %16.6f %16.6f"
% (pw(nm, 30), float(np.mean((te5 - p) ** 2)),
float(np.mean(te5 - p))))
print(" 전체로 맞추면 17.7295 이고 치우침도 2.8969 로 큽니다")
print(" 최근 10 년만 쓰면 4.7776 으로 크게 나아집니다")
print(" 로그는 18.5842 로 오히려 나빠집니다. 여기서는 안 듣습니다")
print(" 문제 2 의 자료는 수준이 자라면서 폭도 자랐지만 여기는 수준이 그대로입니다")
print(" 로그는 폭이 수준에 비례할 때만 듣습니다. 그냥 폭만 자라면 소용이 없습니다")
print(" 계절이 변하는지와 어떻게 변하는지를 함께 봐야 합니다")
# --- 문제 5: 04 단원과 S8 정리 -----------------------------------------
print(" 시계열 실무의 절차를 한자리에 모읍니다")
print(" %s %s %s" % (pw("단계", 20), rw("무엇을 하나", 26), rw("어디서", 14)))
for a, b, c in [("자료 점검", "주기와 결측과 단위", "196강 문제 5"),
("그림 보기", "추세와 계절과 이상점", "196강 문제 4"),
("분산 안정", "로그나 제곱근", "198강 문제 5"),
("계절 처리", "더미나 삼각함수나 차분", "200강 문제 1"),
("정상성", "단위근 검정", "198강 문제 3"),
("차수 고르기", "두 그림과 정보 기준", "197강 문제 3"),
("잔차 검사", "묶음 검정", "197강 문제 3"),
("검증", "앞에서 뒤로 굴리며", "199강 문제 5"),
("보고", "기준선과 지평과 포함률", "199강 문제 5")]:
print(" %s %s %s" % (pw(a, 20), rw(b, 26), rw(c, 14)))
print(" 아홉 단계 중 통계 계산은 다섯째부터 일곱째뿐입니다")
print(" 단순한 방법을 반드시 함께 재야 합니다")
print(" 계절 자료에서 네 방법을 견줍니다")
print(" %s %s %s"
% (pw("무엇으로", 30), rw("검증 제곱오차", 16), rw("계수 개수", 14)))
naive_s = y1[388:468]
b8, _ = lsq(tr3, np.concatenate([t1[:400, None].astype(float), D[:400]], axis=1))
p8 = (np.concatenate([np.ones((n1, 1)), t1[:, None].astype(float), D],
axis=1) @ b8)[400:]
sd_ = y1[m1:] - y1[:-m1]
b9, _ = lsq(sd_[:388], sd_[:388][:, None] * 0 + np.arange(388)[:, None] * 0.0)
res9 = []
for i in range(400, n1):
res9.append(y1[i - m1] + float(np.mean(sd_[:388 - m1])))
res9 = np.array(res9)
for nm, p, k in [("지난 주기 같은 자리", naive_s, 0),
("계절 차분에 평균 더하기", res9, 1),
("추세와 더미", p8, 13)]:
print(" %s %16.6f %14d"
% (pw(nm, 30), float(np.mean((te3 - p) ** 2)), k))
print(" 계수 13 개짜리 모형이 계수 0 개보다 나은지가 첫 물음입니다")
print(" 199강 문제 1 의 기준선 원칙이 계절에서도 그대로입니다")
print(" S8 전체를 한 줄로 정리합니다")
print(" %s %s %s"
% (pw("단원", 22), rw("무엇을 묻나", 22), rw("무엇을 가정하나", 26)))
for a, b, c in [("01 검정의 실제", "다른가", "표본이 독립이고 무작위"),
("02 회귀분석", "얼마나 어떻게", "함수 형태와 오차 구조"),
("03 인과추론", "바꾸면 어떻게 되나", "설계나 지렛대"),
("04 시계열", "다음은 어떻게 되나", "정상성과 구조가 안 변함")]:
print(" %s %s %s" % (pw(a, 22), rw(b, 22), rw(c, 26)))
print(" 네 단원이 서로 다른 물음이고 서로 다른 가정을 집니다")
print(" 가정을 밝히지 않은 결론은 어느 단원에서도 쓸 수 없습니다")
print(" 그것이 S8 전체를 관통하는 하나의 문장입니다")
print(" 다음 과목은 예측을 목표로 삼는 기계학습입니다")
# 196강 문제 4 에서 계절을 분해로 뽑아내기만 했습니다
# 이제 모형 안으로 들입니다. 담는 방법이 셋입니다
# 어떻게 담나 몇 개의 계수 무엇을 가정하나
# 계절 더미 주기 빼기 1 개 해마다 같은 값
# 삼각함수 쌍 몇 쌍이든 매끄럽게 되풀이
# 계절 차분 0 개 이웃한 해가 닮음
# 세 방법이 서로 다른 것을 가정합니다. 자료가 어느 쪽인지 봐야 합니다
# 세 방법을 같은 자료에 써 봅니다
# 주기 12 이고 계절 폭이 10 인 자료입니다. 길이는 480 입니다
# 무엇으로 계수 개수 학습 제곱오차 검증 제곱오차
# 추세만 2 13.625138 10.866619
# 추세와 더미 13 1.595045 2.034849
# 추세와 삼각함수 6 1.665900 2.170819
# 계절을 안 담으면 제곱오차가 훨씬 큽니다
# 더미 11 개와 삼각함수 4 개가 비슷한 값을 냅니다
# 계절 모양이 매끄러우면 삼각함수가 적은 계수로 같은 일을 합니다
# 계절 모양이 들쭉날쭉하면 달라집니다
# 한 달만 튀어 오르는 자료입니다
# 무엇으로 계수 개수 검증 제곱오차
# 더미 12 1.650625
# 삼각함수 2 쌍 5 9.619532
# 삼각함수 4 쌍 9 5.295922
# 뾰족한 계절은 삼각함수 몇 쌍으로 못 담습니다
# 쌍을 늘리면 나아지지만 계수가 늘어 더미의 값어치가 사라집니다
# 계절 모양을 먼저 그려 보고 방법을 골라야 합니다
# 계절도 차분으로 없앨 수 있습니다
# 주기만큼 떨어진 값을 뺍니다. 12 개월 자료면 작년 같은 달을 뺍니다
# 무엇 분산 시차 1 상관 시차 12 상관
# 원자료 20.800571 0.868955 0.872356
# 한 칸 차분 5.194300 0.428560 0.674313
# 계절 차분 3.335462 0.525302 -0.477720
# 둘 다 3.123760 -0.233299 -0.413268
# 한 칸 차분만 하면 시차 12 상관이 0.6743 으로 그대로 남습니다
# 계절 차분을 하면 그 자리가 -0.4777 이 됩니다. 지나쳐 반대로 갔습니다
# 둘 다 하면 시차 1 상관이 -0.2333 으로 음수가 됩니다
# 분산은 3.3355 에서 3.1238 로 조금 줄지만 없던 음의 상관이 생겼습니다
# 198강 문제 2 의 과잉 차분 신호가 분산이 아니라 상관에서 나타납니다
# 계절 차분이 필요한지 판정합니다
# 계절 세기를 재서 문턱과 견줍니다
# 자료 계절 세기 계절 차분이 필요한가
# 계절 폭 10 0.874549 예
# 계절 폭 2 0.244699 아니오
# 계절 없음 0.017427 아니오
# 계절이 커져 감 0.893694 예
# 추세를 먼저 뺀 뒤에 계산합니다. 안 그러면 추세가 세기를 눌러 버립니다
# 셋째 줄이 0 근처입니다. 계절이 없으면 계절 차분을 하면 안 됩니다
# 문턱 0.6 은 관례일 뿐입니다. 자료와 목적에 따라 달라집니다
# 넷째 줄은 계절 폭이 자라는 자료입니다. 세기만으로는 그것이 안 보입니다
# 계절 폭이 자라면 로그를 먼저 취합니다
# 수준이 커질수록 계절 폭도 커지는 자료입니다
# 무엇 앞 4 년 계절 폭 뒤 4 년 계절 폭 몇 배
# 원자료 6.798495 11.168494 1.6428
# 로그를 취한 뒤 0.241589 0.241327 0.9989
# 원자료는 뒤쪽 계절 폭이 앞쪽의 1.6428 배입니다
# 로그를 취하면 두 구간의 폭이 거의 같아집니다
# 198강 문제 5 의 로그 변환이 계절에도 그대로 쓰입니다
# 계절 자료의 기준선은 지난 주기의 같은 자리입니다
# 199강 문제 1 의 기준선이 계절 자료에서는 달라집니다
# 무엇으로 예측 제곱오차 기준선 대비
# 평균만 말함 34.358465 1.0000
# 바로 앞 값 4.596831 0.1338
# 지난 주기 같은 자리 2.541475 0.0740
# 추세와 더미 2.034849 0.0592
# 바로 앞 값은 계절 자료에서 나쁩니다. 한 칸 사이에 계절이 움직입니다
# 지난 주기 같은 자리가 훨씬 낫습니다. 이것이 계절 기준선입니다
# 모형은 그보다 나아야 값어치가 있습니다
# 예측 지평이 주기를 넘으면 무엇이 달라지는지 봅니다
# 몇 칸 앞 추세와 더미 지난 주기 같은 자리 모형이 몇 배 나은가
# 1 2.059257 2.569605 1.2478
# 3 2.060224 2.578638 1.2516
# 6 2.117009 2.572187 1.2150
# 12 2.134618 2.386364 1.1179
# 24 1.976689 2.102451 1.0636
# 계절 모형은 지평이 늘어도 성능이 거의 안 떨어집니다
# 계절과 추세가 시간의 함수라 h 를 넣기만 하면 되기 때문입니다
# 199강 문제 4 의 되먹임 모형과 다릅니다. 그쪽은 기억이 사라졌습니다
# 달력 효과를 넣어 봅니다
# 무엇 무엇을 담나 어디에 쓰나
# 요일 주 단위 되풀이 일별 자료
# 공휴일 그날과 앞뒤 소매와 물류
# 달의 길이 28 에서 31 일 월별 매출
# 영업일 수 주말과 휴일 제외 월별 생산
# 움직이는 명절 해마다 날짜가 다름 설과 추석
# 마지막 줄이 한국 자료에서 특히 중요합니다. 달 더미로는 안 잡힙니다
# 달의 길이만 보정해도 얼마나 달라지는지 봅니다
# 하루 매출이 일정한데 월별 합계를 보는 자료입니다
# 무엇을 보나 2 월 대 1 월 비 무엇을 뜻하나
# 월별 합계 0.907488 9.7 퍼센트 감소
# 하루 평균으로 고친 뒤 1.004719 변화 없음
# 보정을 안 하면 매년 2 월에 10 퍼센트 가까이 떨어지는 것처럼 보입니다
# 실제로는 날이 사흘 적을 뿐입니다. 달력이 만든 가짜 계절입니다
# 실무 자료에는 계절이 여럿입니다
# 자료 어떤 주기들 무엇이 어려운가
# 시간별 전력 하루와 주와 해 주기가 정수가 아님
# 일별 매출 주와 해 365.25 라 더미가 안 맞음
# 분별 접속 하루와 주 값이 아주 많음
# 월별 판매 해 가장 단순함
# 더미로는 주기가 정수가 아닌 계절을 못 담습니다. 삼각함수를 씁니다
# 두 주기를 함께 담아 봅니다
# 시간별 자료이고 하루 주기와 주 주기가 있습니다
# 무엇을 담나 계수 개수 검증 제곱오차
# 아무것도 1 42.376679
# 하루만 5 6.978303
# 하루와 주 9 3.747875
# 하루 4 쌍과 주 2 쌍 13 3.750421
# 하루 주기만 담아도 크게 줄어듭니다. 그것이 가장 큰 성분입니다
# 주 주기를 더하면 조금 더 줄어듭니다
# 쌍을 더 늘리는 것은 값어치가 작습니다. 참 모양이 삼각함수 하나이기 때문입니다
# 계절이 시간에 따라 변하면 어떻게 되는지 봅니다
# 계절 폭이 처음의 2.5 배까지 자라는 자료입니다
# 무엇으로 검증 제곱오차 치우침 평균
# 전체로 맞춘 더미 17.729483 2.896889
# 최근 10 년만으로 더미 4.777631 0.974779
# 로그를 취하고 더미 18.584200 2.988556
# 전체로 맞추면 17.7295 이고 치우침도 2.8969 로 큽니다
# 최근 10 년만 쓰면 4.7776 으로 크게 나아집니다
# 로그는 18.5842 로 오히려 나빠집니다. 여기서는 안 듣습니다
# 문제 2 의 자료는 수준이 자라면서 폭도 자랐지만 여기는 수준이 그대로입니다
# 로그는 폭이 수준에 비례할 때만 듣습니다. 그냥 폭만 자라면 소용이 없습니다
# 계절이 변하는지와 어떻게 변하는지를 함께 봐야 합니다
# 시계열 실무의 절차를 한자리에 모읍니다
# 단계 무엇을 하나 어디서
# 자료 점검 주기와 결측과 단위 196강 문제 5
# 그림 보기 추세와 계절과 이상점 196강 문제 4
# 분산 안정 로그나 제곱근 198강 문제 5
# 계절 처리 더미나 삼각함수나 차분 200강 문제 1
# 정상성 단위근 검정 198강 문제 3
# 차수 고르기 두 그림과 정보 기준 197강 문제 3
# 잔차 검사 묶음 검정 197강 문제 3
# 검증 앞에서 뒤로 굴리며 199강 문제 5
# 보고 기준선과 지평과 포함률 199강 문제 5
# 아홉 단계 중 통계 계산은 다섯째부터 일곱째뿐입니다
# 단순한 방법을 반드시 함께 재야 합니다
# 계절 자료에서 네 방법을 견줍니다
# 무엇으로 검증 제곱오차 계수 개수
# 지난 주기 같은 자리 2.541475 0
# 계절 차분에 평균 더하기 2.477333 1
# 추세와 더미 2.034849 13
# 계수 13 개짜리 모형이 계수 0 개보다 나은지가 첫 물음입니다
# 199강 문제 1 의 기준선 원칙이 계절에서도 그대로입니다
# S8 전체를 한 줄로 정리합니다
# 단원 무엇을 묻나 무엇을 가정하나
# 01 검정의 실제 다른가 표본이 독립이고 무작위
# 02 회귀분석 얼마나 어떻게 함수 형태와 오차 구조
# 03 인과추론 바꾸면 어떻게 되나 설계나 지렛대
# 04 시계열 다음은 어떻게 되나 정상성과 구조가 안 변함
# 네 단원이 서로 다른 물음이고 서로 다른 가정을 집니다
# 가정을 밝히지 않은 결론은 어느 단원에서도 쓸 수 없습니다
# 그것이 S8 전체를 관통하는 하나의 문장입니다
# 다음 과목은 예측을 목표로 삼는 기계학습입니다