La gestió de dades mancants és una part crucial del preprocessament de dades en qualsevol projecte de Machine Learning. Les dades mancants poden afectar significativament la qualitat dels models i la seva capacitat de generalització. En aquesta secció, explorarem diverses tècniques per gestionar les dades mancants de manera efectiva.

Objectius

  • Entendre les causes i els tipus de dades mancants.
  • Aprendre diferents tècniques per gestionar les dades mancants.
  • Implementar aquestes tècniques utilitzant Python.

Tipus de Dades Mancants

Les dades mancants poden classificar-se en tres categories principals:

  1. MCAR (Missing Completely at Random): Les dades mancants no depenen de cap variable observada ni no observada.
  2. MAR (Missing at Random): Les dades mancants depenen d'algunes variables observades però no de la variable que falta.
  3. MNAR (Missing Not at Random): Les dades mancants depenen de la variable que falta o d'altres variables no observades.

Tècniques per Gestionar Dades Mancants

  1. Eliminació de Dades Mancants

Eliminació de Files

Si la quantitat de dades mancants és petita, una opció és eliminar les files que contenen valors mancants.

import pandas as pd

# Exemple de DataFrame amb dades mancants
data = {'A': [1, 2, None, 4], 'B': [5, None, None, 8], 'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

# Eliminació de files amb valors mancants
df_cleaned = df.dropna()
print(df_cleaned)

Eliminació de Columnes

Si una columna té molts valors mancants, pot ser més eficient eliminar tota la columna.

# Eliminació de columnes amb valors mancants
df_cleaned = df.dropna(axis=1)
print(df_cleaned)

  1. Imputació de Dades Mancants

Imputació amb la Mitjana, Mediana o Moda

Una tècnica comuna és imputar els valors mancants amb la mitjana, mediana o moda de la columna.

# Imputació amb la mitjana
df['A'].fillna(df['A'].mean(), inplace=True)
print(df)

# Imputació amb la mediana
df['B'].fillna(df['B'].median(), inplace=True)
print(df)

# Imputació amb la moda
df['C'].fillna(df['C'].mode()[0], inplace=True)
print(df)

Imputació amb Valors Constants

Una altra tècnica és imputar els valors mancants amb un valor constant, com ara zero o una categoria específica.

# Imputació amb un valor constant
df['A'].fillna(0, inplace=True)
print(df)

Imputació amb Models Predictius

Es poden utilitzar models predictius per imputar els valors mancants basant-se en altres variables.

from sklearn.impute import SimpleImputer
import numpy as np

# Exemple de DataFrame amb dades mancants
data = {'A': [1, 2, np.nan, 4], 'B': [5, np.nan, np.nan, 8], 'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

# Imputació amb SimpleImputer
imputer = SimpleImputer(strategy='mean')
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print(df_imputed)

  1. Utilització d'Algoritmes que Gestionen Dades Mancants

Alguns algoritmes de Machine Learning poden gestionar dades mancants de manera nativa, com ara els arbres de decisió.

Exercicis Pràctics

Exercici 1: Eliminació de Dades Mancants

  1. Carrega un DataFrame amb dades mancants.
  2. Elimina les files amb valors mancants.
  3. Elimina les columnes amb valors mancants.

Exercici 2: Imputació de Dades Mancants

  1. Carrega un DataFrame amb dades mancants.
  2. Imputa els valors mancants amb la mitjana de cada columna.
  3. Imputa els valors mancants amb un valor constant.

Exercici 3: Imputació amb Models Predictius

  1. Carrega un DataFrame amb dades mancants.
  2. Utilitza SimpleImputer per imputar els valors mancants amb la mediana.

Solucions

Solució Exercici 1

# Carrega un DataFrame amb dades mancants
data = {'A': [1, 2, None, 4], 'B': [5, None, None, 8], 'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

# Elimina les files amb valors mancants
df_cleaned_rows = df.dropna()
print(df_cleaned_rows)

# Elimina les columnes amb valors mancants
df_cleaned_cols = df.dropna(axis=1)
print(df_cleaned_cols)

Solució Exercici 2

# Carrega un DataFrame amb dades mancants
data = {'A': [1, 2, None, 4], 'B': [5, None, None, 8], 'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

# Imputa els valors mancants amb la mitjana de cada columna
df['A'].fillna(df['A'].mean(), inplace=True)
print(df)

# Imputa els valors mancants amb un valor constant
df['B'].fillna(0, inplace=True)
print(df)

Solució Exercici 3

from sklearn.impute import SimpleImputer
import numpy as np

# Carrega un DataFrame amb dades mancants
data = {'A': [1, 2, np.nan, 4], 'B': [5, np.nan, np.nan, 8], 'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

# Utilitza SimpleImputer per imputar els valors mancants amb la mediana
imputer = SimpleImputer(strategy='median')
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print(df_imputed)

Conclusió

La gestió de dades mancants és una part essencial del preprocessament de dades en Machine Learning. Hem explorat diverses tècniques per gestionar les dades mancants, incloent l'eliminació de dades, la imputació amb valors estadístics i l'ús de models predictius. La selecció de la tècnica adequada depèn del context del problema i de la quantitat de dades mancants.

Curs de Machine Learning

Mòdul 1: Introducció al Machine Learning

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algoritmes de Machine Learning Supervisat

Mòdul 5: Algoritmes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2024. Tots els drets reservats