1 Introduzione ad alcuni argomenti del corso

Gli esempi sono tratti dai seguenti dataset del mio package MLANP:

*antropometric

*children.rid

*fraud1

L’installazione del package potrebbe essere utile per le successive lezioni. Lo trovate su www.marcellochiodi.com nella sezione software (ma anche sulle pagine teams alla fine di questa lezione)

Non tutti gli argomenti verranno in effetti sviscerati e completati in questo brevissimo corso ma mi aggancerò comunque al precorso di inferenza che avete appena terminato per descrivervi alcune delle peculiarità dei cosiddetti modelli lineari a partire dalla regressione lineare semplice.

Prima di affrontare gli argomenti di inferenza vera e propria come faccio sempre all’inizio dei miei corsi vi sottopongo alcuni classici problemi pratici reali dai quali prenderemo spunto per capire perché Per alcuni problemi è utile un’impostazione basata in qualche modo sui modelli lineari.

In effetti alcuni degli insiemi di dati che vi presento oggi sono ben più complessi di quanto effettivamente riusciremo ad analizzare con gli strumenti che vedremo in questi giorni ma vi danno un’idea della complessità dei problemi che possiamo affrontare. In effetti partirò per la parte teorica con un richiamo della cosiddetta regressione lineare semplice.

Le versioni dei data set e del package della versione più recente potrebbero differire leggermente da quelli utilizzati nel materiale didattico che state leggendo

2 Primo data set

Vengono caricati i packages necessari per realizzare questo documento

2.1 Esempio con 7 variabili

Utilizziamo il data frame antropometric e prendiamo 7 variabili, di cui riportiamo ancora delle statistiche e grafici descrittivi, insieme con la matrice dei grafici a coppia.

2.1.1 Summary dei dati

Data Frame Summary

dati

Dimensions: 1427 x 7
Duplicates: 0
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 Altezza [numeric] Mean (sd) : 151.9 (10.1) min < med < max: 127 < 151 < 183 IQR (CV) : 15 (0.1) 54 distinct values 1427 (100%) 0 (0%)
2 Peso [numeric] Mean (sd) : 45 (10.7) min < med < max: 21 < 43 < 100 IQR (CV) : 14 (0.2) 65 distinct values 1427 (100%) 0 (0%)
3 Torace [numeric] Mean (sd) : 75.6 (7.8) min < med < max: 57 < 74 < 104 IQR (CV) : 10 (0.1) 44 distinct values 1427 (100%) 0 (0%)
4 Cranio [numeric] Mean (sd) : 54.8 (1.6) min < med < max: 50 < 55 < 60 IQR (CV) : 2 (0) 11 distinct values 1427 (100%) 0 (0%)
5 Bisacrom [numeric] Mean (sd) : 34.5 (3) min < med < max: 23 < 34 < 46 IQR (CV) : 4 (0.1) 21 distinct values 1427 (100%) 0 (0%)
6 Bitrocan [numeric] Mean (sd) : 26.3 (2.8) min < med < max: 20 < 26 < 38 IQR (CV) : 4 (0.1) 18 distinct values 1427 (100%) 0 (0%)
7 Span [numeric] Mean (sd) : 153.6 (11.2) min < med < max: 123 < 153 < 184 IQR (CV) : 16 (0.1) 60 distinct values 1427 (100%) 0 (0%)

Generated by summarytools 0.9.6 (R version 4.0.2)
2020-09-25

2.1.2 Alcune righe del data frame

Altezza Peso Torace Cranio Bisacrom Bitrocan Span
1 143 36 67 53 30 23 138
2 144 34 66 54 33 23 149
3 142 35 69 54 30 24 139
712 158 62 86 58 37 29 161
713 154 36 65 54 33 24 148
714 153 41 71 55 31 26 148
1425 142 35 63 54 32 22 144
1426 164 49 82 55 39 29 163
1427 152 40 67 54 32 25 150

2.1.3 Matrice dei grafici a due a due

2.1.4 Matrice di correlazione

