인공지능관련/인공지능(AI)

히든마코브(HMM)1,기초

학위논문통계 2016. 10. 30. 12:40

 

 

히든 마코프에 들어가기 전에 마코프 체인에 대해 조금 더 알아보죠.

 

 

1. MC의 정의

 

앞에서 여러번 이야기를 한 적이 있는데요. 마코프 체인의 정의는 다음과 같습니다.

 

현재 시점의 상태는 바로 전 시점에만 영향을 받고 그 이전 시점에는 전혀 영향을 받지 않는다는 것입니다. 이 말은 현재 시점의 상태, 즉 현재 시점에서 어떤 상태가 될 지에 관한 확률은 바로 이전 시점의 상태에 대한 정보만 알면 되지 그 이전 시점에서의 상태는 전혀 알 필요가 없다는 것이죠.

 

기후를 예를 들면 오늘의 기후 상태, 즉 맑음, 흐림, 눈 또는 비가 올 확률은 어제 상태의 정보만 필요하지 그제 이전의 기후 상태의 정보는 아무 쓸모가 없다는 것입니다.

 

즉 X(0), X(1), X(2), ...., X(t-1), X(t) 라는 시간에 따라 변하는 데이터가 있다고 하면

 

Pr(X(t) | X(t-1), X(t-2), ..., X(0))=Pr(X(t)|X(t-1))

 

라고 하고 이 확률에 시간에 관계없이 일정하면 stationary MC이라고 하고 바로 이전 시점에만 영향을 받으면 1차(first order) MC, 이전 두 시점에만 영향을 받으면 2차 MC라고 합니다. 통상 MC라고 하면 1차 MC를 이야기하죠.

 

 

 

2. 어떤 경우에 MC를 적용할까?

 

위 정의에 대해 조금 더 설명을 해야 하는데 이건 조금 뒤로 미루고요.

 

이런 모형이 나왔을때 일반인들이 궁굼하게 생각하는게 있습니다. 이런 모형은 어느 상황에 적용하나요, 아니면 이런 곳에 MC를 적용할 수 있나요 이렇게 물어 본다는 것이죠.

 

이런 것 본인이 결정해야지 통계하는 사람이 결정하는 문제가 아닙니다. 일단 논리적으로 어느 정도 타당해야 합니다.

 

기상 보도를 생각해보죠. 현재 여러분이 살고 있는 지역의 기상은 시간상 이전 시점의, 공간 상 바로 주변의 기후에만 영향을 받을 수 있다고 생각할 수 있습니다.

 

EPL 영국 축구 리그를 한번 생각해보죠. 어떤 팀이 오늘 경기 상태는 바로 이전 경기 상태에만 영향을 받는다고 생각할 수 있죠.

 

3. 모형의 평가

 

이렇게 논리적으로 생각해서 MC를 적용할 만하다 생각하면 다음 해야 할 일은 뭘까요?

 

실제 데이터를 보면 이게 잘 들어 맞는지 확인을 하는 작업이 필요하죠.

 

축구 예측에서 상태를 승리, 무승부, 패배 이렇게 세가지 상태만 설정하고 승리면 1, 무승부면 0, 패배는 -1로 코딩합니다. 그러면 이전 경기한 데이터를 모읍니다.

 

 

(1, 0, 0, -1, 1, 0, 1, 0, 0,......,0)

 

이렇게 데이터를 모은 다음 먼저 전이확률 Pr(X(t)|X(t-1)) 을 구해야죠. 이건 구하는 것은 쉽습니다. 확률 공식에서 빈도를 구해 추정하면 됩니다. 예를 들어 Pr(X(t)=1|X(t-1)=1), 즉 이전 경기에서 졌는데 오늘 경기에서 이길 확률은 확률공식을 써서 위 데이터에 빈도로 간단히 측정할 수 있고 사실 Pr(X(t)=1, X(t)=-1) 이 값만 추정하면 됩니다.

 

이렇게 전이확률을 구한 다음 컴퓨터로 시뮬레이션을 해 봅니다. 처음에 1, 즉 첫 게임에서 이겼죠. 이 상태에서 출발해 추정한 전이확률에 따라 계속 시뮬레이션을 해 본다는 것이죠.

 

앞에서 원래 진행된 게임은

 

(1, 0, 0, -1, 1, 0, 1, 0, 0,......,0)

 

인데 컴퓨터로 MC를 적용해 시뮬레이션 하니까

 

(1, -1, 1, 0, 0, 1, -1, 1, 1, ..., 1)

 

이렇게 나왔다면 이건 MC를 사용해서 안된다는 것이죠. MC 모형을 적용하니까 전혀 실제 게임 진행과 맞지는 않는다는 것이죠. 이럴 경우 피팅(fitting), 적합도(fitness)가 나쁘다고 합니다.

 

그러나 MC를 적용해서 시물레이션 한 결과가

 

(1, 0, -1, -1, 1, 0, 1, 1, 0,......,0)

 

이렇게 나왔다면 이건 피팅이 상당히 잘된 편이고 그럼 MC 모형이 잘 들어 맞는다고 이야기 할 수 있다는 것이죠.

 

그럼 MC를 적용하니까 피팅이 별로 였다고 하죠. 그럼 어떻게 할까요? 조금 더 복잡한 모형을 적용해 본다는 것이죠. 앞의 MC는 1차 MC이니까 2차 MC를 적용해 볼 수 있을겁니다. 이것도 논리적으로 타당합니다. 게임 예측하니까 이런 말들을 하죠. 최근 성적이 안 좋으니까 이번 경기는 질 가능성이 높다는지 아니면 최근 상승세를 타고 있으니까 이번 경기는 이길 가능성이 높다는지 이런 말들을 종종하죠. 즉 현재 상태는 이전 상태 몇몇 경기에 영향을 받는다는 것이죠.

즉 2차 MC는

 

 

Pr(X(t) | X(t-1), X(t-2), ..., X(0))=Pr(X(t)|X(t-1), X(t-2))

 

 

이렇게 되죠.

 

그래서 2차 MC에서도 전이확률행렬을 이전의 데이터에서 추정해서 적합도가 좋아졌는지 한번 알아 봅니다.

 

여기서 1차 MC의 전이확률행렬보다 2차 MC의 전이확률행렬이 훨씬 복잡합니다. 즉 구해야 할 전이확률행렬 값이 훨씬 많습니다. 통상 이렇게 데이터에서 추정해야 할 값들이 많아질 경우 분석 결과가 어느 정도 신뢰성이 있으려면 데이터 수가 굉장히 많아져야 합니다. 이걸 ‘차원의 저주’라고 합니다.

 

또 하나의 문제는 1차 MC보다 2차 MC가 훨씬 복잡합니다. 이렇게 설정한 모형이 더 복잡해지면 무조건 피팅이 좋아집니다. 이게 무슨 이야기나 하면 오로지 피팅의 정도만을 기준으로 하면 무조건 복잡한 모형을 선호하게 됩니다. 이건 좋은 방법이 아닙니다. 이렇게 복잡한 모형은 나중에 새로운 데이터가 들어왔을 때 치명적이 오류를 범할 수가 있습니다. 그래서 결론은 피팅이 어느 정도 수준이면 가능하면 간단한 모형을 선택하라는 것입니다. 통계학에서는 ‘절약의 법칙’이라고 하고 일반적으로 ‘오캄의 면도날’이라고 하는 원칙입니다.

 

그럼 통계학에서 이런 문제를 어떻게 이론적으로 해결할까요? 어떤 모형을 선택하는 것이 가장 최적일까? 모형을 어떻게 평가해야 할까 이런 문제이죠.

 

데이터마이닝, 빅데이타, 인공지능 책에 보면 데이터를 training data, validate data, test data로 나눈다고 하는 이야기를 본 적이 있을 겁니다. 이게 위에 이야기한 작업을 하기 위해서입니다. 이건 좀 복잡한 이야기라 다음에 이야기하겠습니다. 우리가 통상 사용하는 데이터는 그리 많지 않습니다. 그래서 앞에서 이야기한 것처럼 3개로 쪼갤 여유가 없죠. 그래서 데이터를 쪼개지 않고 나온 값들이 AIC, BIC 이런 값들입니다.

 

4. 다시 한번 MC의 적용

 

그럼 경기 예측이 MC 모형에 정말 적합할까요? 일단 홈에서 경기할 때와 원정 경기할 때와 다른 수가 있습니다. 이건 별 문제가 안되고요. 두 경우로 나눠 MC 모형을 적용하면 될겁니다. 이 경우는 데이터가 좀 더 많아야 하겠죠.

 

가장 큰 문제는 상대방에 따라 다르다는 것이죠. 상대방이 강팀인지, 약팀인지, 비슷한 실력의 팀인지에 따라 현재 상태, 오늘의 게임 예측이 크게 달라진다는 것이죠. 또는 선수의 부상 등 다른 요인들이 많습니다.

 

