Búsqueda de sitios web

La asimetría desaparece: trucos transformadores para los científicos de datos


Las transformaciones de datos permiten a los científicos de datos refinar, normalizar y estandarizar datos sin procesar en un formato listo para el análisis. Estas transformaciones no son meros pasos procesales; son esenciales para mitigar sesgos, manejar distribuciones sesgadas y mejorar la solidez de los modelos estadísticos. Este capítulo se centrará principalmente en cómo abordar los datos sesgados. Al centrarse en los atributos "Precio de venta" y "Año de construcción" del conjunto de datos de vivienda de Ames, verá ejemplos de datos sesgados positivos y negativos y formas de normalizar sus distribuciones mediante transformaciones.

Empecemos.

Descripción general

Esta publicación se divide en cinco partes; ellos son:

  • Comprender la asimetría y la necesidad de transformación
  • Estrategias para controlar la asimetría positiva
  • Estrategias para controlar la asimetría negativa
  • Evaluación Estadística de Transformaciones
  • Elegir la transformación adecuada

Comprender la asimetría y la necesidad de transformación

La asimetría es una medida estadística que describe la asimetría de una distribución de datos alrededor de su media. En términos más simples, indica si la mayor parte de los datos están agrupados en un lado de la escala, dejando una larga cola que se extiende en la dirección opuesta. Hay dos tipos de asimetría que se encuentran en el análisis de datos:

  • Asimetría positiva: esto ocurre cuando la cola de la distribución se extiende hacia valores más altos, en el lado derecho del pico. La mayoría de los puntos de datos están agrupados en el extremo inferior de la escala, lo que indica que si bien la mayoría de los valores son relativamente bajos, hay algunos valores excepcionalmente altos. El atributo 'SalePrice' en el conjunto de datos de Ames ejemplifica una asimetría positiva, ya que la mayoría de las casas se venden a precios más bajos, pero un pequeño número se vende a precios significativamente más altos.
  • Asimetría negativa: por el contrario, la asimetría negativa se produce cuando la cola de la distribución se extiende hacia valores más bajos, en el lado izquierdo del pico. En este escenario, los datos se concentran hacia el extremo superior de la escala, con menos valores que van disminuyendo hacia números más bajos. La característica "Año de construcción" del conjunto de datos de Ames es un ejemplo perfecto de asimetría negativa, lo que sugiere que, si bien la mayoría de las casas se construyeron en años más recientes, una porción más pequeña se remonta a épocas anteriores.

Para comprender mejor estos conceptos, visualicemos la asimetría.

# Import the necessary libraries
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy.stats import boxcox, yeojohnson
from sklearn.preprocessing import QuantileTransformer

# Load the dataset
Ames = pd.read_csv('Ames.csv')

# Calculate skewness
sale_price_skew = Ames['SalePrice'].skew()
year_built_skew = Ames['YearBuilt'].skew()

# Set the style of seaborn
sns.set(style='whitegrid')

# Create a figure for 2 subplots (1 row, 2 columns)
fig, ax = plt.subplots(1, 2, figsize=(14, 6))

# Plot for SalePrice (positively skewed)
sns.histplot(Ames['SalePrice'], kde=True, ax=ax[0], color='skyblue')
ax[0].set_title('Distribution of SalePrice (Positive Skew)', fontsize=16)
ax[0].set_xlabel('SalePrice')
ax[0].set_ylabel('Frequency')
# Annotate Skewness
ax[0].text(0.5, 0.5, f'Skew: {sale_price_skew:.2f}', transform=ax[0].transAxes,
           horizontalalignment='right', color='black', weight='bold',
           fontsize=14)

# Plot for YearBuilt (negatively skewed)
sns.histplot(Ames['YearBuilt'], kde=True, ax=ax[1], color='salmon')
ax[1].set_title('Distribution of YearBuilt (Negative Skew)', fontsize=16)
ax[1].set_xlabel('YearBuilt')
ax[1].set_ylabel('Frequency')
# Annotate Skewness
ax[1].text(0.5, 0.5, f'Skew: {year_built_skew:.2f}', transform=ax[1].transAxes,
           horizontalalignment='right', color='black', weight='bold',
           fontsize=14)

plt.tight_layout()
plt.show()

