Este blog es coautoría de Karen Yuan, becaria de Secundaria
En nuestra Artículo anterior, aprendimos a hacer análisis exploratorio de datos usando el servicio Couchbase Query. También aprendimos a leer eficientemente datos de entrenamiento con las APIs de Query en el Couchbase Python SDK y a guardarlos sin problemas en un dataframe pandas adecuado para machine learning (ML). Y finalmente, almacenamos modelos de ML y sus metadatos en Couchbase. En este artículo, aprenderemos a hacer predicciones, almacenarlas en Couchbase y utilizar los gráficos de Query para analizarlas.
Predicción en tiempo real
El científico de datos utiliza el modelo entrenado para generar predicciones.
Utilizaremos el flujo de predicción de la Figura 1 para predecir la puntuación del churn en tiempo real y almacenaremos la predicción en Couchbase. Utilizaremos el modelo de predicción de churn que entrenamos en el artículo anterior.

Función para leer el modelo y sus metadatos almacenados en Couchbase:
|
1 2 3 4 5 6 7 |
def read_model_from_couchbase(model_id): cubo = grupo.cubo(model_repository) bytes_modelo = cubo.consiga(model_id).valor modelo = pepinillo.cargas(bytes_modelo) clave = model_id + "_metadatos" nombres_de_características = cubo.consiga(clave).valor['feature_names'] devolver {modelo: modelo, 'feature_names': configure(nombres_de_características)} |
Función para leer datos de clientes almacenados en Couchbase:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Utilizaremos la interfaz Query del SDK Python de Couchbase para obtener varios clientes # que cumplan una condición. Alternativamente, la interfaz GET en el Couchbase Python SDK puede # utilizarse para obtener registros de clientes individuales, por ejemplo bucket.get(clave_cliente).valor def read_data_from_couchbase(select_clause = "", donde_clausa = ""): si select_clause: declaración_consulta = "SELECT cliente.*," + select_clause si no: declaración_consulta = "SELECCIONE cliente.*" declaración_consulta = declaración_consulta + " FROM `online_streaming` as customer" si donde_clausa: declaración_consulta = declaración_consulta + " DONDE " + donde_cláusula # Utilizar la API de consulta para obtener registros de clientes resultado_consulta = cb.consulta(declaración_consulta) devolver pd.DataFrame.desde_dict(lista(resultado_consulta)) |
Los siguientes predecir lee el modelo, sus metadatos y los registros de clientes utilizando las funciones anteriores. Convierte los datos del cliente en características utilizando el mismo proceso que el utilizado durante el entrenamiento (es decir, codificación de un solo paso). A continuación, predice la puntuación del churn ejecutando el modelo en las características.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
def predecir(model_id, select_clause = "", donde_clausa = ""): # Paso 1: Leer el modelo y sus metadatos desde Couchbase rv = read_model_from_couchbase(model_id) modelo = rv[modelo] nombres_de_características = rv['feature_names'] # Paso 2: Leer registros de clientes de Couchbase df = read_data_from_couchbase(select_clause, donde_clausa) predicción_cliente = df # Paso 3: Convertir los datos brutos en características esperadas por el modelo df = pd.get_dummies(df) drop_cols = configure(lista(df.columnas)) - nombres_de_características df.drop(drop_cols, eje = 1, en su lugar = Verdadero) df = df.reindexar(columnas=nombres_de_características, valor_relleno=0) # Paso 4: Predecir predicción = modelo.predecir(df) predicción_cliente[Predicción de bajas] = predicción devolver predicción_cliente |
|
1 2 3 |
# Ejemplo: Predecir el abandono de un cliente con un ID determinado predicción = predecir(churn_predictor_model_v1, donde_clausa = "customer.CustomerID = 100002")[[Cliente, Predicción de bajas]] predicción |
Predicción de rotación para customerID 100002 es 1. Esto indica que es probable que abandonen el servicio de streaming.
![]()
La predicción se guarda en un bucket de Couchbase llamado predictions utilizando el código que se muestra a continuación. Crea el bucket de predicciones en tu clúster de Couchbase antes de continuar.
|
1 2 3 4 |
cubo = grupo.cubo(predicciones) guardar = predicción.to_dict(orient="registros")[0] clave = str(predicción.iloc[0][Cliente]) cubo.upsert(clave, guardar) |
Comprueba que la predicción se ha guardado correctamente en Couchbase.

