Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El diagrama solución del ejercicio se realiza teniendo en cuenta los pasos del CRISP:
Entender el Negocio
Preparación de la Data
Evaluar, Conclusiones
# importación de librerías
import pandas as pd
import numpy as np
import sys
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
Lee la data del archivo csv y crea una dataframe denominada "tx_data"
Se crea una nueva dataframe "tx_uk" el cual con ayuda de un filtro (query) solo considera filas con el campo Ciudad= "United Kingdom"
tx_uk = tx_data.query("Country=='United Kingdom'").reset_index(drop=True)
Crea una nueva dataframe solo considerando los códigos de clientes (CustomerID) sin repetir
tx_user = pd.DataFrame(tx_data['CustomerID'].unique())
tx_user.columns = ['CustomerID']
Se denomina una nueva dataframe "tx_max_purchase", agrupando a su CustomerID con su "InvoiceDate" fecha última de compra
tx_max_purchase = tx_uk.groupby('CustomerID').InvoiceDate.max().reset_index()
tx_max_purchase.columns = ['CustomerID','MaxPurchaseDate']
Se agrega la columna Recency la cual viene a ser la diferencia entre la última fecha de compra máxima de toda la data menos la última
fecha de compra de cada cliente.
Se denomina una nueva dataframe "tx_user" el cual solo tiene las columnas "CustomerID";"Recency"
tx_user['RecencyCluster'] = kmeans.fit_predict(tx_user[['Recency']])
tx_frequency = tx_uk.groupby('CustomerID').InvoiceDate.count().reset_index()
tx_user['FrequencyCluster']=kmeans.fit_predict(tx_user[['Frequency']])
Se denomina una nueva dataframe "tx_revenue" el cual es agrupada por cliente y su total de Ingreso (Revenue)
tx_revenue = tx_uk.groupby('CustomerID').Revenue.sum().reset_index()
kmeans = KMeans(n_clusters=4)
Se le agrega una columna "RevenueCluster" para determinar el cluster por el Ingreso del cliente
tx_user['RevenueCluster'] = kmeans.fit_predict(tx_user[['Revenue']])
Se ordena la dataframe tx_user por la columna RevenueCluster
tx_user = order_cluster('RevenueCluster', 'Revenue',tx_user,True)
print(tx_user.head().to_string())
print(tx_user.groupby('VVCCluster')['RecencyCluster', 'FrequencyCluster','RevenueCluster'].describe().to_string())
Plotear la gráfica
plt.show()
Tener en cuenta que en la gráfica final se presenta un hueco debido a las datos extremos en cada variable a considerar
(Revenue,Frequency, Recency)
Se procedió a eliminar los comandos Print () → El cual sirve para imprimir resultados en el
Python
import pandas as pd
import numpy as np
import sys
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
tx_max_purchase = tx_uk.groupby('CustomerID').InvoiceDate.max().reset_index()
tx_max_purchase.columns = ['CustomerID','MaxPurchaseDate']
tx_max_purchase['Recency'] = (tx_max_purchase['MaxPurchaseDate'].max() -
tx_max_purchase['MaxPurchaseDate']).dt.days
tx_user = pd.merge(tx_user, tx_max_purchase[['CustomerID','Recency']], on='CustomerID')
kmeans = KMeans(n_clusters=4)
tx_user['RecencyCluster'] = kmeans.fit_predict(tx_user[['Recency']])
tx_user = order_cluster('RecencyCluster', 'Recency',tx_user,False)
tx_frequency = tx_uk.groupby('CustomerID').InvoiceDate.count().reset_index()
tx_frequency.columns = ['CustomerID','Frequency']
tx_user = pd.merge(tx_user, tx_frequency, on='CustomerID')
kmeans=KMeans(n_clusters=4)
tx_user['FrequencyCluster']=kmeans.fit_predict(tx_user[['Frequency']])
tx_user = order_cluster('FrequencyCluster', 'Frequency', tx_user, True )
kmeans = KMeans(n_clusters=4)
tx_user['RevenueCluster'] = kmeans.fit_predict(tx_user[['Revenue']])
tx_user = order_cluster('RevenueCluster', 'Revenue',tx_user,True)
kmeans = KMeans(n_clusters=4)
tx_user['VVCCluster'] = kmeans.fit_predict(tx_user[['RecencyCluster', 'FrequencyCluster','RevenueCluster']])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.array(tx_user['RecencyCluster'])
y = np.array(tx_user['FrequencyCluster'])
z = np.array(tx_user['RevenueCluster'])
Se agregó los siguientes comandos en cada una de la sintaxis correspondiente a sus variables de
clusterización, están son (Revenue, Recenty y Frequency)
tx_user = tx_user[tx_user['Frequency']<tx_user['Frequency'].quantile(0.98)]
tx_user = tx_user[tx_user['Revenue']<tx_user['Revenue'].quantile(0.98)]
tx_user = tx_user[tx_user['Recency']<tx_user['Recency'].quantile(0.98)]
→
Al quitarle los valores extremos de cada Campo (Recency, Revenue y Frequency) se corrige el
problema de las colas observadas (En la gráfica de la izquierda esas colas forman ese vacío
(hueco).
En la gráfica de la derecha se observa una mejor cohesión entre las variables y ya no presenta el
hueco debido a que se eliminó los extremos (que representaban el 0.02)
Recency:
La gráfica de la izquierda representa los datos completos y el de la derecha los datos completos
menos los valores extremos.
La segunda tabla comprende la data general menos los extremos, estas suman 3,714 clientes
Revenue:
La gráfica de la izquierda representa los datos completos y el de la derecha los datos completos
menos los valores extremos. Se observa que existe una mejor apreciación (distribución) de la
data. Pero se resalta valores negativos por motivos posibles de devolución.
La segunda tabla comprende la data general menos los extremos, estas suman 3,714 clientes
Frequency:
La gráfica de la izquierda representa los datos completos y el de la derecha los datos completos
menos los valores extremos. Se observa que existe una mejor apreciación (mejor distribución)
de la data.
→
La primera Tabla representa la data general, se consideran 3,792 datos.
La segunda tabla comprende la data general menos los extremos, estas suman 3,714 clientes
5. Para el ejercicio 10, determine la cantidad de grupos VVC apropiado.
Por lo visto gráficamente se considera como cantidad de grupos ideal (Grupos VVC=4)
6. Haciendo un análisis manual, determine el orden de los grupos VVC, es decir qué grupo
VVC es el de mayor rendimiento y cuál el de menor rendimiento (se trata de identificar
los criterios).
Analizando los criterios por separado, El cluster de frecuencia que presenta mayor rendimiento
son donde los clientes tienen el mayor número de compras.
Para poder tener un mejor análisis se necesitaría conocer los costos por clientes, y de esta
manera se podría calcular su rentabilidad (Ingresos-Costos).
RecencyCluster FrequencyCluster RevenueCluster Total
Prom- Prom- Prom-
VVCCluster count mean std mean std mean std Suma Prom
Mm Mm Mm
1 983 0.53 0.50 0.5 0.11 0.33 1 0.09 0.31 1 2.5
0 1,694 2.58 0.49 2.5 0.13 0.34 0.5 0.14 0.35 0.5 3
2 713 2.71 0.50 2 1.14 0.49 1 1.21 0.53 1.5 3.5
3 324 2.86 0.42 1.5 2.31 0.60 2 2.25 0.63 2 5.5
Total 3,714
Teniendo en cuenta que la mayoría de sus clientes (46%) se encuentran en el primer bloque,
26% en el segundo, 19% en el tercero y 9% en el último, por lo cual asignar estrategias de
acuerdo con el bloque y tener presente las variables de ingresos, frecuencia de compra y
diferencia de ultima día de compra.