Para "Precio de venta", el gráfico muestra una distribución sesgada hacia la derecha pronunciada, lo que destaca el desafío de la asimetría en el análisis de datos. Estas distribuciones pueden complicar los modelos predictivos y oscurecer los conocimientos, lo que dificulta sacar conclusiones precisas. Por el contrario, 'Año de construcción' demuestra asimetría negativa, donde la distribución revela que predominan las viviendas más nuevas, mientras que las viviendas más antiguas forman la cola larga hacia la izquierda.

Abordar la asimetría mediante la transformación de datos no es simplemente un ajuste estadístico; es un paso crucial hacia el descubrimiento de conocimientos precisos y procesables. Al aplicar transformaciones, se pretende mitigar los efectos de la asimetría, facilitando análisis más confiables e interpretables. Este proceso de normalización mejora su capacidad para realizar ciencia de datos significativa, más allá del simple cumplimiento de requisitos estadísticos previos. Subraya su compromiso de mejorar la claridad y utilidad de sus datos, preparando el terreno para descubrimientos reveladores e impactantes en sus exploraciones posteriores de la transformación de datos.
Pon en marcha tu proyecto con mi libro The Guía para principiantes de ciencia de datos. Proporciona tutoriales de autoaprendizaje con código de trabajo.

Estrategias para controlar la asimetría positiva

Para combatir el sesgo positivo, puede utilizar cinco transformaciones clave: transformaciones logarítmicas, de raíz cuadrada, de Box-Cox, de Yeo-Johnson y de cuantiles. Cada método tiene como objetivo mitigar la asimetría, mejorando la idoneidad de los datos para análisis posteriores.

Transformación de registros

Este método es particularmente adecuado para datos sesgados a la derecha, ya que minimiza efectivamente las diferencias a gran escala al tomar el registro natural de todos los puntos de datos. Esta compresión del rango de datos lo hace más accesible para análisis estadísticos posteriores.

# Applying Log Transformation
Ames['Log_SalePrice'] = np.log(Ames['SalePrice'])
print(f"Skewness after Log Transformation: {Ames['Log_SalePrice'].skew():.5f}")

Puedes ver que la asimetría se reduce:

Skewness after Log Transformation: 0.04172

Transformación de raíz cuadrada

Un enfoque más suave que la transformación logarítmica, ideal para datos moderadamente sesgados. Al aplicar la raíz cuadrada a cada punto de datos, se reduce la asimetría y disminuye el impacto de los valores atípicos, lo que hace que la distribución sea más simétrica.

# Applying Square Root Transformation
Ames['Sqrt_SalePrice'] = np.sqrt(Ames['SalePrice'])
print(f"Skewness after Square Root Transformation: {Ames['Sqrt_SalePrice'].skew():.5f}")

Esto imprime:

Skewness after Square Root Transformation: 0.90148

Transformación Box-Cox

Ofrece flexibilidad al optimizar el parámetro de transformación lambda (λ), aplicable solo a datos positivos. El método Box-Cox encuentra sistemáticamente la mejor transformación de potencia para reducir la asimetría y estabilizar la varianza, mejorando la normalidad de los datos.

# Applying Box-Cox Transformation after checking all values are positive
if (Ames['SalePrice'] > 0).all():
    Ames['BoxCox_SalePrice'], _ = boxcox(Ames['SalePrice'])
else:
    # Consider alternative transformations or handling strategies
    print("Not all SalePrice values are positive. Consider using Yeo-Johnson or handling negative values.")
print(f"Skewness after Box-Cox Transformation: {Ames['BoxCox_SalePrice'].skew():.5f}")

Esta es la mejor transformación hasta ahora porque la asimetría es muy cercana a cero:

Skewness after Box-Cox Transformation: -0.00436

Transformación de Yeo-Johnson

Las transformaciones anteriores sólo funcionan con datos positivos. Yeo-Johnson es similar a Box-Cox pero adaptable a datos tanto positivos como no positivos. Modifica los datos a través de un parámetro de transformación óptimo. Esta adaptabilidad le permite gestionar la asimetría en una gama más amplia de valores de datos, mejorando su ajuste a los modelos estadísticos.

# Applying Yeo-Johnson Transformation
Ames['YeoJohnson_SalePrice'], _ = yeojohnson(Ames['SalePrice'])
print(f"Skewness after Yeo-Johnson Transformation: {Ames['YeoJohnson_SalePrice'].skew():.5f}")

Al igual que en Box-Cox, la asimetría después de la transformación es muy cercana a cero:

