Durante 5 años ayudamos a las empresas a alcanzar sus objetivos de mercado y de marca. Millennial es una empresa especializada en tecnología.

Galleria

Contactos

Enrique Palacios 360, Oficina 313, Miraflores - Lima

+51-975-113-510

Power BI : exploración de datos de ventas en SQL | Análisis RFM 

Este artículo es parte de un proyecto personal realizado para mi portafolio integrando Microsoft SQL Server y Power BI para hacer un breve análisis RFM.

Power BI Peru Tableros
Power BI Peru Tableros Proyectos Business Analytics & Big Data

El conjunto de datos y el tutorial de este proyecto se pueden encontrar en Angelica Frimpong Channel , más específicamente en este video: Exploración de datos de ventas en SQL y Tableau | Análisis RFM en SQL | Proyectos de analistas de datos | Proyectos SQL

Mi objetivo es presentar al lector una introducción básica a RFM y un ejemplo de análisis y conclusiones que se pueden extraer de él utilizando SQL y PowerBI

El código fuente se puede encontrar en el siguiente repositorio de GitHub:

#Add enlace de código fuente más tarde

¿Qué es RFM?

RFM, acrónimo de Recency, Frequency y Monetary, es una metodología empleada para categorizar el comportamiento de los clientes. Evalúa qué tan reciente fue la última compra de un cliente (Antigüedad), con qué frecuencia el cliente interactúa con nuestros productos o servicios (Frecuencia) y la cantidad promedio o total que el cliente gasta con nosotros (Monetaria).

¿Por qué las empresas lo utilizan?

Las empresas utilizan RFM para obtener información sobre el comportamiento de los clientes, lo que les permite adaptar enfoques personalizados. Esta categorización facilita la implementación de campañas de marketing especializadas, la creación de programas especiales que atienden a clientes de alto valor y la entrega de un servicio al cliente personalizado. Al comprender estos aspectos clave de la participación del cliente, las empresas pueden mejorar sus estrategias para satisfacer mejor las necesidades y preferencias individuales de los clientes.

¿Qué información se necesita para realizar un análisis RFM?

Para un análisis RFM, toda la información necesaria es una tabla de pedidos que debe contener, al menos:

  1. Identificación del cliente
  2. Cantidad gastada por el cliente
  3. Última fecha de compra/uso del servicio
  4. Recuento de pedidos de cada cliente

Ejemplo:

En nuestro conjunto de datos de muestra tenemos 25 columnas, pero solo necesitamos 4 de ellas:

SELECT TOP(5)
CUSTOMERNAME as Customer,
ORDERNUMBER as Order_id,
SALES AS Amount,
ORDERDATE AS Date
FROM Project.dbo.sales_data_sample
1*Ql1M68IAl3gENzbeebZLkQ

Podemos utilizar funciones básicas de agregación SQL, un operador de fecha y agrupar nuestros resultados por el Cliente para crear gradualmente CTE’S que nos llevarán a nuestro resultado final.

Primer CTE:

WITH rfm AS (
SELECT
CUSTOMERNAME,
SUM(Sales) AS MonetaryValue,
COUNT(ORDERNUMBER) AS Frequency,
MAX(ORDERDATE) AS Last_order_date,
DATEDIFF(DD,MAX(ORDERDATE),(SELECT MAX(ORDERDATE) FROM Project.dbo.sales_data_sample)) AS Recency
FROM
Project.dbo.sales_data_sample
GROUP BY
CUSTOMERNAME
)
1*0IeDAkZguZVjIYN0i9FhkA
CTE RFM

Podemos asignar números a nuestros clientes en función de las métricas que creamos (monetarias, frecuencias y antigüedades) para clasificarlos en función de cómo se comparan con los demás clientes. SQL Server tiene una función de partición llamada NTile que permite agrupar a los usuarios por asociación y luego un número dependiendo de un orden en particular.

En este caso, quiero dividir a mis usuarios en 4 grupos por cada métrica, cada uno representando su valor del 1 al 4.

Los usuarios que pertenezcan al 25% superior de los números pedidos recibirán un número (4) como marcador, mientras que los usuarios del 25% inferior recibirán un (1)

RFM_Calc as (
select r.*,
NTILE(4) OVER (ORDER BY Recency DESC) rfm_Recency,
NTILE(4) OVER (ORDER BY Frequency) rfm_Frequency,
NTILE(4) OVER (ORDER BY MonetaryValue) rfm_Monetary
FROM
rfm r
)
1*mwO7w u9YpecZyEZHHUT2g
CTE — RFM_Calc

A partir de aquí, ya podemos clasificar a los usuarios en función de diferentes métricas y agruparlos según nuestros esfuerzos de marketing o servicio al cliente, pero podemos ir aún más lejos agregando su puntuación en un valor total (de 1 a 12) o marcando luego agregando sus puntuaciones en un formato de texto ( 111 — usuario de muy bajo valor, 411- cliente reciente con bajo número de pedidos y bajo gasto)

Creación de la RFM_Total (entero 1-12) y RFM_String (Texto, marcador) para su posterior clasificación:

SELECT c.*,
rfm_Recency + rfm_Monetary + rfm_frequency as RFM_Total,
CAST(rfm_Recency as varchar) + CAST(rfm_Frequency as varchar) + CAST(rfm_Monetary as varchar) AS RFM_String
INTO
#RFM
from RFM_Calc c
1*lwk0q dPJNDq72pCna4cfQ
Tabla temporal #RFM

Como tenemos ambos marcadores (Puntuación y texto) para la clasificación de esos clientes, podemos usar expresiones CASE WHEN para categorizar a los usuarios:

DROP TABLE IF EXISTS Customer_RFM;

SELECT
CUSTOMERNAME, rfm_Frequency, rfm_Monetary, rfm_Recency,
CASE
WHEN RFM_String in (111, 112, 121, 122, 132, 211, 212, 114, 141) THEN ‘lost customers’ — lost customers
WHEN RFM_String in (133, 134, 143, 244, 334, 343, 344, 144) THEN ‘slipping away high value’ — big spenders who had not ordered recently
WHEN RFM_String in (311, 411, 331) THEN ‘new customers’
WHEN RFM_String in (222, 223, 233, 322) THEN ‘potential churners’
WHEN RFM_String in (323, 333, 321, 422, 332, 432) THEN ‘active’ — Customers who buy often and recently, but at low price points
WHEN RFM_String in (433, 434, 443, 444) THEN ‘loyal’
END rfm_segment
INTO
Project.dbo.Customer_RFM
FROM #RFM

1*wzOAw0Ejf ftHfAs7SCTsg

Bien, ya hemos hecho todo eso, ¿qué sigue?

Transforme su información según sea necesario y preséntela a las partes interesadas en función de las preguntas comerciales que esté tratando de resolver.

Ejemplo de información que puedes extraer de esto:

1*28kbtaDFBk
Clientes por Segmento vs Ingresos por Segmento
1*9RdFvmL8ACfU9Ug5roVEYw
Clientes leales por país vs clientes perdidos por país