이에 반해 야구 경기에서 투수가 던지는 공의 성질은 MC 모형이 상당히 잘 맞아 떨어질 수 있습니다. 던지는 공의 위치, 상, 중, 하, 안쪽, 바깥쪽, 중앙 등 9개 영역으로 나누고, 구질은 직구, 변화구, 슬라이더, 기타 등으로 나누면 투구의 상태는 9*4해서 36개나 되네요.

 

여기서 논리적인 문제는 투수가 타자의 성격을 파악했을 경우입니다. 박병호 선수는 안쪽 위 강속구에 약하다는 것이 노출이 되었습니다. 그래서 투수가 그 방향을 많이 노린다는 것이죠.

 

묵지빠 같은 경우는 어떻게 될까요? 대부분 사람들은 묵지빠 할 때 랜덤으로 냅니다. 그래서 MC를 적용하면 안되겠죠. 그러나 이건 본인이 그렇게 생각한다는 것이지 실제 랜덤으로 내는 것은 아니죠. 자기도 모르게 잠재적으로 어떤 숨겨진 법칙에 따라 낼 가능성이 있습니다. 따라서 MC 적용을 한번 생각할 필요가 있다는 것이죠.

 

사람들이 제일 관심이 많은 로또는 어떻까요. 이건 MC 적용의 문제가 아니라 MC가 적용되어서는 안되죠. 즉 완전히 랜덤으로 나와야 합니다. 만약 MC, 1차든, 2차든, 3차든 MC를 적용하니까 어느 정도 예측이 좋아졌다면 MC를 적용하면 다른 사람보다 로또 당첨 확률이 확 올라갑니다. 그러나 이게 장기적으로 자기한테 이익이 된다는 이야기는 아닙니다. 로또 장사하는 얘들도 이익을 남겨야 하는데, 상당히 많은 이익이죠, 따라서 장기적으로 로또하는 사람은 다 손해입니다. 그냥 재미로 하는 것이죠. 대박나면 좋고, 아니면 그냥 에이 하고 마는 것이죠. 여기에 전 인생을 거는 사회는 골치 아픈 사회입니다. 심각한 사회문제이죠.

 

하여간 원칙적으로 랜덤하게 숫자가 나와야 하는데 MC를 적용하니까 적합도가 어느 정도 좋게 나왔다면 로또 숫자 뽑는 알고리즘에서 심각한 문제가 있다는 것입니다.

 

 

5. MC 정의를 다시 한번

 

MC 정의에서 통상 사람들이 잘 모르는 중요한 성질이 있습니다.

 

 

A==>B==C

 

라는 순차적 변수가 있다고 하죠. 그럼 이 순차적 변수가 MC라고 하면

 

Pr(C|B, A)=Pr(C|B)

 

가 됩니다. 즉 C의 상태를 알는데(즉 C의 확률분포를 아는데) 바로 전 B의 정보만 있으면 되지 그 이전의 A에 대한 정보는 전혀 필요가 없다는 것이죠.

 

그럼 이렇게 생각할 수 있습니다. A와 C는 서로 독립이라고. 왜냐하면 C의 상태를 아는데 A는 전혀 필요가 없으니까요. 그럼 A와 C는 정말 독립일까요.

 

한편 이렇게 생각할 수 있습니다. A==>B, 즉 A는 B에 영향을 준다. B==>C, 또 B는 C에 영향을 준다. 그럼 당연히 A는 B를 매개로 C에 영향을 주는 것이 아닐까요? 즉 A와 C는 서로 독립이 아니다라고 생각할 수 있습니다.

 

실제 데이터 분석에서는 A와 C가 독립인지 아닌지는 검증을 해야 합니다. 예를 들어 A의 한 단위가 상승할 때 B는 0.2 단위 상승하고, 그래서 유의적인 영향력이 있다고 나오고, 또 B의 한 단위가 상승할 때 C는 0.2 단위 상승하고, 그래서 통계적으로 유의적인 영향력이 있다고 하죠.

 

그런 A가 한 단위 상승하면 B를 매개로 C는 오로지 0.04 단위밖에 상승하지 않습니다. 그럼 이건 유의적이라 보기 힘듭니다.

 

