Medidas estadísticas#

Nuevamente cargamos el dataset de ifood para hacer una exploración de los datos. Para este caso, vamos a hacer una exploración de los datos desde las medidas de tendencia central y dispersión. Así mismo, vamos a hacer una exploración de los datos categóricos que aquí se encuentran escritos como variables dummy.

Carga de datos#

Recordemos que para cargar los datos debe hacer clic en el panel izquierdo en el botón de exploración de archivos. En ese menu tendra la opción de subir algunos datos.

Note

Recuerde que para cargar los datos debe hacer clic en el panel izquierdo en el botón de exploración de archivos. En ese menu tendra la opción de subir algunos datos. En Google Colab, el archivo se borrará una vez que se cierre el entorno.

import pandas as pd

# Load the dataset from the user's Google Drive
df = pd.read_csv("ifood_df.csv")

# Show DataFrame
df.head(5)
Income Kidhome Teenhome Recency MntWines MntFruits MntMeatProducts MntFishProducts MntSweetProducts MntGoldProds ... marital_Together marital_Widow education_2n Cycle education_Basic education_Graduation education_Master education_PhD MntTotal MntRegularProds AcceptedCmpOverall
0 58138.0 0 0 58 635 88 546 172 88 88 ... 0 0 0 0 1 0 0 1529 1441 0
1 46344.0 1 1 38 11 1 6 2 1 6 ... 0 0 0 0 1 0 0 21 15 0
2 71613.0 0 0 26 426 49 127 111 21 42 ... 1 0 0 0 1 0 0 734 692 0
3 26646.0 1 0 26 11 4 20 10 3 5 ... 1 0 0 0 1 0 0 48 43 0
4 58293.0 1 0 94 173 43 118 46 27 15 ... 0 0 0 0 0 0 1 407 392 0

5 rows × 39 columns

Medidas estadísticas para la variable Recency#

La variable Recency es una variable numérica que representa la cantidad de días desde la última compra. Esta resulta ser una variable muy importante para el análisis de la base de datos, ya que nos permite entender el comportamiento de los clientes. Vamos a hacer varios tipos de exploraciones de esta variable y haremos algunas cuentas que son de variables categóricas pero que aquí tendrán un interpretación.

Por ejemplo, sabemos que las tablas de frecuencia son una forma de entender la distribución de los datos. En este caso, vamos a hacer una tabla de frecuencia para la variable Recency y vamos a hacer una tabla de frecuencia para la variable Recency pero con intervalos de clase.

Note

Recuerde que para hacer una tabla de frecuencia con intervalos de clase, primero debe definir el número de intervalos que va a tener. En este caso, vamos a definir 5 intervalos de clase.

Note

Decimos que las tablas de frecuencia son una forma de entender la distribución de los datos. Efectivamente se utiliza más y mejor en variablñes categóricas, pero en variables numéricas también se puede hacer.

## Veamos la frecuencia de las categorías
df['Recency'].value_counts()
Recency
56    37
30    32
54    32
46    31
65    30
      ..
41    15
59    14
22    13
7     12
44    11
Name: count, Length: 100, dtype: int64
### Ahora una tabla con rangos de clases

# Crear una tabla de frecuencias
tabla_frecuencia = pd.cut(df['Recency'], bins=5).value_counts().sort_index()

# Mostrar la tabla de frecuencias
tabla_frecuencia
Recency
(-0.099, 19.8]    451
(19.8, 39.6]      441
(39.6, 59.4]      445
(59.4, 79.2]      434
(79.2, 99.0]      434
Name: count, dtype: int64

Note

pd.cut es una función de pandas que nos permite hacer intervalos de clase. En este caso, el argumento bins nos permite definir el número de intervalos de clase.

Ahora hagamos cálculos más simples como el máximo, el mínimo, la media, la mediana y la desviación estándar, entre otros.

Note

Recuerde que la media y la mediana son medidas de tendencia central y la desviación estándar es una medida de dispersión.

Las medidas de tendencia central nos permiten entender el valor central de los datos, mientras que las medidas de dispersión nos permiten entender la variabilidad de los datos.

Note

Esta información es importantisima en la inferencia, y como profesionales en mercadeo tratar con estos conceptos es fundamental puesto que nos permite aplicar técnicas como:

  • Segmentación de clientes

  • Análisis de canasta de productos

  • Análisis de comportamiento de compra

  • Análisis de ciclo de vida del cliente

  • Análisis de retención de clientes

Incluso, los famosos test A/B que se utilizan para entender el impacto de una campaña de marketing.

## Veamos el mínimo y máximo de la variable Recency
print(df['Recency'].min())
print(df['Recency'].max())
0
99
## Si quisiera describir de mejor manera el dato que estoy observando escribiría

print('El mínimo de la variable Recency es: ', df['Recency'].min())
print('El máximo de la variable Recency es: ', df['Recency'].max())
El mínimo de la variable Recency es:  0
El máximo de la variable Recency es:  99
## Veamos las medidas de tendencia central de la variable Recency

print('La media de la variable Recency es: ', df['Recency'].mean())
print('La mediana de la variable Recency es: ', df['Recency'].median())
print('La moda de la variable Recency es: ', df['Recency'].mode())
La media de la variable Recency es:  49.00907029478458
La mediana de la variable Recency es:  49.0
La moda de la variable Recency es:  0    56
Name: Recency, dtype: int64
## Veamos las medidas de dispersión de la variable Recency

print('El rango de la variable Recency es: ', df['Recency'].max() - df['Recency'].min())
print('La varianza de la variable Recency es: ', df['Recency'].var())
print('La desviación estándar de la variable Recency es: ', df['Recency'].std())
El rango de la variable Recency es:  99
La varianza de la variable Recency es:  837.0670683276336
La desviación estándar de la variable Recency es:  28.932111370026792
## Incluso podriamos explorar los percentiles de la variable Recency

print('El percentil 25 de la variable Recency es: ', df['Recency'].quantile(0.25))
print('El percentil 50 de la variable Recency es: ', df['Recency'].quantile(0.50))
print('El percentil 75 de la variable Recency es: ', df['Recency'].quantile(0.75))
El percentil 25 de la variable Recency es:  24.0
El percentil 50 de la variable Recency es:  49.0
El percentil 75 de la variable Recency es:  74.0

Sin embargo, antes de hacer el cálculo de estas medidas, podría considerar usar describe para obtener un resumen de las medidas de tendencia central y dispersión.

Importante

Los datos aquí cargados son bastante buenos, por eso no estamos haciendo una limpieza de datos. Sin embargo, en un caso real, es importante hacer una limpieza antes de hacer un análisis. Entre los pasos comunes para hacer este prtocesamiento previo, se encuentran:

  • la eliminación de datos faltantes,

  • la eliminación de datos duplicados,

  • la eliminación de datos atípicos, entre otros.

df['Recency'].describe()
count    2205.000000
mean       49.009070
std        28.932111
min         0.000000
25%        24.000000
50%        49.000000
75%        74.000000
max        99.000000
Name: Recency, dtype: float64
## Adicionar estadísticas descriptivas en describe

df['Recency'].describe(percentiles=[.01, .05, .10, .25, .50, .75, .90, .95, .99])
count    2205.000000
mean       49.009070
std        28.932111
min         0.000000
1%          0.000000
5%          4.000000
10%         9.000000
25%        24.000000
50%        49.000000
75%        74.000000
90%        89.000000
95%        94.000000
99%        98.000000
max        99.000000
Name: Recency, dtype: float64