Parte #1

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

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

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

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

c. Análisis de variables según su tipo

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

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

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

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

f. Comentarios de resultados

Parte #2

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

Como cada grupo trabaja con bases distintas, en nuestro caso elegimos:

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.