Os custos da Amazon Web Services ou do Google Cloud podem ser confusos, e é difícil "filtrar o ruído" para enxergar o que realmente importa. Este artigo mostra como detectar tendências em custos ou uso usando a análise de Mann-Kendall.

filtrar o "ruído" do faturamento da AWS ou do Google Cloud pode ser difícil
Imagine que você está olhando dados de séries temporais sobrepostas que detalham seus gastos com nuvem por serviço no último mês (veja abaixo). Quando há séries demais (no nosso exemplo, 50), fica difícil identificar a olho nu quais delas estão subindo ou caindo — afinal, é normalmente isso que nos interessa.
Neste post, você vai ver como "separar o sinal do ruído" ao lidar com muitos dados de séries temporais.

Dados de séries temporais sobrepostas em um único gráfico.
Existem várias abordagens para verificar se há ou não uma tendência monotônica linear em uma determinada série temporal.
Detectando tendências com o teste de Mann-Kendall
Na DoiT International, como parte das tecnologias de Cloud Management que desenvolvemos para nossos clientes, usamos o teste de Mann-Kendall para criar uma funcionalidade de Análise de Tendências com um clique [ veja o vídeo]. Esse teste é parecido com uma análise de regressão linear paramétrica, que pode ser usada para verificar se a inclinação da reta de regressão linear estimada é diferente de zero. Essa análise de regressão exige que os resíduos da reta de regressão ajustada tenham distribuição normal — uma premissa que o teste MK não exige (o teste MK é não paramétrico).

Análise de Tendências em ação na Cloud Management Platform (CMP) da DoiT International
Premissas por trás do teste de Mann-Kendall
O teste parte das seguintes premissas, dada uma série temporal:
1. Na ausência de tendência, as medições obtidas ao longo do tempo são independentes e identicamente distribuídas.
2. As medições representam os estados reais das variáveis observadas nos momentos das medições.
3. Os métodos usados para coleta de amostras, medições instrumentais e tratamento dos dados são imparciais.
Limitações que vale a pena ter em mente
O teste de Mann-Kendall não é adequado para dados com periodicidades (ou seja, efeitos sazonais). Para que o teste seja eficaz, recomenda-se remover todos os efeitos periódicos conhecidos dos dados em uma etapa de pré-processamento antes de rodar o teste.
Decomposição de séries temporais
Podemos usar a decomposição sazonal de séries temporais por Loess (STL) para separar uma série temporal em componentes sazonal, de tendência e irregular. Essa decomposição pode ser feita facilmente com o package stl em Go.
O método stl.Decompose recebe como entrada os seguintes parâmetros obrigatórios:
- A série temporal que você quer decompor
- Periodicidade dos dados
- Largura sazonal
- Tipo de modelo
O modelo pode ser stl.Additive() quando as variações em torno da tendência não variam com o nível da série temporal, ou stl.Multiplicative() quando a tendência é proporcional ao nível da série temporal.
Você pode decompor sua série temporal e acessar cada componente assim:
res := stl.Decompose(timeSeries, periodicity, width, modelType)
trend := res.Trend
seasonal := res.Seasonal
residual := res.Resid
Abaixo, você vê um exemplo de uma série temporal decomposta com sazonalidade semanal usando o modelo multiplicativo. Dá para perceber que os valores estão em tendência de alta e notar "quedas" sazonais a cada sete dias.

Exemplo de uma série temporal decomposta em componentes de tendência, sazonal e residual.
Fazendo sua própria análise de tendências
Execute o script abaixo para ver um exemplo de como o teste de Mann-Kendall identifica uma tendência monotônica em uma série temporal de exemplo.
Se houver uma tendência nos seus dados de séries temporais, talvez você queira calcular a inclinação da reta de regressão. Isso ajuda a ver com que rapidez seus dados mudam. Essa informação é útil quando você quer, por exemplo, filtrar todas as séries temporais cuja inclinação da regressão seja menor ou maior que X graus.
Veja na prática como implementamos a análise de tendências na DoiT International, dentro da nossa Cloud Management Platform, aqui!