O Processo de Otimização em Modelos da COVID-19

Atenção: O objetivo deste artigo não é oferecer uma análise aprofundada da situação da pandemia para uma determinada região ou período, mas, sim, explicar os princípios do método de otimização que empregamos nessas análises, que são publicadas separadamente.

Da FioCruz à OMS, cientistas do mundo inteiro utilizam versões de modelos compartimentais, como o SEIR, para tentar responder questionamentos, avaliar o efeito de políticas de mitigação e prever o avanço da pandemia de COVID-19 ​[1]​. É possível ajustar o modelo SEIR para considerar desde efeitos demográficos, até efeitos climáticos ​[2]​. Entretanto, estamos lidando com uma pandemia em curso, de uma doença nova, provocada por um vírus que está em constante mutação ​[3]​. Isso traz uma enorme incerteza sobre esses parâmetros. Mesmo parâmetros importantes, tais como a taxa de mortalidade, ainda são difíceis de serem estimados devido às subnotificações ​[4]​. Então, como como estimar parâmetros aceitáveis para inserir no modelo? Para explicar nosso método, trazemos aqui uma analogia.

Figura 1: Analogia da bola de basquete ​[5]​.

Veja a animação acima. Suponha que, baseado nessa visão limitada da bola de basquete passando pela cesta, você precisa tentar estimar a partir de qual posição da quadra essa bola foi arremessada. Apesar do ângulo limitado, algumas informações são relativamente simples de estimar. Por exemplo, a trajetória com a qual a bola se aproxima, na figura acima, indica que o jogador provavelmente estava do lado esquerdo da cesta. Outras informações, como a altura do jogador, por exemplo, são bem mais difíceis de estimar. Como detetives, podemos nos sentir tentados a investigar detalhes. Podemos tentar estimar desde o arrasto aerodinâmico, até a influência da temperatura do ambiente na dilatação da bola. Levando ao extremo, estaríamos construindo um robô, como na figura abaixo.

Figura 2: Robô CUE3 da Toyota, é um robô jogador de basquete projetado para acertar todas as cestas.

Um dos problemas desse tipo de abordagem é que, empenhados em adicionar tantos detalhes ao modelo, ela vai se tornando mais complexa e dependente de parâmetros difíceis de serem estimados. Seduzidos pelo processo de construção do robô, podemos ter a ingênua impressão de que bastaria colocar muito esforço na construção do robô perfeito. Esse é um equívoco comum e perigoso, já que essa quantidade crescente de parâmetros incertos traz consigo a armadilha do sobreajuste.

Nossa abordagem é um tanto diferente da acima em um aspecto fundamental: ao invés de tentar construir um robô perfeito, complexo e detalhado, no lugar disso, criamos mais de uma dezena de milhares de robôs. São robôs um pouco menos complexos, mas que, em essência, possuem todas as características necessárias para tentar replicar aquele arremesso. Cada robô é um pouco diferente, e cada um é colocado em diferentes posições da quadra. São posições aleatórias, mas localizadas mais ou menos naquela direção de onde sabemos que a bola veio. Cada robô joga a bola do seu jeito. Umas bolas vão ao teto, outras batem nas paredes, mas desses milhares de arremessos, há talvez meia dúzia de robôs que acertam a cesta no ângulo certo. Selecionando os robôs que fizeram esses arremessos, podemos tentar responder nossas perguntas. Por exemplo, podemos observar a altura desses robôs, verificar se há uma tendência, uma altura média com pouca variância. Isso nos dá uma ideia da provável altura do jogador do arremesso original.

“…ao invés de tentar construir um robô perfeito, complexo e detalhado, no lugar disso, criamos mais de uma dezena de milhares de robôs”

Em se tratando de modelos computacionais, essa é uma abordagem um tanto comum. Ao modelar a pandemia de COVID-19, no lugar da observação limitada da bola entrando na cesta, temos dados limitados, como a evolução diária na quantidade de casos confirmados. Esses trazem consigo apenas algumas informações, ainda por cima incompletas e atrasadas no tempo. Um relatório técnico de pesquisadores da PUCRio ​[4]​ sugere que apenas algo em torno de 6% a 8% dos infectados se tornam confirmados, número coerente com os encontrados em estudos de prevalência da doença no RS, realizados pela UFPel ​[6]​. Estima-se que essa confirmação acontece cerca de uma semana após a infecção, já que no Brasil testamos quase que exclusivamente pessoas hospitalizadas, já com sintomas graves. No lugar dos milhares de robôs, temos milhares de instâncias de modelos SEIR, com seus diferentes parâmetros. Buscamos os modelos cujos parâmetros geram dados os mais próximos possíveis dos dados reais, mas como podemos medir esssa “proximidade”?

