Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

Faça como eu fiz: utilizando cadeias de Markov

import numpy as np

# Definição dos estados:
estados = ["Ensolarado", "Nublado", "Chuvoso"]

# Matriz de transição (linhas = estado atual, colunas = próximo estado)
# Cada linha deve somar 1
matriz_transicao = np.array([
    [0.7, 0.2, 0.1],  # Probabilidades se hoje está Ensolarado
    [0.3, 0.4, 0.3],  # Probabilidades se hoje está Nublado
    [0.2, 0.3, 0.5]   # Probabilidades se hoje está Chuvoso
])

def prever_clima(dias, estado_inicial="Ensolarado"):
    # Índice do estado inicial:
    estado_atual = estados.index(estado_inicial)
    previsao = [estado_inicial]

    for _ in range(dias):
        # Escolha do próximo estado com base nas probabilidades da matriz:
        estado_atual = np.random.choice(
            range(len(estados)),
            p=matriz_transicao[estado_atual]
        )
        previsao.append(estados[estado_atual])

    return previsao

# Previsão de clima para os próximos 7 dias:
previsao_7_dias = prever_clima(7, estado_inicial="Nublado")
print("Previsão para os próximos 7 dias:")
print(previsao_7_dias)

Previsão para os próximos 7 dias:
['Nublado', 'Nublado', 'Nublado', 'Chuvoso', 'Nublado', 'Nublado', 'Chuvoso', 'Nublado']
2 respostas

Olá, Andressa! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a Cadeia de Markov para previsão de estados com Python, utilizou muito bem a matriz de transição para modelar probabilidades e ainda compreendeu a importância da simulação estocástica para prever cenários futuros.

Uma dica interessante para o futuro é calcular a distribuição estacionária da cadeia, ou seja, a probabilidade de longo prazo de cada estado. Assim:

# Distribuição estacionária
from numpy.linalg import eig

valores, vetores = eig(matriz_transicao.T)
estacionario = vetores[:, np.isclose(valores, 1)]
estacionario = estacionario / estacionario.sum()
print("Distribuição estacionária:", estacionario.real.flatten())

Isso faz a análise de quais estados tendem a ser mais frequentes no longo prazo, independente do estado inicial.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Rodar múltiplas simulações: calcular médias e variâncias para maior robustez.
  • Testar diferentes matrizes de transição: para simular cenários sazonais ou extremos.
  • Visualizar resultados: usar gráficos de barras ou linhas para mostrar evolução dos estados.
Conteúdos relacionados

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução do navegador.

Ah, uma pergunta: Você acredita que cadeias de Markov são mais eficazes para prever fenômenos naturais como clima ou para modelar comportamento humano em sistemas digitais como e-commerce?

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Muito obrigada pelo retorno, Daniel!