{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Cadeias de Markov\n", "#### Vamos descrever um modelo geral de um sistema que muda de estado para estado. Uma cadeia de Markov é um caso particular de processo estocástico com estados discretos (o parâmetro, em geral o tempo, pode ser discreto ou contínuo) com a propriedade de que a distribuição de probabilidade do próximo estado depende apenas do estado atual e não na sequência de eventos que precederam." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Álgebra Linear com aplicações / Anton Howard e Chris Rorres; trad. Claus Ivo Doering. - 8. ed. - Porto Alegre: Bookman, 2001." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Um Processo de Markov" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suponha que um sistema físico ou matemático está sofrendo mudanças tais que a cada momento ele pode ocupar um dentre um número infinito de estados. Por exemplo, o tempo de uma certa cidade poderia estar em um dentre três estados possíveis: ensolarado, nublado ou chuvoso; ou então, um indivíduo poderia estar em um dentre quatro estados emocionais possíveis: feliz, triste, irritado ou apreensivo. Suponha que um tal sistema muda com o tempo de um estado para o outro e que em instantes pré-determinados observamos o estado do sistema. Se o estado do sistema em qualquer observação não puder ser predito com certeza, mas se a probabilidade de um certo estado ocorrer puder ser predita unicamente a partir do conhecimento do estado do sistema na observação imediatamente anterior, então o processo de mudança de um estado para o outro é chamado uma cadeia ou um processo de Markov." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Definição" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Denotamos por **1, 2, ..., k** os **k** estados possíveis de uma cadeia de Markov. A probabilidade de o sistema estar no estado **i** em qualquer observação, se na observação imediatamente precedente estava no estado **j**, é denotada por $p_{ij}$ e é chamada a probabilidade de transição do estado **j** ao estado **i**. A matriz P = [$p_{ij}$] é chamada a **matriz de transição** da cadeia de Markov." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por exemplo, em uma cadeia de Markov de três estados, a matriz de transição tem o formato" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$ EstadoPrecedente(j)\n", "\\\\\n", "\\begin{bmatrix}\n", " p_{11} & p_{12} & p_{13} \\\\\n", " p_{21} & p_{22} & p_{23} \\\\\n", " p_{31} & p_{32} & p_{33} \\\\\n", " \\end{bmatrix} NovoEstado(i)$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nesta matriz $p_{32}$ é a probabilidade que o sistema vai mudar do estado 2 para o estado 3, $p_{11}$ é a probabilidade que o sistema vai continuar no estado 1 imediatamente depois de ter sido observado no estado 1, e assim por diante." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exemplo: Locadora de Automóveis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uma locadora de automóveis tem três lojas de atendimento, denotadas por 1, 2 e 3. Um cliente pode alugar um carro de qualquer uma das três lojas e devolver o carro para qualquer uma das três lojas. O gerente nota que os clientes costuma devolver os carros de acordo com as seguintes probabilidades:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca de funções numpy do Python\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# definindo a matriz de transição A\n", "A = np.array([[80/100, 30/100, 20/100],\n", " [10/100, 20/100, 60/100],\n", " [10/100, 50/100, 20/100]])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A matriz de transição A é:\n", "\n", "[[0.8 0.3 0.2]\n", " [0.1 0.2 0.6]\n", " [0.1 0.5 0.2]]\n" ] } ], "source": [ "# imprimindo a matriz aluguelCarro\n", "print(\"A matriz de transição A é:\\n\\n{}\".format(A))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esta é a matriz de transição do sistema se ele for considerado uma cadeia de Markov. A partir desta matriz, a probabilidade que um carro alugado na loja 3 vá ser devolvido na loja 2 é de 60%, a probabilidade que um carro alugado na loja 1 vá ser devolvido na loja 1 é 80%, e assim por diante." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Adiante vamos trabalhar mais com esse exemplo." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exemplo: Doações na Universidade" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Conferindo os registros de doações recebidas, a secretaria da associação de ex-alunos de uma universidade norte-americana observa que 80% de seus ex-alunos que contribuem ao fundo da associação em um certo ano também contribuem no ano seguinte e que 30% dos que não contribuem em um certo ano contribuem no ano seguinte. Isto pode ser visto como uma cadeia de Markov de dois estados: o estado 1 corresponde a um ex-aluno que contribui em um ano qualquer e o estado 2 corresponde a um ex-aluno que não contribuiu naquele ano. A matrriz de transição é:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# definindo a matriz de transição P\n", "P = np.array([[80/100, 30/100],\n", " [20/100, 70/100]])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A matriz de transição P é: \n", "\n", "[[0.8 0.3]\n", " [0.2 0.7]]\n" ] } ], "source": [ "# imprimindo a matriz P\n", "print(\"A matriz de transição P é: \\n\\n{}\".format(P))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nos exemplos acima, as matrizes de transição das cadeias de Markov têm a propiedade que as entradas em qualquer coluna somam 1. Isto não é acidental. Se **P** = [$P_{ij}$] é a matriz de transição de uma cadeia de Markov qualquer de **k** estados, então para cada **j** nós devemos ter \n", "$$p_{1j} + p_{2j} + ... p_{kj} = 1$$\n", "por que se o sistema está no estado **j** em uma observação, é certo que estará em um dos **k** estados possíveis na próxima observação." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uma matriz com essa propiedade é chamada **matriz estocástica**, **matriz de probabilidade** ou **matriz de Markov**. Pelo que observamos acima, a matriz de transição de uma cadeia de Markov é sempre uma matriz estocástica." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Em geral, não pode ser determinado com certeza o estado de um sistema em uma cadeia de Markov numa observação arbitrária. O melhor que podemos fazr é especificar probabilidades para cada um dos estados possíveis. Por exemplo, nós podemos descrever o estado possível do sistema em uma certa observação em uma cadeia de Markov com três estados, por um vetor-coluna:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$x = \\begin{bmatrix}\n", " x_{1} \\\\\n", " x_{2} \\\\\n", " x_{3} \\\\\n", " \\end{bmatrix}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Na qual $x_{1}$ é a probabilidade que o sistema está no estado 1, $x_{2}$ é a probabilidade que ele está no estado 2 e $x_{3}$ é a probabilidade que ele está no estado 3. Em geral, temos a seguinte definição:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> O **vetor-estado** de uma observação de uma cadeia de Markov com **k** estados é um vetor-coluna **x** cujo i-ésimo componente $x_{i}$ é a probabilidade do sistema estar, naquela observação, no i-ésimo estado." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observe que as entradas em qualquer vetor-estado de uma cadeia de Markov são não-negativas e têm soma 1. (Por que?) Um vetor-coluna com está propiedade é chamado **vetor de probabilidade**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suponha agora, que nós sabemos o vetor-estado $x^{(0)}$ de uma cadeia de Markov em alguma observação inicial. O teorema seguinte nos permitirá determinar os vetores-estado\n", "$$x^{(1)}, x^{(2)}, ..., x^{(n), ...}$$\n", "nas observações subsequentes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Teorema**: Se *P* é a matriz de transição de uma cadeia de Markov e $x^{(n)}$ é o vetor-estado da n-ésima observação, então $x^{(n + 1)} = Px^{n}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A prova deste teorema envolver ideias de teorias da probabilidades e não será dada aqui. Deste teorema, segue que" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| |\n", "|-----------------------------------------|\n", "|$$x^{(1)} = PX^{(0)}$$ |\n", "|$$x^{(2)} = PX^{(1)} = P^{2}x^{(0)}$$ |\n", "|$$x^{(3)} = PX^{(2)} = P^{3}x^{(0)}$$ |\n", "|