최근 tensorflow 자격증을 취득하기 위해서 코세라 강의를 듣고 있는데,
1강은 기본적은 ML/DL 부분 2강은 CV, 3강은 NLP 그리고 4강은 시계열 데이터 핸들링이다.
시계열 데이터는 예전에 유데미에서 시계열데이터 관련 강의를 한번 처음부터 끝까지 수강했었는데, 선행되어야 할 기본 통계적 지식이 방대해서 기본적인 느낌만 알고 있었다.
그러다가 이번에는 시계열 데이터에 대해서 필수 개념들은 공부를 다시 해보자 라고 생각하고 있던 찰나에 "Forecasting: Principles and Practice"라는 책을 알게 됐고, 거기서 가장 먼저 나오는 것이 예측 될 수 있는 것이란? 부분이다.
이 부분을 읽다가 내가 생각하고 있었던 Forecasting (예측)에 대한 이해가 잘못되어 있음을 알게 됐고, 해당 부분에 대해서 재정의를 하고 정리해보려고 작성한다.
사실 예측이라고 하면 'Forcasting', 'Prediction' 이라는 두 단어가 있다.
해당 단어는 모두 미래에 대한 추측 이지만 그 의미와 사용되는 맥락에 따라 약간의 차이가 있을 수 있다.
'forcasting', 'prediction' 이라는 단어는 여러 분야에서 다른 의미로 사용되고, 몇몇 경우에 동일한 의미로 사용되지만 몇 분야 에서는 철저히 구분된다.
예를 들면 지질학의 경우에서는 'prediction'은 지진이 언제 어디에서 일어날 것인지 구체적이고 명시적으로 말하는 것(대규모 지진이 6월 28일 일본 교토를 강타한다)이고, 'forcasting'은 확률적 진술로 장기적 차원의 발상이다. (지진이 30년 안에 캘리포니아 남부 지역에서 일어날 확률은 60% 이다)
따라서 지진을 prediction 할 수 없어도 forecast 할 수 있다는 것이 지질 조사소의 공식 입장이라고 한다.
여기서의 관점에서 바라봤을 때 미래에 일어난 구체적 명시는 prediction, 확률적 진술은 forecast라고 이해한다.
그렇다면 "forcasting" 과 "prediction" 의 통계 분석적 차이는 어떻게 될까?
Forecasting
- 통계 모델에 사용되는 수식을 통해서 그 의미를 보면 "forecasting"은 확률 보행 과정 (stochastic process)에 대한 가정이 수식에 포함되어 있다.
- forecasting은 시계열 데이터 분석과 같이 샘플 데이터에서 발생하지 않은 영역(예:시간)에 대한 예측이 주로 사용된다.
Prediction
- prediction은 '오차항(error term)'에 대한 가정이 포함되어 있다.
- prediction은 회귀 분석 및 분류분석과 같이 샘플 데이터에서 발생한 범위(예: 몸무게)에 주로 사용된다고 볼 수 있다.
위에서 forecast는 확률적 진술이고 prediction은 구체적 명시라고 언급한 바 있는데, 그렇다면 회귀분석 관점에서의 forcast와 prediction의 경우에는
주어진 데이터 (X,Y)를 바탕으로 할 때 모델링한 X의 범위 내에서 새로운 X* 값에 대한 Y값을 알고 싶다면 Prediction이고, 모델링하는 X의 범위를 벗어난 새로운 X의 값에 대한 Y의 값을 알고자 한다면 Forecast라고 볼 수 있겠다.
여기서는 주어진 X의 범위를 벗어난 부분에서 패턴이 변할지 모르기 때문에 주어진 회귀식으로 벗어난 부분에서 추정하고자 한다면 패턴이 변하지 않는 가정이 필요하다.
본론으로 들어와서 많은 경우에 우리는 예측이 필요하다.
미래 수요 예측 이라던지, 재고 관리를 위한 공급량 예측이라든지 그리고 이러한 예측은 몇 년 앞 예측, 몇 달 앞 그리고 몇 분 예측까지도 필요할 수 있다.
관련 상황이나 시간적 범위가 무엇이든 효율적이고 효과적인 계획을 세우기 위해 예측은 큰 도움이 된다.
이러한 예측은 상대적으로 예측하기 쉬운 것과 예측하기 어려운 것이 있다.
예측하기 쉬운 것이라고 하면 '내일 아침에 해가 뜰 시간', 이고 예측하기 어려운 것은 '내일 로또 당첨 번호' 이다.
이러한 어떤 사건이나 수량의 예측 가능성은 다음과 같은 요인에 의존한다
(1) 영향을 주는 요인을 얼마나 잘 이해할 수 있는지
(2) 사용할 수 있는 데이터가 얼마나 많은지
(3) 예측이 우리가 예측하려는 것에 영향을 줄 수 있는지 여부
예를 들면 전기 수요의 예측에서는 위의 3가지 조건이 모두 만족이 되어 상당히 정확할 수 있다. (1) 전기 수요는 기온에 영향을 크게 받으며 휴일이나 경제적인 요인에 대해서는 영향을 적게 받는다. (2) 전기 수요와 날씨 상황에 대한 시간에 따른 충분한 데이터가 있고 전기 수요와 핵심 변수를 관련지어 잘 설명할 수 이는 모델을 세울 수 있다
반대로 환율 예측은 (2) 사용할 수 있는 데이터가 많다 는 조건만 만족한다. 환율에 영향을 주는 요인을 잘 모르고 환율 예측은 (3) 환율 예측은 환율 자체에 직접적인 영향을 준다. 환율이 증가할 것이라는 예측이 공개되면 사람들은 가격을 조정한다. 예측 자체 때문에 예측이 맞는 상황이 되어 버리는, 그렇게 환율이 점점 스스로를 예측하는 효율적인 시장 가설(efficient market hypothesis) 가 된다.
그러한 관점에서 환율이 내일 올라가는지 내려가는 지는 동전을 던졌을 때 앞/뒤를 예측하는 것과 거의 유사하다. 두 경우 모두 무엇을 예측하든지 50% 가까이는 맞을 수 있다. 이러한 경우에 예측하는 사람은 스스로의 한계를 자각해야하고 더 맞추는 것이 가능하다고 주장하지 말아야 한다.
예측에 있어서 핵심적인 과정은 정확한 예측이 가능할 때가 언제인가 와 예측이 큰 의미가 없을 때(예측을 하는 것이 동전을 던진 결과로 의사결정을 하는 것보다 나을 것이 없을 때가 언제인지 아는 것이다.
좋은 예측은 과거 데이터에서 존재하는 진짜 패턴과 관계를 잡아내지만, 다시 반복되지 않을 과거 사건을 정확히 모사하지 않는다.
과거 데이터에서 무시해야하는 무작위적인 요동과 모델링하고 외삽(extrapolate)해야 할 진짜 패턴의 차이를 구분해야 한다.
많은 사람들이 환경이 변하는 경우에 예측이 불가능할 것이라는 잘못된 방식으로 가정한다.
모든 환경은 변하고 좋은 모델은 변하는 방식을 잡아낸다.
예측할 때 환경이 변하지 않는다는 가정은 잘 사용하지 않는다.
보통 환경이 변하는 방식이 미래에도 계속될 것 이라고 가정한다.
즉, 아주 불안정한 상황은 계속 불안정할 것이고, 판매량이 변하는 사업은 계속 판매량이 변할 것이고, 호황과 불황의 패턴을 반복하면 호황과 불황이 계속 반복될 것이라는 내용이다.
즉, 예측하는 일은 시간의 범위, 실제 결과를 결정하는 요인, 데이터의 패턴의 종류에 따라 그 밖에 많은 양상에 다라 많이 달라진다.
예측 기법은 navie 기법과 같이 가장 최근의 값을 예측값으로 사용하는 것처럼 단순 할 수도 있고 신경망고 계량경제학적 시스템을 다루는 연립방정식처럼 아주 복잡할 수도 있다.
때로는 사용할 수 있는 데이터가 아예 없을 수 도 있다.(신제품 첫 해 판매량) 이럴 때는 판단 예측을 사용한다.(어떤 종류의 데이터를 사용할 수 있는지와 수량의 예측가능성에 따라 사용할 기법이 달라진다.
즉, 나는 이 forcast와 prediction의 미묘한 차이를 어떻게 구분하느냐에 대한 정리가 부족했는데 이해한 바로는 미래에 대한 확률적 진술 forcast, 구체적 명시는 prediction이고 주어진 데이터의 범위에서의 예측은 prediction, 주어진 데이터 범위를 넘어가면 forcast라고 이해하면 되겠다.
또 예측하는 일은 조재하는 상황만이 아니라 "변하는 방식을 잡아내는 것"을 목적으로 한다는 부분을 잘 인지하고 있어야겠다.
예전에 같은 개발자랑 사용자 입맛 예측 추천 모델링을 하고 싶다고 했었는데, 세상에 변수가 많고 변하는 것이 많은데 어떻게 그걸 모델링해? 라고 이야기 한적이 있었다.
좋은 모델이라면 이러한 변수를 잘 고려하고 사용자의 입맛 변화에 양상을 잘 쫓아가는 것이겠다. 뭐 아직까지는 뇌새망상이라고 생각하지만 불가능한 것은 아니라는 생각이든다. 그렇지만 데이터가 많아야 하겠지