앞의 A==>B, B==>C 관계에서는 표본 추출 과정에서 나오는 변동을 고려해도 어느 정도 영향을 미친다고(통계적으로 유의적인 영향력이 있다고) 생각할 수 있지만 B를 매개로 A==>C의 0.04는 이건 거의 표본추출 과정에서 나오는 변동에서 나온 결과,즉,우연한 결과라고 볼 수 있습니다. 이런 걸 하는 것이 구조방정식에서 나오는 Sobel z 검증입니다.

 

원래 어디서 어디에 영향을 미친다는 논리는 결정론적인 사고입니다. 그러나 우리가 데이터를 다루는 것은 확률적인 세계이죠. 그래서 논리적 접근방법의 차이로 인해서 이런 모순적인 사고가 생기는 것이죠.

 

그럼 MC 정의가 이야기하는 것은 무엇일까요. 현재 상태 C와 2시점 이전의 A 상태는 무슨 관계일까요. “조건부 독립”입니다. 즉 1시점 전의 B의 정보가 있는 경우 A와 C는 조건부 독립이라는 것입니다. 이게 기존의 통계학 책에 잘 안 나오는 정의입니다. 조건부 독립이란

 

 

Pr(A, C|B)=Pr(A|B)*Pr(C|B)

 

이라는 것입니다. 그럼 이게 무슨 의미가 있을까요?

 

확률적 세계에서는 모든 정보는 확률분포(여러개의 변수가 있을 때는 결합확률분포라고 하지만 그냥 확률분포라고 이야기 하겠습니다.)에 있다고 생각합니다. 이 확률분포는 언제나 조건부 확률분포로 표현할 수 있습니다. 예를 들어 4개의 변수 X1, X2, X3, X4가 있다고 하면 확률분포 f(x1, x2, x3, x4)는

 

f(x1,x2,x3,x4)=f(x1|x2,x3,x4)*f(x2,x3,x4)

                    =f(x1|x2,x3,x4)*f(x2|x3,x4)*f(x3,x4)

                    =f(x1|x2,x3,x4)*f(x2|x3,x4))*f(x3|x4)*f(x4)

 

그냥 기초 통계학에 나오는 확률공식을 계속 적용한 것입니다. 만약 이 4개의 변수가 MC라고 하면

 

f(x1,x2,x3,x4)=f(x1|x2,x3,x4)*f(x2,x3,x4)

                    =f(x1|x2)*f(x2,x3,x4)

                    =f(x1|x2)*f(x2|x3,x4)*f(x3,x4)

                    =f(x1|x2)*f(x2|x3)*f(x3|x4)*f(x4)

 

이렇게 간단하게 표현된다는 것이죠. 좀 추상적으로 이야기해서 전체적인 상태 (x1, x2, x3, x4)를 파악하는데 MC가 적용된다면 local 즉 (x1,x2), (x2,x3), (x3,4) 등 지역적 정보만으로 표현이 된다는 것이죠.

 

실제 이게 가지는 중요한 의미는 무엇일까요? 예를 들어 X가 취하는 경우가 5가지라고 하죠. 가공면의 경우 일반라면, 냉면, 메밀, 짜장면, 짬뽕 다섯가지라고 하죠. 그럼 f(x1,x2,x3,x4)를 표현하려면 5*5*5*5=625개의 값을 우리가 저장하고 있어야 합니다. 정확하게는 -1를 해야죠. 왜냐하면 합하면 1이 되어야 하니까요.

 

그러나 MC 표현번을 사용하면 f(x1|x2)를 아는데 약 20개, f(x2|x3)도 약 20개, f(x3|x4)도 약 20개, f(x)는 4개, -1를 해야죠. 그래서 약 64개의 값만 알고 있으면 됩니다. 만약 대형 마트의 경우 데이터를 저장한다고 생각해보죠. 마트에는 수십만개의 물품이 있습니다. 이게 매일매일 저장됩니다. 그럼 이 두 개의 표현 방법에서는 이건 엄청난 차이가 있습니다. 또 주변확률분포라는 예를 들어 f(x1)를 구할 때도 엄청난 계산 차이가 생깁니다.

 

즉 어떤 현상이 조건부 독립이라는 현상이 생기면 상태 표현이나 계산에서 복잡성을 상당히 줄일 수가 있습니다. 인공지능 책을 보면 그래프 이론에 대해 설멍을 많이 하는데 이 그래프 이론은 많은 부분이 조건부 독립에 대해서 이야기를 하고 있는 것입니다. 이걸 잘 모르면 계속 헤맬 수가 있습니다.