CatBoost Una soluzione per costruire modelli con dati categorici

CatBoost una soluzione per modelli con dati categorici

Introduzione

Se gli appassionati di apprendimento vogliono imparare la scienza dei dati e l’apprendimento automatico, dovrebbero imparare la famiglia dei modelli potenziati. Ci sono molti algoritmi che provengono dalla famiglia dei modelli potenziati, come AdaBoost, Gradient Boosting, XGBoost e molti altri. Uno degli algoritmi della famiglia dei modelli potenziati è l’algoritmo CatBoost. CatBoost è un algoritmo di apprendimento automatico e sta per Categorical Boosting. È stato sviluppato da Yandex ed è una libreria open-source. Viene utilizzato sia in Python che in R. CatBoost funziona molto bene con le variabili categoriche nel dataset. Come altri algoritmi di potenziamento, CatBoost crea anche più alberi decisionali in background, noti come insieme di alberi, per prevedere un’etichetta di classificazione. Si basa sul potenziamento del gradiente.

Leggi anche: CatBoost: una libreria di apprendimento automatico per gestire automaticamente i dati categorici (CAT)

Obiettivi di Apprendimento

  • Comprendere il concetto di algoritmi potenziati e la loro importanza nella scienza dei dati e nell’apprendimento automatico.
  • Esplorare l’algoritmo CatBoost come uno dei membri della famiglia dei modelli potenziati, la sua origine e il suo ruolo nel gestire variabili categoriche.
  • Comprendere le caratteristiche chiave di CatBoost, inclusa la gestione delle variabili categoriche, il potenziamento del gradiente, il potenziamento ordinato e le tecniche di regolarizzazione.
  • Ottenere conoscenze sulle vantaggi di CatBoost, come la sua robusta gestione delle variabili categoriche e l’eccellente capacità predittiva.
  • Imparare ad implementare CatBoost in Python per compiti di regressione e classificazione, esplorando i parametri del modello e facendo previsioni sui dati di test.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Caratteristiche Importanti di CatBoost

  1. Gestione delle Variabili Categoriche: CatBoost eccelle nella gestione di dataset che contengono caratteristiche categoriche. Utilizzando vari metodi, gestiamo automaticamente le variabili categoriche trasformandole in rappresentazioni numeriche. Questo include statistiche target, one-hot encoding o una combinazione dei due. Questa capacità risparmia tempo ed efforti eliminando la necessità di una pre-elaborazione manuale delle caratteristiche categoriche.
  2. Potenziamento del Gradiente: CatBoost utilizza il potenziamento del gradiente, una tecnica di insieme che combina diversi modelli deboli (alberi decisionali), per creare modelli predittivi efficaci. Aggiungendo alberi allenati e istruiti a correggere gli errori causati dagli alberi precedenti, si creano alberi in modo iterativo riducendo una funzione di perdita differenziabile. Questo approccio iterativo migliora progressivamente la capacità predittiva del modello.
  3. Potenziamento Ordinato: CatBoost propone una nuova tecnica chiamata “Potenziamento Ordinato” per gestire efficacemente le variabili categoriche. Nella costruzione dell’albero, utilizza una tecnica nota come ordinamento basato su permutazioni delle variabili categoriche per identificare i punti di divisione ottimali. Questo metodo consente a CatBoost di considerare tutte le possibili configurazioni di divisione, migliorando le previsioni e riducendo l’overfitting.
  4. Regolarizzazione: CatBoost utilizza tecniche di regolarizzazione per ridurre l’overfitting e migliorare la generalizzazione. Presenta una regolarizzazione L2 sui valori delle foglie, che modifica la funzione di perdita aggiungendo un termine di penalità per evitare valori delle foglie eccessivi. Inoltre, utilizza un metodo all’avanguardia noto come “Codifica Obiettiva Ordinata” per evitare l’overfitting durante la codifica dei dati categorici.

Vantaggi di CatBoost

  1. Gestione robusta della variabile categorica: La gestione automatica di CatBoost rende la pre-elaborazione comoda ed efficace. Elimina la necessità di metodi di codifica manuali e riduce la possibilità di perdita di informazioni associate a procedure convenzionali.
  2. Eccellente performance predittiva: Le previsioni effettuate utilizzando il framework di potenziamento del gradiente e il Potenziamento Ordinato di CatBoost sono frequentemente accurate. Può produrre modelli robusti che superano molti altri algoritmi e catturano efficacemente relazioni complesse nei dati.

Casi d’Uso

In diversi contest Kaggle che coinvolgono dati tabulari, CatBoost si è dimostrato un ottimo performer. CatBoost viene utilizzato con successo in una varietà di compiti di regressione e classificazione. Ecco alcuni casi in cui CatBoost è stato utilizzato con successo:

  1. Cloudflare utilizza CatBoost per identificare i bot che mirano ai siti web dei propri utenti.
  2. Il servizio di ride-hailing Careem, con sede a Dubai, utilizza CatBoost per prevedere dove i propri clienti si sposteranno successivamente.

