ingeniería de características

Del flujo general al modelado

Workflow de una competencia de Kaggle

Entender el problema → EDA → Validación local → Modelado

Del flujo general al modelado

Workflow de una competencia de Kaggle

Entender el problema → EDA → Validación local → Modelado

La etapa de modelado

Modelado = un ciclo de mejora continua

La etapa de modelado

Modelado = un ciclo de mejora continua

  • Preprocesar datos
  • Crear nuevas variables
  • Mejorar modelos
  • Aplicar trucos

La validación local dentro del ciclo

  • Preprocesar datos
  • Crear nuevas variables
  • Validación local
  • Mejorar modelos
  • Aplicar trucos

ingeniería de características

Partimos de los datos iniciales.

ingeniería de características

Partimos de los datos iniciales
y construimos nuevas variables.

Estas nuevas variables no salen de la nada.

ingeniería de características

Partimos de los datos iniciales
y construimos nuevas variables.

Las ideas suelen venir de:

  • experiencia previa,
  • análisis exploratorio,
  • conocimiento del problema.

Tipos de variables que suelen transformarse

  • Numéricas
  • Categóricas
  • Fechas
  • Coordenadas
  • Texto
  • Imágenes

ingeniería de características

# Convertimos la columna date al tipo datetime
dem["date"] = pd.to_datetime(dem["date"])

ingeniería de características

# Convertimos la columna date al tipo datetime
dem["date"] = pd.to_datetime(dem["date"])

# Creamos variables derivadas de la fecha
dem["year"] = dem["date"].dt.year
dem["month"] = dem["date"].dt.month
dem["week"] = dem["date"].dt.isocalendar().week.astype(int)
dem["dayofyear"] = dem["date"].dt.dayofyear
dem["dayofmonth"] = dem["date"].dt.day
dem["dayofweek"] = dem["date"].dt.dayofweek

Código

# Convertimos la columna date al tipo datetime
dem["date"] = pd.to_datetime(dem["date"])

# Creamos variables derivadas de la fecha
dem["year"] = dem["date"].dt.year
dem["month"] = dem["date"].dt.month
dem["week"] = dem["date"].dt.isocalendar().week.astype(int)
dem["dayofyear"] = dem["date"].dt.dayofyear
dem["dayofmonth"] = dem["date"].dt.day
dem["dayofweek"] = dem["date"].dt.dayofweek

Otro ejemplo de ingeniería de características

two_sigma["price_per_bedroom"] = two_sigma["price"] / two_sigma["bedrooms"]
two_sigma["rooms_number"] = two_sigma["bedrooms"] + two_sigma["bathrooms"]

Line Highlighting paso a paso

two_sigma["price_per_bedroom"] = two_sigma["price"] / two_sigma["bedrooms"]
two_sigma["rooms_number"] = two_sigma["bedrooms"] + two_sigma["bathrooms"]

Un patrón muy común en Kaggle

# Unimos train y test
data = pd.concat([train, test])

# Creamos nuevas variables sobre el conjunto completo
# ...

# Luego separamos de nuevo
train = data[data.id.isin(train.id)]
test = data[data.id.isin(test.id)]

Ojo: esto no siempre es buena idea

Warning

Unir train y test puede ser útil para transformaciones consistentes, pero puede ser una mala idea si introduces fuga de información.