Altezza Peso Torace Cranio Bisacrom Bitrocan Span
Altezza 1.00 0.72 0.59 0.48 0.75 0.74 0.89
Peso 0.72 1.00 0.91 0.54 0.75 0.84 0.69
Torace 0.59 0.91 1.00 0.48 0.69 0.77 0.58
Cranio 0.48 0.54 0.48 1.00 0.50 0.49 0.47
Bisacrom 0.75 0.75 0.69 0.50 1.00 0.76 0.78
Bitrocan 0.74 0.84 0.77 0.49 0.76 1.00 0.71
Span 0.89 0.69 0.58 0.47 0.78 0.71 1.00

La matrice di correlazione insieme ove possibile alla matrice dei grafici accocchi delle varie variabili ci dà un’ idea delle interrelazioni presenti tra coppie di variabili è usuale vedere la variabile dipendente sulla Y e la variabile esplicativa sull’asse delle X.

Correlazioni molto elevate in valore assoluto indicano un legame lineare forte fra le variabili qualora questo concetto non fosse ancora noto a tutti verrà ripreso successivamente.

Vediamo che esistono legami forti fra tutte le variabili.

Ovviamente con più di tre variabili non possiamo rappresentarle graficamente simultaneamente.

Inoltre le variabili sono a due a due correlate, alcune anche molto correlate: ci chiediamo se è possibile trovare un modo di riassumere queste informazioni e se è possibile misurare questa forma di correlazione complessiva che sembra esserci fra tutte le variabili

Se ne avremo il tempo proveremo a trovare qualche indice che ci consenta di misurare il grado di correlazione globale che esiste fra tutte le variabili.

3 Secondo data set di esempio

3.1 Statistiche descrittive e grafici del data set children.rid

Data Frame Summary

children.rid

Dimensions: 24553 x 6
Duplicates: 2352
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 gestazione [integer] Mean (sd) : 38.7 (2.1) min < med < max: 25 < 39 < 43 IQR (CV) : 2 (0.1) 19 distinct values 24553 (100%) 0 (0%)
2 lunghezza [integer] Mean (sd) : 491.8 (30) min < med < max: 255 < 500 < 580 IQR (CV) : 30 (0.1) 123 distinct values 24553 (100%) 0 (0%)
3 peso [integer] Mean (sd) : 3207.6 (580.9) min < med < max: 300 < 3250 < 5600 IQR (CV) : 640 (0.2) 472 distinct values 24553 (100%) 0 (0%)
4 Fumatrici [integer] Mean (sd) : 0.1 (0.3) min < med < max: 0 < 0 < 3 IQR (CV) : 0 (5.3)
0:23596(96.1%)
1:608(2.5%)
2:338(1.4%)
3:11(0.0%)
24553 (100%) 0 (0%)
5 parti.pretermine [integer] Mean (sd) : 0 (0.1) min < med < max: 0 < 0 < 5 IQR (CV) : 0 (13)
0:24371(99.3%)
1:147(0.6%)
2:27(0.1%)
3:4(0.0%)
4:3(0.0%)
5:1(0.0%)
24553 (100%) 0 (0%)
6 cranio [integer] Mean (sd) : 338.1 (18.1) min < med < max: 165 < 340 < 400 IQR (CV) : 20 (0.1) 170 distinct values 24553 (100%) 0 (0%)

Generated by summarytools 0.9.6 (R version 4.0.2)
2020-09-25

3.1.1 Alcune righe del data frame

kable(headtail(children.rid))
gestazione lunghezza peso Fumatrici parti.pretermine cranio
1 41 495 3360 0 0 335
2 36 430 1900 1 0 305
3 32 430 1750 2 0 300
12275 39 510 3650 0 0 340
12276 38 490 3280 0 0 337
12277 37 515 3890 0 0 350
24551 38 505 3220 0 0 355
24552 38 515 3440 0 0 330
24553 41 500 2920 0 0 360

3.1.2 Matrice dei grafici a due a due

MLA.explor.pairs(children.rid[,ind])

Matrice di grafici per le sole variabili gestazione, lunghezza, peso, cranio e su un campione di 24553 righe del data.frame, che ha un totale di 24553 righe.

