1. Definição dos estados do clima
estados = ["Ensolarado", "Nublado", "Chuvoso"]
2. Criação da Matriz de Transição de Estados (P)
Linhas representam o estado ATUAL (t) e colunas o PRÓXIMO estado (t+1)
[Ensolarado, Nublado, Chuvoso]
matriz_transicao = np.array([
[0.7, 0.2, 0.1], # Se hoje está Ensolarado: 70% de continuar, 20% nublado, 10% chuvoso
[0.3, 0.4, 0.3], # Se hoje está Nublado: 30% ensolarado, 40% continuar, 30% chuvoso
[0.2, 0.3, 0.5] # Se hoje está Chuvoso: 20% ensolarado, 30% nublado, 50% continuar
])
3. Definição do Estado Inicial (Vetor de Estado Inicial v0)
Vamos supor que HOJE o dia começou "Ensolarado" (100% de chance para Ensolarado)
O vetor segue a ordem: [Ensolarado, Nublado, Chuvoso]
estado_atual = np.array([1.0, 0.0, 0.0])
print(f"Estado Inicial (Dia 0): {estado_atual} -> Clima: {estados[np.argmax(estado_atual)]}\n")
4. Simulação da previsão para os próximos dias
dias_para_prever = 3
for dia in range(1, dias_para_prever + 1):
# Multiplicação matricial: estado_proximo = estado_atual * matriz_transicao
# Usamos o operador '@' do numpy para multiplicação de matrizes
estado_atual = estado_atual @ matriz_transicao
print(f" Previsão para o Dia {dia}:")
print(f" - Ensolarado: {estado_atual[0]*100:.1f}%")
print(f" - Nublado: {estado_atual[1]*100:.1f}%")
print(f" - Chuvoso: {estado_atual[2]*100:.1f}%\n")
::
Com certeza! Vamos construir juntos essa implementação em Python utilizando a biblioteca numpy. O objetivo aqui é estruturar a matriz de transição de estados e calcular a probabilidade do clima para os próximos dias com base em um estado inicial.
Implementação em Python
Aqui está o código estruturado para o seu modelo de previsão de clima. Você pode copiar e executar em qualquer ambiente Python (como o Jupyter Notebook ou VS Code).
import numpy as np
# 1. Definição dos estados do clima
estados = ["Ensolarado", "Nublado", "Chuvoso"]
# 2. Criação da Matriz de Transição de Estados (P)
# Linhas representam o estado ATUAL (t) e colunas o PRÓXIMO estado (t+1)
# [Ensolarado, Nublado, Chuvoso]
matriz_transicao = np.array([
[0.7, 0.2, 0.1], # Se hoje está Ensolarado: 70% de continuar, 20% nublado, 10% chuvoso
[0.3, 0.4, 0.3], # Se hoje está Nublado: 30% ensolarado, 40% continuar, 30% chuvoso
[0.2, 0.3, 0.5] # Se hoje está Chuvoso: 20% ensolarado, 30% nublado, 50% continuar
])
# 3. Definição do Estado Inicial (Vetor de Estado Inicial v0)
# Vamos supor que HOJE o dia começou "Ensolarado" (100% de chance para Ensolarado)
# O vetor segue a ordem: [Ensolarado, Nublado, Chuvoso]
estado_atual = np.array([1.0, 0.0, 0.0])
print(f"Estado Inicial (Dia 0): {estado_atual} -> Clima: {estados[np.argmax(estado_atual)]}\n")
# 4. Simulação da previsão para os próximos dias
dias_para_prever = 3
for dia in range(1, dias_para_prever + 1):
# Multiplicação matricial: estado_proximo = estado_atual * matriz_transicao
# Usamos o operador '@' do numpy para multiplicação de matrizes
estado_atual = estado_atual @ matriz_transicao
print(f" Previsão para o Dia {dia}:")
print(f" - Ensolarado: {estado_atual[0]*100:.1f}%")
print(f" - Nublado: {estado_atual[1]*100:.1f}%")
print(f" - Chuvoso: {estado_atual[2]*100:.1f}%\n")
Como o cálculo funciona por trás dos panos?
A Cadeia de Markov calcula o próximo estado através da multiplicação do vetor de probabilidade atual pela matriz de transição.
Se o estado inicial no Dia 0 é $v_0 = [1.0, 0.0, 0.0]$ (100% Ensolarado), a previsão para o Dia 1 é:
$$v_1 = v_0 \times P$$
Substituindo os valores:
$$v_1 = [1.0, 0.0, 0.0] \times \begin{bmatrix} 0.7 & 0.2 & 0.1 \ 0.3 & 0.4 & 0.3 \ 0.2 & 0.3 & 0.5 \end{bmatrix} = [0.7, 0.2, 0.1]$$
Para o Dia 2, o processo se repete utilizando o resultado do Dia 1:
$$v_2 = v_1 \times P$$