Skewness after Yeo-Johnson Transformation: -0.00437

Transformación cuantil

La transformación cuantil asigna datos a una distribución específica, como la normal, y aborda eficazmente la asimetría al distribuir los puntos de datos de manera uniforme en la distribución elegida. Esta transformación normaliza la forma de los datos, enfocándose en hacer la distribución más uniforme o gaussiana sin asumir que beneficiará directamente a los modelos lineales debido a su naturaleza no lineal y al desafío de revertir los datos a su forma original.

# Applying Quantile Transformation to follow a normal distribution
quantile_transformer = QuantileTransformer(output_distribution='normal', random_state=0)
Ames['Quantile_SalePrice'] = quantile_transformer.fit_transform(Ames['SalePrice'].values.reshape(-1, 1)).flatten()
print(f"Skewness after Quantile Transformation: {Ames['Quantile_SalePrice'].skew():.5f}")

Debido a que esta transformación ajusta los datos a la distribución gaussiana mediante fuerza bruta, la asimetría es más cercana a cero:

Skewness after Quantile Transformation: 0.00286

Para ilustrar los efectos de estas transformaciones, echemos un vistazo a la representación visual de la distribución 'SalePrice' antes y después de aplicar cada método.

# Plotting the distributions
fig, axes = plt.subplots(2, 3, figsize=(18, 15))  # Adjusted for an additional plot

# Flatten the axes array for easier indexing
axes = axes.flatten()

# Hide unused subplot axes
for ax in axes[6:]:
    ax.axis('off')

# Original SalePrice Distribution
sns.histplot(Ames['SalePrice'], kde=True, bins=30, color='skyblue', ax=axes[0])
axes[0].set_title('Original SalePrice Distribution (Skew: 1.76)')
axes[0].set_xlabel('SalePrice')
axes[0].set_ylabel('Frequency')

# Log Transformed SalePrice
sns.histplot(Ames['Log_SalePrice'], kde=True, bins=30, color='blue', ax=axes[1])
axes[1].set_title('Log Transformed SalePrice (Skew: 0.04172)')
axes[1].set_xlabel('Log of SalePrice')
axes[1].set_ylabel('Frequency')

# Square Root Transformed SalePrice
sns.histplot(Ames['Sqrt_SalePrice'], kde=True, bins=30, color='orange', ax=axes[2])
axes[2].set_title('Square Root Transformed SalePrice (Skew: 0.90148)')
axes[2].set_xlabel('Square Root of SalePrice')
axes[2].set_ylabel('Frequency')

# Box-Cox Transformed SalePrice
sns.histplot(Ames['BoxCox_SalePrice'], kde=True, bins=30, color='red', ax=axes[3])
axes[3].set_title('Box-Cox Transformed SalePrice (Skew: -0.00436)')
axes[3].set_xlabel('Box-Cox of SalePrice')
axes[3].set_ylabel('Frequency')

# Yeo-Johnson Transformed SalePrice
sns.histplot(Ames['YeoJohnson_SalePrice'], kde=True, bins=30, color='purple', ax=axes[4])
axes[4].set_title('Yeo-Johnson Transformed SalePrice (Skew: -0.00437)')
axes[4].set_xlabel('Yeo-Johnson of SalePrice')
axes[4].set_ylabel('Frequency')

# Quantile Transformed SalePrice (Normal Distribution)
sns.histplot(Ames['Quantile_SalePrice'], kde=True, bins=30, color='green', ax=axes[5])
axes[5].set_title('Quantile Transformed SalePrice (Normal Distn, Skew: 0.00286)')
axes[5].set_xlabel('Quantile Transformed SalePrice')
axes[5].set_ylabel('Frequency')

plt.tight_layout(pad=4.0)
plt.show()

La siguiente imagen proporciona una comparación lado a lado, lo que le ayudará a comprender mejor la influencia de cada transformación en la distribución de los precios de la vivienda.

Esta imagen sirve como una referencia clara de cómo cada método de transformación altera la distribución de 'SalePrice', lo que demuestra el efecto resultante para lograr una distribución más normal.

Estrategias para controlar la asimetría negativa

Para combatir el sesgo negativo, puede utilizar las cinco transformaciones clave: transformaciones al cuadrado, al cubo, de Box-Cox, de Yeo-Johnson y de cuantiles. Cada método tiene como objetivo mitigar la asimetría, mejorando la idoneidad de los datos para análisis posteriores.