A differenza del caso precedente in questo contesto possiamo tranquillamente assumere che la variabile peso sia la variabile risposta. Questo perché in effetti quando si ragiona sullo stato di salute del nascituro e successivamente del neonato, questo è rappresentato dal peso e quindi si sa che per esempio alla nascita se il peso è inferiore a 2 kg 2,5 kg siamo in una situazione particolare di parto sottopeso.

Nel grafico riportato più avanti vediamo sull’asse delle ascisse la settimana di gestazione e sull’asse delle ordinate il peso alla nascita si tratta di un campione piuttosto ampio di neonati di cui è stata rilevata la settimana di gestazione ehi peso alla nascita come prevedibile all’aumentare del numero di settimane di gestazione aumenta mediamente il peso, Per cui risulta evidente che se io voglio fare inferenze sul peso medio di questi neonati ovviamente faccio bene a tenere in considerazione l’informazione fornita dalla settimana di gestazione ossia conoscere la settimana di gestazione migliora la mia informazione sulla variabile risposta peso.

In effetti vediamo che all’aumentare della settimana di gestazione aumenta il peso medio magari non in modo esattamente lineare ma la prima impressione che abbiamo dal grafico che è una retta rispecchierebbe discretamente l’andamento della media

3.2 retta di regressione e curve di regressione

Warning in smooth.spline(y ~ x, cv = TRUE): cross-validation with non-unique 'x' values seems doubtful

Un boxblot per gli stessi dati

[1] "medie parziali dei pesi in funzione delle altezze"
     [,1]
25  917.3
26  864.8
27  925.6
28 1093.0
29 1268.8
30 1528.5
31 1566.2
32 1752.0
33 2000.5
34 2186.4
35 2389.8
36 2632.8
37 2944.8
38 3154.5
39 3313.6
40 3419.5
41 3525.4
42 3546.7
43 3467.5
MLA.explor.plot2D(children.rid[,2],children.rid[,3],spline=TRUE)
Warning in smooth.spline(y ~ x, cv = TRUE): cross-validation with non-unique 'x' values seems doubtful

Probabilmente invece per questo insieme di dati bisognerebbe fare qualcosa di un po’ diverso per la relazione fra peso e altezza ma non è argomento che affronteremo in questa giornata.

3.3 Data set ridotto eliminando le osservazioni con valori non plausibili

sel=gestazione>24&gestazione<45&lunghezza<650&lunghezza>250

3.4 Rappresentazione interattiva in 3d

You must enable Javascript to view this page properly.

Opportuna strumentazione tecnica potremmo riuscire a trovare una relazione soddisfacente che faccia dipendere la variabile peso dalle altre due variabili e poi magari potremmo porci una serie di problemi più complessi che però oggi non ci poniamo.

In effetti il modello base che noi ci Apprestiamo a studiare e il cosiddetto modello lineare in cui immaginiamo che il valore atteso di una variabile di risposta dipende in qualche modo da una variabile esplicativa.

La situazione più semplice è quella in cui abbiamo due sole variabili una variabile risposta Y ed una variabile esplicativa X e assumiamo che il valore atteso della variabile risposta Dipende linearmente dei valori assunti dalla X.

\[ \mathrm{E}\left[Y_i\right]= \beta_0 +\beta_1 x_i \] ## Esempi di modelli lineari

Da riprendere al momento della lezione sui modelli lineari

Un applicazione ai dati precedenti per le variabili gestazione, lunghezza, peso

Proviamo ad estendere il concetto di regressione semplice alla regressione multipla, intanto con due sole variabili esplicative, in modo che sia visalizzabile.

Più avanti ovviamente generalizzeremo a più variabili.

più avanti ancora, in altri moduli, affronterete casi in cui addirittura le variabili sono più delle unità, caso frequente ad esempio nell’analisi di dati genetici

MLA.regression3d(graf1[,1:3], conf.exp=FALSE)

You must enable Javascript to view this page properly.

3.5 Primissime annotazioni sulla regressione a due variabili

I dettagli teorici a dopo…

l12=lm(peso~gestazione+lunghezza,data=children.rid)
summary(l12)

Call:
lm(formula = peso ~ gestazione + lunghezza, data = children.rid)

