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

Contenuto cancellato Contenuto aggiunto
Nuova pagina: {{Applicazioni pratiche di machine learning}} ==Caricamento librerie== <syntaxhighlight lang="rsplus"> library(dplyr) library(ggplot2) library(caret) library(h2o) </syntaxhighlight>...
(Nessuna differenza)

Versione delle 13:18, 8 ott 2020

Indice del libro

Caricamento librerie

library(dplyr)
library(ggplot2)
library(caret)
library(h2o)


Parte 1: Dati

Il dataset crimes.csv scaricabile da qui : https://www.kaggle.com/AnalyzeBoston/crimes-in-boston contiene 317.751 records relativi a reati forniti dal Dipartimento di Polizia di Boston (BPD) con informazioni su dove e quando essi si sono verificati. Le variabili contenute nel dataset sono le seguenti :

  • INCIDENT_NUMBER:Numero interno dell'incidente stabilito da BPD
  • OFFENSE_CODE: Codice numerico della descrizione dell'incidente
  • OFFENSE_CODE_GROUP: Categoria interna per la descrizione dell'incidente
  • OFFENSE_DESCRIPTION:Descrizione primaria dell'incidente
  • DISTRICT:Quartiere in cui si è verificato l'incidente
  • REPORTING_AREA: Numero RA associato con il luogo in cui si è verificato l'incidente
  • SHOOTING:Indica se la registrazione è avvenuta nel luogo del fatto
  • OCCURRED_ON_DATE:Giorno e ora in cui l'incidente si è verificato
  • YEAR: Anno dell'incidente
  • MONTH: Mese dell'incidente
  • DAY_OF_WEEK:Giorno della settimana
  • HOUR:Ora
  • UCR_PART:Uniform Crime Report che può assumere 3 valori (Part 1,Part 2, Part 3).
    • Part 1 include crimini violenti e crimini contro il patrimonio. Ad esempio Aggressione aggravata , stupro forzato , omicidio e rapina mentre incendio doloso , furto con scasso , furto e furto di veicoli a motore sono classificati come reati contro il patrimonio.
    • Parte 2, vengono incluse le seguenti categorie: aggressione semplice, reati di coprifuoco e vagabondaggio, appropriazione indebita, falsificazione e contraffazione, condotta disordinata, guida sotto l'influenza di droghe, reati di droga, frode, gioco d'azzardo, reati di alcol, reati contro la famiglia, prostituzione, ubriachezza in pubblico, fughe, reati sessuali, beni rubati, atti vandalici, vagabondaggio e reati legati alle armi.
    • Parte 3 : Altro
  • STREET:Nome della strada in cui l'incidente si è verificato
  • Lat: Latitudine del luogo in cui si è verificato l'incidente
  • Long: Longitudine
  • Location:(Latitudine, Longitudine)

Caricamento dati:

crime <- read.csv("crime.csv")

Parte 2: Esplorazione dati

crime %>%
  filter(!is.na(OFFENSE_CODE_GROUP)) %>%
  group_by(OFFENSE_CODE_GROUP) %>%
  summarise(n=n()) %>%
  filter(n>200) %>%
  mutate(OFFENSE_CODE_GROUP=reorder(OFFENSE_CODE_GROUP,n))  %>%
  ggplot(aes(OFFENSE_CODE_GROUP,n))+
  geom_bar(stat="identity", fill="red")+
  coord_flip()+
 geom_text(aes(label=n), hjust=0, size=2)+
  guides(fill=FALSE)+
  ylab("Numero totale") +
  xlab("Crimine") +
  ggtitle("Tipo di incidenti o reati a Boston")
crime %>%
  group_by(STREET) %>%
  summarise(n=n()) %>%
  filter(n>800) %>%
  mutate(STREET=reorder(STREET,n))  %>%
  ggplot(aes(STREET,n, fill=STREET))+
  geom_bar(stat="identity", fill="blue")+
  coord_flip()+
 geom_text(aes(label=n), hjust=0, size=2)+
  guides(fill=FALSE)+
  ylab("Numero totale") +
  xlab("Strade") +
  ggtitle("Strade di Boston con più crimini")
crime %>%
  group_by(DISTRICT,UCR_PART) %>%
  summarise(n=n()) %>%
  filter(n>800) %>%
  mutate(STREET=reorder(DISTRICT,n))  %>%
  ggplot(aes(STREET,n, fill=UCR_PART))+
  geom_bar(stat="identity")+
  coord_flip()+
  ylab("Numero totale") +
  xlab("Quartieri") +
  ggtitle("Quartieri di Boston per UCR_PART")

Parte 3: Domanda di ricerca

Si vuole predire che tipo di reato verrà compiuto, cioè se di UCR_PART 1,2 o 3 in base al luogo e al tempo indicato. Quindi UCR_PART è la variabile da predire tramite le variabili : Lat, Long, YEAR, MONTH, HOUR, DAYS_OF_WEEK


Parte 4: Modellizzazione

```{r} crime$UCR_PART <- as.character(crime$UCR_PART) crime<- crime[-which(crime$UCR_PART==""),] crime<- crime[-which(crime$UCR_PART=="Other"),] crime$UCR_PART <- as.factor(crime$UCR_PART) ```


```{r} trainIndex <- createDataPartition(crime$UCR_PART,p=0.7, list = FALSE) training <- crime[trainIndex,] testing <- crime[-trainIndex,]

```

```{r} h2o.init() ```

H2O is not running yet, starting it now...


openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
Starting H2O JVM and connecting: ..... Connection successful!
R is connected to the H2O cluster: 
   H2O cluster uptime:         6 seconds 187 milliseconds 
   H2O cluster timezone:       Europe/Rome 
   H2O data parsing timezone:  UTC 
   H2O cluster version:        3.30.1.3 
   H2O cluster version age:    8 days  
   H2O cluster name:           H2O_started_from_R_gian_vxl021 
   H2O cluster total nodes:    1 
   H2O cluster total memory:   1.92 GB 
   H2O cluster total cores:    2 
   H2O cluster allowed cores:  2 
   H2O cluster healthy:        TRUE 
   H2O Connection ip:          localhost 
   H2O Connection port:        54321 
   H2O Connection proxy:       NA 
   H2O Internal Security:      FALSE 
   H2O API Extensions:         Amazon S3, XGBoost, Algos, AutoML, Core V3, TargetEncoder, Core V4 
   R Version:                  R version 3.6.3 (2020-02-29)