Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Evite o susto com a fatura do Google Cloud!

By Gad BenramAug 13, 20184 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

1 n7pqsiokjmjskzeevalnqg

Com o Google BigQuery ML, dá para prever seus gastos no Google Cloud em poucos minutos, sem sair do console do BigQuery.

Introdução

A regressão linear, apesar de bem simples, consegue gerar previsões precisas e eficientes para diversos problemas do mundo real. Justamente por essa simplicidade, treinar um modelo de regressão linear é fácil de configurar e tem a vantagem de uma convergência rápida.

Neste post, vou mostrar como analisar dados de billing do Google Cloud e construir um modelo de previsão simples para estimar o gasto mensal total. Para deixar a coisa mais interessante, vou usar só o Google BigQuery, mantendo todos os dados de billing dentro do ecossistema de data warehouse.

Neste exercício, vou usar o Google Billing Exports. A exportação de billing para o BigQuery permite que clientes exportem o uso e os encargos diários automaticamente ao longo do dia para um dataset do BigQuery que você definir. Saiba mais sobre o Google Billing Exports aqui.

Os dados e exemplos de código estão disponíveis aqui: https://github.com/doitintl/BigQueryML-Examples

Dados brutos

A tabela abaixo lista as cobranças de vários serviços consumidos por duas contas de billing do Google Cloud que temos.

1 vb3ozvak6g fgxwzr4fqjwExemplo de dados no Google Billing Exports para o BigQuery

Modelo desejado

O objetivo é estimar o valor total da fatura do mês corrente com base em todas as cobranças recebidas até um determinado dia.

O modelo permite ao cliente não só estimar o gasto total, como também detectar anomalias e criar alertas para cobranças excessivas.

Premissas

O modelo parte do princípio de que a fatura mensal depende linearmente de 3 variáveis:

1 wrfnb4izknofssyeq8uoqg

A primeira variável representa a tendência atual de consumo diário. As outras duas são o número de dias até o fim do mês e o saldo atual. Juntas, essas variáveis permitem ao modelo estimar o gasto restante do mês.

Agregando os dados em resolução diária

Como o modelo precisa de dados em resolução diária, vamos usar o BigQuery para agregar os dados por dia.

https://gist.github.com/gidutz/2ce58c9391c979b63ac1bbe3bfece7c5

O esquema resultante fica assim:

account_name — o id da conta

day — dias restantes até o fim do mês

month — mês de billing

year — ano de billing

daily_cost — o custo total pago por todos os serviços no dia de billing

monthly_cost — o rótulo, ou seja, a soma de todas as cobranças feitas no mês corrente, incluindo cobranças futuras

Com os dados agregados em resolução diária, salvo tudo em uma nova tabela e a uso para gerar um dataset de ML.

1 a2qffeux7bxvnf4qcwzhga

Calculando agregações em janela

O próximo passo é calcular quanto foi cobrado de cada conta desde o início do mês até o dia atual. Para isso, vamos usar uma função de janela agregada, que também nos permite calcular o gasto diário médio do mês até o dia atual.

A sintaxe da função de janela agregada está aqui: [1]

analytic_function_name ( [ argument_list ] )
OVER (
[ PARTITION BY partition_expression_list ]
[ ORDER BY expression [{ ASC | DESC }] [, ...] ]
[ window_frame_clause ]
)

Aplico a função na nossa tabela billing_daily_monthly assim:

https://gist.github.com/gidutz/da662ead3e013c45436b10b574585c06

Plotando os dados, dá para ver que a fatura mensal cresce de forma praticamente linear:

0 rzdik1lnm28mhc1l

Os resultados acima reforçam que um modelo linear é uma escolha adequada para o problema de gasto. Além disso, o gradiente tem pouca variância entre os meses, o que sugere que as features escolhidas são estatísticas suficientes em relação à variável independente.

Claro, mais features e modelos mais complexos tendem a gerar previsões mais precisas — e isso pode ser feito com outras ferramentas, como o Google Cloud ML. Mas, por enquanto, a preparação dos dados está pronta.

(EBA!)

Treinando um modelo de regressão linear com BigQuery ML

Com os dados prontos, posso usar o BigQuery ML (lançado em agosto de 2018) para treinar um modelo de regressão linear.

Treinar o modelo no nosso dataset é absurdamente simples!

https://gist.github.com/gidutz/7a0bd510494285fd679cde71944e9d77

Fazendo previsões e avaliando o modelo

Depois de salvo, o modelo pode ser usado para fazer previsões. Para isso, uso a consulta a seguir, que estima o gasto final do mês e calcula o erro absoluto relativo das previsões por dia:

https://gist.github.com/gidutz/f7de19eee11478d75757e4bdc3b25001

Os resultados mostrados na tabela a seguir podem ser salvos e consumidos por outros componentes do sistema, como aplicações de monitoramento e alertas. O erro absoluto relativo médio do modelo é de cerca de 3,0%, o que não é nada mau. (Vale lembrar que os dados foram gerados especialmente para esta demo. Com dados reais, cheguei a cerca de 2,0% de erro.)

1 ef6msvlrw1gdlnxuhvxk0qexemplo de previsão

Quer mais conteúdos? Confira nosso blog ou siga o Gad no Twitter.

Agradecimentos: Vadim Solovey — Edição

amiel m — Revisão técnica

Palavras-chave: BigQueryML, tutorial BigQuery ML, exemplo BigQuery ML