Transformación al cuadrado

Esto implica tomar cada punto de datos del conjunto de datos y elevarlo al cuadrado (es decir, elevarlo a la potencia de 2). La transformación al cuadrado es útil para reducir la asimetría negativa porque tiende a extender más los valores más bajos que los valores más altos. Sin embargo, es más eficaz cuando todos los puntos de datos son positivos y el grado de asimetría negativa no es extremo.

# Applying Squared Transformation
Ames['Squared_YearBuilt'] = Ames['YearBuilt'] ** 2
print(f"Skewness after Squared Transformation: {Ames['Squared_YearBuilt'].skew():.5f}")

Imprime:

Skewness after Squared Transformation: -0.57207

Transformación al cubo

Similar a la transformación al cuadrado, pero implica elevar cada punto de datos a la potencia de 3. La transformación al cubo puede reducir aún más la asimetría negativa, especialmente en los casos en que la transformación al cuadrado es insuficiente. Es más agresivo a la hora de distribuir los valores, lo que puede beneficiar a distribuciones más sesgadas negativamente.

# Applying Cubed Transformation
Ames['Cubed_YearBuilt'] = Ames['YearBuilt'] ** 3
print(f"Skewness after Cubed Transformation: {Ames['Cubed_YearBuilt'].skew():.5f}")

Imprime:

Skewness after Cubed Transformation: -0.54539

Transformación Box-Cox

Un método más sofisticado que encuentra el mejor parámetro lambda (λ) para transformar los datos en una forma normal. La transformación se define sólo para datos positivos. La transformación Box-Cox es muy eficaz para una amplia gama de distribuciones, incluidas aquellas con asimetría negativa, al hacer que los datos sean más simétricos. Para datos con asimetría negativa, a menudo se encuentra una lambda positiva, aplicando una transformación que reduce efectivamente la asimetría.

# Applying Box-Cox Transformation after checking all values are positive
if (Ames['YearBuilt'] > 0).all():
    Ames['BoxCox_YearBuilt'], _ = boxcox(Ames['YearBuilt'])
else:
    # Consider alternative transformations or handling strategies
    print("Not all YearBuilt values are positive. Consider using Yeo-Johnson or handling negative values.")
print(f"Skewness after Box-Cox Transformation: {Ames['BoxCox_YearBuilt'].skew():.5f}")

Puede ver que la asimetría se acerca a cero que antes:

Skewness after Box-Cox Transformation: -0.12435

Transformación de Yeo-Johnson

Similar a la transformación Box-Cox, pero Yeo-Johnson está diseñado para manejar datos tanto positivos como negativos. Para datos con asimetría negativa, la transformación de Yeo-Johnson puede normalizar las distribuciones incluso cuando hay valores negativos. Ajusta los datos de una manera que reduce la asimetría, lo que los hace particularmente versátiles para conjuntos de datos con una combinación de valores positivos y negativos.

# Applying Yeo-Johnson Transformation
Ames['YeoJohnson_YearBuilt'], _ = yeojohnson(Ames['YearBuilt'])
print(f"Skewness after Yeo-Johnson Transformation: {Ames['YeoJohnson_YearBuilt'].skew():.5f}")

De manera similar a Box-Cox, obtienes una asimetría más cercana a cero:

Skewness after Yeo-Johnson Transformation: -0.12435

Transformación cuantil

Este método transforma las características para que sigan una distribución específica, como la distribución normal, en función de sus cuantiles. No asume ninguna forma de distribución específica para los datos de entrada. Cuando se aplica a datos sesgados negativamente, la transformación cuantil puede normalizar efectivamente la distribución. Es particularmente útil para lidiar con valores atípicos y hacer que la distribución de los datos sea uniforme o normal, independientemente de la asimetría original.

# Applying Quantile Transformation to follow a normal distribution
quantile_transformer = QuantileTransformer(output_distribution='normal', random_state=0)
Ames['Quantile_YearBuilt'] = quantile_transformer.fit_transform(Ames['YearBuilt'].values.reshape(-1, 1)).flatten()
print(f"Skewness after Quantile Transformation: {Ames['Quantile_YearBuilt'].skew():.5f}")

Como vio antes en el caso de la asimetría positiva, la transformación cuantil proporciona el mejor resultado en el sentido de que la asimetría resultante es más cercana a cero:

