Gruppo BPS Michele Bellini - 708879 Daniele Prevedello - 799211 Alessandro Sighinolfi - 799198 24 Febbraio 2016 Architettura del Software e dei Dati Sistema di Osservazione del Comportamento degli Automobilisti (OCA) Testo del Problema Si deve realizzare un sistema di Osservazione del Comportamento degli Automobilisti (OCA) che consenta a una Compagnia di assicurazione di monitorare il comportamento degli automobilisti assicurati per ridefinire le polizze in base al livello di rischio di ciascun assicurato e per fornire assistenza in caso di sinistro. Sui veicoli degli assicurati sono presenti: • Un sensore di accelerazione ACC (accelerometro). • Un sensore di velocità TAC (tachimetro). • Un sensore GPS. E’ possibile accedere a due Basi Dati esterne preesistenti: • Una Base Dati Geografica (BDG) che contiene la descrizione della rete viaria e in particolare, per ciascuna strada, la tipologia T (urbano, extraurbano, autostrada) e l’eventuale limite di velocità. Per semplicità, si può (ma non è obbligatorio!) assumere che i limiti di velocità siano fissati per ciascun tipo di strada (esempio: 50, 90, 130). Testo del Problema • Una Base Dati Assicurati (BDA) che contiene l’anagrafica degli assicurati, le relative polizze e le denunce di sinistro. Si consideri che un assicurato può avere più polizze corrispondenti a veicoli diversi. Gli operatori della Compagnia svolgono due funzioni: • Organizzazione dell’assistenza in caso d’incidente. • Ridefinizione, ala scadenza di ogni polizza, del premio di assicurazione in base al livello di rischio dell’assicurato calcolato sull’ultimo anno. Questa attività deve poter essere svolta in remoto. Il sistema OCA deve essere in grado di: 1. Supportare l’assistenza immediata in caso di sinistri, svolgendo le seguenti funzioni: a. Riconoscimento di eventuali sinistri (collisioni); b. Notifica all’operatore competente delle informazioni necessarie per organizzare l’assistenza; c. Attivazione di una connessione telefonica tra operatore e assicurato coinvolto. Testo del Problema 2. Determinare per ciascuna polizza su base annuale: a. Il chilometraggio totale K; b. La velocità media V per ciascuna tipologia T di tronco viario; c. Il livello di prudenza P, definito come la percentuale di chilometri percorsi rispettando i limiti di velocità con una tolleranza di 10 km/h. 3. Calcolare il livello di rischio R di ciascun assicurato come R = f(K, V, P, E, D, C), dove K, V, P sono cumulativi per tutte le polizze dell’assicurato, E è l’età dell’assicurato, D il numero di denunce sinistro nell’ultimo anno e C il Comune di residenza. Il livello di rischio R può assumere valori discreti da 1 a 10. Non si chiede di definire il dettaglio algoritmico della funzione f. 4. Consentire all’operatore competente di visualizzare, per ciascun assicurato e per ciascuna polizza, le attuali condizioni di polizza e il livello di rischio dell’assicurato. Architettura del Software Ambiguità • Non è definito quale è il meccanismo per cui si possa verificare la situazione di sinistro • Funzione di Rischio non esplicitata, di conseguenza non possiamo stimare analiticamente la complessità computazionale del rischio • Non è possibile stabilire se nel momento di sinistro il guidatore è la stessa persona del titolare dell’assicurazione. Assunzioni - Generali VALUTAZIONE SINISTRO Per valutare il caso di sinistro sull’automobile si è valutato il sistema come segue : • Il caso di incidente si ottiene quando la forza sviluppata dal sistema automobile-ambiente è maggiore di una certa soglia • L’automobile è dotata di un accelerometro e, applicando la legge della dinamica di Newton, si valuta l’accelerazione in un certo istante di tempo • L’accelerazione istantanea, valutata dal trigger, è di segno negativo (decelerazione) • Quando il modulo dell’accelerazione negativa supera una certa soglia, il trigger si attiva e invia la segnalazione • Il campionamento dell’accelerazione avviene ogni 10 ms per non perdere nessun valore di picco Assunzioni - Generali ALTRE ASSUNZIONI • Gli incidenti sono considerati non gravi, quindi l’intervento dell’operatore consiste nel contattare il titolare dell’assicurazione e se necessario organizzare un intervento di assistenza al veicolo Assunzioni - Veicolo • Sul veicolo vengono effettuati i campionamenti fisici e un’aggregazione delle misure effettuate dalla scatola nera • Il sistema scatola nera si occupa dell’elaborazione della notifica incidente Assunzioni - Operatore • La notifica dell’incidente viene sempre inviata all’OCA. Il dato, contiene il valore GPS dell’ultima posizione da cui si può approssimativamente ricostruire la posizione del veicolo incidentato e la velocità prima dell’urto da cui si può approssimativamente valutare l’entità dell’incidente • A seconda dei tempi di attesa ragionevoli l’operatore può contattare, in caso di necessità, sia il centro d’assistenza convenzionato con la compagnia d’assicurazione (come canale preferenziale) più vicino al luogo di sinistro sia il centro d’assistenza più vicino al luogo di sinistro. Assunzioni - BDG • Ogni strada è suddivisa in tratti, per ricostruire i percorsi con i limiti stradali in modo più preciso Assunzioni - BDA • Il database è un aggregato dei database di diverse compagnie di assicurazione Assunzioni – Titolare Polizza • Il titolare dell’assicurazione non è sempre il guidatore dell’automobile. Anche in questo caso viene contattato quando si verifica un sinistro • Il titolare può avere più polizze assicurative e con più società di assicurazione Stime • Il sistema OCA ha un livello di copertura nazionale • La distanza tra il centro e il luogo di incidente non è approssimabile a priori. Infatti in prossimità di grandi centri e autostrade il soccorso sarà più tempestivo rispetto al caso in cui il sinistro avviene in un luogo difficilmente raggiungibile. La stima massima per l’arrivo di un carroattrezzi nel luogo di incidente è valutata entro un’ora • I centri di assistenza sono distribuiti in media su tutto il territorio nazionale. L’agenzia assicurativa si incarica di contattare il centro più vicino. Mediamente almeno un centro di assistenza è presente a livello provinciale Architettura del Problema: Casi d’uso Architettura del Problema: Modello dei Dati Diagramma delle Attività (Invio Rilevazioni) Diagramma delle Attività (Aggregazione Dati) Diagramma delle Attività (Notifica Incidente) Diagramma delle Attività (Organizza Assistenza) Diagramma delle Attività (Calcolo Rischio) Diagramma delle Attività (Calcolo Prudenza) Diagramma delle Attività (Condizione Assicurato) Diagramma delle Attività (Ridefinizione Polizza) Partizionamento: Invio Rilevazioni e Notifica Incidente Partizionamento: Invio Rilevazioni e Notifica Incidente Si è deciso di partizionare i componenti Invio Rilevazioni e Notifica Incidente, al fine di ottenere una separazione coerente a livello di timing tra le operazioni di rilevazione, infatti la rilevazione delle grandezze e valutazione dell’accelerazione e l’ invio dati sono effettuate a tempi diversi Il modello scelto permette l’esecuzione coerente a livelli di tempistica di tutte le operazioni possibili della scatola nera sul veicolo Le altre componenti sono già partizionate svolgendo funzioni individuali. Queste funzioni individuali sono già state espresse e partizionate nella fase di definizione dei casi d’uso del sistema Architettura Logica: Footprint Overlap Dimensione Astrazione 100 Valore Astrazione 10 Intraflow 10 Extraflow 70 Delay 10 Complessità 30 Timings 20 Sharings 40 80 Sharing Intraflow 60 40 20 0 Timings Complessit à Extraflow Delay Per una visione complessiva dei componenti si rimana al file .vpp allegato Architettura Concreta: Invio Rilevazioni e Notifica Incidente Architettura Concreta: Aggregazione Dati Architettura Concreta: Organizza Assistenza Architettura Concreta: Calcolo Rischio Architettura Concreta: Calcolo Prudenza Architettura Concreta: Condizione Assicurato Architettura Concreta: Ridefinizione Polizza Architettura di Deployment Pro & Contro PRO - Ogni componente ha la sua singola funzione ben definita in modo da non avere chiamate ridondanti sul database Quando arrivano i dati vengono aggregati direttamente a partire da un set ridotto di dati CONTRO - Accesso ai database esterni per identificazione geografica che rallenta il sistema I dati vengono aggregati e non si ha più traccia della granulosità delle informazioni Infrastruttura Hardware – Protocolli di Comunicazione Da A Canale Scelto Sensore Sistema Di Archiviazione GPRS + HTTP Operatore Assicuratore Sistema Di Elaborazione HTTP Sistema di Elaborazione Database Geografico HTTP Infrastruttura Hardware – Componenti Fisse per soluzione scelta Nome Descrizione Prezzo Unitario Accelerometro sparkfun ADX192 250g 27,00(x1850000) € 49950000 € Modulo Gps gp-20u7 56 canali 14,50(x1850000) € 26825000 € Modulo Gpsr/Gsm Smartsim 340Z Board 22,00(x1850000) € 40700000 € Sim Dati Abbonamento per Gprs/Gsm 6,00(x1850000) €/mensile TOTALE Prezzo Totale 11100000 € 63,50(x1850000) € 117475000 € + 11100000 €/mese La stima è effettuata su un numero di automobili pari al 5% del totale presenti in Italia. Infrastruttura Hardware – Componenti Fisse per soluzione scelta Server Dedicato Sistema di Elaborazione Sistema di Archiviazione Case Carbide Series 300R Midi Tower ATX CPU Intel Core i7 4790K PC1150 8MB Cache SSD 240GB 2,5" SATA3 V300 RAM DDR3 16GB PC 1600 CLS HDD 2TB SATA3 7200rpm PSU Corsair CS Series 80 Plus Bronze 600CX 800W Mainboard ASUS H97M-E Intel H97 mATX TOTALE 1000,00 € (x2) Case Carbide Series 300R Midi Tower ATX CPU Intel Core i5-4590 3.3GHz 6MB 1150 Haswell Refresh con GPU HD4600 84W SSD 120GB 2,5" SATA3 V300 RAM DDR3 8GB PC 1600 CL)(2x4GB) HDD 1TB SATA3 7200rpm PSU Corsair CS Series 80 Plus Bronze 600CX 800W Mainboard ASUS H97M-E Intel H97 mATX TOTALE 629,00€ (x2) Infrastruttura Hardware – Componenti Fisse per soluzione scelta • In questa infrastruttura bisogna aggiungere i costi per un servizio di assistenza 24 ore su 24, 365 gg all’anno. E’ possibile prevedere l’acquisto di un gruppo di continuità nel caso di blackout Costi e Tempi di Realizzazione Costo di Sviluppo • 4 persone • 8 ore al giorno • 5 giorni alla settimana • 25€ lordi all’ora • 5 mesi di lavoro Totale ≈ 100000,00 € Architettura dei Dati Schema Logico Relazionale - BDA Tabelle: Assicurato(Id, Nome, Cognome, CF, Telefono, Cellulare, Indirizzo, idCittà) Città(Id, Nome, Cap) Polizza(Id, Caratteristiche, DataInizio, DataFine, Premio, Targa, Telaio, idAssicurato) Denuncia(Id, Descrizione, Luogo, Colpevolezza, ImportoDanno, ImportoErogato, DataSinistro, idPolizza1, idPolizza2) Vincoli Referenziali: Assicurato.idCittà Città.Id Polizza.IdAssicurato Assicurato.Id Denuncia.idPolizza1 Polizza.Id Denuncia.idPolizza2 Polizza.Id Reverse Engineering - BDA Schema Logico Relazionale - OCB Tabelle: ClienteAssicurato(Id, Nome, Cognome, CodiceFiscale, ContattoTelefonico, DataNascita) Polizza(Id, N_Polizza, Targa, AgenziaAssicurativa, IdCliente) ScatolaNera(Matricola, Descrizione, DataAttivazione, idPolizza) AggregatoAnnuale(Id, Anno, VUrbanoAggregata, TotKmUrbano, VExtraurbanoAggregata, TotKmExtraurbano, VAutostradaAggregata, TotKmAutostrada, TotKmRispettandoLimiti, Prudenza, Rischio, IdSN) Vincoli Referenziali: Polizza.IdCliente ClienteAssicurato.Id AggregatoAnnuale.idSN ScatolaNera.Id ScatolaNera.IdPolizza Polizza.Id Reverse Engineering - OCB Eterogeneità e Corrispondenze Interschema E / CI BDA CI Assicurato.CF ClienteAssicurato. Sinonimia CodiceFiscale Vengono cercati i match fra valori CI Polizza.Id Polizza.N_Polizza Sinonimia Vengono cercati i match fra valori CI Polizza.Targa Polizza.Targa Sinonimia Vengono cercati i match fra valori ClienteAssicurato Viene mantenuta l’anagrafica da Eterogeneità ClienteAssicurato Strutturale integrando i dati mancanti da Assicurato Polizza Vengono mantenute le Eterogeneità informazioni della tabella Strutturale Polizza del database BDA E E Assicurato Polizza OCB Tipo Scelta Modalità per L’Integrazione Si vogliono integrare le basi di dati BDA e OCB, per poter permettere agli utenti una visione unificata di questi dati. Tecnologia di integrazione dati EII(Enterprise Information Integration): Permette di supportare una vista unificata dei dati utilizzando paradigmi di astrazione dei dati, per fornire una singola interfaccia che contenga tutti i dati di un’organizzazione come un unico insieme di strutture (schema globale). Architettura di EII adottata Virtual data integration: Viene creato un nuovo schema logico globale, come integrazione degli schemi delle BD locali. Non si crea nessuna nuova BD fisica, ed in caso di query si interrogano fisicamente le BD locali. Tramite questa architettura l’utente ha la visione di uno schema globale che in realtà non esiste. Modalità per L’Integrazione Viene creato un nuovo schema logico (globale) come integrazione degli schemi delle basi di dati BDA e OCB. SLL BDA SLL OCB SLL BDA/OCB BDA OCB BDA/OCB Schema Concettuale Globale Schema Logico Globale Assicurato(Id, Nome, Cognome, CodiceFiscale, Telefono, Cellulare, Indirizzo, DataNascita, Città, Cap) Polizza(Id, Caratteristiche, DataInizio, DataFine, Premio, Targa, Telaio, AgenziaAssicurativa, idAssicurato) Denuncia(Id, Descrizione, Luogo, Colpevolezza, ImportoDanno, ImportoErogato, DataSinistro, idPolizza1, idPolizza2) ScatolaNera(Matricola, Descrizione, DataAttivazione, idPolizza) AggregatoAnnuale(Id, Anno, VUrbanoAggregata, TotKmUrbano, VExtraurbanoAggregata, TotKmExtraurbano, VAutostradaAggregata, TotKmAutostrada, TotKmRispettandoLimiti, Prudenza, Rischio, IdSN) Mapping GAV Assicurato CREATE VIEW Assicurato AS SELECT CA.Id, OCB.Nome, CA.Cognome, CA.CodiceFiscale, A.Telefono, CA.ContattoTelefonico AS Cellulare, A.Indirizzo, CA.DataNascita, Città.Nome AS Città, Città.Cap FROM OCB.ClienteAssicurato AS CA LEFT JOIN BDA.Assicurato AS A JOIN BDA.Città ON (Città.Id=A.idCittà AND CA.CodiceFiscale=A.CF) Mapping GAV Polizza CREATE VIEW Polizza AS SELECT AP.*, OP.AgenziaAssicurativa FROM BDA.Polizza AS AP RIGHTJOIN OCB.Polizza AS OP ON (AP.Id=OP.N_Polizza AND AP.Targa=OP.Targa) Denuncia CREATE VIEW Denuncia AS SELECT Denuncia.* FROM BDA.Denuncia Mapping GAV ScatolaNera CREATE VIEW ScatolaNera AS SELECT SN.* FROM OCB. ScatolaNera AS SN JOIN OCB.Polizza AS OP ON (SN.IdPolizza=OP.Id) AggregatoAnnuale CREATE VIEW AggregatoAnnuale AS SELECT AggregatoAnnuale.* FROM OCB.AggregatoAnnuale Interrogazione con Unfolding (1) 1. Selezionare per città il livello di prudenza medio del 2013, togliendo dal calcolo i valori limite: CREATE VIEW prudenzaMedia AS SELECT AVG(AA.Prudenza) AS media, A.Città AS citta FROM Assicurato AS A, Polizza AS P, ScatolaNera AS SN, AggregatoaAnnule AS AA WHERE AA.idSN=SN.Matricola AND SN.idPolizza=P.Id AND P.idAssicurato=A.id AND AA.Anno=”2013” AND AA.Prudenza!=NULL AND AA.Prudenza>1 AND AA.Prudenza<10 GROUP BY A.Città Interrogazione con Unfolding (1) CREATE VIEW prudenzaMedia AS SELECT AVG(AA.Prudenza) AS media, Città.Nome AS citta FROM OCB.ClienteAssicurato AS CA LEFT JOIN BDA.Assicurato AS A JOIN BDA.Città JOIN BDA.Polizza AS AP RIGHTJOIN OCB.Polizza AS OP JOIN OCB.ScatolaNera AS SN JOIN OCB.AggregatoAnnuale AS AA ON (Città.Id=A.idCittà AND CA.CodiceFiscale=A.CF AND AP.idAssicurato=A.Id AND AP.Id=OP.N_Polizza AND AP.Targa=OP.Targa AND SN.IdPolizza=OP.Id AND AA.idSN=SN.Matricola) WHERE AA.Anno=”2013” AND AA.Prudenza!=NULL AND AA.Prudenza>1 AND AA.Prudenza<10 GROUP BY Città.Nome Interrogazione con Unfolding (2) 2. Calcola la varianza per citta nel 2013 SELECT AVG(POWER(AA.Prudenza - PrudenzaMedia.media, 2)) AS Varianza, PrudenzaMedia.citta FROM Assicurato AS A, Polizza AS P, ScatolaNera AS SN, AggregatoaAnnule AS AA, PrudenzaMedia WHERE AA.idSN=SN.Matricola AND SN.idPolizza=P.Id AND P.idAssicurato=A.id AND AA.Anno=”2013” AND AA.Prudenza!=NULL AND PrudenzaMedia.citta=A.Città GROUP BY A.Città Interrogazione con Unfolding (2) SELECT AVG(POWER(AA.Prudenza - PrudenzaMedia.media, 2)) AS Varianza, PrudenzaMedia.citta FROM OCB.ClienteAssicurato AS CA LEFT JOIN BDA.Assicurato AS A JOIN BDA.Città JOIN BDA.Polizza AS AP RIGHTJOIN OCB.Polizza AS OP JOIN OCB.ScatolaNera AS SN JOIN OCB.AggregatoAnnuale AS AA JOIN PrudenzaMedia ON (Città.Id=A.idCittà AND CA.CodiceFiscale=A.CF AND AP.idAssicurato=A.Id AND AP.Id=OP.N_Polizza AND AP.Targa=OP.Targa AND SN.IdPolizza=OP.Id AND AA.idSN=SN.Matricola AND PrudenzaMedia.citta=Città.Nome) WHERE AA.Anno=”2013” AND AA.prudenza!=NULL GROUP BY Città.Nome Modello di Rappresentazione non Relazionele Come modello alternativo al relazionale, abbiamo scelto il modello Column based. Questo modello per ogni riga ha bisogno di una chiave primaria, che per noi corrisponde al numero della polizza. Le prime n colonne corrispondono agli attributi statici sempre presenti relativi alla scatola nera, alla polizza e all’utente assicurazione. Una caratteristica del modello a colonne risiede nella possibilità di avere n colonne a piacere. Questa caratteristica si mappa bene all’utilizzo nella classe StatisticaAnnuale, poiché per ogni anno si avrà un numero k di valori corrispondenti al numero degli attributi in StatisticaAnnuale. Quindi per ogni anno passato si aggiungeranno k colonne. Questo permette di avere ottime performance poiché evita le operazioni di join sostituendole, di fatto, con una ricerca sequenziale all’interno della stessa riga.