Erro quadrático médio

Para medir a qualidade de cada versão de nosso modelo, “sorteamos” os parâmetros e rodamos o modelo, gerando uma série de dados que descreve a quantidade acumulada de infectados ao longo do tempo, mas, calma, isso não é o fim da história. Ainda após isso, precisamos simular a subnotificação da doença, incluindo parâmetros como percentual de infectados que são confirmados e o atraso no tempo. Além disso, para garantir que a comparação que faremos posteriormente com dados históricos seja justa, é importante descartar os dados iniciais, quando ainda há menos que, digamos, 40 ou 50 casos confirmados — isso serve para evitar os efeitos das instabilidades observadas no início da pandemia, quando não tínhamos ainda políticas de testagem e notificações bem definidas.

No final do processo, temos uma simulação f(\theta_1, \theta_2, \cdots) que usa os parâmetros \theta_i para de gerar uma sequência de “casos confirmados simulados” \hat{y}_0, \hat{y}_1, \cdots.

(1)   \begin{align*}f(\theta_1, \theta_2, \cdots) = \hat{y}_0, \hat{y}_1, \cdots\end{align*}

Para comparar esses dados simulados \hat{y}_0, \hat{y}_1, \cdots com os dados históricos y_0, y_1, \cdots utilizamos aquilo que chamamos de função de custo. A função de custo é uma função que compara os dados gerados com os dados reais, produzindo um número, às vezes chamado de custo ou erro, que indica uma medida da diferença entre os dois. Quanto menor o erro, mais parecidos são os dados simulados e os reais. A função de custo que utilizamos aqui é o erro quadrático médio.

(2)   \begin{align*}E = \frac{1}{N} \sum_{k=0}^{N} \left(y_k - \hat{y}_k \right)^2\end{align*}

Pronto! Agora temos uma forma de avaliar a performance de cada modelo. Resta ainda um detalhe: como decidir quais parâmetros testar?

O Método de Busca

O método de busca mais intuitivo e simples de se implementar é a chamada busca em grade. Nesse método, simplesmente definimos intervalos de valores para cada um dos parâmetros, e amostramos valores em intervalos fixos dentro daquele intervalo. Infelizmente, apesar de simples, esse tipo de busca é extremamente ineficiente, especialmente para sistemas com muitos parâmetros. Observe a Figura 3 abaixo. Nessa figura, adaptada de ​[7]​, comparamos uma busca em grade e uma busca aleatória. Em ambos casos, testamos nove conjuntos de parâmetros, de uma função de duas variáveis f(x,y). Suponha que essa função combina o efeito de dois parâmetros f(x,y) = g(x) + h(y). Na figura g(x), é mostrada em verde e h(x) em amarelo. Imagine que, na prática, apenas um dos parâmetros realmente tem relevância significativa, ou seja, f(x,y) \approx g(h). Isso significa que apesar do número de parâmetros ser dois, efetivamente a função se comporta como se dependesse de um único parâmetro. Note que na busca em grade, apesar dos nove testes, testamos efetivamente apenas três pontos em cada parâmetro. Já na busca aleatória, testamos todos os nove pontos em cada uma das duas dimensões.

Figura 3: Busca em grade vs. busca aleatória de nove conjuntos de parâmetros para uma função f(x,y)=g(x)+h(y) \approx g(x)

Na prática, isso acontece frequentemente e o efeito é ainda mais dramático para funções de mais dimensões. No modelo SEIR, não é diferente: dependendo da métrica que estamos querendo observar, alguns parâmetros importam muito mais do que outros, e há parâmetros que podem até ser ignorados.

Exemplo

Como exemplo, rodamos este processo de simulação nos dados de casos confirmados do Rio Grande do Sul.

Neste gráfico ao lado, mostramos o resultado da evolução do erro quadrático médio ao longo de 15 mil simulações do modelo SEIR com os seguintes passos:

  1. Definimos intervalos iniciais para cada parâmetro, baseados na literatura;
  2. Sorteamos 1000 conjuntos de parâmetros dentro do intervalo;
  3. Avaliamos as 1000 simulações, calculando o erro quadrático médio de cada uma;
  4. Redefinimos o intervalo de amostra dos parâmetros de acordo com os valores encontrados para as 10 melhores simulações;
  5. Repetimos a partir do passo 2 por um total de 15 vezes, rodando, portanto, 15 mil simulações.