Skewness after Quantile Transformation: 0.02713

Para ilustrar los efectos de estas transformaciones, echemos un vistazo a la representación visual de la distribución "YearBuilt" antes y después de aplicar cada método.

# Plotting the distributions
fig, axes = plt.subplots(2, 3, figsize=(18, 15))

# Flatten the axes array for easier indexing
axes = axes.flatten()

# Original YearBuilt Distribution
sns.histplot(Ames['YearBuilt'], kde=True, bins=30, color='skyblue', ax=axes[0])
axes[0].set_title(f'Original YearBuilt Distribution (Skew: {Ames["YearBuilt"].skew():.5f})')
axes[0].set_xlabel('YearBuilt')
axes[0].set_ylabel('Frequency')

# Squared YearBuilt
sns.histplot(Ames['Squared_YearBuilt'], kde=True, bins=30, color='blue', ax=axes[1])
axes[1].set_title(f'Squared YearBuilt (Skew: {Ames["Squared_YearBuilt"].skew():.5f})')
axes[1].set_xlabel('Squared YearBuilt')
axes[1].set_ylabel('Frequency')

# Cubed YearBuilt
sns.histplot(Ames['Cubed_YearBuilt'], kde=True, bins=30, color='orange', ax=axes[2])
axes[2].set_title(f'Cubed YearBuilt (Skew: {Ames["Cubed_YearBuilt"].skew():.5f})')
axes[2].set_xlabel('Cubed YearBuilt')
axes[2].set_ylabel('Frequency')

# Box-Cox Transformed YearBuilt
sns.histplot(Ames['BoxCox_YearBuilt'], kde=True, bins=30, color='red', ax=axes[3])
axes[3].set_title(f'Box-Cox Transformed YearBuilt (Skew: {Ames["BoxCox_YearBuilt"].skew():.5f})')
axes[3].set_xlabel('Box-Cox YearBuilt')
axes[3].set_ylabel('Frequency')

# Yeo-Johnson Transformed YearBuilt
sns.histplot(Ames['YeoJohnson_YearBuilt'], kde=True, bins=30, color='purple', ax=axes[4])
axes[4].set_title(f'Yeo-Johnson Transformed YearBuilt (Skew: {Ames["YeoJohnson_YearBuilt"].skew():.5f})')
axes[4].set_xlabel('Yeo-Johnson YearBuilt')
axes[4].set_ylabel('Frequency')

# Quantile Transformed YearBuilt (Normal Distribution)
sns.histplot(Ames['Quantile_YearBuilt'], kde=True, bins=30, color='green', ax=axes[5])
axes[5].set_title(f'Quantile Transformed YearBuilt (Normal Distn, Skew: {Ames["Quantile_YearBuilt"].skew():.5f})')
axes[5].set_xlabel('Quantile Transformed YearBuilt')
axes[5].set_ylabel('Frequency')

plt.tight_layout(pad=4.0)
plt.show()

La siguiente imagen proporciona una comparación en paralelo, lo que nos ayuda a comprender mejor la influencia de cada transformación en esta característica.

Esta imagen proporciona una referencia clara de cómo cada método de transformación altera la distribución de "YearBuilt", lo que demuestra el efecto resultante para lograr una distribución más normal.

Evaluación Estadística de Transformaciones

¿Cómo sabes que los datos transformados coinciden con la distribución normal?

La prueba de Kolmogorov-Smirnov (KS) es una prueba no paramétrica que se utiliza para determinar si una muestra proviene de una población con una distribución específica. A diferencia de las pruebas paramétricas, que suponen una forma de distribución específica para los datos (normalmente una distribución normal), las pruebas no paramétricas no hacen tales suposiciones. Esta cualidad los hace muy útiles en el contexto de las transformaciones de datos porque ayudan a evaluar en qué medida un conjunto de datos transformado se aproxima a una distribución normal. La prueba KS compara la función de distribución acumulativa (CDF) de los datos de la muestra con la CDF de una distribución conocida (en este caso, la distribución normal), proporcionando una estadística de prueba que cuantifica la distancia entre las dos.

Hipótesis nula y alternativa:

  • Hipótesis nula ($H_0$): Los datos siguen la distribución especificada (distribución normal, en este caso).
  • Hipótesis alternativa ($H_1$): Los datos no siguen la distribución especificada.