Residuals:
    Min      1Q  Median      3Q     Max 
-2950.2  -205.6   -20.2   183.5  3712.1 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -5.448e+03  3.726e+01 -146.22   <2e-16 ***
gestazione   4.261e+01  1.282e+00   33.22   <2e-16 ***
lunghezza    1.424e+01  9.033e-02  157.67   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 306.1 on 24550 degrees of freedom
Multiple R-squared:  0.7224,    Adjusted R-squared:  0.7224 
F-statistic: 3.194e+04 on 2 and 24550 DF,  p-value: < 2.2e-16

Con l’istruzione lm() ottengo le stime dei parametri in modo del tutto simile alla regressione lineare semplice (e dal punto di vista delle istruzioni R sarà quasi sempre lo stesso nei modelli lineari, il metodo è ancora quello dei minimi quadrati)

Il significato dei parametri è analogo: sono delle pendenze, ma indicano una dipendenza parziale, ossia a parità di altre condizioni, oppure tenute costanti le altre variabili (vedere spiegazione geometrica nel grafico 3d)

Abbiamo le tre stime dei coefficienti: -5447.807, 42.609, 14.243, quindi la variabile di risposta varia mediamente di 42.609, al variare unitario di x1, per valori costanti di x2.

3.5.1 Confronto con le regressioni lineari semplici

l1=lm(peso~gestazione,data=children.rid)
l2=lm(peso~lunghezza,data=children.rid)
summary(l1)

Call:
lm(formula = peso ~ gestazione, data = children.rid)

Residuals:
     Min       1Q   Median       3Q      Max 
-2587.94  -279.86    -8.72   273.98  2240.91 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -3871.709     50.918  -76.04   <2e-16 ***
gestazione    182.693      1.312  139.24   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 434.2 on 24551 degrees of freedom
Multiple R-squared:  0.4412,    Adjusted R-squared:  0.4412 
F-statistic: 1.939e+04 on 1 and 24551 DF,  p-value: < 2.2e-16
summary(l2)

Call:
lm(formula = peso ~ lunghezza, data = children.rid)

Residuals:
    Min      1Q  Median      3Q     Max 
-3041.9  -208.6   -18.3   186.9  4047.7 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -4.819e+03  3.281e+01  -146.9   <2e-16 ***
lunghezza    1.632e+01  6.659e-02   245.1   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 312.9 on 24551 degrees of freedom
Multiple R-squared:  0.7099,    Adjusted R-squared:  0.7099 
F-statistic: 6.008e+04 on 1 and 24551 DF,  p-value: < 2.2e-16

3.6 Alcune considerazioni e commenti

  • Le stime dei coefficienti di regressione sono sempre delle pendenze

  • In generale queste pendenze sono diverse da quelle delle rette di regressione semplice fatte su x1 e x2

    Nella regressione multipla abbiamo ottenuto due stime:

    42.609, 14.243

    diverse dalle due stime delle due regressioni semplici

    182.693 e 16.322

  • La devianza spiegata dalla regressione multipla è maggiore di quella spiegata da ciascuna delle singole rette ma non può essere superiore alla somma delle spiegazioni delle singole variabili (spiegare e vedere con i numeri)

    Infatti il coefficiente di determinazione multipla della regressione con due variabili esplicative (modello ) è:

    \[R^2_{y.12} = 0.722\]

    mentre i singoli coefficienti di determinazione multipla dei due modelli di regressione sono:

    \[R^2_{y.1} = 0.441\] \[R^2_{y.2} = 0.71\]

4 Terzo esempio: frodi negli acquisti online

