Descripción general
Proyecto basado en un dataset del UCI Machine Learning Repository, que contiene más de un año de transacciones de una tienda online del Reino Unido con clientes en múltiples países.
Objetivo: analizar un gran volumen de datos para obtener insights clave sobre ventas, desempeño por mercado, productos más relevantes y comportamiento de compra. El proyecto utiliza PostgreSQL para desarrollar análisis orientados al negocio e identificar patrones comerciales.
Resultados SQL
Consulta 1 — Total de ventas por mes
SELECT
DATE_TRUNC('month', invoicedate) AS mes,
ROUND(SUM(quantity * unitprice), 2) AS total_ventas
FROM public.sales_data
GROUP BY mes
ORDER BY mes;
Qué hace la consulta:
Agrupa todas las ventas por mes y calcula el total vendido en cada uno.
Qué se observó:
Las ventas muestran fluctuaciones claras entre meses, con aumentos significativos al inicio y final del año.
Relación con los productos:
Dado que son artículos de regalo y productos estacionales, estos picos tienen sentido: las ventas aumentan en épocas donde la gente compra más obsequios (fiestas, eventos, fin de año).
Consulta 2 — Top 10 clientes con mayor gasto total
SELECT
customerid,
ROUND(SUM(quantity * unitprice), 2) AS gasto_total
FROM public.sales_data
WHERE customerid IS NOT NULL
GROUP BY customerid
ORDER BY gasto_total DESC
LIMIT 10;
Qué hace la consulta:
Suma todo lo que gastó cada cliente en el periodo y muestra los 10 que más compraron.
Qué se observó:
El gasto está muy concentrado en pocos clientes; algunos gastan montos muy altos en comparación al resto.
Relación con los productos:
Esto ocurre porque la empresa tiene muchos clientes mayoristas, que compran grandes cantidades de artículos para venderlos en sus propias tiendas. Es clave identificarlos para estrategias de fidelización y descuentos por volumen.
Consulta 3 Países con mayor promedio de gasto por compra (paises 20)
SELECT
country,
ROUND(AVG(quantity * unitprice), 2) AS gasto_promedio_compra
FROM public.sales_data
GROUP BY country
ORDER BY gasto_promedio_compra DESC;
Qué hace la consulta:
Calcula el promedio gastado por transacción en cada país.
Qué se observó:
Países como Netherlands, Australia y Japón tienen un ticket promedio más alto que el resto.
Relación con los productos:
Un ticket promedio más alto indica que estos países compran productos más caros o cantidades mayores. Son mercados con mayor poder adquisitivo o donde los artículos de regalo tienen más demanda. Esto ayuda a priorizar mercados.
Consulta 4 Hora del día con más transacciones
SELECT
EXTRACT(HOUR FROM invoicedate) AS hora,
COUNT(*) AS cantidad_transacciones
FROM public.sales_data
GROUP BY hora
ORDER BY cantidad_transacciones DESC;
Qué hace la consulta:
Cuenta cuántas compras se hacen según la hora del día.
Qué se observó:
La mayor concentración se da alrededor del mediodía (12:00–14:00).
Relación con los productos:
Los usuarios suelen comprar artículos pequeños de regalo en horas “muertas” del día, como pausas laborales. Para el negocio, esto permite decidir cuándo lanzar promociones, notificaciones o reforzar soporte online.
Consulta 5 Productos más devueltos
SELECT
description,
ABS(SUM(quantity)) AS cantidad_devuelta
FROM public.sales_data
WHERE quantity < 0
GROUP BY description
ORDER BY cantidad_devuelta DESC
LIMIT 10;
Qué hace la consulta:
Identifica los productos con más devoluciones (cantidad negativa).
Qué se observó:
Los artículos más devueltos son principalmente productos frágiles o decorativos, como:
- Paper Craft, Little Birdie
- Medium ceramic top storafe jar
- Rotating silver angeks t-light holder
Son piezas delicadas y propensas a dañarse.
Relación con lo que vende la empresa:
Al ser productos de regalo y decoración, es normal que tengan más devoluciones por daños, errores en pedidos o defectos en compras mayoristas.
Insight:
Se recomienda mejorar embalaje, control de calidad y manejo logístico para reducir devoluciones.
Consulta 6 productos que generan más dinero
SELECT
description,
ROUND(SUM(quantity * unitprice), 2) AS ingresos
FROM public.sales_data
GROUP BY description
ORDER BY ingresos DESC
LIMIT 10;
Qué hace la consulta:
Calcula los ingresos totales por producto (cantidad × precio) y muestra los 10 que más generan.
Qué se observó:
Los productos con mayores ingresos incluyen:
- REGENCY CAKESTAND 3 TIER
- WHITE HANGING HEART TLIGHT HOLDER
- JUMBO BAG RED RETROSPOT
- PARTY BUNTING
- Artículos navideños como “PAPER CHAIN KIT 50'S CHRISTMAS
Son productos decorativos y de alto movimiento.
Relación con lo que vende:
Predominan artículos decorativos, accesorios de regalo y productos estacionales. Esto confirma que la demanda se concentra en productos visuales y de ocasión.
Insight:
Conviene asegurar inventario suficiente de estos productos clave y optimizar precios, abastecimiento y packs promocionales para maximizar ingresos.
Consulta 7 RFM Analysis: Recency, Frequency, Monetary
WITH resumen_clientes AS (
SELECT
customerid,
MAX(invoicedate) AS ultima_compra,
COUNT(DISTINCT invoiceno) AS frecuencia,
SUM(quantity * unitprice) AS gasto_total
FROM public.sales_data
WHERE quantity > 0
GROUP BY customerid
),
rfm_scores AS (
SELECT
customerid,
-- Recency: días desde la última compra
DATE_PART('day', (SELECT MAX(invoicedate) FROM public.sales_data) - ultima_compra) AS recency,
frecuencia,
gasto_total
FROM resumen_clientes
)
SELECT
customerid,
recency,
frecuencia,
gasto_total,
-- Ranking RFM (más bajo en recency es mejor)
NTILE(5) OVER (ORDER BY recency ASC) AS r_score,
NTILE(5) OVER (ORDER BY frecuencia DESC) AS f_score,
NTILE(5) OVER (ORDER BY gasto_total DESC) AS m_score
FROM rfm_scores
ORDER BY gasto_total DESC
LIMIT 20;
Qué hace la consulta:
Clasifica a los clientes usando el modelo RFM: Recency (días desde su última compra), Frequency (número de compras) y Monetary (monto gastado). A cada categoría se le asigna un puntaje de 1 a 5.
Qué se observó:
Los clientes con mejores puntajes F y M destacan por:
- Compras al por mayor.
- Alta frecuencia de compra.
- Montos totales muy superiores al promedio.
Relación con el tipo de productos:
El modelo muestra que gran parte de los ingresos proviene de clientes mayoristas que compran lotes grandes de artículos de regalo para reventa.
Insight:
Se recomienda crear segmentos VIP o programas de fidelización para grandes compradores. El RFM también ayuda a detectar clientes en riesgo y aplicar campañas de reactivación.
Consulta 8 Crecimiento de clientes nuevos por mes
WITH primer_compra AS (
SELECT
customerid,
MIN(DATE_TRUNC('month', invoicedate)) AS mes_primera_compra
FROM public.sales_data
WHERE customerid IS NOT NULL
GROUP BY customerid
)
SELECT
mes_primera_compra,
COUNT(customerid) AS nuevos_clientes
FROM primer_compra
GROUP BY mes_primera_compra
ORDER BY mes_primera_compra;
Qué hace la consulta:
Identifica el mes de la primera compra de cada cliente y cuenta cuántos nuevos clientes se suman cada mes.
Qué se observó:
Se observa una incorporación constante, con picos destacados en:
- Diciembre 2010 (942 nuevos clientes)
- Inicios de año
- Octubre y noviembre de 2011
Relación con el tipo de productos:
Los productos de regalo y temporada impulsan estos aumentos, especialmente en diciembre por compras navideñas y por mayoristas que se abastecen antes de fechas de alta demanda.
Insight:
La adquisición de clientes es estacional. Conviene anticipar campañas y promociones en los meses previos a los picos, especialmente antes de diciembre.
Consulta 9 Promedio de gasto por ticket y por país
SELECT
country,
ROUND(AVG(total_compra), 2) AS ticket_promedio
FROM (
SELECT
invoiceno,
country,
SUM(quantity * unitprice) AS total_compra
FROM public.sales_data
GROUP BY invoiceno, country
) t
GROUP BY country
ORDER BY ticket_promedio DESC;
Qué hace la consulta:
Identifica el mes de la primera compra de cada cliente y cuenta cuántos nuevos clientes se suman cada mes.
Qué se observó:
Se observa una incorporación constante, con picos destacados en:
- Diciembre 2010 (942 nuevos clientes)
- Inicios de año
- Octubre y noviembre de 2011
Relación con el tipo de productos:
Los productos de regalo y temporada impulsan estos aumentos, especialmente en diciembre por compras navideñas y por mayoristas que se abastecen previo a la alta demanda.
Insight:
La adquisición de clientes es estacional. Conviene anticipar campañas y promociones antes de los picos, especialmente en los meses previos a diciembre.
Consulta 10 Ranking de productos más populares en cada país
WITH ventas_por_pais AS (
SELECT
country,
description,
SUM(quantity) AS cantidad_vendida
FROM public.sales_data
WHERE quantity > 0
GROUP BY country, description
),
ranking_pais AS (
SELECT
country,
description,
cantidad_vendida,
ROW_NUMBER() OVER (PARTITION BY country ORDER BY cantidad_vendida DESC) AS ranking
FROM ventas_por_pais
)
SELECT *
FROM (
SELECT * FROM ranking_pais WHERE ranking = 1 ORDER BY cantidad_vendida DESC LIMIT 5
) AS top_5
UNION ALL
SELECT *
FROM (
SELECT * FROM ranking_pais WHERE ranking = 1 ORDER BY cantidad_vendida ASC LIMIT 5
) AS bottom_5;
Qué hace la consulta:
Identifica el producto más vendido en cada país y muestra los 5 países donde ese producto tiene mayor venta y los 5 donde tiene menor venta.
Qué se observó:
Reino Unido domina con más de 80 mil unidades de su producto líder. Países como Netherlands, France y Japan muestran volúmenes moderados (3–5 mil unidades), mientras que varios mercados apenas registran entre 12 y 24 unidades.
Insight:
Fortalecer inventario y campañas en países de alto volumen, y aplicar estrategias de introducción y mayor visibilidad del catálogo en mercados con demanda mínima.
Consulta 11 analisis rentabilidad mensual
SELECT
DATE_TRUNC('month', invoicedate) AS mes,
ROUND(SUM(quantity * unitprice), 2) AS ingresos,
COUNT(DISTINCT invoiceno) AS num_transacciones,
COUNT(DISTINCT customerid) AS clientes_unicos,
ROUND(SUM(quantity * unitprice) / COUNT(DISTINCT invoiceno), 2) AS ingreso_promedio_por_transaccion
FROM public.sales_data
WHERE quantity > 0
GROUP BY 1
ORDER BY mes;
Qué hace la consulta:
Resume mes a mes los ingresos totales, número de transacciones, clientes únicos y el ingreso promedio por transacción.
Qué se observó:
Se aprecia un crecimiento sostenido en ingresos, transacciones y clientes, con picos hacia fin de año. El ticket promedio se mantiene estable en un rango similar.
Insight:
Conviene planificar inventario y campañas antes de los meses pico (especialmente en Q4) y aprovechar el aumento de tráfico para fidelizar nuevos clientes mediante ofertas y programas especiales.