La base “datos_negocios_var_9_clientes” 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:
# Librerías necesarias
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(readxl)
Cargar
datos <- read_excel("datos_negocios_var_9_clientes.xlsx")
head(datos)
## # A tibble: 6 × 1
## `Categoria_Cliente,Gasto_Mensual,Edad,Visitas_Mensuales`
## <chr>
## 1 Frecuente,2048.07,45,18
## 2 Nuevo,2187.73,74,16
## 3 Frecuente,1991.32,75,26
## 4 Ocasional,182.28,19,24
## 5 Nuevo,2485.97,59,23
## 6 Frecuente,2486.65,53,28
Número de filas y columnas:
dim(datos)
## [1] 100 1
Nombres de las variables:
names(datos)
## [1] "Categoria_Cliente,Gasto_Mensual,Edad,Visitas_Mensuales"
Tipos de variables:
str(datos)
## tibble [100 × 1] (S3: tbl_df/tbl/data.frame)
## $ Categoria_Cliente,Gasto_Mensual,Edad,Visitas_Mensuales: chr [1:100] "Frecuente,2048.07,45,18" "Nuevo,2187.73,74,16" "Frecuente,1991.32,75,26" "Ocasional,182.28,19,24" ...
Medidas de resumen:
summary(select_if(datos, is.numeric))
## < table of extent 0 x 0 >
Histogramas de las variables numéricas:
num_vars <- names(select_if(datos, is.numeric))
for (v in num_vars) {
print(
ggplot(datos, aes_string(x = v)) +
geom_histogram(fill = "steelblue", color = "white", bins = 15) +
ggtitle(paste("Histograma de", v))
)
}
Tablas de frecuencia:
table(datos$Categoria_Cliente)
## Warning: Unknown or uninitialised column: `Categoria_Cliente`.
## < table of extent 0 >
library(tidyr)
datos <- datos %>%
separate(col = 1, into = c("Categoria_Cliente", "Gasto_Mensual", "Edad", "Visitas_Mensuales"), sep = ",") %>%
mutate(
Gasto_Mensual = as.numeric(Gasto_Mensual),
Edad = as.numeric(Edad),
Visitas_Mensuales = as.numeric(Visitas_Mensuales)
)
ggplot(datos, aes(x = Categoria_Cliente)) +
geom_bar(fill = "tomato") +
ggtitle("Frecuencia de clientes por categoría")
colSums(is.na(datos))
## Categoria_Cliente Gasto_Mensual Edad Visitas_Mensuales
## 0 0 0 0
No se detectan valores faltantes en ninguna variable.
Boxplots de las variables numéricas:
for (v in num_vars) {
print(
ggplot(datos, aes_string(y = v)) +
geom_boxplot(fill = "orange") +
ggtitle(paste("Boxplot de", v))
)
}
Se observan valores extremos en Gasto_Mensual y en Visitas_Mensuales.
La categoría Frecuente concentra la mayoría de clientes, aunque existen otros perfiles en menor cantidad.
El gasto mensual muestra un rango definido, pero algunos clientes gastan mucho más que el promedio (outliers).
La edad refleja diversidad, desde clientes jóvenes hasta adultos mayores.
Las visitas mensuales varían bastante: algunos clientes asisten de manera ocasional y otros con alta frecuencia.
La base de datos no presenta valores faltantes, lo que facilita un análisis confiable.
Como cada grupo trabaja con bases distintas, en nuestro caso elegimos:
Gasto_Mensual
, ya
que permite medir el comportamiento de consumo.Cliente_Premium
, que toma el valor 1 si el cliente es de
categoría “Premium” y 0 en caso contrario.En esta sección aplicamos los conceptos de distribuciones muestrales usando nuestra base de clientes.
Gasto_Mensual
(relevante para medir consumo).Cliente_Premium
(1 si el cliente es Premium, 0 en caso
contrario).set.seed(123) # reproducibilidad
# Media y desviación estándar poblacional
media_pob <- mean(datos$Gasto_Mensual, na.rm = TRUE)
sd_pob <- sd(datos$Gasto_Mensual, na.rm = TRUE)
media_pob; sd_pob
## [1] 1738.947
## [1] 825.4199
Error estándar con corrección por población finita (FPC):
n <- 30
N <- nrow(datos)
SE <- (sd_pob / sqrt(n)) * sqrt((N - n) / (N - 1))
SE
## [1] 126.7202
La distribución muestral se aproxima por:
\[ \bar{X} \sim N(\mu, SE^2) \]
# P(X̄ > 1900)
c <- 1900
p_mayor_c <- 1 - pnorm(c, mean = media_pob, sd = SE)
# P(1600 < X̄ < 1800)
a <- 1600; b <- 1800
p_entre <- pnorm(b, mean = media_pob, sd = SE) - pnorm(a, mean = media_pob, sd = SE)
p_mayor_c; p_entre
## [1] 0.1018755
## [1] 0.5485914
Interpretación:
Esto ayuda a estimar escenarios probables de ingresos en muestras representativas.
z <- qnorm(0.975) # valor crítico
IC_media <- c(media_pob - z*SE, media_pob + z*SE)
IC_media
## [1] 1490.580 1987.314
Interpretación: Con 95% de confianza, la media poblacional del gasto mensual está entre esos dos valores.