En este contexto, la prueba KS se utiliza para evaluar la bondad de ajuste entre la distribución empírica de los datos transformados y la distribución normal. La estadística de prueba es una medida de la mayor discrepancia entre las CDF empíricas (datos transformados) y teóricas (distribución normal). Una pequeña estadística de prueba sugiere que las distribuciones son similares.

# Import the Kolmogorov-Smirnov Test from scipy.stats
from scipy.stats import kstest

# Run the KS tests for the 10 cases
transformations = ["Log_SalePrice", "Sqrt_SalePrice", "BoxCox_SalePrice",
                    "YeoJohnson_SalePrice", "Quantile_SalePrice",
                    "Squared_YearBuilt", "Cubed_YearBuilt", "BoxCox_YearBuilt",
                    "YeoJohnson_YearBuilt", "Quantile_YearBuilt"]

# Standardizing the transformations before performing KS test
ks_test_results = {}
for transformation in transformations:
    standardized_data = (Ames[transformation] - Ames[transformation].mean()) / Ames[transformation].std()
    ks_stat, ks_p_value = kstest(standardized_data, 'norm')
    ks_test_results[transformation] = (ks_stat, ks_p_value)

# Convert results to DataFrame for easier comparison
ks_test_results_df = pd.DataFrame.from_dict(ks_test_results, orient='index', columns=['KS Statistic', 'P-Value'])
print(ks_test_results_df.round(5))

El código anterior imprime una tabla de la siguiente manera:

                      KS Statistic  P-Value
Log_SalePrice              0.04261  0.00017
Sqrt_SalePrice             0.07689  0.00000
BoxCox_SalePrice           0.04294  0.00014
YeoJohnson_SalePrice       0.04294  0.00014
Quantile_SalePrice         0.00719  0.99924
Squared_YearBuilt          0.11661  0.00000
Cubed_YearBuilt            0.11666  0.00000
BoxCox_YearBuilt           0.11144  0.00000
YeoJohnson_YearBuilt       0.11144  0.00000
Quantile_YearBuilt         0.02243  0.14717

Puede ver que cuanto mayor es el estadístico KS, menor es el valor p. Respectivamente,

  • Estadística KS: Representa la diferencia máxima entre la función de distribución empírica de la muestra y la función de distribución acumulativa de la distribución de referencia. Los valores más pequeños indican un ajuste más cercano a la distribución normal.
  • Valor P: Proporciona la probabilidad de observar los resultados de la prueba bajo la hipótesis nula. Un valor p bajo (normalmente <0,05) rechaza la hipótesis nula, lo que indica que la distribución de la muestra difiere significativamente de la distribución normal.

La transformación cuantil de 'SalePrice' arrojó los resultados más prometedores, con una estadística KS de 0,00719 y un valor p de 0,99924, lo que indica que después de esta transformación, la distribución se alinea estrechamente con la distribución normal. No es sorprendente porque la transformación cuantil está diseñada para producir un buen ajuste. El valor p es significativo porque un valor p más alto (cercano a 1) sugiere que la hipótesis nula (que la muestra proviene de una distribución específica) no puede rechazarse, lo que implica una buena normalidad.

Otras transformaciones como Log, Box-Cox y Yeo-Johnson también mejoraron la distribución de 'SalePrice' pero en menor medida, como lo reflejan sus valores p más bajos (que van de 0,00014 a 0,00017), lo que indica una menor conformidad con la distribución normal. en comparación con la transformación cuantil. Las transformaciones aplicadas a 'YearBuilt' mostraron en general menos efectividad para lograr la normalidad en comparación con 'SalePrice'. Las transformaciones de BoxCox y YeoJohnson ofrecieron ligeras mejoras con respecto a la elevación al cuadrado y al cubo, como se ve en sus estadísticas KS y valores p ligeramente más bajos, pero aún indicaron desviaciones significativas de la normalidad. La transformación cuantil para "YearBuilt" mostró un resultado más favorable con una estadística KS de 0,02243 y un valor p de 0,14717, lo que sugiere una mejora moderada hacia la normalidad, aunque no tan pronunciada como el efecto observado con "SalePrice".

Elegir la transformación adecuada

