Está en la página 1de 11

16/10/2016 yhat|SegmentacindeclientesenPython

NUEVO
RODEO SCIENCEOPS EMPRESA

http://blog.yhat.com/posts/customersegmentationusingpython.html 1/11
16/10/2016 yhat|SegmentacindeclientesenPython

El Blog yhat
aprendizaje de las mquinas, la ciencia de datos, ingeniera

Email Address

Recibe actualizaciones

SegmentacindeclientesenPython
porGreg
25dedeagostode,elao2015

Aprendems CompartirenFacebook CompartirenTwitter

CompartirenLinkedin CompartirenReddit

En este post voy a hablar de algo que es relativamente simple, pero fundamental
para cualquier negocio: Segmentacin de clientes. En el ncleo de la segmentacin
de clientes es ser capaz de identicar los diferentes tipos de clientes y luego
averiguar la manera de encontrar ms de esos individuos para que pueda ...
adivinaron, conseguir ms clientes! En este post, voy a detalle cmo se puede
utilizar K-means clustering para ayudar con algunos de los aspectos exploratorios
de segmentacin de clientes.

nuestrosdatos
Los datos que estamos utilizando viene del libro de John capataz de datos
inteligente . El conjunto de datos contiene informacin sobre los boletines de
marketing / campaas de correo electrnico (ofertas de correo electrnico
http://blog.yhat.com/posts/customersegmentationusingpython.html 2/11
marketing / campaas de correo electrnico
16/10/2016
(ofertas de correo electrnico
yhat|SegmentacindeclientesenPython

enviados) y los datos del nivel de transacciones de los clientes (que ofrecen a los
clientes y respondieron a lo que han comprado).

import pandas as pd

df_offers = pd.read_excel("./WineKMC.xlsx", sheetname=0)


df_offers.columns = ["offer_id", "campaign", "varietal", "min_qty", "discount", "ori
gin", "past_peak"]
df_offers.head()

oer_id Campaa varietal min_qty descuento origen past_peak


0 1 enero Malbec 72 56 Francia Falso
1 2 enero Pinot Noir 72 17 Francia Falso

2 3 febrero espumante 144 32 Oregn Cierto


3 4 febrero champn 72 48 Francia Cierto

4 5 febrero Cabernet Sauvignon 144 44 Nueva Zelanda Cierto

Y los datos de nivel de transaccin ...

df_transactions = pd.read_excel("./WineKMC.xlsx", sheetname=1)


df_transactions.columns = ["customer_name", "offer_id"]
df_transactions['n'] = 1
df_transactions.head()

Nombre del cliente oer_id norte


0 Herrero 2 1
1 Herrero 24 1
2 Johnson 17 1

3 Johnson 24 1
4 Johnson 26 1

UnacartillarpidadeKmedias
Con el n de segmentar a nuestros clientes, necesitamos una manera de
compararlas. Para ello vamos a utilizar K-means clustering . K-medios es una
manera de tomar un conjunto de datos y la bsqueda de grupos (o
conglomerados) de puntos que tienen propiedades similares. K-signica obras de
la agrupacin de los puntos juntos de una manera tal que la distancia entre todos
los puntos y el punto medio del grupo al que pertenecen se minimiza.

Piense en el ejemplo ms simple posible. Si yo le dijera a crear 3 grupos de los


puntos por debajo y dibujar una estrella en el centro de cada grupo sera, qu
haras?
http://blog.yhat.com/posts/customersegmentationusingpython.html 3/11
16/10/2016 yhat|SegmentacindeclientesenPython

Probablemente (o con suerte) algo como esto ...

En K-medias hablan, la "x" 's son llamados "centroides" e indicar (lo has adivinado),
el centro de un grupo determinado. No voy a entrar en los pormenores de lo que
K-Medios est haciendo en realidad bajo el cap, pero es de esperar que este
ejemplo le da una buena idea.

Laagrupacindenuestrosclientes
De acuerdo, entonces, cmo se aplican a la agrupacin de nuestros clientes?
Bueno, ya que estamos tratando de aprender ms acerca de cmo se comportan
nuestros clientes, podemos utilizar su comportamiento (si estn o no comprarse
algo basado en una oferta) como una forma de agrupar los clientes con mentalidad
similares juntos. entonces podemos estudiar esos grupos para buscar patrones y 4/11
http://blog.yhat.com/posts/customersegmentationusingpython.html
16/10/2016 yhat|SegmentacindeclientesenPython

similares juntos. entonces podemos estudiar esos grupos para buscar patrones y
tendencias que pueden ayudar a formular futuras ofertas.

La primera cosa que necesitamos es una manera de comparar los clientes. Para
ello, vamos a crear una matriz que contiene cada cliente y un indicador de 0/1 de si
son o no respondieron a una oferta dada. Esto es bastante fcil de hacer en
Python:

# join the offers and transactions table


df = pd.merge(df_offers, df_transactions)
# create a "pivot table" which will give us the number of times each customer respon
ded to a given offer
matrix = df.pivot_table(index=['customer_name'], columns=['offer_id'], values='n')
# a little tidying up. fill NA values with 0 and make the index into a column
matrix = matrix.fillna(0).reset_index()
# save a list of the 0/1 columns. we'll use these a bit later
x_cols = matrix.columns[1:]

Ahora para crear los grupos, vamos a utilizar la KMeans funcionalidad de


scikit-learn . Me eligi arbitrariamente 5 grupos. Mi regla general es tener al
menos 7x tantos registros como yo racimos.

from sklearn.cluster import KMeans

cluster = KMeans(n_clusters=5)
# slice matrix so we only include the 0/1 indicator columns in the clustering
matrix['cluster'] = cluster.fit_predict(matrix[matrix.columns[2:]])
matrix.cluster.value_counts()
2 32
1 22
4 20
0 15
3 11
dtype: int64

http://blog.yhat.com/posts/customersegmentationusingpython.html 5/11
16/10/2016 yhat|SegmentacindeclientesenPython

Visualizacindelosracimos
Un truco genial que el probablemente no te lo ensean en la escuela es de Anlisis
de Componentes Principales . Hay un montn de aplicaciones para l, pero hoy
vamos a utilizarlo para transformar nuestro conjunto de datos multidimensional en
un conjunto de datos de 2 dimensiones. Por qu preguntas? Bueno una vez que
est en 2 dimensiones (o simplemente, que tiene 2 columnas), se hace mucho ms
fcil para trazar!

Una vez ms, scikit-learn viene al rescate!

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
matrix['x'] = pca.fit_transform(matrix[x_cols])[:,0]
matrix['y'] = pca.fit_transform(matrix[x_cols])[:,1]
matrix = matrix.reset_index()

customer_clusters = matrix[['customer_name', 'cluster', 'x', 'y']]


customer_clusters.head()

oer_id Nombre del cliente racimo x y


0 Adams 2 -1.007580 0.108215

1 Allen 4 0.287539 0.044715

2 Anderson 1 0.392032 1.038391


3 Muralla exterior 2 -0.699477 -0.022542

4 Panadero 3 -0.088183 -0.471695

Lo que hemos hecho es que hemos tomado esas x_cols columnas de 0/1 variables
indicadoras, y los hemos transformado en un conjunto de datos 2-D. Tomamos
una columna y arbitrariamente llamamos x y llamamos a la otra y . Ahora
podemos lanzar cada punto en un diagrama de dispersin. Tendremos cdigo de
color de cada punto sobre la base de que es de clster, as que es ms fcil verlos.
http://blog.yhat.com/posts/customersegmentationusingpython.html 6/11
16/10/2016 yhat|SegmentacindeclientesenPython

df = pd.merge(df_transactions, customer_clusters)
df = pd.merge(df_offers, df)

from ggplot import *

ggplot(df, aes(x='x', y='y', color='cluster')) + \


geom_point(size=75) + \
ggtitle("Customers Grouped by Cluster")

Si usted desea conseguir la suposicin, tambin se puede representar


grcamente los centros de los conglomerados tambin. Estos se almacenan en la
KMeans instancia utilizando la cluster_centers_ variable. Asegrese de que usted
tambin transformar los centros de los conglomerados en la proyeccin 2-D.

cluster_centers = pca.transform(cluster.cluster_centers_)
cluster_centers = pd.DataFrame(cluster_centers, columns=['x', 'y'])
cluster_centers['cluster'] = range(0, len(cluster_centers))

ggplot(df, aes(x='x', y='y', color='cluster')) + \


geom_point(size=75) + \
geom_point(cluster_centers, size=500) +\
ggtitle("Customers Grouped by Cluster")

http://blog.yhat.com/posts/customersegmentationusingpython.html 7/11
16/10/2016 yhat|SegmentacindeclientesenPython

Profundizandoenlosclusters
Vamos a profundizar un poco ms en los racimos. Tome el grupo 4, por ejemplo. Si
rompemos el grupo 4 y la comparamos con los clientes restantes, podemos
empezar a buscar facetas interesantes que podramos ser capaces de explotar.

Como lnea de base, eche un vistazo a las varietal cuentas para el grupo 4 vs todos
los dems. Resulta que casi todas las ofertas de Cabernet Sauvignon fueron
comprados por los miembros del grupo 4. Adems, ninguna de las ofertas
Espumante fueron adquiridos por los miembros del grupo 4.

df['is_4'] = df.cluster==4
df.groupby("is_4").varietal.value_counts()

is_4 varietal contar

champn 45
espumante 40

Prosecco 37

Pinot Noir 37
Falso Malbec 17

Pinot Grigio diecisis


Merlot 8

Cabernet Sauvignon 6

Chardonnay 4
champn 36

Cabernet Sauvignon 26
Malbec 15

Merlot 12
Cierto
Chardonnay 11
Pinot Noir 7

Prosecco 6
Pinot Grigio 1

Tambin puede segmentar a cabo funciones numricas. Por ejemplo, buscar la


http://blog.yhat.com/posts/customersegmentationusingpython.html 8/11
Tambin puede segmentar a caboyhat|SegmentacindeclientesenPython
16/10/2016
funciones numricas. Por ejemplo, buscar la
forma de la media del min_qty campo estalla entre 4 vs no-4. Parece que los
miembros del grupo 4 como a por al por mayor

df.groupby("is_4")[['min_qty', 'discount']].mean()

min_qty descuento
is_4

Falso 47.685484 59.120968


Cierto 93.394737 60.657895

Enviar una manera Cab Sav oferta de Grupo 4 por mayor

Pensamientosfinales
A pesar de que no va a decir mgicamente todas las respuestas, la agrupacin es
un gran ejercicio de exploracin que pueden ayudarle a aprender ms acerca de
sus clientes. Para obtener ms informacin sobre K-medias y segmentacin de
clientes, echa un vistazo a los siguientes recursos:

Anlisis de conglomerados Analytics INSEAD y la segmentacin del anuncio


Segmentacin de clientes en Bain & Company
Segmentacin de clientes Wikipedia

Cdigo para este post se puede encontrar aqu .

APRENDEMS COMPARTIRENFACEBOOK COMPARTIRENTWITTER

http://blog.yhat.com/posts/customersegmentationusingpython.html 9/11
16/10/2016 yhat|SegmentacindeclientesenPython

COMPARTIRENLINKEDIN COMPARTIRENREDDIT

Nuestrosproductos

Rodeo: un editor de Python nativo construido para hacer ciencia de datos en su


escritorio.

DESCRGALO AHORA!

ScienceOps: implementar modelos predictivos en aplicaciones de produccin sin


ella.

APRENDE MS

http://blog.yhat.com/posts/customersegmentationusingpython.html 10/11
16/10/2016 yhat|SegmentacindeclientesenPython

Yhat (pronunciado Y-sombrero) proporciona soluciones que permiten a los


cientcos datos cientcos de datos implementar e integrar los modelos
predictivos en las aplicaciones de TI o sin codicacin personalizada.

Contctenos
info@yhathq.com
+1 718 855 2107
+49 15735983455

Nuestros productos
ScienceOps
Rodeo

Aprende ms
Empresa
Blog
Trabajos
RSS

hoja informativa

Email Address

Recibe actualizaciones

Conectate con nosotros

Hecho en Nueva York 2016 yhat

http://blog.yhat.com/posts/customersegmentationusingpython.html 11/11