Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

¡Evita el susto con la factura de Google Cloud!

By Gad BenramAug 13, 20184 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

1 n7pqsiokjmjskzeevalnqg

Con Google BigQuery ML ya puedes predecir tu gasto en Google Cloud en pocos minutos y sin salir de la consola de BigQuery.

Introducción

La regresión lineal, pese a su sencillez, permite generar predicciones precisas para todo tipo de problemas reales de forma eficiente. Al ser tan simple, su entrenamiento es fácil de configurar y converge rápido.

En este artículo te explico cómo analizar los datos de facturación de Google Cloud y armar un modelo de predicción sencillo para estimar el gasto mensual total esperado. Para hacerlo más interesante, voy a usar únicamente Google BigQuery, de modo que todos los datos de facturación se queden dentro del ecosistema del data warehouse.

En este ejercicio voy a usar Google Billing Exports. La exportación de facturación a BigQuery permite exportar de forma automática el uso y los cargos diarios a lo largo del día hacia el dataset de BigQuery que tú elijas. Puedes leer más sobre Google Billing Exports aquí.

Los datos y los ejemplos de código están disponibles aquí: https://github.com/doitintl/BigQueryML-Examples

Datos en bruto

La siguiente tabla muestra los cargos de los distintos servicios consumidos por dos cuentas de facturación de Google Cloud que tenemos.

1 vb3ozvak6g fgxwzr4fqjwDatos de muestra en Google Billing Exports a BigQuery

El modelo que queremos

El objetivo es estimar la factura total del mes en curso a partir de todos los cargos recibidos hasta un día determinado.

El modelo no solo le permitirá al cliente estimar el gasto total, sino también detectar anomalías y disparar alertas ante sobrecargos.

Supuestos

El modelo parte de la base de que la factura mensual depende linealmente de 3 variables:

1 wrfnb4izknofssyeq8uoqg

La primera variable refleja la tendencia de consumo diario actual. Las otras dos son los días que faltan para fin de mes y el saldo actual. En conjunto, estas tres variables le permiten al modelo estimar el gasto mensual restante.

Agregando los datos a resolución diaria

Como el modelo necesita los datos a resolución diaria, vamos a usar BigQuery para agregarlos por día.

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

El esquema resultante es el siguiente:

account_name — el id de la cuenta

day — días que faltan para fin de mes

month — mes de facturación

year — año de facturación

daily_cost — el costo total pagado por todos los servicios durante el día de facturación

monthly_cost — la etiqueta: la suma de todos los cargos del mes en curso, incluida la facturación futura

Una vez agregados los datos a resolución diaria, los guardo como una nueva tabla y los uso para generar un dataset de ML.

1 a2qffeux7bxvnf4qcwzhga

Cómo calcular agregaciones por ventana

El siguiente paso es calcular cuánto se le ha facturado a cada cuenta desde el inicio del mes hasta el día actual. Para esto vamos a usar una función de ventana agregada, que además nos servirá para calcular el gasto diario promedio del mes hasta hoy.

La sintaxis de la función de ventana agregada está aquí: [1]

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

Aplico la función a nuestra tabla billing_daily_monthly de la siguiente manera:

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

Al graficar los datos se ve que la factura mensual crece de forma bastante lineal:

0 rzdik1lnm28mhc1l

Estos resultados nos dan confianza de que un modelo lineal es la opción adecuada para el problema del gasto. Además, el gradiente varía poco entre meses, lo que sugiere que las features elegidas son estadísticos suficientes respecto a la variable independiente.

Por supuesto, con más features y modelos más complejos lo más probable es que se obtengan predicciones más precisas, y eso se puede construir con otras herramientas como Google Cloud ML. Pero, por ahora, parece que ya terminamos de preparar los datos.

(¡WOO HOO!)

Cómo ajustar un modelo de regresión lineal con BigQuery ML

Con los datos listos, puedo usar la nueva herramienta BigQuery ML (lanzada en agosto de 2018) para ajustar un modelo de regresión lineal a los datos.

¡Ajustar el modelo a nuestro dataset es increíblemente fácil!

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

Predicciones y evaluación del modelo

Una vez guardado, el modelo se puede usar para hacer predicciones. Para eso uso la siguiente consulta, que estima el gasto mensual final y calcula el Error Absoluto Relativo de las predicciones por día:

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

Los resultados que aparecen en la siguiente tabla se pueden guardar y reutilizar en otros componentes del sistema, como aplicaciones de monitoreo y alertas. El Error Absoluto Relativo Medio del modelo es de aproximadamente 3.0%, lo cual no está nada mal. (Nota: los datos se generaron específicamente para esta demo. Con datos reales logré un error cercano al 2.0%).

1 ef6msvlrw1gdlnxuhvxk0qpredicción de muestra

¿Quieres más contenido como este? Pásate por nuestro blog o sigue a Gad en Twitter.

Agradecimientos: Vadim Solovey — Edición

amiel m — Revisión técnica

Palabras clave: BigQueryML, tutorial de BigQuery ML, ejemplo de BigQuery ML