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

Contenuto cancellato Contenuto aggiunto
G273Y (discussione | contributi)
mNessun oggetto della modifica
G273Y (discussione | contributi)
Nessun oggetto della modifica
Riga 1:
{{avanzamento|075%|0102 gennaio 2020}}
== Previsione di vendite future ==
 
Riga 82:
 
sales_train %>%
group_by(shop_name_translateditem_category_name_translated) %>%
summarise(total = sum( item_cnt_day)) %>%
filter(total >10000) %>%
mutate(shop_name_translateditem_category_name_translated=reorder(shop_name_translateditem_category_name_translated,total)) %>%
ggplot(aes(shop_name_translateditem_category_name_translated,total,fill=shop_name_translateditem_category_name_translated)) +
geom_bar(stat="identity")+
coord_flip()+
scale_y_continuous(breaks=seq(0,350000650000,5000080000))+
theme(legend.position = "none") +
xlab("ShopsCategory") +
ylab("Total sales") +
ggtitle("ShopsCategories with total sales > 10000", subtitle = "from 2013/01 to 2015/09")
 
[[File:Categorie con più di 10000 prodotti venduti.png|riquadratocentro|Categorie con più di 10000 prodotti venduti da gennaio 2013 a settembre 2015]]
[[File:Mesi con più vendite.png|riquadratocentro|Mesi con più vendite da gennaio 2013 a settembre 2015]]
[[File:Giorno della settimana con più vendite.png|riquadratocentro|Giorni della settimana con più vendite da gennaio 2013 a settembre 2015]]
[[File:Settimane dell'anno con più vendite.png|riquadratocentro|Settimane dell'anno con più vendite da gennaio 2013 a settembre 2015]]
 
===Parte 4: Modellizzazione===
Riga 117:
max(sales_train$item_cnt_day)
 
[[File:Outliers1.png|riquadratocentro|Outlier item_price]]
[[File:Outliers2.png|riquadratocentro|Outlier item_cnt_day]]
 
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''' .
 
sales_validation <-
sales_train[which(sales_train$date_block_num==33),]
sales_train <- sales_train[which(sales_train$date_block_num<33),]
 
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.
 
gbm_model = gbm(item_cnt_month ~ shop_id + item_id +
item_category_id + date_block_num + item_price + week_day +
week_year + date_item_avg + date_shop_cat_avg , data=sales_train,
shrinkage = 0.01,
distribution = "gaussian",
n.trees = 1000,
interaction.depth = 5,
bag.fraction = 0.5,
train.fraction = 0.8,
# cv.folds = 5,
n.cores = -1,
verbose = T)
 
===Parte 5: Previsione===
Dopo aver ottenuto il modello, è possibile prevedere le vendite totali mensili
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.
 
p1 = predict(gbm_model,newdata = sales_train, n.trees = 1000)
print(paste("RMSE_train=",sqrt((1/nrow(sales_train))*sum((p1-
sales_train$item_cnt_month)^2))))
## [1] "RMSE_train= 1.74599536656872"
p1 = predict(gbm_model,newdata = sales_validation, n.trees =
1000)
rmse <-sqrt((1/nrow(sales_validation))*sum((p1-
sales_validation$item_cnt_month)^2))
print(paste("RMSE_validation=",rmse))
## [1] "RMSE_test= 3.70520797224124"
 
Inoltre è possibile rispondere alla domanda di ricerca prevedendo le vendite mensili sul '''testing set''' (November 2015):
 
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)