Felizmente, rodar o modelo SEIR determinístico, num computador moderno, não leva mais que uma fração de segundos, permitindo que um experimento como esse possa ser realizado em menos de três minutos. Na prática, repetimos esse experimento algumas dezenas de vezes para avaliar também tendências nos valores para os quais os parâmetros convergem.

Resultados

Lembre que o objetivo deste artigo não é oferecer uma análise aprofundada da situação da pandemia para uma determinada região ou período, mas, sim, explicar os princípios do método de otimização que empregamos nessas simulações. Ainda assim, para maior clareza, explicamos aqui alguns detalhes específicos. Nesta simulação, consideramos uma razão de 8:100 entre casos confirmados e número total de infectados. Este valor é compatível com o estimado por ​[4]​ e, considerando a população do RS, gera uma prevalência dentro do intervalo de confiança de 95\% estimado pelo recente estudo de prevalência de COVID-19 no RS divulgado pela Universidade Federal de Pelotas ​[6]​. Incluímos também um atraso de 1 semana entre o dia do início da infecção e a confirmação em nosso modelo, parâmetro compatível com a realidade brasileira já que, devido à escassez de testes disponíveis, testamos quase que exclusivamente apenas aqueles que procuram os hospitais, já com sintomas mais avançados. A Figura 4 mostra os resultados.

Figura 4: Resultado do processo de otimização

Na figura acima, vemos um exemplo de resultado do processo de otimização aplicado à série de casos confirmados desde o primeiro dia em que constatamos mais de 50 casos, até dia 4 de Abril de 2020. Nota-se que alguns parâmetros oferecem pouca influência no resultado. Por exemplo, o período de latência do vírus é pouco menos de um dia, mas varia entre 12h e 24h. O período de contágio gira em torno de sete dias. Felizmente, um parâmetro importante parece convergir com razoável certeza: o R_0.

Agora, dentre as melhores dessas milhares de simulações, podemos escolher uma e observar mais de perto. A Figura 5 mostra um exemplo.

Figura 5: Na esquerda um exemplo de comparação entre uma curva otimizada e o histórico de casos confirmados no RS. Na direita a diferença entre as duas curvas.

Considerações Finais

Existe abundante literatura documentando métodos de ajuste de hiperparâmetros, em especial na literatura recente, alimentada pela demanda criada devido às aplicações de redes neurais e deep learning. Métodos clássicos incluem desde descida de gradiente até algoritmos evolucionários. Neste artigo, buscamos apresentar, de forma didática, uma introdução ao tema. Entretanto, na prática, é preciso entender qual o objetivo a ser alcançado, pois isso influencia na escolha do método. Métodos mais direcionados, como a descida do gradiente, favorecem uma convergência para soluções específicas, suscetível a mínimos locais. Nesse tipo de abordagem que aqui descrevemos, notem que não estamos tentando encontrar uma única solução perfeita. No lugar disso, procuramos encontrar as melhores soluções e avaliar suas características predominantes, tarefa que métodos de busca aleatória atendem muito bem.

Referências

  1. [1]
    F. Amira Binti Hamzah et al., “CoronaTracker: Worldwide COVID-19 Outbreak Data Analysis and Prediction,” Bulletin of the World Health Organization, Mar. 2020.
  2. [2]
    L. Sattenspiel and A. Lloyd, The geographic spread of infectious diseases: models and applications, vol. 5. Princeton University Press, 2009.
  3. [3]
    J. Hadfield et al., “Nextstrain: real-time tracking of pathogen evolution,” Bioinformatics, pp. 4121–4123, May 2018, doi: 10.1093/bioinformatics/bty407.
  4. [4]
    M. Prado et al., “Análise de subnotificação do número de casos confirmados da COVID-19 no Brasil,” PUCRio, Apr. 2020.
  5. [5]
    R. F. StockFootage.com, “Royalty Free Stock Footage of Slow motion shot of a ‘nothing but net’ basketball shot.,” YouTube, Sep. 16, 2011. https://www.youtube.com/watch?v=v4RgmTzHF18 (accessed Apr. 29, 2020).
  6. [6]
    P. Curi Hallal et al., “Evolução da prevalência de infecção por COVID-19 no Rio Grande do Sul: inquéritos sorológicos seriados,” Ciência e Saúde Coletiva. Apr. 2020.
  7. [7]
    J. Bergstra and Y. Bengio, “Random search for hyper-parameter optimization,” Journal of machine learning research, vol. 13. pp. 281–305, 2012.

Autores

, ,