Autor: Fernando

  • Min-Max Scaling

    En los proyectos de Data Science y Machine Learning es común trabajar con variables que poseen escalas muy diferentes. Por ejemplo, una variable puede representar la edad de una persona con valores entre 18 y 90 años, mientras que otra puede representar ingresos anuales con valores que superan los cientos de miles de euros.

    Estas diferencias de magnitud pueden generar problemas en numerosos algoritmos de aprendizaje automático, especialmente aquellos basados en distancias o gradientes. Para solucionar este problema se utilizan técnicas de escalado de datos, siendo una de las más populares el Min-Max Scaling.

    Esta técnica transforma los valores de una variable para que se encuentren dentro de un rango específico, normalmente entre 0 y 1, preservando las relaciones relativas entre las observaciones.

    ¿Qué es Min-Max Scaling?

    Min-Max Scaling, también conocido como Normalización Min-Max, es una técnica de escalado que transforma una variable numérica a un rango predeterminado. El rango más utilizado es (0, 1). Después de aplicar la transformación:

    • El valor mínimo se convierte en 0.
    • El valor máximo se convierte en 1.
    • El resto de los valores se distribuye proporcionalmente entre ambos extremos.

    Su objetivo principal es garantizar que todas las variables trabajen en la misma escala.

    ¿Cómo Funciona?

    La técnica utiliza el valor mínimo y máximo de la variable para realizar una transformación lineal. La fórmula es:

    $$x’ = \frac{x-x_{min}}{x_{max}-x_{min}}$$

    Donde:

    • x = valor original.
    • xmin = valor mínimo de la variable.
    • xmax = valor máximo de la variable.
    • x’ = valor transformado.

    El resultado siempre estará entre 0 y 1.

    Ejemplo Práctico

    Supongamos una variable de edades:

    edad = [20, 30, 40, 50, 60]
    
    edad_scaled = [0.00, 0.25, 0.50, 0.75, 1.00]

    Observamos que todos los valores quedan dentro del rango [0,1].

    Escalado a Otros Rangos

    Aunque normalmente se utiliza el rango [0,1], Min-Max permite escalar a cualquier intervalo. La fórmula general es:

    $$x’ = a + \frac{(x-x_{min})(b-a)}{x_{max}-x_{min}}$$

    Donde:

    • a = límite inferior.
    • b = límite superior.

    Por ejemplo:

    [-1,1]
    [0,100]
    [-5,5]

    ¿Por qué es necesario escalar los datos?

    Muchos algoritmos son sensibles a las magnitudes de las variables. Supongamos dos variables:

    VariableRango
    Edad18 – 80
    Ingresos10.000 – 500.000

    Sin escalado, la variable ingresos dominaría completamente los cálculos de distancia o los procesos de optimización. Min-Max elimina este problema al llevar ambas variables a la misma escala.

    Beneficios de Min-Max Scaling

    • Iguala la escala de las variables: todas las características trabajan dentro del mismo rango.
    • Conserva las Relaciones Relativas: la distancia proporcional entre observaciones se mantiene.
    • Fácil Interpretación: los valores transformados siempre pertenecen al rango especificado.
    • Mejora la estabilidad numérica: muchos algoritmos convergen más rápido cuando las variables están escaladas.
    • Compatible con redes neuronales: las funciones de activación suelen comportarse mejor cuando las entradas están normalizadas.

    ¿Cuándo Utilizar Min-Max Scaling?

    • Es recomendable cuando se utilizan algoritmos basados en distancia, por ejemplo:
      • K-Nearest Neighbors (KNN)
      • K-Means
      • DBSCAN
    • Se entrenan redes neuronales: la normalización favorece la convergencia durante el entrenamiento.
    • Se utiliza PCA: las variables deben encontrarse en escalas comparables.
    • Existen diferencias importantes de magnitud entre las distintas características del dataset.

    Ventajas

    • Implementación sencilla: Requiere únicamente conocer el mínimo y máximo.
    • Conserva la distribución original: No altera la forma de la distribución.
    • Mantiene la proporcionalidad: Las relaciones entre observaciones permanecen intactas.
    • Mejora muchos algoritmos: Especialmente los sensibles a la escala.
    • Computacionalmente eficiente: Su coste de cálculo es muy bajo.

    Desventajas

    • Muy sensible a los outliers: Es su principal inconveniente. Si existe un valor extremo:(35, 5000). El máximo será 5000 y la mayoría de observaciones quedarán comprimidas cerca de cero.
    • No reduce la asimetría: A diferencia de Box-Cox o Yeo-Johnson.
    • No corrige la distribución: Simplemente cambia la escala.
    • Dependencia de los datos de entrenamiento: Si aparecen nuevos valores fuera del rango original pueden generarse valores superiores a 1 o inferiores a 0.

    Limitaciones

    • No es robusto frente a outliers: Cuando existen valores extremos suele ser preferible: RobustScaler o Quantile Transformer
    • No aproxima a una distribución normal: La forma de la distribución permanece igual.
    • Puede requerir actualización: Cuando llegan nuevos datos con mínimos o máximos diferentes.

    Aplicaciones en Data Science y Machine Learning

    • K-Nearest Neighbors (KNN): Las distancias son el núcleo del algoritmo. Sin escalado, las variables con mayor rango dominan el cálculo.
    • K-Means: Los centroides se calculan utilizando distancias euclidianas.
    • Redes Neuronales: Ayuda a estabilizar gradientes, acelerar convergencia y mejorar entrenamiento.
    • Support Vector Machines (SVM): La escala afecta directamente al hiperplano de separación.
    • PCA (Principal Component Analysis): Los componentes principales son sensibles a la magnitud de las variables.
    • Deep Learning: Es una práctica habitual antes del entrenamiento de modelos profundos.

    Comparación con Otras Técnicas de Escalado

    CaracterísticaMin-MaxStandardScalerRobustScaler
    Rango fijoNoNo
    Sensible a outliersNo
    Conserva distribuciónParcialmenteParcialmente
    Utiliza mediaNoNo
    Utiliza medianaNoNo
    Fácil interpretaciónAltaMediaMedia

    Implementación en Python

    Aplicación Básica con Scikit-Learn

    from sklearn.preprocessing import MinMaxScaler
    import pandas as pd
    
    df = pd.DataFrame({
        "edad": [20, 30, 40, 50, 60]
    })
    
    scaler = MinMaxScaler()
    
    df["edad_escalada"] = scaler.fit_transform(df[["edad"]])
    
    print(df)

    Escalado de varias variables

    from sklearn.preprocessing import MinMaxScaler
    
    scaler = MinMaxScaler()
    
    X_scaled = scaler.fit_transform(X)

    Escalado a un Rango Personalizado

    from sklearn.preprocessing import MinMaxScaler
    
    scaler = MinMaxScaler(feature_range=(-1, 1))
    
    X_scaled = scaler.fit_transform(X)

    Uso dentro de un Pipeline

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import MinMaxScaler
    from sklearn.neighbors import KNeighborsClassifier
    
    pipeline = Pipeline([
        ("scaler", MinMaxScaler()),
        ("model", KNeighborsClassifier())
    ])
    
    pipeline.fit(X_train, y_train)
    

    Esta es la forma recomendada para evitar problemas de data leakage durante el entrenamiento.

    Buenas Prácticas

    1. Ajustar el escalador únicamente con los datos de entrenamiento.
    2. Aplicar la misma transformación a los datos de prueba.
    3. Analizar previamente la presencia de outliers.
    4. Integrar el escalado dentro de un Pipeline.
    5. Comparar su rendimiento con StandardScaler y RobustScaler.

    Conclusión

    Min-Max Scaling es una de las técnicas de escalado más utilizadas en Machine Learning debido a su simplicidad y eficacia. Su objetivo es transformar las variables numéricas a un rango específico, normalmente entre 0 y 1, permitiendo que todas las características contribuyan de manera equilibrada al entrenamiento del modelo.

    Aunque presenta limitaciones importantes frente a valores atípicos, sigue siendo una excelente opción para algoritmos basados en distancia, redes neuronales y métodos de reducción de dimensionalidad. Utilizado correctamente, Min-Max Scaling constituye un paso fundamental dentro de cualquier pipeline moderno de preparación de datos.

  • Transformación Recíproca

    Una de estas técnicas es la Transformación Recíproca (Reciprocal Transformation), una transformación matemática perteneciente al grupo de las transformaciones de potencia. Aunque actualmente suele utilizarse menos que alternativas como Box-Cox o Yeo-Johnson, sigue siendo una herramienta útil en determinados escenarios donde se necesita una compresión muy agresiva de los valores grandes.

    ¿Qué es la transformación recíproca?

    La Transformación Recíproca consiste en reemplazar cada valor de una variable por su inverso matemático.

    La fórmula básica es:

    $$y=\frac{1}{x}$$

    Donde:

    • x es el valor original.
    • y es el valor transformado.

    Esta transformación invierte la escala de la variable:

    • Los valores grandes se convierten en números pequeños.
    • Los valores pequeños se convierten en números grandes.

    Como consecuencia, se reduce drásticamente la influencia de los valores extremos elevados.

    ¿Cómo Funciona?

    La transformación modifica la relación entre los datos mediante una función hiperbólica.

    var = [1, 2, 5, 10, 100, 1000]
    
    var_inverse = [1, 0.5, 0.2, 0.1, 0.01, 0.001

    Puede observarse que:

    • Los valores grandes son comprimidos fuertemente.
    • Las diferencias entre valores extremos disminuyen considerablemente.
    • La distribución suele volverse menos asimétrica.

    Fundamento Matemático

    La transformación recíproca es un caso particular de las transformaciones de potencia. La fórmula general de las transformaciones de potencia es:

    $$y=x^{\lambda}$$

    Cuando:

    $$\lambda=-1$$

    obtenemos:

    $$y=x^{-1}=\frac{1}{x}$$

    Por ello, la transformación recíproca puede considerarse una transformación de potencia con exponente negativo.

    Beneficios de la Transformación Recíproca

    • Reduce la asimetría positiva: es especialmente eficaz cuando existen colas largas hacia la derecha.
    • Comprime fuertemente los valores grandes: los valores extremos pierden gran parte de su influencia sobre el análisis.
    • Puede mejorar la linealidad: en algunos modelos de regresión ayuda a transformar relaciones no lineales en relaciones más cercanas a la linealidad.
    • Fácil Implementación: su cálculo requiere únicamente una operación matemática simple.
    • Útil en Variables de Tasas y Velocidades: la interpretación física suele mantenerse en determinados dominios (velocidad, frecuencia, tiempo por unidad, etc.).

    ¿Cuándo utilizar la transformación recíproca?

    • Es recomendable cuando existe una fuerte asimetría positiva. Por ejemplo:
      • Tiempos de espera.
      • Duración de procesos.
      • Costes elevados.
      • Consumo energético.
    • Hay valores extremos muy grandes: La transformación recíproca comprime estos valores de manera más agresiva que:
      • Logaritmo.
      • Raíz cuadrada.
      • Raíz cúbica.
    • Se busca mejorar relaciones no lineales: especialmente en análisis de regresión.
    • La variable representa una magnitud inversa: Por ejemplo:
      • Tiempo por operación.
      • Coste por unidad.
      • Latencia.

    Ventajas

    • Compresión muy potente de outliers: Es una de las transformaciones clásicas más agresivas frente a valores elevados.
    • Fácil de comprender: su fundamento matemático es simple.
    • Sin necesidad de optimización: no requiere estimar parámetros como Box-Cox o Yeo-Johnson.
    • Puede mejorar ciertos modelos estadísticos: especialmente en análisis de regresión tradicional.

    Desventajas

    • No admite valores iguales a cero: la operación \(\frac{1}{0}\) no está definida matemáticamente.
    • Sensible a valores cercanos a cero, un valor como 0.01 genera un valor de 100, generando nuevos valores extremos.
    • Interpretación menos intuitiva: la escala transformada suele ser más difícil de explicar a usuarios de negocio.
    • Puede invertir la relación de los datos: los valores grandes pasan a ser pequeños y viceversa.

    Limitaciones

    • No funciona con ceros: es la limitación más importante, si existen ceros, suele utilizarse: \( y=\frac{1}{x+c} \) donde c es una constante positiva.
    • No garantiza normalidad: reducir la asimetría no implica obtener una distribución normal.
    • Puede generar nuevos outliers: cuando existen observaciones muy próximas a cero.
    • No siempre mejora el rendimiento del modelo: algunos algoritmos modernos apenas se benefician de este tipo de transformaciones. Por ejemplo:
      • Random Forest
      • XGBoost
      • LightGBM
      • CatBoost

    Aplicaciones en Data Science y Machine Learning

    • Regresión lineal: puede ayudar a reducir la heterocedasticidad y a mejorar la linealidad. y aproximar la normalidad de residuos.
    • Análisis Exploratorio de Datos (EDA): permite examinar distribuciones altamente sesgadas desde otra perspectiva.
    • Ingeniería de características: puede utilizarse para crear variables derivadas con mayor capacidad predictiva.
    • Modelos Estadísticos Clásicos: Es una transformación habitual en:
      • Econometría.
      • Bioestadística.
      • Investigación experimental.
    • Series Temporales: en algunos contextos se emplean para estabilizar la varianza de ciertas variables.

    Comparación con Otras Transformaciones

    CaracterísticaLogRaíz CuadradaRaíz CúbicaRecíproca
    Reduce asimetríaAltaModeradaModeradaMuy Alta
    Admite negativosNoNoSí*
    Admite ceroNoNo
    Sensible a valores pequeñosBajaBajaBajaMuy Alta
    Compresión de outliersAltaModeradaModeradaMuy Alta

    * Siempre que no sean exactamente cero.

    Implementación en Python

    Aplicación Básica con NumPy

    import numpy as np
    
    datos = np.array([1, 2, 5, 10, 100])
    
    transformados = 1 / datos
    
    print(transformados)
    
    [1.    0.5   0.2   0.1   0.01]

    Aplicación sobre un DataFrame

    import pandas as pd
    
    df = pd.DataFrame({"ventas": [10, 20, 50, 100, 500]})
    
    df["ventas_reciproca"] = 1 / df["ventas"]
    
    print(df)

    Manejo de Valores Cero

    Cuando existen ceros se añade una constante:

    import numpy as np
    
    datos = np.array([0, 1, 2, 5, 10])
    
    transformados = 1 / (datos + 1)
    
    print(transformados)
    

    Integración con Scikit-Learn

    Mediante FunctionTransformer:

    from sklearn.preprocessing import FunctionTransformer
    import numpy as np
    
    reciprocal = FunctionTransformer(
        lambda x: 1 / (x + 1)
    )
    
    X_transformado = reciprocal.fit_transform(X)
    

    Uso dentro de un Pipeline

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import FunctionTransformer
    from sklearn.linear_model import LinearRegression
    
    pipeline = Pipeline([
        (
            "reciprocal",
            FunctionTransformer(lambda x: 1 / (x + 1))
        ),
        (
            "modelo",
            LinearRegression()
        )
    ])
    
    pipeline.fit(X_train, y_train)
    

    Esta estrategia garantiza que la transformación se aplique correctamente durante el entrenamiento y la inferencia, evitando problemas de data leakage.

    Buenas Prácticas

    1. Verificar que no existan valores iguales a cero.
    2. Analizar la distribución antes y después de la transformación.
    3. Comprobar si realmente mejora el rendimiento del modelo.
    4. Utilizarla principalmente cuando existan valores extremadamente grandes.
    5. Integrarla dentro de un Pipeline de Machine Learning.

    Conclusión

    La Transformación Recíproca es una técnica clásica de transformación de potencia que reemplaza cada observación por su inverso matemático. Su principal fortaleza es la capacidad para comprimir de forma muy agresiva los valores elevados, reduciendo la asimetría positiva y el impacto de los outliers.

    Aunque presenta limitaciones importantes, especialmente en presencia de ceros o valores cercanos a cero, sigue siendo una herramienta útil en análisis estadístico, regresión y determinadas tareas de preparación de datos. Su simplicidad matemática y facilidad de implementación la convierten en una alternativa interesante cuando otras transformaciones más suaves no logran corregir adecuadamente la distribución de una variable.

  • Introducción a la Transformación de datos

    En Data Science, Estadística y Machine Learning, las transformaciones de variables suelen agruparse según el objetivo que persiguen. Aunque existen varias clasificaciones, la más utilizada las divide en los siguientes grupos:

    1. Transformaciones de Potencia (Power Transformations)

    Su objetivo principal es reducir la asimetría, estabilizar la varianza y aproximar la distribución a una normal para corregir datos sesgados. Las transformaciones son:

    Cuándo usarlas

    • Distribuciones sesgadas.
    • Variables con colas largas.
    • Problemas de heterocedasticidad.
    • Regresión lineal.

    2. Transformaciones de Escalado (Feature Scaling)

    Su objetivo es llevar las variables a una escala comparable. Utilizando la mediana y el rango intercuartílico (IQR)

    Cuándo usarlas

    • K-Means
    • KNN
    • PCA
    • Redes Neuronales
    • SVM

    3. Transformaciones de Normalización

    Buscan modificar la forma de la distribución para acercarla a una distribución normal.

    Cuándo usarlas

    • Regresión lineal
    • Modelos estadísticos clásicos
    • Análisis de hipótesis
    • PCA

    4. Transformaciones Basadas en Rangos (Rank Transformations)

    Reemplazan los valores originales por su posición ordenada.

    Beneficios

    • Muy robustas ante outliers.
    • Reducen el efecto de distribuciones extremas.

    5. Transformaciones Trigonométricas o Cíclicas

    Se utilizan para variables periódicas. Como hora, día de la semana, mes del año, etc.

    Aplicaciones

    • Series temporales.
    • Forecasting.
    • Redes neuronales.

    6. Transformaciones de Discretización (Binning)

    Convierten variables continuas en categorías.

    • Equal Width
    • Equal Frequency: cada grupo contiene aproximadamente el mismo número de observaciones.

    Ejemplo

    EdadCategoría
    22Joven
    45Adulto
    70Senior

    Aplicaciones

    • Scorecards.
    • Modelos de riesgo.
    • Interpretabilidad.

    7. Transformaciones para Variables Categóricas

    Transforman texto o categorías en valores numéricos.

    • One-Hot Encoding
    • Label Encoding
    • Target Encoding

    Utiliza la variable objetivo para generar la codificación.

    8. Transformaciones de Reducción de Dimensionalidad

    Transforman múltiples variables en un número menor de componentes.

    • Principal Component Analysis (PCA)
    • Linear Discriminant Analysis
    • Independent Component Analysis
    • t-SNE
    • UMAP

    Objetivos

    • Reducir ruido.
    • Mejorar velocidad.
    • Visualización.

    9. Transformaciones de Ingeniería de Características

    Crean nuevas variables a partir de las existentes.

    • Polinomiales
    • Interacciones
    • Ratios
    • Ventas / Clientes
    • Coste / Ingreso

    Aplicaciones

    • Regresión.
    • Machine Learning.
    • Deep Learning.

    Clasificación práctica más utilizada en Machine Learning

    Cuando estudias preprocesamiento de datos, normalmente las transformaciones se agrupan en cuatro grandes familias:

    Transformaciones de Distribución

    Modifican la forma de la distribución.

    • Log
    • Raíz cuadrada
    • Raíz cúbica
    • Recíproca
    • Box-Cox
    • Yeo-Johnson

    Escalado

    Modifican la magnitud de los valores.

    • Min-Max
    • StandardScaler
    • RobustScaler
    • MaxAbsScaler

    Codificación

    Transforman variables categóricas.

    • One-Hot Encoding
    • Label Encoding
    • Target Encoding

    Ingeniería de Características

    Crean nuevas variables.

    • Polinomiales
    • Interacciones
    • Variables temporales
    • Variables agregadas

    Esta última clasificación es la más utilizada en bibliotecas como Scikit-learn y en los pipelines modernos de Machine Learning.

  • Transformación de Raíz Cúbica

    Entre las técnicas de transformación más utilizadas para corregir este problema se encuentran las transformaciones de potencia, como la transformación logarítmica, la raíz cuadrada y la raíz cúbica. Aunque suele recibir menos atención que otras alternativas, la Transformación de Raíz Cúbica es una herramienta muy útil cuando los datos contienen valores positivos, negativos o cero, y se desea reducir la asimetría sin aplicar una transformación demasiado agresiva.

    ¿Qué es la transformación de raíz cúbica?

    La Transformación de Raíz Cúbica (Cube Root Transformation) consiste en sustituir cada valor de una variable por su raíz cúbica.

    Matemáticamente:

    $$y=\sqrt[3]{x}=x^{\frac{1}{3}}$$

    Donde:

    • x representa el valor original.
    • y representa el valor transformado.

    Esta transformación pertenece al grupo de las transformaciones de potencia y tiene como objetivo principal:

    • Reducir la asimetría.
    • Comprimir valores extremos.
    • Estabilizar la varianza.
    • Facilitar el modelado estadístico.

    Una de sus principales características es que puede aplicarse directamente a números positivos, negativos y al valor cero.

    ¿Cómo Funciona?

    La raíz cúbica reduce la distancia relativa entre los valores grandes y pequeños de una variable.

    ventas: [1, 8, 27, 125, 1000]
    
    ventas_sqr3 = [1, 2, 3, 5, 10]

    Obsérvese que mientras los valores originales crecen rápidamente, los valores transformados crecen mucho más lentamente. Este efecto produce una compresión de las colas de la distribución y ayuda a disminuir la asimetría positiva.

    La transformación de raíz cúbica admite: valores positivos, negativos y valor cero.

    Beneficios

    • Reduce la asimetría: cuando una distribución presenta una cola larga hacia la derecha, la raíz cúbica ayuda a equilibrarla.
    • Comprime Valores Extremos: Los valores muy grandes dejan de dominar la distribución. Esto reduce la influencia excesiva de ciertos registros sobre el modelo.
    • Admite valores negativos: una ventaja importante frente a las transformaciones logarítmicas y de raíz cuadrada.
    • Fácil Interpretación: Su comportamiento matemático es sencillo y fácilmente comprensible.
    • Implementación simple: No requiere estimar parámetros adicionales ni realizar optimización matemática.

    ¿Cuándo utilizar la transformación de raíz cúbica?

    • Es recomendable cuando existen valores negativos, por ejemplo: beneficios y pérdidas, variaciones de precios, cambios porcentuales o indicadores financieros.
    • Hay asimetría moderada o alta: Variables como ingresos, consumo energético y producción industrial
    • Se desea una transformación menos agresiva: La transformación logarítmica puede modificar drásticamente la escala de los datos. La raíz cúbica suele ofrecer una corrección más suave.
    • Existen valores extremos: La compresión de las colas ayuda a reducir su influencia.

    Ventajas

    • Funciona con cualquier número real: no necesita ajustes previos para tratar valores negativos o ceros.
    • No requiere estimar parámetros: a diferencia de Box-Cox o Yeo-Johnson.
    • Fácil de aplicar: Puede implementarse con una única operación matemática.
    • Reduce la influencia de outliers: aunque no los elimina, disminuye significativamente su impacto.
    • Mantiene el orden de los datos: Las observaciones conservan su posición relativa. Si un valor era mayor que otro antes de la transformación, seguirá siéndolo después.

    Desventajas

    • Menor capacidad de normalización: no suele acercar la distribución a la normalidad tanto como Box-Cox o Yeo-Johnson.
    • Puede ser insuficiente: en distribuciones extremadamente sesgadas puede no generar una mejora significativa.
    • No elimina outliers: los valores extremos continúan existiendo. Simplemente se reduce su influencia.
    • Pérdida de interpretabilidad directa: los valores transformados dejan de representar las unidades originales.

    Limitaciones

    Aunque es una técnica útil, presenta ciertas limitaciones.

    • No garantiza normalidad: reducir la asimetría no implica obtener una distribución normal.
    • No corrige relaciones no lineales: la transformación actúa sobre una variable individual. No modifica las relaciones entre variables.
    • No sustituye al tratamiento de outliers: si existen errores de captura o valores anómalos extremos, será necesario tratarlos mediante técnicas específicas.
    • No siempre mejora el rendimiento: algunos algoritmos modernos son poco sensibles a la distribución de las variables.
      • Random Forest.
      • XGBoost.
      • LightGBM.
      • CatBoost.

    Aplicaciones en Data Science y Machine Learning

    • Regresión Lineal
    • EDA
    • Clustering
    • Detección de anomalías
    • Ingeniería de Características (Feature Engineering)

    Implementación en Python

    Utilizando NumPy

    import numpy as np
    
    datos = np.array([
        -1000,
        -125,
        -8,
        0,
        8,
        125,
        1000
    ])
    
    datos_transformados = np.cbrt(datos)
    
    print(datos_transformados)
    

    Resultado:

    [-10.  -5.  -2.   0.   2.   5.  10.]

    Aplicación sobre un DataFrame

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        "ventas": [10, 50, 125, 1000, 5000]
    })
    
    df["ventas_cuberoot"] = np.cbrt(df["ventas"])
    
    print(df)
    

    Integración con Scikit-Learn

    Puede utilizarse mediante FunctionTransformer.

    from sklearn.preprocessing import FunctionTransformer
    import numpy as np
    
    cube_root = FunctionTransformer(np.cbrt)
    
    X_transformado = cube_root.fit_transform(X)
    

    Uso dentro de un Pipeline

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import FunctionTransformer
    from sklearn.linear_model import LinearRegression
    import numpy as np
    
    pipeline = Pipeline([
        ("cube_root", FunctionTransformer(np.cbrt)),
        ("modelo", LinearRegression())
    ])
    
    pipeline.fit(X_train, y_train)
    

    Esta es la forma recomendada para evitar fugas de información (data leakage) durante el entrenamiento.

    Comparación con Otras Transformaciones

    CaracterísticaLogarítmicaRaíz CuadradaRaíz CúbicaYeo-Johnson
    Admite negativosNoNo
    Admite ceroNo
    Reduce asimetríaAltaModeradaModeradaAlta
    Requiere parámetrosNoNoNo
    Fácil implementaciónAltaAltaAltaMedia
    Normalización avanzadaBajaBajaBajaAlta

    Buenas Prácticas

    1. Analizar la distribución antes y después de la transformación.
    2. Medir el nivel de asimetría para comprobar la mejora obtenida.
    3. Aplicar la transformación únicamente sobre variables numéricas.
    4. Integrarla dentro de un Pipeline cuando forme parte de un modelo de Machine Learning.
    5. Comparar los resultados con otras transformaciones como logaritmo, Box-Cox o Yeo-Johnson.

    Conclusión

    La Transformación de Raíz Cúbica es una técnica simple, eficiente y extremadamente flexible para reducir la asimetría de variables numéricas. Su principal ventaja frente a otras transformaciones clásicas es que puede aplicarse directamente a valores positivos, negativos y ceros, sin necesidad de modificaciones previas en los datos.

    Aunque su capacidad para aproximar una distribución normal suele ser menor que la de métodos más avanzados como Box-Cox o Yeo-Johnson, su facilidad de implementación y su capacidad para comprimir valores extremos la convierten en una herramienta muy valiosa dentro de los procesos de limpieza, transformación y preparación de datos para proyectos de Data Science y Machine Learning.

  • Transformación Yeo-Johnson

    Muchos algoritmos funcionan mejor cuando las variables presentan una distribución aproximadamente normal. Para lograrlo, existen diversas técnicas de transformación matemática, entre ellas la Transformación Yeo-Johnson, una de las más versátiles debido a que puede aplicarse tanto a valores positivos como negativos.

    Esta técnica fue propuesta por In-Kwon Yeo y Richard A. Johnson en el año 2000 como una extensión de la Transformación Box-Cox, eliminando una de sus principales limitaciones: la necesidad de trabajar exclusivamente con valores positivos.

    ¿Qué es la Transformación Yeo-Johnson?

    La Transformación Yeo-Johnson es un método de transformación de potencia (Power Transformation) diseñado para reducir la asimetría de una variable y acercar su distribución a una forma normal. Su principal objetivo es:

    • Reducir la asimetría.
    • Disminuir el impacto de valores extremos.
    • Estabilizar la varianza.
    • Mejorar el comportamiento estadístico de los datos.
    • Facilitar el aprendizaje de modelos sensibles a la distribución de las variables.

    A diferencia de Box-Cox, Yeo-Johnson puede trabajar con:

    • Valores positivos.
    • Valores negativos.
    • Valores iguales a cero.

    Por ello se ha convertido en una de las transformaciones más utilizadas en los procesos modernos de preprocesamiento de datos.

    Fundamento Matemático

    La transformación utiliza un parámetro λ (lambda), que controla el grado de transformación aplicado a los datos.

    Para valores positivos (x ≥ 0)

    $$y=\frac{(x+1)^{\lambda}-1}{\lambda},\quad \lambda\neq0$$

    Cuando λ = 0:

    $$y=\ln(x+1)$$

    Para valores negativos (x < 0)

    $$y=-\frac{(-x+1)^{2-\lambda}-1}{2-\lambda},\quad \lambda\neq2$$

    Cuando λ = 2:

    $$y=-\ln(-x+1)$$

    Interpretación del parámetro λ

    El parámetro λ determina la intensidad de la transformación.

    Valor de λEfecto
    λ = 1Sin transformación
    λ < 1Reduce asimetría positiva
    λ = 0Similar a transformación logarítmica
    λ > 1Expande ciertas regiones de los datos
    λ < 0Compresión más agresiva

    El valor óptimo suele calcularse automáticamente mediante máxima verosimilitud (Maximum Likelihood Estimation).

    ¿Cómo Funciona?

    El procedimiento general es:

    • Paso 1: Analizar la distribución: Se identifica si la variable presenta: asimetría positiva, negativa o varianza inestable.
    • Paso 2: Estimar λ: El algoritmo busca el valor de λ que mejor aproxima la distribución a una distribución normal.
    • Paso 3: Aplicar la transformación: Cada observación se transforma utilizando la fórmula correspondiente según sea positiva o negativa.
    • Paso 4: Evaluar el resultado: Se comprueban: histograma, skewness, curtosis y test de normalidad.

    Beneficios de la Transformación Yeo-Johnson

    • 1. Admite valores negativos: Es su principal ventaja frente a Box-Cox. No requiere desplazar los datos para volverlos positivos.
    • 2. Reduce la asimetría: Permite acercar la distribución a una forma más normal. Esto facilita el aprendizaje de numerosos algoritmos estadísticos.
    • 3. Estabiliza la varianza: Variables con dispersión heterogénea suelen comportarse mejor tras la transformación.
    • 4. Reduce el efecto de valores extremos: Aunque no elimina outliers, disminuye su influencia sobre el modelo.
    • 5. Automatiza la búsqueda del mejor λ: No es necesario seleccionar manualmente el parámetro. Las librerías modernas calculan automáticamente el valor óptimo.

    ¿Cuándo Utilizar Yeo-Johnson?

    • Es recomendable cuando existen valores negativos. Algunos tipos de datos pueden tener valores positivos como el beneficio neto, rendimientos financieros, variaciones porcentuales y temperaturas.
    • Hay una fuerte asimetría, como sucede en ingresos, ventas, gastos y clientes.
    • Se utilizarán algoritmos sensibles a la escala y distribución como:
      • Regresión Lineal.
      • Regresión Logística.
      • Redes Neuronales.
      • Análisis Discriminante.
      • PCA.
    • Se busca aproximar una distribución normal: especialmente en modelos estadísticos clásicos.

    Ventajas

    • Mayor flexibilidad que Box-Cox: puede trabajar con cualquier valor real.
    • Menor necesidad de ingeniería manual: no requiere sumar constantes para eliminar negativos.
    • Compatible con pipelines de Machine Learning: puede integrarse fácilmente dentro de procesos automatizados.
    • Fácil implementación: Scikit-Learn la incluye de forma nativa.

    Desventajas

    • Menor interpretabilidad:
      • Después de la transformación:
      • Los valores dejan de tener significado directo.
      • Las unidades originales se pierden temporalmente.
    • No garantiza normalidad perfecta: la distribución puede mejorar considerablemente sin llegar a ser completamente normal.
    • Puede no aportar beneficios: Algunos algoritmos modernos son robustos frente a distribuciones asimétricas. Por ejemplo:
      • Random Forest.
      • XGBoost.
      • LightGBM.
      • CatBoost.

    Limitaciones

    Aunque es una técnica muy potente, tiene ciertas limitaciones.

    • No elimina outliers: solo reduce parcialmente su impacto. Si existen valores extremos muy severos, puede ser necesario:
      • Winsorización.
      • Recorte de datos.
      • Métodos robustos.
    • No corrige relaciones no lineales: la transformación actúa sobre una variable individual. No modifica las relaciones entre variables.
    • Puede afectar la interpretabilidad del modelo : especialmente en entornos de negocio donde se requiere explicar los resultados en unidades originales.

    Aplicaciones en Data Science y Machine Learning

    • Modelos de Regresión: Mejora:
      • Normalidad de residuos.
      • Homocedasticidad.
      • Estabilidad de coeficientes.
    • En EDA: Permite visualizar patrones que antes quedaban ocultos por distribuciones extremadamente sesgadas.
    • Reducción de Dimensionalidad: Métodos como PCA suelen beneficiarse de variables más próximas a la normalidad.
    • Clustering: Algoritmos basados en distancia pueden producir grupos más consistentes.
    • Detección de Anomalías: La reducción de la asimetría puede facilitar la identificación de observaciones atípicas.

    Implementación en Python

    from sklearn.preprocessing import PowerTransformer
    import pandas as pd
    
    df = pd.DataFrame({
        "ventas": [-100, 0, 50, 200, 1000, 5000]
    })
    
    pt = PowerTransformer(method="yeo-johnson")
    
    df["ventas_transformadas"] = pt.fit_transform(df[["ventas"]])
    
    print(df)
    

    Obtener el valor λ calculado

    from sklearn.preprocessing import PowerTransformer
    
    pt = PowerTransformer(method="yeo-johnson")
    
    pt.fit(df[["ventas"]])
    
    print(pt.lambdas_)
    
    [0.34]

    Este valor representa el λ óptimo encontrado para la variable.

    Uso dentro de un Pipeline

    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import PowerTransformer
    from sklearn.linear_model import LinearRegression
    
    pipeline = Pipeline([
        ("yeo_johnson", PowerTransformer(method="yeo-johnson")),
        ("modelo", LinearRegression())
    ])
    
    pipeline.fit(X_train, y_train)

    Esta es la forma recomendada en proyectos de Machine Learning, ya que evita fugas de información (data leakage) entre entrenamiento y prueba.

    Comparación entre Yeo-Johnson y Box-Cox

    CaracterísticaYeo-JohnsonBox-Cox
    Admite valores negativosNo
    Admite cerosNo
    Usa parámetro λ
    Reduce asimetría
    Estabiliza varianza
    Implementación en Scikit-Learn
    Requiere datos positivosNo

    Buenas Prácticas

    1. Aplicar únicamente sobre variables numéricas.
    2. Ajustar la transformación únicamente con los datos de entrenamiento.
    3. Integrarla dentro de un Pipeline.
    4. Comparar la distribución antes y después de la transformación.
    5. Verificar si realmente mejora el rendimiento del modelo.

    Conclusión

    La Transformación Yeo-Johnson es una de las técnicas de normalización más versátiles utilizadas actualmente en Data Science y Machine Learning. Su capacidad para trabajar con valores positivos, negativos y ceros la convierte en una alternativa superior a Box-Cox en muchos escenarios reales.

    Cuando los datos presentan asimetría significativa, varianza inestable o contienen valores negativos, Yeo-Johnson permite generar distribuciones más equilibradas, facilitando el trabajo de algoritmos estadísticos y mejorando la calidad de los modelos predictivos.

    Por su facilidad de uso, integración con Scikit-Learn y capacidad para automatizar la búsqueda del parámetro óptimo λ, constituye una herramienta fundamental dentro del proceso moderno de preparación de datos.

  • Transformación de Box-Cox

    La transformación de Box-Cox es una de las técnicas más importantes para el tratamiento de datos sesgados en estadística, ciencia de datos y machine learning. Su principal objetivo es transformar una variable para que su distribución se aproxime lo máximo posible a una distribución normal, facilitando el análisis estadístico y mejorando el comportamiento de determinados modelos predictivos.

    A diferencia de transformaciones más simples como el logaritmo o la raíz cuadrada, la transformación Box-Cox no utiliza una única fórmula fija. En su lugar, busca automáticamente la transformación más adecuada para cada conjunto de datos mediante un parámetro denominado λ (lambda).

    ¿Qué es la transformación de Box-Cox?

    La transformación Box-Cox fue propuesta por los estadísticos George Box y David Cox en 1964 como un método para transformar variables y aproximarlas a una distribución normal. La técnica aplica una familia de transformaciones parametrizadas por λ:

    $$y(\lambda)=\begin{cases}\frac{x^\lambda – 1}{\lambda}, & \text{si } \lambda \neq 0 \\ \ln(x), & \text{si } \lambda = 0 \end{cases}$$

    cuando:

    $$\lambda \neq 0$$

    y utiliza una transformación logarítmica cuando:

    $$\lambda = 0$$

    Cuando aplicamos un logaritmo estamos imponiendo una transformación concreta. Cuando aplicamos una raíz cuadrada, también estamos imponiendo una transformación concreta. Box-Cox adopta un enfoque diferente y busca automáticamente cuál es la transformación que mejor aproxima los datos a una distribución normal. Para ello prueba distintos valores de λ.

    Interpretación del Parámetro λ

    El valor de λ determina qué transformación se aplicará. Algunos casos especiales son:

    λTransformación Aproximada
    -1Recíproca
    -0.5Recíproca de raíz cuadrada
    0Logaritmo
    0.5Raíz cuadrada
    1Sin transformación

    Esto significa que Box-Cox puede comportarse como varias transformaciones clásicas dependiendo del valor óptimo encontrado.

    Ejemplo Conceptual

    Supongamos una variable de ingresos:

    ventas: [20000, 25000, 30000, 40000, 500000]

    La distribución presenta una fuerte cola hacia la derecha. Al aplicar Box-Cox:

    1. El algoritmo prueba distintos valores de λ.
    2. Evalúa qué transformación produce una distribución más cercana a la normalidad.
    3. Selecciona automáticamente el valor óptimo.

    El resultado suele ser una distribución mucho más equilibrada.

    Beneficios de la Transformación Box-Cox

    • Reducción de la Asimetría: Es especialmente eficaz cuando los datos presentan una fuerte asimetría positiva.
    • Aproximación a la Normalidad: Su principal objetivo es acercar la distribución a una forma gaussiana.
    • Estabilización de la Varianza: En muchos casos ayuda a reducir problemas de heterocedasticidad.
    • Automatización: No obliga al analista a elegir manualmente entre logaritmo, raíz cuadrada, transformación recíproca el algoritmo selecciona la mejor opción.

    ¿Cuándo Utilizar Box-Cox?

    La transformación Box-Cox suele ser recomendable cuando:

    • Existe una fuerte asimetría positiva.
    • Se desea aproximar la distribución a la normalidad.
    • Se trabaja con métodos estadísticos sensibles a la distribución.
    • La variable contiene únicamente valores positivos.

    La Principal Limitación

    Box-Cox tiene una restricción importante: solo funciona con valores estrictamente positivos. Si la variable contiene valores negativos o iguales a cero la transformación Box-Cox no puede aplicarse directamente. En estos casos suele utilizarse una alternativa moderna denominada: Transformación Yeo-Johnson que fue diseñada precisamente para eliminar esta limitación.

    Box-Cox vs transformación logarítmica

    CaracterísticaLogaritmoBox-Cox
    Fácil de aplicar
    Reduce asimetría
    Busca automáticamente la mejor transformaciónNo
    Solo admite valores positivos
    Aproxima a la normalidadParcialmenteMejor

    Box-Cox vs Yeo-Johnson

    CaracterísticaBox-CoxYeo-Johnson
    Valores positivos
    Valores ceroNo
    Valores negativosNo
    Búsqueda automática de λ

    Actualmente, Yeo-Johnson suele utilizarse cuando no se puede garantizar que todos los valores sean positivos.

    Aplicación en Machine Learning

    Aunque Box-Cox nació en el ámbito estadístico, también se utiliza durante la preparación de datos para Machine Learning. Puede aplicarse antes de entrenar modelos como:

    • Regresión Lineal.
    • Ridge Regression.
    • Lasso Regression.
    • Support Vector Machines.
    • Redes Neuronales.

    Los modelos basados en árboles suelen ser menos sensibles a este tipo de transformaciones.

    Implementación en Python

    La biblioteca SciPy incluye una implementación de Box-Cox.

    from scipy.stats import boxcox
    
    datos_transformados, lambda_optimo = boxcox(df["ventas"])
    
    print(lambda_optimo)
    

    El algoritmo devuelve:

    • Los datos transformados.
    • El valor óptimo de λ encontrado.

    Visualización Antes y Después

    import matplotlib.pyplot as plt
    from scipy.stats import boxcox
    
    plt.hist(df["ventas"])
    plt.title("Distribución Original")
    plt.show()
    
    ventas_boxcox, _ = boxcox(df["ventas"])
    
    plt.hist(ventas_boxcox)
    plt.title("Distribución Box-Cox")
    plt.show()
    

    Esto permite observar visualmente la reducción de la asimetría.

    Utilización con Scikit-Learn

    from sklearn.preprocessing import PowerTransformer
    
    pt = PowerTransformer(method="box-cox")
    
    ventas_transformadas = pt.fit_transform(df[["ventas"]])
    

    Este enfoque resulta especialmente útil dentro de pipelines de Machine Learning.

    Buenas Prácticas

    Antes de aplicar Box-Cox:

    • Analizar la distribución mediante histogramas.
    • Medir la asimetría (skewness).
    • Verificar que todos los valores sean positivos.

    Después de la transformación:

    • Comparar distribuciones.
    • Revisar la reducción de la asimetría.
    • Evaluar el impacto sobre el modelo.

    Conclusión

    La transformación Box-Cox es una de las técnicas más potentes para el tratamiento de datos sesgados. Su principal ventaja consiste en buscar automáticamente la transformación que mejor aproxima una variable a una distribución normal, permitiendo reducir la asimetría, estabilizar la varianza y mejorar el comportamiento de numerosos métodos estadísticos y modelos de Machine Learning. Aunque su uso está limitado a variables con valores positivos, sigue siendo una herramienta fundamental dentro del conjunto de técnicas de transformación de datos utilizadas durante la preparación de datos en proyectos de Ciencia de Datos.

  • Transformación de Raíz Cuadrada

    La transformación de raíz cuadrada es una técnica de preprocesamiento utilizada para modificar la distribución de una variable numérica con el objetivo de reducir la asimetría, disminuir el impacto de los valores extremos y facilitar el análisis estadístico. Aunque suele recibir menos atención que la transformación logarítmica, constituye una alternativa muy útil cuando la asimetría es moderada o cuando los datos contienen valores iguales a cero.

    Dentro del proceso de preparación de datos, esta técnica forma parte de las transformaciones destinadas a corregir distribuciones sesgadas antes de aplicar algoritmos de Machine Learning o realizar análisis estadísticos.

    ¿Qué es una transformación de raíz cuadrada?

    La transformación consiste en sustituir cada valor de una variable por su raíz cuadrada. La fórmula es:

    $$Y=\sqr{X}$$

    Donde:

    • \( X \) es el valor original.
    • \( Y \) es el valor transformado.

    Esta operación reduce progresivamente las diferencias entre los valores más grandes sin alterar el orden de los datos.

    ¿Por qué utilizar una transformación de raíz cuadrada?

    Muchos conjuntos de datos presentan distribuciones asimétricas hacia la derecha. Por ejemplo:

    ventas = [1, 2, 3, 5, 25]

    El valor 25 se encuentra muy alejado del resto y puede influir excesivamente en algunos análisis. Aplicando la raíz cuadrada obtenemos:

    ventas_sqr = [1.00, 1.41, 1.73, 2.24, 5.00]

    Observamos que la diferencia entre los valores sigue existiendo, pero es considerablemente menor.

    Diferencia Entre Raíz Cuadrada y Logaritmo

    Ambas transformaciones buscan reducir la asimetría, pero lo hacen con distinta intensidad.

    • Transformación Logarítmica: es más agresiva, reduce fuertemente los valores grandes y es adecuada para asimetrías elevadas.
    • Transformación de Raíz Cuadrada: es menos agresiva, mantiene mejor las diferencias originales y es adecuada para asimetrías moderadas.

    ¿Cuándo Utilizarla?

    La transformación de raíz cuadrada suele ser una buena elección cuando existe una asimetría positiva moderada. Una ventaja importante frente al logaritmo es que puede aplicarse directamente sobre variables que contienen valores iguales a cero.

    En cambio, no queremos una transformación demasiado agresiva, si el logaritmo altera excesivamente la distribución, la raíz cuadrada puede ofrecer un equilibrio mejor.

    Ventajas de la Transformación de Raíz Cuadrada

    • Reduce la asimetría: ayuda a equilibrar distribuciones con sesgo positivo.
    • Admite valores cero: no requiere transformaciones adicionales como ocurre con el logaritmo.
    • Menor impacto sobre la interpretación: los datos transformados conservan mejor la relación con la escala original.
    • Reduce parcialmente los outliers: los valores extremos siguen existiendo, pero su influencia disminuye.

    Limitaciones

    • No funciona con valores negativos: la raíz cuadrada real no está definida para números negativos. No puede calcularse dentro de los números reales.
    • Menos efectiva para asimetrías extremas: Cuando la distribución está muy sesgada, transformaciones como la logarítmica,
    • Box-Cox o Yeo-Johnson suelen ofrecer mejores resultados.
    • No garantiza una distribución normal: aunque reduce la asimetría, no siempre produce una distribución perfectamente normal.

    Comparación de Transformaciones para Datos Sesgados

    TransformaciónIntensidadAdmite CerosAdmite Negativos
    LogarítmicaAltaNoNo
    Raíz CuadradaMediaNo
    Raíz CúbicaBaja
    Box-CoxAltaNoNo
    Yeo-JohnsonAlta

    Implementación en Python

    Utilizando NumPy

    import numpy as np
    
    df["ventas_sqrt"] = np.sqrt(df["ventas"])
    

    Aplicando a una Serie

    import pandas as pd
    import numpy as np
    
    ventas = pd.Series([1, 4, 9, 16, 25])
    
    ventas_sqrt = np.sqrt(ventas)
    
    print(ventas_sqrt)
    
    0    1.0
    1    2.0
    2    3.0
    3    4.0
    4    5.0
    dtype: float64

    Comparando Distribuciones

    import matplotlib.pyplot as plt
    import numpy as np
    
    df["ventas"].hist()
    
    plt.title("Distribución Original")
    plt.show()
    
    np.sqrt(df["ventas"]).hist()
    
    plt.title("Distribución Transformada")
    plt.show()
    

    Esta visualización permite comprobar si la transformación ha reducido efectivamente la asimetría.

    Relación con Machine Learning

    La transformación de raíz cuadrada suele aplicarse durante la fase de Transformación de Datos antes del entrenamiento de modelos. Puede resultar útil en algoritmos sensibles a la distribución de los datos, como:

    • Regresión Lineal.
    • Regresión Ridge.
    • Regresión Lasso.
    • Support Vector Machines.
    • Redes Neuronales.

    Su objetivo no es mejorar directamente la precisión del modelo, sino proporcionar una representación de los datos más adecuada para el aprendizaje.

  • Transformación Logarítmica

    Qué es, cuándo utilizarla y cómo aplicarla en Data Science

    La transformación logarítmica es una de las técnicas de preprocesamiento de datos más utilizadas en Ciencia de Datos, Estadística y Machine Learning. Su principal objetivo es modificar la distribución de una variable para facilitar el análisis, mejorar el comportamiento de ciertos algoritmos y reducir el impacto de valores extremos.

    Aunque puede parecer un concepto matemático complejo, la realidad es que la transformación logarítmica es una herramienta práctica que ayuda a resolver problemas muy comunes en datasets reales, especialmente cuando trabajamos con variables altamente asimétricas o con rangos de valores extremadamente amplios.

    ¿Qué es una transformación logarítmica?

    Una transformación logarítmica consiste en reemplazar los valores originales de una variable por sus logaritmos. La forma más habitual es:

    y=log(x)y=\log(x)

    Donde:

    • \(x\) es el valor original.
    • \(y\) es el valor transformado.

    El efecto principal es comprimir las diferencias entre valores grandes mientras se conservan las relaciones entre observaciones.

    ¿Por qué se utiliza?

    Muchos fenómenos reales no crecen de forma lineal. Por ejemplo:

    • Ingresos de personas.
    • Valor de viviendas.
    • Número de visitas a una web.
    • Ventas de productos.
    • Seguidores en redes sociales.

    En estos casos suelen existir muchos valores pequeños y unos pocos valores extremadamente grandes. La diferencia entre ellos puede dominar completamente el análisis. La transformación logarítmica reduce esta desproporción.

    Cómo Funciona el Logaritmo

    Supongamos que utilizamos logaritmos en base 10:

    Valor OriginalLog10
    101
    1002
    1.0003
    10.0004
    100.0005

    Observa que:

    10 → 100
    Multiplicación ×10
    
    100 → 1.000
    Multiplicación ×10
    

    Pero tras aplicar el logaritmo:

    1 → 2
    Incremento +1
    
    2 → 3
    Incremento +1
    

    El logaritmo transforma relaciones multiplicativas en relaciones aditivas.

    Reducción de la Asimetría

    Uno de los usos más importantes de la transformación logarítmica es reducir la asimetría de una distribución. Muchas variables presentan una larga cola hacia la derecha. La transformación suele producir una distribución más equilibrada que facilita tanto el análisis estadístico como el entrenamiento de modelos.

    Reducción del Impacto de los Outliers

    Otra ventaja importante es la reducción de la influencia de valores extremos.

    ventas = [100, 120, 150, 180, 1000]

    El valor 10.000 domina completamente la escala. Aplicando logaritmos:

    ventas_log = [4.61, 4.79, 5.01, 5.19, 9.21]

    La diferencia sigue existiendo, pero es mucho menos extrema.

    Mejora de la Relación Lineal

    Muchos algoritmos funcionan mejor cuando existe una relación aproximadamente lineal entre variables. Como por ejemplo entre publicidad y ventas. A menudo esta relación es exponencial y aplicando logaritmos, la relación puede volverse más lineal y resultar más fácil de modelar.

    Cuándo Utilizar una Transformación Logarítmica

    La transformación logarítmica suele ser recomendable cuando:

    • Existe una fuerte asimetría positiva: por ejemplo, en ingresos, ventas, número de usuarios.
    • Existen valores extremos: cuando unos pocos registros son mucho mayores que el resto.
    • La variable cubre varios órdenes de magnitud: por ejemplo, [10, 100, 1000, 10000, 10000000]
    • Se desea estabilizar la varianza: algunos modelos estadísticos asumen una varianza relativamente constante. La transformación logarítmica puede ayudar a cumplir esta condición.

    Cuándo NO Utilizarla

    No siempre es una buena idea usarla en:

    • Distribuciones ya equilibradas: Si la variable ya presenta una distribución aproximadamente normal, la transformación puede empeorar los resultados.
    • Variables categóricas: No tiene sentido aplicar logaritmos a este tipo de variables.
    • Variables con interpretación directa: En algunos casos la transformación dificulta la interpretación de los resultados.

    El Problema del Cero

    Los logaritmos presentan una limitación importante, hallar el logaritmo de cero np.log(0) produce un error matemático. Una práctica habitual consiste en utilizar:

    y=log(x+1)y=\log(x+1)

    Esto permite transformar variables que contienen ceros. Es una de las transformaciones más utilizadas en Machine Learning.

    Aplicación en Machine Learning

    La transformación logarítmica puede utilizarse durante la fase de preparación de datos para:

    • Regresión Lineal.
    • Regresión Ridge.
    • Regresión Lasso.
    • Árboles de decisión.
    • Random Forest.
    • Gradient Boosting.
    • Redes neuronales.

    Aunque los modelos basados en árboles son menos sensibles a la escala de los datos, la transformación puede seguir siendo útil para mejorar la calidad de la información.

    Transformar la Variable Objetivo

    En ocasiones no solo se transforman las variables predictoras. También puede transformarse la variable objetivo. El modelo aprende sobre la variable transformada y posteriormente las predicciones pueden volver a la escala original mediante la función exponencial.

    Implementación en Python

    Utilizando NumPy

    import numpy as np
    
    df["ventas_log"] = np.log(df["ventas"])

    Cuando Existen Ceros

    import numpy as np
    
    df["ventas_log"] = np.log1p(df["ventas"])

    Visualización Antes y Después

    import matplotlib.pyplot as plt
    
    df["ventas"].hist()
    
    plt.show()
    
    df["ventas_log"].hist()
    
    plt.show()
    

    Esto permite observar cómo cambia la distribución tras la transformación.

    Ventajas de la Transformación Logarítmica

    • Reduce la asimetría de los datos.
    • Disminuye el impacto de valores extremos.
    • Facilita el modelado de relaciones no lineales.
    • Puede mejorar el rendimiento de algunos algoritmos.
    • Ayuda a estabilizar la varianza.

    Limitaciones

    • No funciona directamente con valores negativos.
    • Requiere tratamiento especial para los ceros.
    • Puede dificultar la interpretación de resultados.
    • No siempre mejora el rendimiento del modelo.
  • Introducción a la Regresión: Transformación de la Variable Objetivo

    El objetivo de este laboratorio:

    • Aplicar transformaciones para que la variable objetivo tenga una distribución más normal para la regresión.
    • Aplicar transformaciones inversas para poder utilizarlas en un contexto de regresión.
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    %matplotlib inline

    En las siguientes celdas cargaremos los datos y definiremos algunas funciones de grafico útiles.

    Python
    np.random.seed(72018)
    
    
    # Adapta el formato de los datos para que sean compatibles con librerías como Scikit-Learn.
    def to_2d(array):
        return array.reshape(array.shape[0], -1)
    
    # Simula y visualiza variables que crecen de forma exponencial o que tienen un sesgo extremo.    
    def plot_exponential_data():
        data = np.exp(np.random.normal(size=1000))
        plt.hist(data)
        plt.show()
        return data
    
    # Evalúa el impacto de aplicar transformaciones no lineales cuadráticas sobre variables originalmente estables.    
    def plot_square_normal_data():
        data = np.square(np.random.normal(loc=5, size=1000))
        plt.hist(data)
        plt.show()
        return data

    Cargar los datos

    url = "https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBM-ML240EN-SkillsNetwork/labs/data/boston_housing_clean.pickle"
    
    wget.download(url)

    Cargando los datos de vivienda de Boston (Boston Housing Data)

    with open('boston_housing_clean.pickle', 'rb') as to_read:
        boston = pd.read_pickle(to_read)
    boston_data = boston['dataframe']
    boston_description = boston['description']
    print(boston_data.head())
          CRIM	ZN	INDUS	CHAS	 NOX	   RM	 AGE	   DIS	RAD	  TAX	PTRATIO	     B	LSTAT	MEDV
    0	0.00632	18.0	2.31	0.0	 0.538	6.575	65.2	4.0900	1.0	296.0	   15.3	396.90	4.98	24.0
    1	0.02731	 0.0	7.07	0.0	 0.469	6.421	78.9	4.9671	2.0	242.0	   17.8	396.90	9.14	21.6
    2	0.02729	 0.0	7.07	0.0	 0.469	7.185	61.1	4.9671	2.0	242.0	   17.8	392.83	4.03	34.7
    3	0.03237	 0.0	2.18	0.0	 0.458	6.998	45.8	6.0622	3.0	222.0	   18.7	394.63	2.94	33.4
    4	0.06905	 0.0	2.18	0.0	 0.458	7.147	54.2	6.0622	3.0	222.0	   18.7	396.90	5.33	36.2
    
    print(boston_description)
    Boston House Prices dataset
    ===========================
    
    Notes
    ------
    Data Set Characteristics:  
    
        :Number of Instances: 506 
    
        :Number of Attributes: 13 numeric/categorical predictive
        
        :Median Value (attribute 14) is usually the target
    
        :Attribute Information (in order):
            - CRIM     per capita crime rate by town
            - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
            - INDUS    proportion of non-retail business acres per town
            - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
            - NOX      nitric oxides concentration (parts per 10 million)
            - RM       average number of rooms per dwelling
            - AGE      proportion of owner-occupied units built prior to 1940
            - DIS      weighted distances to five Boston employment centres
            - RAD      index of accessibility to radial highways
            - TAX      full-value property-tax rate per $10,000
            - PTRATIO  pupil-teacher ratio by town
            - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
            - LSTAT    % lower status of the population
            - MEDV     Median value of owner-occupied homes in $1000's
    
        :Missing Attribute Values: None
    
        :Creator: Harrison, D. and Rubinfeld, D.L.
    
    This is a copy of UCI ML housing dataset.
    http://archive.ics.uci.edu/ml/datasets/Housing
    
    
    This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.
    
    The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic
    prices and the demand for clean air', J. Environ. Economics & Management,
    vol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics
    ...', Wiley, 1980.   N.B. Various transformations are used in the table on
    pages 244-261 of the latter.
    
    The Boston house-price data has been used in many machine learning papers that address regression
    problems.   
         
    **References**
    
       - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.
       - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.
       - many more! (see http://archive.ics.uci.edu/ml/datasets/Housing)

    Determinación de la normalidad

    Lograr que nuestra variable objetivo tenga una distribución normal a menudo conducirá a mejores resultados. Si nuestra variable objetivo no está distribuida normalmente, podemos aplicarle una transformación y luego ajustar nuestra regresión para predecir los valores transformados.

    # Analicemos el valor medio de las viviendas ocupadas por sus dueños (en miles de dólares). 
    boston_data.MEDV.hist()

    El histograma no parece normal debido a su cola derecha.
    Sin entrar en debates entre bayesianos y frecuentistas, para los propósitos de esta lección bastará con lo siguiente: Los estadísticos frecuentistas dirían que se acepta que la distribución es normal (más específicamente: no se rechaza la hipótesis nula de que es normal) si p > 0.05.

    # D'Agostino K^2 Test
    from scipy.stats.mstats import normaltest 
    
    Result = normaltest(boston_data.MEDV)
    
    print(f"p-value: {Result.pvalue} \nstatistic: {Result.statistic}")
    p-value: 1.7583188871696095e-20 
    statistic: 90.9746873700967

    El valor p es extremadamente bajo. ¡Nuestra variable, con la que hemos estado lidiando todo este tiempo, no estaba distribuida normalmente!

    Aplicar transformaciones para que la variable objetivo tenga una distribución más normal para aplicar la regresión.

    La regresión lineal asume que los residuos se distribuyen normalmente, lo cual se puede facilitar transformando la variable y, que es la variable objetivo. Probemos algunas transformaciones comunes para intentar que y se distribuya normalmente:

    • Transformación de Box-Cox
    • Transformación logarítmica
    • Transformación de raíz cuadrada

    Transformación logarítmica

    La transformación logarítmica puede transformar datos con un sesgo significativo a la derecha para que tengan una distribución más normal:

  • Error Absoluto Medio (Mean Absolute Error o MAE)

    Una de las métricas más utilizadas por su simplicidad e interpretación intuitiva es el Error Absoluto Medio (Mean Absolute Error o MAE). Esta métrica calcula el error promedio cometido por un modelo sin penalizar especialmente los errores grandes, proporcionando una medida fácil de comprender y comunicar.

    ¿Qué es el MAE?

    El Error Absoluto Medio mide la diferencia promedio entre los valores reales y las predicciones realizadas por el modelo.

    Para calcularlo:

    1. Se obtiene la diferencia entre el valor real y el valor predicho.
    2. Se toma el valor absoluto de cada diferencia.
    3. Se calcula la media de todos los errores absolutos.

    Su fórmula es:

    $$MAE=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i|$$

    Donde:

    • n = número de observaciones.
    • yᵢ = valor real.
    • ŷᵢ = valor predicho.
    • |yᵢ − ŷᵢ| = error absoluto.

    ¿Por Qué Utiliza Valores Absolutos?

    Supongamos que tenemos dos predicciones:

    Valor RealPredicciónError
    1009010
    5060-10

    Si calculáramos la media de los errores:

    $$\frac{10 + (-10)}{2}=0$$

    Obtendríamos un error promedio igual a cero, lo cual sería incorrecto. Al utilizar el valor absoluto, ambos errores contribuyen positivamente al resultado final.

    $$|10| = 10$$

    $$|-10| = 10$$

    Cómo Interpretar el MAE

    La principal ventaja del MAE es su facilidad de interpretación. El resultado se expresa en las mismas unidades que la variable objetivo. Por ejemplo: Si estamos prediciendo precios de viviendas en miles de euros:

    MAE = 15

    significa que el modelo se equivoca aproximadamente en 15 mil euros por predicción. Si estamos prediciendo ventas:

    MAE = 50

    significa que las predicciones presentan un error promedio de 50 unidades.

    Ventajas del MAE

    • Interpretación sencilla: El resultado se expresa en las mismas unidades de la variable objetivo. Esto facilita enormemente la comunicación de resultados a usuarios de negocio.
    • Fácil de calcular: Su fórmula es simple y computacionalmente eficiente.
    • Menor sensibilidad a valores atípicos: A diferencia del MSE, el MAE no eleva los errores al cuadrado. Por tanto, los errores extremos tienen menos influencia sobre la métrica.
    • Robusto frente a Outliers: Cuando el conjunto de datos contiene valores atípicos, el MAE suele proporcionar una visión más estable del rendimiento general del modelo.

    Limitaciones del MAE

    • No penaliza especialmente los errores grandes: Todos los errores contribuyen de forma proporcional. Esto puede resultar problemático en situaciones donde los errores grandes tienen un coste elevado.
    • Puede ocultar errores extremos: Dos modelos pueden tener el mismo MAE aunque uno de ellos cometa errores muy grandes en algunas observaciones. Por este motivo suele utilizarse junto con otras métricas.

    Comparación entre MAE y MSE

    ¿Cuándo utilizar MAE?

    El MAE suele ser una buena elección cuando:

    • Queremos una métrica fácil de interpretar.
    • Los errores grandes no son especialmente críticos.
    • Existen valores atípicos en los datos.
    • Necesitamos comunicar resultados a perfiles no técnicos.

    Es especialmente frecuente en:

    • Predicción de ventas.
    • Forecasting de demanda.
    • Estimación de precios.
    • Modelos financieros.
    • Analítica empresarial.

    Cálculo del MAE en Python

    Scikit-Learn proporciona la función mean_absolute_error() para calcular esta métrica.

    from sklearn.metrics import mean_absolute_error
    
    mae = mean_absolute_error(y_test, y_pred)
    
    print(f"MAE: {mae:.2f}")
    

    Ejemplo Completo

    from sklearn.metrics import mean_absolute_error
    
    y_true = [100, 150, 200]
    y_pred = [90, 160, 180]
    
    mae = mean_absolute_error(y_true, y_pred)
    
    print(mae)
    
    13.33

    Esto significa que las predicciones se desvían en promedio aproximadamente 13.33 unidades respecto a los valores reales.

    MAE vs RMSE

    Las dos métricas suelen utilizarse juntas.

    MétricaPenaliza errores grandesFácil interpretación
    MAENo
    RMSE

    El MAE proporciona una visión del error medio general, mientras que el RMSE permite detectar si existen errores especialmente grandes que puedan estar afectando al modelo.

    Conclusión

    El Error Absoluto Medio (MAE) es una de las métricas más utilizadas para evaluar modelos de regresión debido a su simplicidad y facilidad de interpretación. Al medir el promedio de los errores absolutos, proporciona una estimación clara de cuánto se desvían las predicciones respecto a los valores reales. A diferencia del MSE, no penaliza excesivamente los errores grandes, lo que lo convierte en una opción robusta cuando existen valores atípicos o cuando se busca una métrica comprensible para usuarios de negocio. Por este motivo, el MAE suele formar parte del conjunto básico de métricas utilizadas para evaluar y comparar modelos de Machine Learning.