Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

1. Introducción

La ingeniería de características (feature engineering) es el proceso de transformar los datos crudos en cantidades — características (features) — utilizables en el análisis estadístico y la predicción.

Los tipos principales de características incluyen:

Características estadísticas

Las características estadísticas resumen la distribución de los valores de los datos: tendencia central, dispersión y forma.

  • Media: valor promedio de los puntos de datos.
  • Varianza/desviación estándar: medida de la dispersión de los datos.
  • Asimetría (skewness): falta de simetría en la distribución de los valores.
  • Curtosis: peso de las colas de la distribución.
  • Percentiles: valores de umbral para distintos segmentos de la distribución.

Características temporales

Las características temporales describen los patrones dependientes del tiempo dentro de una serie.

  • Autocorrelación: correlación de una serie de tiempo con una versión rezagada de sí misma.
  • Tendencia: aumento o disminución de largo plazo en los datos.
  • Estacionalidad: patrones regulares que se repiten en un periodo específico.
  • Puntos de cambio: ubicaciones donde cambian las propiedades estadísticas de la serie.

Abajo construimos una serie diaria sintética con una tendencia y un ciclo anual, removemos la tendencia y medimos la autocorrelación de rezago 1 de lo que queda.

🖥️ Diapositivas — Sesión 09 (lun 19 oct)

Lag-1 autocorrelation of the detrended seasonal series: 0.68
<Figure size 1000x600 with 1 Axes>

La serie sin tendencia todavía carga el ciclo anual, así que los días vecinos se parecen y la autocorrelación de rezago 1 es alta. Compare con ruido blanco puro de la misma longitud: el ruido blanco no tiene memoria, así que su autocorrelación de rezago 1 es cercana a cero.

Lag-1 autocorrelation of the detrended seasonal series: 0.68
Lag-1 autocorrelation of white noise:                   -0.00

Características espaciales

Para los datos geoespaciales, las características espaciales capturan las relaciones entre distintas ubicaciones de una imagen o de un conjunto de datos.

  • Textura: patrones en las variaciones locales de intensidad (por ejemplo, suave, rugosa).
  • Correlación espacial: mide qué tan similares son las ubicaciones cercanas en sus valores de intensidad.
<Figure size 1200x600 with 4 Axes>

Autocorrelación espacial del ruido blanco, calculada mediante el espectro de potencia (teorema de Wiener-Khinchin):

Autocorrelación espacial del ruido correlacionado:

<Figure size 1100x600 with 8 Axes>

Estime la característica «longitud de correlación» de las dos imágenes. La longitud de correlación suele medirse como la distancia a la que la función de autocorrelación decae a 1/e de su valor máximo.

Estimated correlation length for white noise: 0.07 and for spatially correlated noise: 0.61

Características fractales

Las características fractales describen la autosimilitud o la complejidad de los datos a través de las escalas. Uno común es la dimensión fractal: una curva suave tiene una dimensión cercana a 1, mientras que una curva rugosa que llena más el plano tiene una dimensión más cercana a 2.

El método de Higuchi estima la dimensión fractal de una serie de tiempo. Mide la «longitud» promedio de la curva en submuestreos cada vez más gruesos; la pendiente de log(longitud) contra log(escala) da la dimensión.

Higuchi fractal dimension of white noise:         1.99
Higuchi fractal dimension of the seasonal series: 1.98
Higuchi fractal dimension of smoothed noise:      1.10

El ruido blanco es máximamente rugoso, así que su dimensión está cerca de 2. Suavizar baja la dimensión hacia 1. La dimensión fractal es un solo número que captura la rugosidad, lo que la vuelve una característica compacta para clasificar señales.

2. Ejemplo con series de tiempo sísmicas

Esta sección demuestra cómo extraer características automáticamente con un paquete simple de Python, tsfel, aplicado a formas de onda sísmicas registradas en el noroeste del Pacífico de Estados Unidos.

El subconjunto miniPNW incluye formas de onda sísmicas etiquetadas para eventos de orígenes diversos:

  • Sismos
  • Explosiones (en su mayoría voladuras de cantera)
  • Eventos superficiales (como avalanchas y deslizamientos de tierra)
  • Estampidos sónicos
  • Truenos

Exploraremos cómo varían las características entre estas clases de eventos sísmicos.

Cita del conjunto de datos. Los datos son un subconjunto del benchmark PNW-ML: Ni, Y., Hutko, A., Skene, F., Denolle, M., Malone, S., Bodin, P., Hartog, R., & Wright, A. (2023). Curated Pacific Northwest AI-ready Seismic Dataset. Seismica, 2(1). doi:Ni et al. (2023). La ruta de acceso de archivo al conjunto completo es seisbench.data.PNW(); aquí usamos un subconjunto pequeño («miniPNW») alojado en un servidor de la clase.

Descargamos dos archivos del almacenamiento de la clase a ./data/: las formas de onda como archivo HDF5 y sus metadatos asociados como archivo CSV. El archivo de metadatos es pequeño. El de formas de onda es grande (alrededor de 1 GB), así que protegemos su descarga: si falla, el cuaderno imprime un mensaje y omite las celdas que dependen de las formas de onda.

Metadata file present: True
Waveform file present: True

Metadatos

Primero leemos los metadatos y los organizamos en un DataFrame de pandas.

Loading...

La naturaleza de la fuente del evento está almacenada en uno de los atributos de los metadatos.

<ArrowStringArray> ['earthquake', 'explosion', 'sonic_boom', 'thunder', 'surface_event'] Length: 5, dtype: str

