Solucionado (ver solução)

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!

Solucionado
(ver solução)
1
resposta

[Projeto] Faça como eu fiz: utilizando cadeias de Markov | Fundamentos de IA: explorando a estrutura e abordagens de sistemas inteligentes

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$$

1 resposta
solução!

Olá, Estudante! 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 multiplicação matricial para calcular probabilidades futuras e ainda compreendeu a importância do vetor de estado inicial para definir o ponto de partida da simulação.

Uma dica interessante para o futuro é calcular a previsão para um número maior de dias e observar a tendência de estabilização das probabilidades (distribuição estacionária). Assim:

dias_para_prever = 10
for dia in range(1, dias_para_prever + 1):
    estado_atual = estado_atual @ matriz_transicao
    print(f"Dia {dia}: {estado_atual}")

Isso faz a análise de como, ao longo do tempo, o sistema tende a se estabilizar em uma distribuição fixa de probabilidades, independentemente do estado inicial.

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

  • Testar diferentes matrizes de transição: simular cenários sazonais ou extremos.
  • Visualizar os resultados: usar gráficos de linhas para mostrar a evolução das probabilidades.
  • Comparar estados iniciais: verificar como diferentes pontos de partida influenciam o curto prazo, mas não o longo prazo.

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 padrões de comportamento humano em sistemas digitais?

Abraço e bons estudos!

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