knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
La base datos_negocios_var_9_clientes.csv contiene
información de 100 clientes de un negocio.
Las variables permiten caracterizar a los clientes en función de su
categoría, gasto, edad y número de visitas.
Variables incluidas:
Se crea además una variable dicotómica Es_Frecuente: 1 si el cliente es “Frecuente”, 0 en otro caso.
library(readr)
library(dplyr)
library(ggplot2)
# Cargar datos
df <- read_csv("datos_negocios_var_9_clientes (2).csv")
# Variable binaria
df <- df %>%
mutate(Es_Frecuente = ifelse(tolower(trimws(Categoria_Cliente))=="frecuente", 1, 0))
dim(df) # Número de filas y columnas
## [1] 100 5
names(df) # Nombres de variables
## [1] "Categoria_Cliente" "Gasto_Mensual" "Edad"
## [4] "Visitas_Mensuales" "Es_Frecuente"
str(df) # Tipos de datos
## tibble [100 × 5] (S3: tbl_df/tbl/data.frame)
## $ Categoria_Cliente: chr [1:100] "Frecuente" "Nuevo" "Frecuente" "Ocasional" ...
## $ Gasto_Mensual : num [1:100] 2048 2188 1991 182 2486 ...
## $ Edad : num [1:100] 45 74 75 19 59 53 22 64 20 32 ...
## $ Visitas_Mensuales: num [1:100] 18 16 26 24 23 28 14 29 12 23 ...
## $ Es_Frecuente : num [1:100] 1 0 1 0 0 1 0 0 0 1 ...
Interpretación:
La base tiene 100 registros y 4 variables principales. Tres son numéricas (Gasto_Mensual, Edad, Visitas_Mensuales) y una categórica (Categoria_Cliente).
colSums(is.na(df))
## Categoria_Cliente Gasto_Mensual Edad Visitas_Mensuales
## 0 0 0 0
## Es_Frecuente
## 0
Interpretación:
No se identifican valores faltantes, lo cual asegura un análisis sin imputación previa.
Resumen de Edad
summary(df$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 29.00 47.00 46.21 64.00 75.00
summary(select_if(df, is.numeric))
## Gasto_Mensual Edad Visitas_Mensuales Es_Frecuente
## Min. : 107.4 Min. :18.00 Min. : 1.00 Min. :0.00
## 1st Qu.:1155.6 1st Qu.:29.00 1st Qu.:10.75 1st Qu.:0.00
## Median :1817.3 Median :47.00 Median :17.50 Median :0.00
## Mean :1738.9 Mean :46.21 Mean :17.09 Mean :0.38
## 3rd Qu.:2393.2 3rd Qu.:64.00 3rd Qu.:24.25 3rd Qu.:1.00
## Max. :3073.0 Max. :75.00 Max. :30.00 Max. :1.00
Interpretación:
El gasto mensual tiene alta dispersión, con clientes que gastan mucho más que el promedio.
La edad está concentrada entre jóvenes adultos y adultos medios.
Las visitas mensuales muestran variabilidad, indicando perfiles de clientes muy activos y otros poco frecuentes.
Histogramas
# Histogramas simples
ggplot(df, aes(x=Edad)) + geom_histogram(bins=15, fill="skyblue", color="black") +
labs(title="Histograma de Edad", x="Edad", y="Frecuencia")
ggplot(df, aes(x=Gasto_Mensual)) + geom_histogram(bins=15, fill="lightgreen", color="black") +
labs(title="Histograma de Gasto Mensual", x="Gasto Mensual", y="Frecuencia")
ggplot(df, aes(x=Visitas_Mensuales)) + geom_histogram(bins=15, fill="lightpink", color="black") +
labs(title="Histograma de Visitas Mensuales", x="Visitas Mensuales", y="Frecuencia")
# Histogramas por categoría
ggplot(df, aes(x=Edad, fill=Categoria_Cliente)) +
geom_histogram(bins=15, alpha=0.6, position="identity") +
labs(title="Distribución de Edad por Categoría de Cliente")
ggplot(df, aes(x=Gasto_Mensual, fill=Categoria_Cliente)) +
geom_histogram(bins=15, alpha=0.6, position="identity") +
labs(title="Distribución de Gasto Mensual por Categoría de Cliente")
ggplot(df, aes(x=Visitas_Mensuales, fill=Categoria_Cliente)) +
geom_histogram(bins=15, alpha=0.6, position="identity") +
labs(title="Distribución de Visitas Mensuales por Categoría de Cliente")
Interpretación general:
La edad y visitas muestran concentraciones claras en ciertos rangos.
El gasto mensual presenta una cola larga hacia la derecha: pocos clientes gastan mucho.
Las categorías de cliente generan perfiles diferenciados en gasto y visitas.
Bloxpots
# Boxplots simples
ggplot(df, aes(y=Edad)) + geom_boxplot(fill="orange") + labs(title="Boxplot de Edad")
ggplot(df, aes(y=Gasto_Mensual)) + geom_boxplot(fill="lightblue") + labs(title="Boxplot de Gasto Mensual")
ggplot(df, aes(y=Visitas_Mensuales)) + geom_boxplot(fill="lightcoral") + labs(title="Boxplot de Visitas Mensuales")
# Boxplots por categoría
ggplot(df, aes(x=Categoria_Cliente, y=Edad, fill=Categoria_Cliente)) + geom_boxplot() +
labs(title="Edad según Categoría de Cliente")
ggplot(df, aes(x=Categoria_Cliente, y=Gasto_Mensual, fill=Categoria_Cliente)) + geom_boxplot() +
labs(title="Gasto Mensual según Categoría de Cliente")
ggplot(df, aes(x=Categoria_Cliente, y=Visitas_Mensuales, fill=Categoria_Cliente)) + geom_boxplot() +
labs(title="Visitas Mensuales según Categoría de Cliente")
Interpretación:
Se detectan outliers en gasto y visitas.
Los clientes Premium presentan gastos significativamente mayores.
Las categorías muestran diferencias en visitas mensuales, lo cual puede servir para segmentación de estrategias.
Frecuencias
table(df$Categoria_Cliente)
##
## Frecuente Nuevo Ocasional
## 38 32 30
Gráfico de barras
ggplot(df, aes(x=Categoria_Cliente)) +
geom_bar(fill="tomato") +
labs(title="Frecuencia de clientes por categoría")
Interpretación:
La categoría Frecuente domina en el conjunto de datos, seguida de otras con menor participación.
6.1 Media muestral (Gasto Mensual)
set.seed(123)
media_pob <- mean(df$Gasto_Mensual, na.rm = TRUE)
sd_pob <- sd(df$Gasto_Mensual, na.rm = TRUE)
n <- 30
N <- nrow(df)
SE <- (sd_pob / sqrt(n)) * sqrt((N - n) / (N - 1))
# Probabilidades
c <- 1900; a <- 1600; b <- 1800
p_mayor_c <- 1 - pnorm(c, mean = media_pob, sd = SE)
p_entre <- pnorm(b, mean = media_pob, sd = SE) - pnorm(a, mean = media_pob, sd = SE)
# IC 95%
z <- qnorm(0.975)
IC_media <- c(media_pob - z*SE, media_pob + z*SE)
data.frame(
Media = round(media_pob,2),
SD = round(sd_pob,2),
ErrorEstandar = round(SE,4),
P_Xbar_mayor_1900 = round(p_mayor_c,4),
P_entre_1600y1800 = round(p_entre,4),
IC_95 = paste0("(", round(IC_media[1],2), ", ", round(IC_media[2],2), ")")
)
## Media SD ErrorEstandar P_Xbar_mayor_1900 P_entre_1600y1800
## 1 1738.95 825.42 126.7202 0.1019 0.5486
## IC_95
## 1 (1490.58, 1987.31)
Interpretación:
La media poblacional del gasto mensual se ubica alrededor de r round(media_pob,2). La probabilidad de que una muestra de 30 clientes supere los 1900 en promedio es muy baja, lo que confirma que esos valores altos corresponden a pocos outliers.
6.2 Proporción muestral (Clientes Premium)
df <- df %>%
mutate(Cliente_Premium = ifelse(Categoria_Cliente == "Premium", 1, 0))
p_hat <- mean(df$Cliente_Premium)
SE_p <- sqrt((p_hat * (1 - p_hat)) / n) * sqrt((N - n) / (N - 1))
# Probabilidades
p_sup_30 <- 1 - pnorm(0.30, mean = p_hat, sd = SE_p)
p_entre_prop <- pnorm(0.35, mean = p_hat, sd = SE_p) - pnorm(0.20, mean = p_hat, sd = SE_p)
# IC 95%
IC_prop <- c(p_hat - z*SE_p, p_hat + z*SE_p)
data.frame(
Proporcion = round(p_hat,4),
ErrorEstandar = round(SE_p,4),
P_phat_mayor_30 = round(p_sup_30,4),
P_entre_20y35 = round(p_entre_prop,4),
IC_95 = paste0("(", round(IC_prop[1],4), ", ", round(IC_prop[2],4), ")")
)
## Proporcion ErrorEstandar P_phat_mayor_30 P_entre_20y35 IC_95
## 1 0 0 0 0 (0, 0)
Interpretación:
La proporción de clientes Premium en la base es cercana a r round(p_hat,2). Es poco probable que una muestra de 30 clientes supere el 30% de Premium.
El perfil de clientes está dominado por la categoría Frecuente, aunque los Premium tienen un gasto mucho mayor.
Los histogramas y boxplots evidencian outliers en gasto y visitas, lo cual explica la alta dispersión de la media.
La distribución muestral de la media muestra que valores muy altos de gasto promedio en muestras son improbables.
En proporción, es poco común que los Premium representen más del 30% de una muestra de 30 clientes.