También puedes ejecutar el modelo entrenado y generar predicciones en Couchbase Analytics usando la característica Python UDF (actualmente en vista previa para desarrolladores). Consulta el artículo sobre Ejecución de modelos ML con Couchbase Analytics Python UDF para más información.
Análisis hipotético
El científico de datos analizará las predicciones para responder a preguntas que ayuden a tomar decisiones.
El problema que definimos en el artículo anterior era el de un equipo de ventas de una empresa de servicios de streaming en línea que quería saber si el aumento del coste mensual maximizaría los ingresos manteniendo a raya la fuga de clientes.
Para responder a esta pregunta, utilizaremos el siguiente código para predecir las puntuaciones de rotación cuando los costes mensuales aumenten en $1, $2, etc. Los resultados de este análisis se almacenarán en el bucket de predicciones.
Utilizando la interfaz de usuario del clúster Couchbase, cree un ámbito llamado análisis_y_si y la colección denominada aumentar_coste_mensual en el bucket de predicciones. (Los ámbitos y las colecciones están disponibles en Couchbase Server 7.0 y posteriores)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# Conectar con el bucket de predicciones en Couchbase y el ámbito y la colección pertinentes cubo = grupo.cubo(predicciones) wa_scopio = cubo.alcance("análisis_y_si") wa_colección = wa_scopio.colección("aumentar_coste_mensual") # Predecir la tasa de rotación si el coste mensual de los clientes existentes se incrementa en # $1, $2 .. $5 para aumentar_por en gama (1, 6): # where_cluase se establece en customer.Churn = 0 porque nos interesa # sólo en clientes existentes # La siguiente select_clause actualizará el MonthlyCost como se muestra mientras devuelve el # resultado de la consulta. En cada iteración de este bucle el CosteMensual aumentará en $1, $2 ... select_clause = "cliente.`CosteMensual` + " + str(aumentar_por) + " as `CosteMensual`" # El CosteMensual actualizado se pasa como entrada junto con otros atributos a la predicción Función #. El resultado indica cuáles de los clientes existentes probablemente # a churn si el MonthlyCost se incrementa en la cantidad especificada. rv = predecir(churn_predictor_model_v1, select_clause = select_clause, donde_clausa = "cliente.Churn = 0") # Los ingresos mensuales se predicen sumando el coste mensual de los clientes que no es probable que abandonen. rv[Ingresos mensuales previstos] = (1 - rv[Predicción de bajas]) * rv[Coste mensual] índice_de_retorno_previsto = rv[Predicción de bajas].recuentos_de_valores(normalizar=Verdadero).mul(100)[1] # Guardar predicciones en Couchbase. guardar = {Aumento mensual de costes ($): aumentar_por, Ingresos mensuales previstos: rv[Ingresos mensuales previstos].suma(), Tasa de cancelación prevista: índice_de_retorno_previsto} clave = "incremento_por_$" + str(aumentar_por) wa_colección.upsert(clave, guardar) # Utilice la API de consulta para calcular los ingresos actuales. Almacénelo también en el cubo de predicciones. Esto es # utilizado para la comparación actual = cb.consulta(SELECT sum(customer.`MonthlyCost`) as CurrentRevenue FROM `online_streaming` customer where customer.Churn = 0') guardar = {Aumento mensual de costes ($): 0, Ingresos mensuales previstos: lista(actual)[0][Ingresosactuales], Tasa de cancelación prevista: 0} wa_colección.upsert("actual", guardar) |
Para analizar los resultados de la predicción mediante Couchbase Query, cree un índice primario en el archivo análisis_y_si tal y como se muestra en la siguiente interfaz de consulta. Tenga en cuenta que el contexto de consulta debe establecerse como se muestra.

Se pueden utilizar gráficos de consulta para analizar los resultados de la predicción. El gráfico siguiente muestra que se prevé que ~7% de los clientes existentes se darán de baja si su coste mensual aumenta en $1, ~10% probablemente se darán de baja si el coste mensual aumenta en $2, etc.

El gráfico siguiente muestra que los ingresos mensuales actuales son de $3,15 millones. Se prevé que estos ingresos aumenten en ~$50K si el coste mensual de suscripción de los clientes existentes se incrementa en $1 y en ~$230k si el coste mensual se incrementa en $2. Pero se prevé que los ingresos disminuyan si el coste mensual se incrementa en $3 o más debido a la mayor tasa de rotación prevista.

Utilizando este análisis, podemos concluir que el equipo de ventas de la empresa de servicios de streaming online puede aumentar el coste de suscripción mensual en $2 para maximizar los ingresos y mantener a raya la tasa de rotación.
La opción "Descargar gráfico" de la interfaz de consulta permite guardar los gráficos.
Servicio de análisis Couchbase
Hemos utilizado la API de Couchbase Query en el SDK de Python para leer los datos de Couchbase. Si quieres usar la API de Couchbase Analytics en su lugar, aquí tienes un ejemplo para leer los datos de Couchbase y almacenarlos en un dataframe de pandas.
|
1 2 |
resultado_analítico = cb.consulta_analítica("SELECT cliente.* FROM online_streaming cliente") analytics_raw_data = pd.DataFrame(resultado_analítico) |
El servicio Couchbase Analytics también se puede utilizar para EDA, visualización de datos y para ejecutar modelos ML entrenados (vista previa para desarrolladores). Consulte la Referencia del lenguaje N1QL for Analytics y el artículo sobre Ejecución de modelos ML con Couchbase Analytics Python UDF para más información.
Conclusión
En este artículo y en el anterior, aprendimos cómo Couchbase facilita la ciencia de datos. Usando la predicción de pérdida de clientes como ejemplo, vimos cómo realizar análisis exploratorios usando el servicio Query, cómo leer eficientemente grandes conjuntos de datos de entrenamiento usando el SDK de Python y cómo almacenarlos fácilmente en una estructura de datos adecuada para ML.
También vimos cómo almacenar modelos ML, sus metadatos y predicciones en Couchbase y cómo utilizar los gráficos Query para analizar predicciones.
Couchbase Data Platform se puede utilizar para almacenar datos en bruto, características, modelos ML, sus metadatos y predicciones en el mismo clúster que el que ejecuta los servicios de Query y Analytics. Esto hace que el proceso sea rápido y sencillo al reducir el número de herramientas necesarias para la ciencia de datos.
Próximos pasos
Si estás interesado en aprender más sobre machine learning y Couchbase, aquí tienes algunos pasos a seguir y recursos para empezar:
- Comience su prueba gratuita de Couchbase Cloud - no requiere instalación.
- Couchbase bajo el capó: una visión general de la arquitectura - profundice en los detalles técnicos con este libro blanco.
- Explorar Couchbase Consulta, Búsqueda de texto completo, Eventosy Analítica servicios.
- Consulte estos blogs de ML: