실습 · 연습문제 2개
새 모델은 baseline을 이기는가: 짝지은 부트스트랩 판정 beats-baseline
같은 시험 단위(셀·환자·지역 등) 개에서 새 모델과 baseline의 오차를 쟀다. err_model[i]와 err_base[i]는 **같은 단위 **의 오차이고, 값이 작을수록 좋다. 함수 paired_verdict(err_model, err_base, n_boot=2000, seed=0)를 완성해 다음 키를 가진 dict를 반환한다.
| 키 | 값 |
|---|---|
"skill" |
skill score (평균 오차의 비) |
"diff" |
짝지은 차이 의 평균 |
"ci" |
의 95% 퍼센타일 부트스트랩 신뢰구간 (lo, hi) |
"verdict" |
hi < 0이면 "이긴다", lo > 0이면 "진다", 그 밖에는 "판정 불가" |
부트스트랩은 단위를 복원추출하고, 뽑힌 단위의 두 오차를 함께 쓴다. 즉 차이 를 복원추출해 평균을 n_boot번 계산하고, 그 2.5%·97.5% 분위수를 구간으로 쓴다. 난수는 np.random.default_rng(seed)로 만든다.
두 모델의 오차를 따로 복원추출하면 짝이 깨진다. 어려운 단위에서 두 모델이 함께 나빠지는 공통 변동이 상쇄되지 않아 구간이 불필요하게 넓어진다(12.5장의 짝지은 비교). 테스트 중 하나는 이 차이를 확인한다.
시계열의 단순 baseline 네 개 forecast-baselines
길이 인 학습 시계열 를 보고 다음 개 시점 를 예측하는 단순 baseline 네 개를 구현한다. 함수 forecast_baselines(y, horizon, period)는 키 네 개를 가진 dict를 반환하고, 각 값은 shape (horizon,)의 NumPy 배열이다.
| 키 | 예측 () | 무엇을 재는가 |
|---|---|---|
"mean" |
시간 구조를 전혀 쓰지 않을 때 | |
"persistence" |
마지막 값만 쓸 때 | |
"seasonal" |
한 주기 전 같은 위상의 값 ( = period) |
|
"drift" |
첫 값과 마지막 값을 잇는 직선의 기울기로 연장 |
seasonal은 마지막 한 주기 를 예측 기간 동안 반복한 것이다. 예를 들어 이고 마지막 세 값이 [5, 6, 7]이면 horizon = 5의 예측은 [5, 6, 7, 5, 6]이다.
입력 y는 리스트일 수도 있다. period는 len(y) 이하라고 가정한다.
테스트는 손으로 계산한 예, 출력 shape, 그리고 주기 신호에서는 seasonal이, 직선 추세에서는 drift가 가장 정확한지 확인한다.