Elegir la transformación adecuada para abordar la asimetría de los datos no es una decisión única para todos; requiere una consideración cuidadosa del contexto y las características de los datos disponibles. No se puede subestimar la importancia del contexto a la hora de seleccionar el método de transformación adecuado. Aquí hay factores clave a considerar:

  • Características de los datos: La naturaleza de los datos (por ejemplo, la presencia de ceros o valores negativos) puede limitar la aplicabilidad de ciertas transformaciones. Por ejemplo, las transformaciones logarítmicas no se pueden aplicar directamente a valores cero o negativos sin realizar ajustes.
  • Grado de asimetría: el grado de asimetría de los datos influye en la elección de la transformación. Una asimetría más severa podría requerir transformaciones más potentes (por ejemplo, Box-Cox o Yeo-Johnson) en comparación con una asimetría más leve, que podría abordarse adecuadamente con transformaciones logarítmicas o de raíz cuadrada.
  • Propiedades estadísticas: Lo ideal es que la transformación elegida mejore las propiedades estadísticas del conjunto de datos, como normalizar la distribución y estabilizar la varianza, que son esenciales para muchas pruebas y modelos estadísticos.
  • Interpretabilidad: La facilidad de interpretar los resultados después de la transformación es crucial. Algunas transformaciones, como el log o la raíz cuadrada, permiten una interpretación relativamente sencilla, mientras que otras, como la transformación cuantil, pueden complicar la interpretación de la escala original.
  • Objetivo del análisis: El objetivo final del análisis, ya sea un modelado predictivo, una prueba de hipótesis o un análisis exploratorio, desempeña un papel fundamental en la selección del método de transformación. La transformación debe alinearse con las técnicas y modelos analíticos que se emplearán más adelante.

En resumen, la elección de la transformación correcta depende de múltiples factores, incluidos, entre otros, una comprensión sólida del conjunto de datos, los objetivos específicos del análisis y las implicaciones prácticas para la interpretabilidad y el rendimiento del modelo. Ningún método es universalmente superior; cada uno tiene sus ventajas y desventajas según el escenario en cuestión. Es importante resaltar una nota de advertencia con respecto a la Transformación Cuantil, que sus pruebas visuales y estadísticas identificaron como altamente efectiva para lograr una distribución normal. Si bien es potente, la Transformación Cuantil no es una transformación lineal como las demás. Esto significa que puede alterar significativamente la estructura de los datos de maneras que no son fácilmente reversibles, lo que podría complicar la interpretación de los resultados y la aplicación de transformaciones inversas para la retrotransformación a la escala original. Por lo tanto, a pesar de su efectividad en la normalización, su uso debe considerarse cuidadosamente, especialmente en los casos en los que mantener una conexión con la escala de datos original es importante o donde la interpretabilidad del modelo es una prioridad. En la mayoría de los escenarios, la preferencia podría inclinarse hacia transformaciones que equilibren la efectividad de la normalización con la simplicidad y la reversibilidad, asegurando que los datos sigan siendo lo más interpretables y manejables posible.

Lecturas adicionales

API

  • API scipy.stats.boxcox
  • API scipy.stats.yeojohnson
  • sklearn.preprocessing.API de transformador cuantil
  • API scipy.stats.kstest

Recursos

  • Conjunto de datos de Ames
  • Diccionario de datos Ames

Resumen

En esta publicación, se ha embarcado en una exploración detallada de las transformaciones de datos, enfocándose en su papel fundamental para abordar los datos sesgados dentro del campo de la ciencia de datos. A través de ejemplos prácticos utilizando las funciones "SalePrice" y "YearBuilt" del conjunto de datos de vivienda de Ames, usted demostró varias técnicas de transformación (log, raíz cuadrada, Box-Cox, Yeo-Johnson y transformaciones cuantiles) y su impacto en la normalización de las distribuciones de datos. Su análisis subraya la necesidad de seleccionar transformaciones apropiadas basadas en las características de los datos, el grado de asimetría, los objetivos estadísticos, la interpretabilidad y los objetivos específicos del análisis.

Específicamente, aprendiste:

  • La importancia de las transformaciones de datos y cómo pueden manejar distribuciones sesgadas.
  • Cómo comparar la efectividad de diferentes transformaciones a través de evaluaciones visuales y estadísticas.
  • La importancia de evaluar las características de los datos, la gravedad de la asimetría y los objetivos analíticos para elegir la técnica de transformación más adecuada.

¿Tiene alguna pregunta? Haga sus preguntas en los comentarios a continuación y haré todo lo posible para responder.

Artículos relacionados