Feature engineering

Sviluppare modelli di Machine Learning per la produzione

Sinan Ozdemir

Data Scientist and Author

Introduzione al feature engineering

  • Trasformare i dati di training per massimizzare le performance della pipeline ML
  • Ridurre la complessità computazionale
  • Esempi
    • Aggregare dati da più fonti
    • Costruire nuove feature
    • Applicare trasformazioni alle feature

pipeline di feature engineering

1 https://www.manning.com/books/feature-engineering-bookcamp
Sviluppare modelli di Machine Learning per la produzione

Aggregare dati da più fonti

  • Combinare dati da dataset diversi
  • Usare più tipi di dati (es. numerici e categorici)

Questo aiuta a:

  • Migliorare l’accuratezza dei modelli
  • Abilitare modelli più complessi

grafici su uno schermo

Sviluppare modelli di Machine Learning per la produzione

Esempio di aggregazione dei dati

class DataAggregator:
    def __init__(self):
        pass

    def fit(self, X, y=None):
        return self  # nothing to fit

    def transform(self, X, y=None):
        # Carica dati da più fonti
        data1 = pd.read_csv('data1.csv')
        data2 = pd.read_csv('data2.csv')
        data3 = pd.read_csv('data3.csv')

        # Combina tutti i dati (incluso X) in un unico DataFrame
        aggregated_data = pd.concat([X, data1, data2, data3], axis=0)

        return aggregated_data  # Restituisce i dati aggregati
Sviluppare modelli di Machine Learning per la produzione

Costruzione di feature

  • Creare nuove feature da quelle esistenti
  • Generare nuove feature da dati preesistenti
  • Migliorare le performance del modello
  • Aumentare l’interpretabilità del modello
Sviluppare modelli di Machine Learning per la produzione

Esempio di costruzione di feature

class FeatureConstructor:
    def __init__(self):
        pass

    def fit(self, X, y=None):
        return self

    def transform(self, X, y=None):
        # Calcola la media di ogni colonna nei dati
        mean_values = X.mean()

        # Crea nuove feature basate sulle medie
        X['mean_col1'] = X['col1'] - mean_values['col1']
        X['mean_col2'] = X['col2'] - mean_values['col2']

        return X  # Restituisce il dataset aumentato
Sviluppare modelli di Machine Learning per la produzione

Trasformazioni delle feature

Trasformare le feature esistenti in loco

  • Normalizzare le distribuzioni
  • Rimuovere outlier
  • Migliorare accuratezza e performance del modello
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

data = load_breast_cancer()  # Load dataset
X, y = data.data, data.target
model = LogisticRegression(random_state=42)  # instantiate a model

# Split data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(
  X, y, test_size=0.3, random_state=42)

model.fit(X_train, y_train)  # Fit logistic regression model without scaling
y_pred_no_scaling = model.predict(X_test)
acc_no_scaling = accuracy_score(y_test, y_pred_no_scaling)

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

model.fit(X_train_scaled, y_train)  # Fit logistic regression model with scaling
y_pred_with_scaling = model.predict(X_test_scaled)
acc_with_scaling = accuracy_score(y_test, y_pred_with_scaling)

# Compare accuracies of models with and without scaling
print(f"Accuracy without scaling: {acc_no_scaling}")  # 0.971
print(f"Accuracy with scaling: {acc_with_scaling}")  # 0.982
Sviluppare modelli di Machine Learning per la produzione

Selezione delle feature

Selezionare un sottoinsieme di feature da un set più ampio rimuovendo quelle ridondanti e irrilevanti

  • Riduce l’overfitting
  • Migliora accuratezza e performance
  • Aumenta l’interpretabilità

selezione delle feature

1 https://www.manning.com/books/feature-engineering-bookcamp
Sviluppare modelli di Machine Learning per la produzione

Esempio di feature engineering (cont.)

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.pipeline import Pipeline

pipeline = Pipeline([  # Define feature engineering pipeline

    ('aggregate', DataAggregator()),  # Aggregate data from multiple sources

    ('construction', FeatureConstructor()),  # Feature Construction

    ('scaler', StandardScaler()),  # Feature Transformation

    ('select', SelectKBest(chi2, k=10)),  # Feature Selection
])
X_transformed = pipeline.fit_transform(X)  # Fit and transform data using pipeline
Sviluppare modelli di Machine Learning per la produzione

Per saperne di più sul feature engineering

libro sul FE

Sviluppare modelli di Machine Learning per la produzione

Passiamo alla pratica !

Sviluppare modelli di Machine Learning per la produzione

Preparing Video For Download...