1. Contextualización de la base de datos y variables

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:

-Cliente: indica el tipo de cliente (Frecuente, Ocasional, Premium, etc.).
-Gasto Mensual: monto promedio en dinero gastado por cliente en un mes.
- Edad: edad del cliente (en años).
- Visitas Mensuales: número de visitas promedio que el cliente realiza al negocio en un mes.

# 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")

2. Vista inicial de la base

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

3. Características generales de la base de datos

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" ...

4. Análisis de variables numéricas

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))
  )
}

5. Análisis de variables categóricas

Tablas de frecuencia:

table(datos$Categoria_Cliente)
## Warning: Unknown or uninitialised column: `Categoria_Cliente`.
## < table of extent 0 >

Gráfico de barras:

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")

## 6. Revisión de valores faltantes (NA)

colSums(is.na(datos))
## Categoria_Cliente     Gasto_Mensual              Edad Visitas_Mensuales 
##                 0                 0                 0                 0

No se detectan valores faltantes en ninguna variable.

7. Detección de valores atípicos (Outliers)

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.

8. Comentarios de resultados

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.

2. Aplicación de Distribuciones Muestrales (media y proporción)

Como cada grupo trabaja con bases distintas, en nuestro caso elegimos:
- Variable continua: Gasto_Mensual, ya que permite medir el comportamiento de consumo.
- Variable dicotómica (0/1): Cliente_Premium, que toma el valor 1 si el cliente es de categoría “Premium” y 0 en caso contrario.
- Tamaño poblacional: \(N = 100\) (número de registros en la base).
- Tamaño de muestra definido: \(n = 30\).

2.1 Media muestral: Gasto Mensual

En esta sección aplicamos los conceptos de distribuciones muestrales usando nuestra base de clientes.

2.1 Distribución muestral de la media (Gasto Mensual)

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) \]

Probabilidades

# 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:

  • Probabilidad de que el gasto promedio en una muestra de 30 supere 1900: 0.102.
  • Probabilidad de que esté entre 1600 y 1800: 0.549.

Esto ayuda a estimar escenarios probables de ingresos en muestras representativas.

Intervalo de confianza 95%

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.

2.2 Distribución muestral de la proporción (Clientes Premium)

Creamos la variable binaria Cliente_Premium:

datos <- datos %>% 
  mutate(Cliente_Premium = ifelse(Categoria_Cliente == "Premium", 1, 0))

# Proporción poblacional
p_hat <- mean(datos$Cliente_Premium)
p_hat
## [1] 0

Error estándar con FPC:

SE_p <- sqrt((p_hat * (1 - p_hat)) / n) * sqrt((N - n) / (N - 1))
SE_p
## [1] 0

La distribución muestral es:

\[ \hat{p} \sim N(p, SE_{\hat{p}}^2) \]

Probabilidades

# P(p̂ > 0.30)
p_sup_30 <- 1 - pnorm(0.30, mean = p_hat, sd = SE_p)

# P(0.20 < p̂ < 0.35)
p_entre_prop <- pnorm(0.35, mean = p_hat, sd = SE_p) - pnorm(0.20, mean = p_hat, sd = SE_p)

p_sup_30; p_entre_prop
## [1] 0
## [1] 0

Interpretación:
- Probabilidad de que en una muestra de 30 clientes la proporción de Premium supere 30%: 0.
- Probabilidad de que esté entre 20% y 35%: 0.

Esto orienta la gestión sobre la frecuencia esperada de clientes Premium.

Intervalo de confianza 95%

IC_prop <- c(p_hat - z*SE_p, p_hat + z*SE_p)
IC_prop
## [1] 0 0

Interpretación: Con 95% de confianza, la proporción de clientes Premium está entre esos dos valores.