Classes 'data.table' and 'data.frame':  310134 obs. of  14 variables:
 $ isFraud       : int  0 0 0 0 0 0 0 0 0 0 ...
 $ TransactionDT : int  86400 86469 86510 86522 86536 86618 86725 86761 86808 86972 ...
 $ TransactionAmt: num  68.5 59 49 159 117 ...
 $ ProductCD     : Factor w/ 5 levels "C","H","R","S",..: 5 5 5 5 5 5 5 5 5 5 ...
 $ card4         : Factor w/ 5 levels "","american express",..: 3 5 5 5 4 5 5 4 4 5 ...
 $ card6         : Factor w/ 5 levels "","charge card",..: 3 4 4 4 4 4 4 4 4 4 ...
 $ C1            : int  1 1 1 1 2 4 1 1 1 4 ...
 $ C2            : int  1 1 1 1 2 4 1 1 1 2 ...
 $ D1            : int  14 0 0 0 61 0 0 0 0 0 ...
 $ D10           : int  13 0 0 0 40 465 0 0 0 0 ...
 $ D11           : int  13 315 0 0 302 423 237 0 0 35 ...
 $ D15           : int  0 315 0 0 318 0 0 0 0 0 ...
 $ hour          : num  0 0 0 0 0 0 0 0 0 0 ...
 $ day           : num  1 1 1 1 1 1 1 1 1 1 ...

4.1 Summary dei dati

Data Frame Summary

fraud0

Dimensions: 310134 x 14
Duplicates: 57
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 isFraud [integer] Min : 0 Mean : 0 Max : 1
0:304052(98.0%)
1:6082(2.0%)
310134 (100%) 0 (0%)
2 TransactionDT [integer] Mean (sd) : 8765654.5 (4371378.3) min < med < max: 86400 < 9124508.5 < 15811131 IQR (CV) : 7101428.5 (0.5) 304681 distinct values 310134 (100%) 0 (0%)
3 TransactionAmt [numeric] Mean (sd) : 153.1 (272.5) min < med < max: 2 < 78.5 < 31937.4 IQR (CV) : 97 (1.8) 9571 distinct values 310134 (100%) 0 (0%)
4 ProductCD [factor] 1. C 2. H 3. R 4. S 5. W
0(0.0%)
0(0.0%)
0(0.0%)
0(0.0%)
310134(100.0%)
310134 (100%) 0 (0%)
5 card4 [factor] 1. (Empty string) 2. american express 3. discover 4. mastercard 5. visa
1219(0.4%)
0(0.0%)
3070(1.0%)
100922(32.5%)
204923(66.1%)
310134 (100%) 0 (0%)
6 card6 [factor] 1. (Empty string) 2. charge card 3. credit 4. debit 5. debit or credit
1219(0.4%)
0(0.0%)
49006(15.8%)
259890(83.8%)
19(0.0%)
310134 (100%) 0 (0%)
7 C1 [integer] Mean (sd) : 9 (29.2) min < med < max: 0 < 2 < 344 IQR (CV) : 2 (3.2) 321 distinct values 310134 (100%) 0 (0%)
8 C2 [integer] Mean (sd) : 8.3 (26.6) min < med < max: 1 < 2 < 297 IQR (CV) : 2 (3.2) 276 distinct values 310134 (100%) 0 (0%)
9 D1 [integer] Mean (sd) : 116 (170.2) min < med < max: 0 < 26 < 639 IQR (CV) : 171 (1.5) 640 distinct values 310134 (100%) 0 (0%)
10 D10 [integer] Mean (sd) : 141.8 (191.5) min < med < max: 0 < 36 < 679 IQR (CV) : 240 (1.4) 676 distinct values 310134 (100%) 0 (0%)
11 D11 [integer] Mean (sd) : 146.7 (186.1) min < med < max: -53 < 43 < 670 IQR (CV) : 274 (1.3) 675 distinct values 310134 (100%) 0 (0%)
12 D15 [integer] Mean (sd) : 182.8 (209.5) min < med < max: -60 < 82 < 672 IQR (CV) : 351 (1.1) 680 distinct values 310134 (100%) 0 (0%)
13 hour [numeric] Mean (sd) : 14.2 (7.5) min < med < max: 0 < 17 < 23 IQR (CV) : 9 (0.5) 24 distinct values 310134 (100%) 0 (0%)
14 day [numeric] Mean (sd) : 100.8 (50.6) min < med < max: 1 < 105 < 182 IQR (CV) : 83 (0.5) 182 distinct values 310134 (100%) 0 (0%)

Generated by summarytools 0.9.6 (R version 4.0.2)
2020-09-25

4.2 Alcune righe del data frame

