Preparazione e Valutazione dei Dati del Modello
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
La preparazione dei dati del modello è un passaggio cruciale nel pipeline di machine learning, poichĂŠ comporta la trasformazione dei dati grezzi in un formato adatto per lâaddestramento dei modelli di machine learning. Questo processo include diversi passaggi chiave:
- Raccolta dei Dati: Raccolta di dati da varie fonti, come database, API o file. I dati possono essere strutturati (ad es., tabelle) o non strutturati (ad es., testo, immagini).
- Pulizia dei Dati: Rimozione o correzione di punti dati errati, incompleti o irrilevanti. Questo passaggio può comportare la gestione dei valori mancanti, la rimozione dei duplicati e il filtraggio degli outlier.
- Trasformazione dei Dati: Conversione dei dati in un formato adatto per la modellazione. Questo può includere normalizzazione, scaling, codifica delle variabili categoriche e creazione di nuove caratteristiche attraverso tecniche come lâingegneria delle caratteristiche.
- Divisione dei Dati: Suddivisione del dataset in set di addestramento, validazione e test per garantire che il modello possa generalizzare bene su dati non visti.
Raccolta dei Dati
La raccolta dei dati comporta la raccolta di dati da varie fonti, che possono includere:
- Database: Estrazione di dati da database relazionali (ad es., database SQL) o database NoSQL (ad es., MongoDB).
- API: Recupero di dati da API web, che possono fornire dati in tempo reale o storici.
- File: Lettura di dati da file in formati come CSV, JSON o XML.
- Web Scraping: Raccolta di dati da siti web utilizzando tecniche di web scraping.
A seconda dellâobiettivo del progetto di machine learning, i dati saranno estratti e raccolti da fonti rilevanti per garantire che siano rappresentativi del dominio del problema.
Pulizia dei Dati
La pulizia dei dati è il processo di identificazione e correzione di errori o incoerenze nel dataset. Questo passaggio è essenziale per garantire la qualitĂ dei dati utilizzati per lâaddestramento dei modelli di machine learning. Le attivitĂ chiave nella pulizia dei dati includono:
- Gestione dei Valori Mancanti: Identificazione e gestione dei punti dati mancanti. Le strategie comuni includono:
- Rimozione di righe o colonne con valori mancanti.
- Imputazione dei valori mancanti utilizzando tecniche come lâimputazione della media, della mediana o della moda.
- Utilizzo di metodi avanzati come lâimputazione K-nearest neighbors (KNN) o lâimputazione per regressione.
- Rimozione dei Duplicati: Identificazione e rimozione di record duplicati per garantire che ogni punto dati sia unico.
- Filtraggio degli Outlier: Rilevamento e rimozione di outlier che possono distorcere le prestazioni del modello. Tecniche come Z-score, IQR (Interquartile Range) o visualizzazioni (ad es., box plots) possono essere utilizzate per identificare outlier.
Esempio di pulizia dei dati
import pandas as pd
# Load the dataset
data = pd.read_csv('data.csv')
# Finding invalid values based on a specific function
def is_valid_possitive_int(num):
try:
num = int(num)
return 1 <= num <= 31
except ValueError:
return False
invalid_days = data[~data['days'].astype(str).apply(is_valid_positive_int)]
## Dropping rows with invalid days
data = data.drop(invalid_days.index, errors='ignore')
# Set "NaN" values to a specific value
## For example, setting NaN values in the 'days' column to 0
data['days'] = pd.to_numeric(data['days'], errors='coerce')
## For example, set "NaN" to not ips
def is_valid_ip(ip):
pattern = re.compile(r'^((25[0-5]|2[0-4][0-9]|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$')
if pd.isna(ip) or not pattern.match(str(ip)):
return np.nan
return ip
df['ip'] = df['ip'].apply(is_valid_ip)
# Filling missing values based on different strategies
numeric_cols = ["days", "hours", "minutes"]
categorical_cols = ["ip", "status"]
## Filling missing values in numeric columns with the median
num_imputer = SimpleImputer(strategy='median')
df[numeric_cols] = num_imputer.fit_transform(df[numeric_cols])
## Filling missing values in categorical columns with the most frequent value
cat_imputer = SimpleImputer(strategy='most_frequent')
df[categorical_cols] = cat_imputer.fit_transform(df[categorical_cols])
## Filling missing values in numeric columns using KNN imputation
knn_imputer = KNNImputer(n_neighbors=5)
df[numeric_cols] = knn_imputer.fit_transform(df[numeric_cols])
# Filling missing values
data.fillna(data.mean(), inplace=True)
# Removing duplicates
data.drop_duplicates(inplace=True)
# Filtering outliers using Z-score
from scipy import stats
z_scores = stats.zscore(data.select_dtypes(include=['float64', 'int64']))
data = data[(z_scores < 3).all(axis=1)]
Trasformazione dei Dati
La trasformazione dei dati implica la conversione dei dati in un formato adatto per la modellazione. Questo passaggio può includere:
-
Normalizzazione e Standardizzazione: Scalare le caratteristiche numeriche a un intervallo comune, tipicamente [0, 1] o [-1, 1]. Questo aiuta a migliorare la convergenza degli algoritmi di ottimizzazione.
-
Min-Max Scaling: Riscalare le caratteristiche a un intervallo fisso, di solito [0, 1]. Questo viene fatto utilizzando la formula:
X' = (X - X_{min}) / (X_{max} - X_{min}) -
Normalizzazione Z-Score: Standardizzare le caratteristiche sottraendo la media e dividendo per la deviazione standard, risultando in una distribuzione con una media di 0 e una deviazione standard di 1. Questo viene fatto utilizzando la formula:
X' = (X - Îź) / Ď, dove Îź è la media e Ď Ă¨ la deviazione standard. -
Skeyewness e Kurtosi: Regolare la distribuzione delle caratteristiche per ridurre la skewness (asimmetria) e la kurtosi (picco). Questo può essere fatto utilizzando trasformazioni come logaritmica, radice quadrata o trasformazioni di Box-Cox. Ad esempio, se una caratteristica ha una distribuzione distorta, applicare una trasformazione logaritmica può aiutare a normalizzarla.
-
Normalizzazione delle Stringhe: Convertire le stringhe in un formato coerente, come:
-
Minuscole
-
Rimozione di caratteri speciali (mantenendo quelli rilevanti)
-
Rimozione di stop words (parole comuni che non contribuiscono al significato, come âilâ, âèâ, âeâ)
-
Rimozione di parole troppo frequenti e troppo rare (ad es., parole che appaiono in piĂš del 90% dei documenti o meno di 5 volte nel corpus)
-
Rimozione di spazi bianchi
-
Stemming/Lemmatizzazione: Ridurre le parole alla loro forma base o radice (ad es., âcorrendoâ a âcorrereâ).
-
Codifica delle Variabili Categoriali: Convertire le variabili categoriali in rappresentazioni numeriche. Le tecniche comuni includono:
-
One-Hot Encoding: Creare colonne binarie per ogni categoria.
-
Ad esempio, se una caratteristica ha categorie ârossoâ, âverdeâ e âbluâ, verrĂ trasformata in tre colonne binarie:
is_red(100),is_green(010) eis_blue(001). -
Label Encoding: Assegnare un intero unico a ciascuna categoria.
-
Ad esempio, ârossoâ = 0, âverdeâ = 1, âbluâ = 2.
-
Ordinal Encoding: Assegnare interi in base allâordine delle categorie.
-
Ad esempio, se le categorie sono âbassoâ, âmedioâ e âaltoâ, possono essere codificate come 0, 1 e 2, rispettivamente.
-
Hashing Encoding: Utilizzare una funzione hash per convertire le categorie in vettori di dimensione fissa, che possono essere utili per variabili categoriali ad alta cardinalitĂ .
-
Ad esempio, se una caratteristica ha molte categorie uniche, lâhashing può ridurre la dimensionalitĂ mantenendo alcune informazioni sulle categorie.
-
Bag of Words (BoW): Rappresentare i dati testuali come una matrice di conteggi o frequenze di parole, dove ogni riga corrisponde a un documento e ogni colonna corrisponde a una parola unica nel corpus.
-
Ad esempio, se il corpus contiene le parole âgattoâ, âcaneâ e âpesceâ, un documento contenente âgattoâ e âcaneâ sarebbe rappresentato come [1, 1, 0]. Questa rappresentazione specifica è chiamata âunigramâ e non cattura lâordine delle parole, quindi perde informazioni semantiche.
-
Bigram/Trigram: Estendere BoW per catturare sequenze di parole (bigrammi o trigrammi) per mantenere un certo contesto. Ad esempio, âgatto e caneâ sarebbe rappresentato come un bigram [1, 1] per âgatto eâ e [1, 1] per âe caneâ. In questi casi vengono raccolte piĂš informazioni semantiche (aumentando la dimensionalitĂ della rappresentazione) ma solo per 2 o 3 parole alla volta.
-
TF-IDF (Term Frequency-Inverse Document Frequency): Una misura statistica che valuta lâimportanza di una parola in un documento rispetto a una collezione di documenti (corpus). Combina la frequenza del termine (quanto spesso appare una parola in un documento) e la frequenza inversa del documento (quanto è rara una parola in tutti i documenti).
-
Ad esempio, se la parola âgattoâ appare frequentemente in un documento ma è rara nellâintero corpus, avrĂ un punteggio TF-IDF elevato, indicando la sua importanza in quel documento.
-
Feature Engineering: Creare nuove caratteristiche da quelle esistenti per migliorare il potere predittivo del modello. Questo può comportare la combinazione di caratteristiche, lâestrazione di componenti data/ora o lâapplicazione di trasformazioni specifiche del dominio.
Suddivisione dei Dati
La suddivisione dei dati implica dividere il dataset in sottoinsiemi separati per lâaddestramento, la validazione e il test. Questo è essenziale per valutare le prestazioni del modello su dati non visti e prevenire lâoverfitting. Le strategie comuni includono:
- Train-Test Split: Dividere il dataset in un set di addestramento (tipicamente 60-80% dei dati), un set di validazione (10-15% dei dati) per ottimizzare gli iperparametri, e un set di test (10-15% dei dati). Il modello viene addestrato sul set di addestramento e valutato sul set di test.
- Ad esempio, se hai un dataset di 1000 campioni, potresti utilizzare 700 campioni per lâaddestramento, 150 per la validazione e 150 per il test.
- Stratified Sampling: Assicurarsi che la distribuzione delle classi nei set di addestramento e test sia simile a quella dellâintero dataset. Questo è particolarmente importante per dataset sbilanciati, dove alcune classi possono avere significativamente meno campioni di altre.
- Time Series Split: Per i dati delle serie temporali, il dataset viene suddiviso in base al tempo, assicurando che il set di addestramento contenga dati da periodi temporali precedenti e il set di test contenga dati da periodi successivi. Questo aiuta a valutare le prestazioni del modello su dati futuri.
- K-Fold Cross-Validation: Suddividere il dataset in K sottoinsiemi (fold) e addestrare il modello K volte, ogni volta utilizzando un fold diverso come set di test e i fold rimanenti come set di addestramento. Questo aiuta a garantire che il modello venga valutato su diversi sottoinsiemi di dati, fornendo una stima piĂš robusta delle sue prestazioni.
Valutazione del Modello
La valutazione del modello è il processo di valutazione delle prestazioni di un modello di machine learning su dati non visti. Comporta lâuso di varie metriche per quantificare quanto bene il modello si generalizza a nuovi dati. Le metriche di valutazione comuni includono:
Accuratezza
Lâaccuratezza è la proporzione di istanze correttamente previste rispetto al totale delle istanze. Viene calcolata come:
Accuracy = (Number of Correct Predictions) / (Total Number of Predictions)
Tip
Lâaccuratezza è una metrica semplice e intuitiva, ma potrebbe non essere adatta per dataset sbilanciati in cui una classe domina le altre, poichĂŠ può dare unâimpressione fuorviante delle prestazioni del modello. Ad esempio, se il 90% dei dati appartiene alla classe A e il modello prevede tutte le istanze come classe A, raggiungerĂ unâaccuratezza del 90%, ma non sarĂ utile per prevedere la classe B.
Precisione
La precisione è la proporzione di previsioni positive vere rispetto a tutte le previsioni positive effettuate dal modello. Si calcola come:
Precision = (True Positives) / (True Positives + False Positives)
Tip
La precisione è particolarmente importante in scenari in cui i falsi positivi sono costosi o indesiderati, come nelle diagnosi mediche o nella rilevazione delle frodi. Ad esempio, se un modello prevede 100 istanze come positive, ma solo 80 di esse sono effettivamente positive, la precisione sarebbe 0.8 (80%).
Recall (SensibilitĂ )
Il recall, noto anche come sensibilità o tasso di veri positivi, è la proporzione di previsioni vere positive su tutte le istanze positive reali. Si calcola come:
Recall = (True Positives) / (True Positives + False Negatives)
Tip
Il richiamo è cruciale in scenari in cui i falsi negativi sono costosi o indesiderati, come nella rilevazione di malattie o nel filtraggio dello spam. Ad esempio, se un modello identifica 80 su 100 istanze positive reali, il richiamo sarebbe 0.8 (80%).
F1 Score
Il punteggio F1 è la media armonica di precisione e richiamo, fornendo un equilibrio tra le due metriche. Viene calcolato come:
F1 Score = 2 * (Precision * Recall) / (Precision + Recall)
Tip
Il punteggio F1 è particolarmente utile quando si lavora con set di dati sbilanciati, poichÊ considera sia i falsi positivi che i falsi negativi. Fornisce una metrica unica che cattura il compromesso tra precisione e richiamo. Ad esempio, se un modello ha una precisione di 0.8 e un richiamo di 0.6, il punteggio F1 sarebbe approssimativamente 0.69.
ROC-AUC (Receiver Operating Characteristic - Area Under the Curve)
La metrica ROC-AUC valuta la capacitĂ del modello di distinguere tra classi tracciando il tasso di veri positivi (sensibilitĂ ) rispetto al tasso di falsi positivi a vari livelli di soglia. Lâarea sotto la curva ROC (AUC) quantifica le prestazioni del modello, con un valore di 1 che indica una classificazione perfetta e un valore di 0.5 che indica una previsione casuale.
Tip
ROC-AUC è particolarmente utile per problemi di classificazione binaria e fornisce una visione completa delle prestazioni del modello attraverso diverse soglie. Ă meno sensibile allo sbilanciamento delle classi rispetto allâaccuratezza. Ad esempio, un modello con un AUC di 0.9 indica che ha unâalta capacitĂ di distinguere tra istanze positive e negative.
SpecificitĂ
La specificità , nota anche come tasso di veri negativi, è la proporzione di previsioni vere negative su tutte le istanze negative reali. à calcolata come:
Specificity = (True Negatives) / (True Negatives + False Positives)
Tip
La specificità è importante in scenari in cui i falsi positivi sono costosi o indesiderati, come nei test medici o nella rilevazione delle frodi. Aiuta a valutare quanto bene il modello identifica le istanze negative. Ad esempio, se un modello identifica correttamente 90 su 100 istanze negative reali, la specificità sarebbe 0,9 (90%).
Matthews Correlation Coefficient (MCC)
Il Matthews Correlation Coefficient (MCC) è una misura della qualitĂ delle classificazioni binarie. Tiene conto dei veri e falsi positivi e negativi, fornendo una visione equilibrata delle prestazioni del modello. LâMCC è calcolato come:
MCC = (TP * TN - FP * FN) / sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN))
dove:
- TP: Veri Positivi
- TN: Veri Negativi
- FP: Falsi Positivi
- FN: Falsi Negativi
Tip
Il MCC varia da -1 a 1, dove 1 indica una classificazione perfetta, 0 indica unâipotesi casuale e -1 indica totale disaccordo tra previsione e osservazione. Ă particolarmente utile per dataset sbilanciati, poichĂŠ considera tutti e quattro i componenti della matrice di confusione.
Errore Assoluto Medio (MAE)
LâErrore Assoluto Medio (MAE) è una metrica di regressione che misura la differenza assoluta media tra i valori previsti e quelli reali. Viene calcolato come:
MAE = (1/n) * Σ|y_i - š_i|
dove:
- n: Numero di istanze
- y_i: Valore reale per lâistanza i
- š_i: Valore previsto per lâistanza i
Tip
MAE fornisce unâinterpretazione chiara dellâerrore medio nelle previsioni, rendendolo facile da comprendere. Ă meno sensibile agli outlier rispetto ad altre metriche come lâErrore Quadratico Medio (MSE). Ad esempio, se un modello ha un MAE di 5, significa che, in media, le previsioni del modello si discostano dai valori reali di 5 unitĂ .
Matrice di Confusione
La matrice di confusione è una tabella che riassume le prestazioni di un modello di classificazione mostrando i conteggi di previsioni vere positive, vere negative, false positive e false negative. Fornisce una visione dettagliata di quanto bene il modello si comporta su ciascuna classe.
| Predetto Positivo | Predetto Negativo | |
|---|---|---|
| Reale Positivo | Vero Positivo (TP) | Falso Negativo (FN) |
| Reale Negativo | Falso Positivo (FP) | Vero Negativo (TN) |
- Vero Positivo (TP): Il modello ha previsto correttamente la classe positiva.
- Vero Negativo (TN): Il modello ha previsto correttamente la classe negativa.
- Falso Positivo (FP): Il modello ha previsto erroneamente la classe positiva (errore di Tipo I).
- Falso Negativo (FN): Il modello ha previsto erroneamente la classe negativa (errore di Tipo II).
La matrice di confusione può essere utilizzata per calcolare varie metriche di valutazione, come accuratezza, precisione, richiamo e punteggio F1.
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