Implementazione

Poiché CatBoost è una libreria open source, assicurati di averla installata. Se non l’hai fatto, ecco il comando per installare il pacchetto CatBoost.

#installazione della libreria CatBoost
!pip install catboost

Puoi addestrare e costruire un algoritmo catboost sia in Python che in R, ma utilizzeremo solo Python come linguaggio in questa implementazione.

Una volta installato il pacchetto CatBoost, importeremo CatBoost e altre librerie necessarie.

#importa le librerie
import pandas as pd
import os
import matplotlib.pyplot as plt
import seaborn as sns

import catboost as cb
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score

import warnings
warnings.filterwarnings('ignore')

Qui utilizziamo il dataset delle vendite di Big Mart e effettuiamo alcuni controlli di integrità dei dati.

#carica il dataset
os.chdir('E:\Dataset')
dt = pd.read_csv('big_mart_sales.csv')

dt.head()

dt.describe()
dt.info()
dt.shape

Il dataset contiene oltre 1k record e 35 colonne, di cui 8 colonne sono categoriche, ma non convertiremo quelle colonne in formato numerico. Catboost può fare queste cose da solo. Questa è la magia di Catboost. Puoi specificare quante cose desideri nel parametro del modello. Ho preso solo “iteration” a scopo dimostrativo come parametro.

#importa csv
X = dt.drop('Attrition', axis=1)
y = dt['Attrition']

X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, random_state=14)
print(X_train.shape)
print(X_test.shape)


cat_var = np.where(X_train.dtypes != np.float)[0]

model = cb.CatBoostClassifier(iterations=10)
model.fit(X_train, y_train, cat_features=cat_var, plot=True)

Ci sono molti parametri del modello che puoi utilizzare. Di seguito sono riportati i parametri importanti che puoi specificare durante la costruzione di un modello CatBoost.

Parametri

  1. Iterations: Il numero di iterazioni o alberi di boosting da costruire. Valori più alti possono portare a una migliore performance ma a periodi di addestramento più lunghi. È un valore intero compreso tra 1 e infinito [1, ∞].
  2. Learning_rate: La dimensione del passo con cui l’algoritmo di boosting apprende. Un numero più basso fa convergere il modello più lentamente ma potrebbe migliorare la generalizzazione. Dovrebbe essere un valore float, compreso tra 0 e 1.
  3. Depth: La profondità massima degli alberi decisionali individuali nell’insieme. Anche gli alberi più profondi hanno una maggiore probabilità di overfitting, ma possono catturare interazioni più complesse. È un valore intero compreso tra 1 e infinito [1, ∞].
  4. Loss_function: Durante l’addestramento, dovremmo ottimizzare la funzione di perdita. Diversi tipi di problemi, come “Logloss” per la classificazione binaria, “MultiClass” per la classificazione multiclasse, “RMSE” per la regressione, ecc., hanno soluzioni diverse. È un valore di stringa.
  5. l2_leaf_reg: I valori delle foglie sono sottoposti a regolarizzazione L2. I valori delle foglie più grandi sono penalizzati con valori più alti, il che aiuta a ridurre l’overfitting. È un valore float, compreso tra 0 e infinito [0, ∞].
  6. border_count: Il numero di divisioni per le caratteristiche numeriche. Sebbene numeri più alti offrano una suddivisione più accurata, possono causare anche l’overfitting. 128 è il valore suggerito per dataset più grandi. È un valore intero compreso tra 1 e 255 [1, 255].
  7. random_strength: Il livello di casualità da utilizzare nella selezione dei punti di divisione. Più casualità viene introdotta con un valore maggiore, evitando l’overfitting. Range: [0, ∞].
  8. bagging_temperature: Controlla l’intensità del campionamento delle istanze di addestramento. Un valore maggiore riduce la casualità del processo di bagging, mentre un valore inferiore la aumenta. È un valore float, compreso tra 0 e infinito [0, ∞].

Effettuare previsioni sul modello addestrato

#previsione del modello sul set di test
y_pred = model.predict(X_test)

print(accuracy_score(y_pred, y_test))

print(confusion_matrix(y_pred, y_test))

Puoi anche impostare il valore della soglia utilizzando la funzione predict_proba(). Qui abbiamo ottenuto un punteggio di accuratezza superiore all’85%, che è un buon valore considerando che non abbiamo elaborato alcuna variabile categorica in numeri. Questo mostra quanto sia potente l’algoritmo Catboost.

Conclusione

CatBoost è uno dei modelli innovativi e famosi nel campo dell’apprendimento automatico. Ha suscitato molto interesse grazie alla sua capacità di gestire autonomamente le caratteristiche categoriche. Da questo articolo, imparerai quanto segue:

  • L’implementazione pratica di catboost.
  • Quali sono le caratteristiche importanti dell’algoritmo catboost?
  • Casi d’uso in cui catboost si è comportato bene
  • Parametri del modello catboost durante l’addestramento di un modello

Domande frequenti

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell’autore.