isFraud TransactionDT TransactionAmt ProductCD card4 card6 C1 C2 D1 D10 D11 D15 hour day
1 0 86400 68.50 W discover credit 1 1 14 13 13 0 0 1
2 0 86469 59.00 W visa debit 1 1 0 0 315 315 0 1
3 0 86510 49.00 W visa debit 1 1 0 0 0 0 0 1
155065 0 9124493 107.95 W visa debit 3 1 104 580 580 580 14 105
155066 0 9124497 134.95 W mastercard credit 1 1 0 0 0 0 14 105
155067 0 9124507 66.95 W visa debit 2 2 0 0 0 0 14 105
310132 0 15811079 30.95 W mastercard debit 1 1 0 0 0 0 23 182
310133 0 15811088 117.00 W mastercard debit 1 1 22 22 22 22 23 182
310134 0 15811131 279.95 W mastercard credit 2 1 0 1 0 1 23 182

4.3 Descrizione dei dati

Si tratta di un campione estratto dal sito kaggle.com, notevolmente ridotto e semplificato, relativo a 310134 transazioni on line.

Ogni record corrisponde a una transazione effettuata. Non sono presenti dati mancanti

Per semplicità non ho incluso i record con osservazioni mancanti, che in qualche caso possono essere invece informativi.

Le variabili presenti sono le seguenti (Il significato effettivo di alcune variabili è mascherato dall’ente che ha messo a disposizione i dati):

  • la variabile di interesse isFraud: è una variabile dicotomica che assume modalità “0” se la transazione è regolare oppure “1” se la transazione è risultata poi fraudolenta;

  • TransactionDT: è una variabile temporale espressa in secondi;

  • TransactionAmt: è una variabile quantitativa che indica l’importo del pagamento della transazione in dollari;

  • ProductCD: inutile perchè costante in questo sottoinsieme di dati;

  • card1 e card6: sono due variabili qualitative che indicano vari tipi di informazioni sulla carta di pagamento come il tipo di carta, la categoria, la banca, il Paese, ecc.;

  • C1 e C2: sono variabili di conteggio. Ad esempio il numero di indirizzi associati alla carta di pagamento, ecc.;

  • D1, D10, D11, D15: sono variabili quantitative che indicano intervalli temporali misurati in giorni come ad esempio i giorni tra la transazione precedente, etc.

  • hour,day: ora e giorno della transazione

with(fraud0,plot(log10(TransactionAmt+0.5),log10(D15+0.5),col=isFraud+1))
Warning in xy.coords(x, y, xlabel, ylabel, log): Si è prodotto un NaN

with(fraud0,MLA.group.density.plot(log10(TransactionAmt+0.5),isFraud))

with(fraud0,myplot.grouped.bin(isFraud,hour))

$m
         0          1          2          3          4          5          6          7          8          9 
0.01647686 0.01568811 0.01632025 0.01768049 0.01995284 0.03406814 0.03246753 0.04487659 0.03764479 0.04489796 
        10         11         12         13         14         15         16         17         18         19 
0.02790462 0.02267685 0.02271827 0.01736527 0.01744897 0.01705332 0.01955496 0.02027244 0.02145443 0.02181074 
        20         21         22         23 
0.02010050 0.01907502 0.01784312 0.02097966 

$x
 [1]  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

$n
    0     1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19 
20635 17083 12990  9502  5513  2994  2002  1337  1036  1225  1971  4057  7571 11690 15531 18061 20762 21803 22373 22466 
   20    21    22    23 
22089 22595 22922 21926 

4.4 Il problema statistico di previsione.

Alcune di queste variabili ci possono aiutare a valutare se una transazione è fraudolenta?

E’ basilare in questo contesto che tutte le variabili (tranne la risposta isFraud) siano osservabili immediatamente prima dell’esecuzione della transazione, mentre la variabile isFraud ragionevolmente sarà nota dopo alcuni giorni

Potremo commettere due tipi di errori: Falsi Positivi e Falsi negativi

Non potremo ovviamente, in generale, ottenere previsioni esatte, ma magari avere una valutazione della probabilità che una transazione sia fraudolenta