Applicazioni pratiche di machine learning/Segmentazione dei clienti: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m colorazione codice R
Riga 2:
 
===Caricamento librerie ===
<syntaxhighlight lang="rsplus">
library(gbm)
library(caTools)
Line 8 ⟶ 9:
library(ggplot2)
library(corrplot)
</syntaxhighlight>
 
===Parte 1: Dati===
Line 55 ⟶ 57:
 
'''Caricamento dei dati:'''<br>
<syntaxhighlight lang="rsplus">
dfTrainHistory <- read.csv("trainHistory.csv")
dfTestHistory <- read.csv("testHistory.csv")
Line 61 ⟶ 64:
dfTestHistory <- merge(dfTransactions,dfTestHistory, by =c("id","chain"))
dfTransactions <- merge(dfTransactions,dfTrainHistory, by =c("id","chain"))
</syntaxhighlight>
 
'''Panoramica dei dati:'''<br>
<syntaxhighlight lang="rsplus">
# 1. Rows and colums in transaction merged with history
dim(dfTransactions)
Line 74 ⟶ 79:
# 2. Chi-Square - shows relation of Categorical columns
corrplot(cor(dfTransactions[,c(3,4,5,6,10,11,12,13)]) , method = "number")
</syntaxhighlight>
 
[[File:Correlations.png|centro|Non ci sono variabili collineari essendo il coefficiente di correlazione tra le variabili numeriche sempre basso]]
Line 80 ⟶ 86:
 
Si cercano eventuali dati mancanti identificati da NA, -1 oppure 999 :
 
<syntaxhighlight lang="rsplus">
colSums(is.na(dfTransactions))
colSums(dfTransactions==-1)
colSums(dfTransactions==-999)
</syntaxhighlight>
 
Non ci sono dati mancanti nelle variabili...
Line 94 ⟶ 102:
 
#### read in training data
<syntaxhighlight lang="rsplus">
dfTrain <- dfTransactions
dfTrain$offerdate <- as.Date(dfTrain$offerdate)
Line 103 ⟶ 112:
trainInd <- which(dfTrain$offerdate<thresh)
validInd <- which(dfTrain$offerdate>=thresh)
</syntaxhighlight>
 
Si scelgono i predictors cioè le variabili con cui verrà creato il modello e e si sceglie anche la variabile da prevedere 'repeater' che assume il valore 1 se il cliente ripete l'acquisto dell'offerta, o 0 altrimenti.
Se il cliente ripete l'acquisto, allora è un valido cliente.
 
<syntaxhighlight lang="rsplus">
###################################
## Perform training & validation ##
Line 117 ⟶ 129:
Y_train <- dfTrain$repeater
Y <-ifelse(Y_train=="t",1,0)
</syntaxhighlight>
 
 
Per prevedere i clienti validi la libreria gbm adotta l'algoritmo di machine learning
gradient stocastic, che modifica in parte l'algoritmo di base.
 
<syntaxhighlight lang="rsplus">
gbm_model = gbm(Y[trainInd] ~ dept+ category+company + brand+ purchasequantity + purchaseamount + offer + market ,
data=X_train[trainInd,],
Line 132 ⟶ 146:
n.cores = -1,
verbose = T)
</syntaxhighlight>
 
===Parte 4: Previsione===
Line 141 ⟶ 156:
 
'''... nel training set:'''
<syntaxhighlight lang="rsplus">
p1 = predict(gbm_model,newdata = X_train[trainInd,], n.trees =1000)
p <- rep(0,nrow(X_train[trainInd,]))
Line 146 ⟶ 162:
p <-as.factor(p)
confusionMatrix(p,as.factor(Y[trainInd]))
</syntaxhighlight>
 
## Confusion Matrix and Statistics
Line 168 ⟶ 184:
Detection Rate : 0.4054##
 
<syntaxhighlight lang="rsplus">
auc <-colAUC(p1, Y_train[trainInd])
cat('Boosting AUC in training set: ', auc, '\n', sep='')
## Boosting AUC in training set: 0.9271135
</syntaxhighlight>
 
'''... nel validation set :'''
 
<syntaxhighlight lang="rsplus">
p1 = predict(gbm_model,newdata = X_train[validInd,], n.trees =1000)
p <- rep(0,nrow(X_train[validInd,]))
Line 181 ⟶ 200:
p <-as.factor(p)
confusionMatrix(p,as.factor(Y[validInd]))
</syntaxhighlight>
 
## Confusion Matrix and Statistics
Line 200 ⟶ 219:
##
##
 
<syntaxhighlight lang="rsplus">
auc<-colAUC(p1, Y_train[validInd])
cat('Boosting AUC in validation set: ', auc, '\n', sep='')
## Boosting AUC in validation set
</syntaxhighlight>
 
 
===Parte 5: Conclusione ===
Ora è possibile sapere quali sono i clienti validi nel '''testing set''':
 
<syntaxhighlight lang="rsplus">
p1 = predict(gbm_model,newdata = dfTestHistory, n.trees = 1000)
df <- data.frame(idCustomer = dfTestHistory$id,repeatProbability = p1)
Line 222 ⟶ 244:
geom_point() +
ggtitle("Valued Shoppers a probability of more ", subtitle="than 65% to repeat the purchase of offers")
</syntaxhighlight>
 
[[File:Validi clienti.png|frame|centro|Validi clienti in celeste aventi una probabilità superiore al 65% di ripetere l'acquisto]]