Suponga que exploramos características para clasificar las formas de onda en las categorías de tipos de evento. Tomamos el atributo source_type como la etiqueta.

source_type
earthquake       500
explosion        500
surface_event    500
sonic_boom       126
thunder           94
Name: count, dtype: int64

¿Cuántas formas de onda sísmicas hay en cada categoría?

     earthquake:   500 waveforms (29.1%)
      explosion:   500 waveforms (29.1%)
  surface_event:   500 waveforms (29.1%)
     sonic_boom:   126 waveforms (7.3%)
        thunder:    94 waveforms (5.5%)

¿Diría usted que este es un conjunto de datos balanceado respecto de las clases de interés? El desbalance de clases importa: un clasificador entrenado con este conjunto verá muchas más muestras de la clase dominante, y la exactitud (accuracy) por sí sola se vuelve un puntaje engañoso.

<Figure size 640x480 with 1 Axes>

Datos de formas de onda

Ahora leemos los datos de formas de onda. Están almacenados en un archivo HDF5 bajo un número finito de grupos. Cada grupo tiene un arreglo de conjuntos de datos que corresponden a las formas de onda. Para vincular los metadatos con los archivos de formas de onda, la clave trace_name tiene el ID del conjunto de datos. La dirección se etiqueta así:

bucketX$i,:3,:n

donde X es el número de grupo del HDF5 e i es el índice. El archivo típicamente tiene 3 formas de onda, una por cada dirección del movimiento del suelo: N, E, Z. En lo que sigue, nos concentramos en las formas de onda verticales (Z).

Todas las celdas que necesitan el archivo de formas de onda están protegidas por una verificación de existencia del archivo, de modo que el cuaderno sigue corriendo de principio a fin aunque la descarga haya fallado.

Abajo, una función para leer una forma de onda desde el archivo.

El nombre de la traza está almacenado como un atributo de datos en los metadatos.

'bucket1$0,:3,:15001'
The first dimension of the data is 3
The second dimension of the data is 15001
<Figure size 1000x600 with 3 Axes>

Extraemos la componente Z de cada forma de onda y las apilamos en un solo arreglo.

We have a total of 1720 data samples and each has 15001 data points

Extracción automática de características con tsfel

Ya tenemos los datos y sus metadatos, en particular la etiqueta como tipo de fuente. Vamos a extraer características automáticamente con tsfel y a explorar cómo varían entre clases.

tsfel organiza las características por dominio (estadístico, temporal, espectral). Cargamos la configuración por defecto:

['spectral', 'statistical', 'temporal', 'fractal']

tsfel toma un arreglo 1D y la tasa de muestreo, y devuelve un DataFrame de características de una sola fila. Envolvemos la extracción en una función que itera sobre un conjunto de formas de onda, adjunta la etiqueta y limpia los nombres de las columnas (tsfel antepone 0_ a cada columna).

Nota sobre el tiempo de ejecución: extraer el conjunto completo de características para cada forma de onda de miniPNW tarda demasiado para la clase. Limitamos la extracción a un subconjunto aleatorio de unas 200 formas de onda. Puede subir el límite fuera de clase.

Extracting features from sample 0/200
Extracting features from sample 20/200
Extracting features from sample 40/200
Extracting features from sample 60/200
Extracting features from sample 80/200
Extracting features from sample 100/200
Extracting features from sample 120/200
Extracting features from sample 140/200
Extracting features from sample 160/200
Extracting features from sample 180/200
Time taken to calculate features for 200 waveforms: 24.90 seconds
Loading...

Limpieza del nuevo DataFrame

Removemos las muestras con NaN o infinito.

no of samples in the dataframe: 200
no of samples in the new dataframe: 200

Explorar la correlación entre características

<Figure size 1500x1000 with 2 Axes>

Los bloques de características altamente correlacionadas son redundantes: cargan la misma información. La reducción de dimensionalidad (la próxima lección) o la selección de características pueden podarlas.

Explorar el espacio de características para la clasificación

Aquí graficamos las distribuciones de características seleccionadas entre las clases. Una característica es útil para la clasificación cuando sus distribuciones se separan entre clases.

<Figure size 640x480 with 1 Axes>
/Users/marinedenolle/Dropbox/CLASSES/ESS490/curriculum-book/.pixi/envs/default/lib/python3.12/site-packages/pandas/core/arraylike.py:402: RuntimeWarning: invalid value encountered in log10
  result = getattr(ufunc, method)(*inputs, **kwargs)
<Figure size 640x480 with 1 Axes>
<Figure size 640x480 with 1 Axes>

Ejercicio del estudiante

  1. ¿Cuáles de las características serán las mejores para clasificar entre las clases de tipo de evento?

Use el andamiaje de abajo. La idea: una característica separa bien dos clases cuando la diferencia entre las medias de las clases es grande comparada con la dispersión dentro de cada clase. Ordene las características según ese criterio.

ECDF_9                     inf
ECDF_2                     inf
Entropy                    inf
ECDF_6                     inf
ECDF_5                     inf
ECDF_4                     inf
Spectral variation    2.033088
MFCC_0                1.909093
MFCC_3                1.392157
LPCC_11               1.376107
dtype: float64
References
  1. Ni, Y., Hutko, A., Skene, F., Denolle, M., Malone, S., Bodin, P., Hartog, R., & Wright, A. (2023). Curated Pacific Northwest AI-ready Seismic Dataset. Seismica, 2(1). 10.26443/seismica.v2i1.368