그냥 또 놀러와본 수학맨입니다. <p>일기예보를 보면 강수확률이 나오죠. 이번 주말에 서울에 비올 확률이 15%라고 합니다. 과연 이 확률은 어떻게 나오는걸까요?</p> <p>오늘은 수학숙제와 함께하는 날씨 이야기를 가져왔습니다. 해설을 다 적어두긴 했지만 원한다면 여러분들도 직접 풀어보세요.</p> <p> </p> <p>자. 여기 정말 완벽한 기상 모델이 있다고 합니다. 이 기상 모델은 {맑음, 흐림, 비} 3 가지 상태를 가지고 있고, 내일 날씨는 오늘 날씨에 따라서 아래 확률 표에 따라 정해집니다:</p> <table border="1"><tbody><tr><td> ↓오늘 | 내일→</td> <td>맑음</td> <td>흐림</td> <td>비</td> </tr><tr><td>맑음</td> <td>1/2</td> <td>1/3</td> <td>1/6</td> </tr><tr><td>흐림</td> <td>1/4</td> <td>1/2</td> <td>1/4</td> </tr><tr><td>비</td> <td>1/5</td> <td>2/5</td> <td>2/5</td> </tr></tbody></table><p> </p> <p><b><span style="font-size:16px;">1.</span></b> 오늘 날씨가 맑다고 칩시다. 그렇다면 내일 모레 비올 확률은 얼마일까요? </p> <p> </p> <p> - P(내일 맑고 모레 비) + P(내일 흐리고 모레 비) + P(내일 비 모레 비) = 1/2*1/6 + 1/3*1/4 + 1/6*2/5 = 7/30 = 23.333..% 입니다.</p> <p><br></p> <p><b><span style="font-size:16px;">2.</span></b> 30일차에는 어떻게 될까요? 물론 위 표를 행렬로 만든 뒤 곱해가면서 앞으로의 날씨 확률 벡터를 계산할 수 있지만, 시뮬레이션을 통해 알아보는 방법도 있습니다. 여러분이 좋아하는 프로그래밍 언어로 날씨 시뮬레이터를 구현해봅시다.<br> - MC 클래스는 현재 상태 x ∈ [맑음=0,흐림=1,비=2] 를 가집니다. </p> <p> - step 메서드는 내일의 상황을 시뮬레이션합니다.</p> <p> - N=500 개의 MC 를 생성하고, 30일간 시뮬레이션하세요. </p> <p> - 이제 내일, 모레, 그리고 30일 차의 샘플들을 히스토그램으로 그려봅시다.</p> <p> </p> <p> </p> <p><img src="http://thimg.todayhumor.co.kr/upfile/202403/17097613098b5ef3fe53874dfeb3eeb72f745dcaef__mn260556__w800__h262__f29051__Ym202403.jpg" alt="111.jpg" style="width:800px;height:262px;" filesize="29051"></p> <p>30일차의 inv. measure 는 state transition matrix 의 고유벡터로 6/19, 8/19, 5/19 입니다. 그래프 단위가 좀 이상한데 190개로 돌리고 샘플 개수를 적은 것이라 그렇습니다. 3 일차 비온 샘플이 45개로 대충 이론값과 유사하군요.</p> <p> </p> <p><span style="font-size:16px;"><b>3. </b></span>달무리가 지는 것은 다음날이 맑지 않다 (흐리거나 비가 온다)는 뜻이라고 합니다. 오늘 밤 달무리가 생겼습니다. 그렇다면 내일 모레 맑고/흐리고/비가 올 확률은 어떻게 될까요? 2번에서 얻은 샘플들을 활용해서 계산해볼 수 있을까요? </p> <p> </p> <p> - 시뮬레이션 샘플 500개 중 2일차에 맑다고 한 녀석들을 다 버리고 남은 샘플들만 활용해서 확률을 계산하면 됩니다.</p> <p> - 대략 절반정도의 샘플이 버려지게 되지만 어쩔 수 없지요.</p> <p> - 확실히 비오거나 흐릴 확률이 확 올라간 것을 볼 수 있습니다.</p> <p> </p> <p><img src="http://thimg.todayhumor.co.kr/upfile/202403/17097619021f92d0bda86f4b4b808b65f825612781__mn260556__w525__h449__f22890__Ym202403.jpg" alt="111.jpg" style="width:525px;height:449px;" filesize="22890"></p> <p> </p> <p><b><span style="font-size:16px;">4.</span></b> 우리의 달무리 이론이 사실 그렇게 믿음직스럽지 못하다고 합니다. 사실 달무리와 내일 날씨의 연관성은 반반이라서, 50%의 확률로 페이크였다고 합시다. 시뮬레이션 결과를 어떻게 수정하면 될까요? </p> <p> </p> <p> - 여러가지 구현 방법이 있는데, 2일차가 맑았던 시뮬레이션 중 랜덤으로 50%를 버리는 방법이 있고, 또는 해당 샘플들을 나중에 셀 때 0.5개로 치는 방법이 있습니다. 혹은 그냥 2번과 3번의 결과를 평균내도 되겠지요.</p> <p> </p> <p> </p> <p><b><span style="font-size:16px;">5.</span></b> 3~4번에서 우린 시뮬레이션 결과 중 일부를 버렸습니다. 즉 처음에 500개로 시작했지만 우리가 관측을 계속 할 수록, 관측과 맞지 않는 시뮬레이션 결과는 버려지게 되다보니 어쩔 수 없이 날이 갈 수록 샘플 수가 적어지게 되죠. 아마 살아남은 샘플들이 좀더 "현실에 가까운" 녀석들임은 분명합니다만, 샘플 수가 적으면 앞으로의 시뮬레이션에서 다양성/유연성이 떨어지게 됩니다. 어떻게 해결할까요? </p> <p> </p> <p> - 적당한 시점에, 지금까지의 결과에 붙은 가중치값을 바탕으로 다시 뽑기를 돌려서 시뮬레이션 수를 다시 늘리면 됩니다.</p> <p> </p> <p> </p> <p><b><span style="font-size:16px;">여담</span></b></p> <p> </p> <p>Particle Filtering 의 기초 원리에 대한 숙제입니다. 글이 어색한 것은 영어로 쓴걸 번역했기 때문..</p> <p>수학적으로 Particle filter 는 베이즈 정리 (Bayes theorem)의 결과물을 몬테 카를로 시뮬레이션으로 추출하는 방법입니다.</p> <p>현재 X 의 샘플을 N개 가진 상태에서 Y 라는 정보가 들어오면, 베이즈 정리 P(X|Y) = P(Y|X)P(X) / P(Y) 에서 P(X) 는 지금 샘플들이 잘 표현해주고 있고, P(Y)는 그냥 총합 1 되게 정규화하면 되니까, P(Y|X) 만 각 샘플에 가중치로 곱해주면 됩니다. 그리고 이 가중치에 따라 다시 N개의 샘플을 뽑고, 시뮬레이션을 돌리고를 반복하죠.</p> <p>심심하시다면 나무위키에 <a target="_blank" href="https://namu.wiki/w/%EB%AA%AC%ED%85%8C%20%EC%B9%B4%EB%A5%BC%EB%A1%9C%20%EB%B0%A9%EB%B2%95" target="_blank">[몬테 카를로 방법]</a>과 <a target="_blank" href="https://namu.wiki/w/%EB%B2%A0%EC%9D%B4%EC%A6%88%20%EC%A0%95%EB%A6%AC" target="_blank">[베이즈 정리]</a> 가 모두 있습니다. 대체 왜 있는거지?</p> <p> </p> <p>암튼 제목에 쓴 주말에 비올 확률은..</p> <p> - 날씨 시뮬레이션 500개 중에서 근데 이중에 75개가 일요일에 비가 온다? 그러면 그러면 일요일에 비올 확률이 15%인 겁니다.</p> <p> - 그런데 이제 위성도 보고, 관측소도 확인하고, 가능한 정보들을 모아보잖아요. 그러면 이중에 어떤건 엄청 잘 맞고, 어떤건 영 안 맞고 할겁니다.</p> <p> - 그러면 지금 시뮬레이션 중에서 잘 맞는 녀석들은 살리고, 안 맞는 녀석들은 죽입니다. 이걸 몇 년 간 계속 튜닝하면서 돌리는거죠.</p> <p> - 실제 일기예보의 경우 계산하는 변수의 차원이 천만개 단위입니다. 이 많은 변수들과 엄청나게 복잡한 기상 시뮬레이션을 수백 수천개를 돌리는 것은 슈퍼컴퓨터로도 힘들기 때문에, 위에 설명한 가중치를 주고 새로 뽑는 방법 대신 좀 적은 수 (50~100개 정도)의 시뮬레이션을 돌리되, 각 시뮬레이션의 X 값을 관측값에 맞춰 조금 더 그럴듯한 수치로 수정하는 식으로 계산합니다..만 이건 또 다른 이야기.</p> <p> </p> <p> </p> <p><br class="Apple-interchange-newline"><br></p> <p> </p> <p><br></p>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.