You are on page 1of 9

I PROGRAMA: ANALISTA DE DATOS DE NEGOCIOS – MODALIDAD

VIRTUAL

CLIENT PROFITABILITY ANALYTICS


Segunda Práctica Calificada

Alumno: Melissa Lesly Bernal Leandro


Email: melissa.bernal.l@uni.pe
Fecha: 12 abril de 2021
ACTIVIDAD 1
Enunciado: Mostrar procedimiento desarrollado en un solo programa.
# Parte A
import pandas as pd
import numpy as np
import sys
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
def order_cluster(cluster_field_name, target_field_name,df,ascending):
new_cluster_field_name = 'new_' + cluster_field_name
df_new =
df.groupby(cluster_field_name)[target_field_name].mean().reset_index()
df_new =
df_new.sort_values(by=target_field_name,ascending=ascending).reset_index(dr
op=True)
df_new['index'] = df_new.index
df_final = pd.merge(df,df_new[[cluster_field_name,'index']],
on=cluster_field_name)
df_final = df_final.drop([cluster_field_name],axis=1)
df_final = df_final.rename(columns={"index":cluster_field_name})
return df_final
# Parte B
tx_data = pd.read_csv('./data/customer_segmentation.csv', encoding='cp1252')
tx_data['InvoiceDate'] = pd.to_datetime(tx_data['InvoiceDate'])
tx_data['InvoiceYearMonth'] = tx_data['InvoiceDate'].map(lambda date:
100*date.year + date.month)
tx_uk = tx_data.query("Country=='United Kingdom'").reset_index(drop=True)
# Parte C
tx_user = pd.DataFrame(tx_data['CustomerID'].unique())
tx_user.columns = ['CustomerID']
# Parte D
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)
# Parte E
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 )
# Parte F
tx_uk['Revenue'] = tx_uk['UnitPrice'] * tx_uk['Quantity']
tx_revenue = tx_uk.groupby('CustomerID').Revenue.sum().reset_index()
tx_user = pd.merge(tx_user, tx_revenue, on='CustomerID')
#tx_user = tx_user[tx_user['Revenue']<tx_user['Revenue'].quantile(0.98)]
kmeans = KMeans(n_clusters=4)
tx_user['RevenueCluster'] = kmeans.fit_predict(tx_user[['Revenue']])
tx_user = order_cluster('RevenueCluster', 'Revenue',tx_user,True)
# Parte G
kmeans = KMeans(n_clusters=4)
tx_user['VVCCluster'] = kmeans.fit_predict(tx_user[['RecencyCluster',
'FrequencyCluster','RevenueCluster']])
# Parte H G
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'])
ax.set_title("Valor de Vida de los Clientes")
ax.set_xlabel("RecencyCluster")
ax.set_ylabel("FrequencyCluster")
ax.set_zlabel("RevenueCluster")
ax.scatter(x,y,z, marker="s", c=tx_user["VVCCluster"], s=40, cmap="RdBu")
plt.show()
ACTIVIDAD 2
Enunciado: Explicación del desarrollo del programa.
# Parte A: Se importa las librerías necesarias para el funcionamiento del
programa

# Parte B: Se lee la data y se procede a su creación respectiva

# Parte C: Se crea una dataframe genérico para capturar el CustomerID y


nuevos escores de segmentación

# Parte D: Se calcula Recency


# Se calcula la fecha máxima de compra por cada cliente

# Se compara la fecha de la última transacción por cada cliente

# Se pasa estos datos a tx_user

# Se construye 4 grupos para recency y se adiciona a tx_user

# Se ordena los grupos


Resultado gráfico

# Parte E : Se calcula Frecuencia


# Se calcula el número de transacciones por cada cliente

# Se pasa estos datos a tx_user

# Se construye 4 grupos para frecuencia y adiciona a tx_user

# Se ordena por la frecuencia del cluster

Resultado gráfico:

# Parte F : Se calcula Revenue


# Se calcula el ingreso por cada cliente
# Se pasa estos datos a tx_user

# Se construye 4 grupos y adiciona a tx_user

# Se ordena

Resultado gráfico:
ACTIVDAD 3
Enunciado: Analizar la influencia de los valores extremos en la formación de
los grupos.
Recency

Antes Después

Frecuencia

Antes Después

Revenue

Antes Después

En los tres casos mostrados se puede apreciar los valores extremos mínimos y
máximos son suavizados para una mejor representación de los resultados.
ACTIVIDAD 4
Enunciado: Determinar la cantidad de grupos VVC apropiado.
4 grupos

20 grupos

100 grupos

Como se puede observar conforme se cuente con más grupos los datos
graficados incrementan en volumen y su ubicación en cercanía.
• Para RecencyCluster se tiene los siguientes valores:

count mean std min 25% 50% 75% max


VVCCluster
0 1046 0.543021 0.498384 0 0 1 1 1
1 1532 3 0 3 3 3 3 3
2 950 2 0 2 2 2 2 2
3 422 2.990521 0.097011 2 3 3 3 3

Se tiene el mayor valor recency para el VVCcluster 1 (más tiempo) y el menor


valor para el VVCcluster 0 (más reciente).

• Para FrecuencyCluster se tiene los siguientes valores:


count mean std min 25% 50% 75% max
VVCCluster
0 1046 0.007648 0.08716 0 0 0 0 1
1 1532 0 0 0 0 0 0 0
2 950 0.032632 0.177764 0 0 0 0 1
3 422 1.049763 0.308066 0 1 1 1 3

Se tiene el mayor valor frecuencia para el VVCcluster 3 y el menor valor para el


VVCcluster 1.

• Para RevenueCluster se tiene los siguientes valores:


count mean std min 25% 50% 75% max
VVCCluster
0 1046 0.005736 0.075556 0 0 0 0 1
1 1532 0.039817 0.195593 0 0 0 0 1
2 950 0.009474 0.096922 0 0 0 0 1
3 422 0.516588 0.638034 0 0 0 1 3

Se tiene el mayor valor revenue para el VVCcluster 3 y el menor valor para el


VVCcluster 0.

VVCCluster Cantidad % total Se puede apreciar que el grupo que más


0 1046 26% reciente ha operado con la empresa en el
1 1532 39%
VVCc 0 (26% del total de empresas), sin
2 950 24%
3 422 11% embargo, este grupo representa el menor
TOTAL 3950 100% revenue (promedio 0.57%). De la misma
manera, el mayor valor revenue corresponde al grupo VVCc 3 (promedio
51.66%), además cuentan con el mayor de valor frecuencia, este grupo
representa el 11% del total de empresas.

You might also like