Applicazioni pratiche di machine learning/Previsione di vendite future: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
G273Y (discussione | contributi)
Nessun oggetto della modifica
m colorazione codice R
Riga 3:
 
===Caricamento librerie ===
<syntaxhighlight lang="rsplus">
library(dplyr)
library(gbm)
library(ggplot2)
</syntaxhighlight>
 
===Parte 1: Dati===
Line 30 ⟶ 32:
 
'''Caricamento dei dati:'''
<syntaxhighlight lang="rsplus">
sales_train <- read.csv("sales_train_v2.csv")
items2 <-read.csv("items.csv")
Line 39 ⟶ 42:
sales_train <- merge(sales_train,items, by =c("item_id"), all.x = TRUE)
sales_train <- merge(sales_train,shops, by =c("shop_id"), all.x = TRUE)
</syntaxhighlight>
 
'''Creazione di nuove variabili nel dataset :'''
 
'''#Creazione delle variabili: week_day, month , week_year'''
<syntaxhighlight lang="rsplus">
sales_train$date <- as.Date(sales_train$date,tryFormats=c("%d.%m.%Y"))
p <- as.POSIXlt(sales_train$date)
Line 72 ⟶ 77:
sales_train <- merge(sales_train, as.data.frame(df1),
by=c("date_block_num","week_year","week_day","shop_id","item_category_id","item_id","item_price", "date_item_avg","date_shop_cat_avg"), all.x = TRUE)
</syntaxhighlight>
 
E' possibile migliorare il modello aggiungendo nuove variabili e/o modificando il tuning degli iperparametri (DA FARE)
Line 80 ⟶ 86:
 
===Parte 3: Esplorazione dei dati===
<syntaxhighlight lang="rsplus">
 
sales_train %>%
group_by(item_category_name_translated) %>%
Line 94 ⟶ 100:
ylab("Total sales") +
ggtitle("Categories with total sales > 10000", subtitle = "from 2013/01 to 2015/09")
</syntaxhighlight>
 
[[File:Categorie con più di 10000 prodotti venduti.png|centro|Categorie con più di 10000 prodotti venduti da gennaio 2013 a settembre 2015]]
Line 103 ⟶ 110:
'''Cancellazione degli outliers:'''
Nelle variabili prezzo item_price e numero dei prodotti venduti item_cnt_day ci sono valori anomali, troppo grandi e rari che occorre cancellare :
<syntaxhighlight lang="rsplus">
 
sales_train %>%
ggplot(aes(item_id,item_price))+
Line 116 ⟶ 123:
max(sales_train$item_price)
max(sales_train$item_cnt_day)
</syntaxhighlight>
 
[[File:Outliers1.png|centro|Outlier item_price]]
Line 122 ⟶ 130:
I dati per creare il modello previsionale sono quelli anteriori a ottobre 2015 e costituiscono il cosiddetto '''training set''' (date_block_num <33), mentre quelli relativi a ottobre 2015 (date_block_num = 33) costituiscono il '''validation set''' .
 
<syntaxhighlight lang="rsplus">
sales_validation <-
sales_train[which(sales_train$date_block_num==33),]
sales_train <- sales_train[which(sales_train$date_block_num<33),]
</syntaxhighlight>
 
Per prevedere le vendite mensili totali a ottobre 2015 il pacchetto gbm adotta la strategia del gradiente stocastico, una piccola ma importante modifica dell'algoritmo di base.
 
<syntaxhighlight lang="rsplus">
gbm_model = gbm(item_cnt_month ~ shop_id + item_id +
item_category_id + date_block_num + item_price + week_day +
Line 140 ⟶ 151:
n.cores = -1,
verbose = T)
</syntaxhighlight>
 
===Parte 5: Previsione===
Line 145 ⟶ 157:
sia sul training set che sul validation set (ottobre 2015) e si può calcolare l'errore quadratico medio (RMSE) per valutare la correttezza della previsione.
 
<syntaxhighlight lang="rsplus">
p1 = predict(gbm_model,newdata = sales_train, n.trees = 1000)
print(paste("RMSE_train=",sqrt((1/nrow(sales_train))*sum((p1-
Line 155 ⟶ 168:
print(paste("RMSE_validation=",rmse))
## [1] "RMSE_test= 3.70520797224124"
</syntaxhighlight>
 
Inoltre è possibile rispondere alla domanda di ricerca prevedendo le vendite mensili sul '''testing set''' (November 2015):
 
<syntaxhighlight lang="rsplus">
p1 = predict(gbm_model,newdata = sales_test, n.trees = 1000)
sub2 = data.frame(ID = sales_test$ID,item_cnt_month =
write.csv(sub2, "submission.csv", row.names = F)
</syntaxhighlight>
 
 
[[Categoria:Applicazioni pratiche di machine learning|Previsione di vendite future]]