Está en la página 1de 93

Análisis de accidentalidad vehicular usando

técnicas de minerı́a de datos

Diana Hasbleidy Calderón Dı́az


20182099027
Diego Felipe Sora Vargas
20182099047

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS


FACULTAD DE INGENIERÍA
ESPECIALIZACIÓN DE INGENIERÍA DE SOFTWARE
MAYO 2019
Análisis de accidentalidad vehicular usando
técnicas de minerı́a de datos

Diana Hasbleidy Calderón Dı́az


20182099027
Diego Felipe Sora Vargas
20182099047

Trabajo de grado para optar el tı́tulo de Especialista en Ingenierı́a de


Software

Director:
Alejandro Paolo Daza

Revisor:
Jhon Freddy Parra

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS


FACULTAD DE INGENIERÍA
ESPECIALIZACIÓN DE INGENIERÍA DE SOFTWARE
MAYO 2019
Índice general

INTRODUCCIÓN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

I CONTEXTUALIZACIÓN DE LA INVESTIGACIÓN 9
1. DESCRIPCIÓN DE LA INVESTIGACIÓN 11
1.1. Planteamiento del problema . . . . . . . . . . . . . . . . . . . . . . . 11
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1. Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.2. Objetivos especı́ficos . . . . . . . . . . . . . . . . . . . . . . . 12
1.3. Justificación de la investigación . . . . . . . . . . . . . . . . . . . . . 12
1.3.1. Justificación metodológica . . . . . . . . . . . . . . . . . . . . 12
1.4. Hipótesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5. Marco referencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.1. Marco Teórico . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.2. Marco Conceptual . . . . . . . . . . . . . . . . . . . . . . . . 25
1.5.3. Marco Espacial . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.6. Metodologı́a de la investigación . . . . . . . . . . . . . . . . . . . . . 28
1.7. Organización del trabajo de grado . . . . . . . . . . . . . . . . . . . . 29
1.8. Estudios de sistemas previos . . . . . . . . . . . . . . . . . . . . . . . 30

II DESARROLLO DE LA INVESTIGACIÓN 31
2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS 33
2.1. Tecnologı́as de apoyo . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2. Fase I. Comprensión del negocio . . . . . . . . . . . . . . . . . . . . . 34
2.3. Fase II. Estudio y comprensión de los datos . . . . . . . . . . . . . . 36
2.4. Fase III. Preparación de los datos . . . . . . . . . . . . . . . . . . . . 43

3
4 ÍNDICE GENERAL

3. DISEÑO Y CONSTRUCCIÓN DEL PROTOTIPO 57


3.1. Fase IV. Modelado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.2. Fase V. Evaluación (obtención de resultados) . . . . . . . . . . . . . . 66
3.3. Fase VI. Validación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

III CIERRE DE LA INVESTIGACIÓN 69


4. RESULTADOS Y DISCUSIÓN 71

5. CONCLUSIONES 75
5.1. Verificación, contraste y evaluación de los objetivos . . . . . . . . . . 75
5.2. Sı́ntesis del modelo propuesto . . . . . . . . . . . . . . . . . . . . . . 76
5.3. Aportes originales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.4. Trabajos o Publicaciones derivadas . . . . . . . . . . . . . . . . . . . 76

6. PROSPECTIVA DEL TRABAJO DE GRADO 77


6.1. Lı́neas de investigación futuras . . . . . . . . . . . . . . . . . . . . . . 77
6.2. Trabajos de Investigación futuros . . . . . . . . . . . . . . . . . . . . 77

BIBLIOGRAFÍA 79

REFERENCIAS WEB 83

A. Módulos Python 85
Índice de figuras

1.1. Matriz de confusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18


1.2. Proceso KDD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3. Modelo CRISP-DM. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4. Modelo SEMMA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.1. Accidentes registrados según la gravedad. . . . . . . . . . . . . . . . . 36


2.2. Registros de accidentes de tránsito en Bogotá (2015-2017). . . . . . . 37
2.3. Hallazgos en dataset de accidentes de tránsito en Bogotá 2015. . . . . 39
2.4. Accidentes Vs hora de ocurrencia. . . . . . . . . . . . . . . . . . . . . 40
2.5. Accidentes Vs hora de ocurrencia (Distribución por gravedad). . . . . 41
2.6. Distribución de accidentes por cuartiles. . . . . . . . . . . . . . . . . 41
2.7. Densidad sobre la distribución de accidentalidad. . . . . . . . . . . . 42
2.8. Dataset de accidentes de tránsito en Bogotá 2015 actualizado. . . . . 43
2.9. Job ETL para el tratamiento de datos. . . . . . . . . . . . . . . . . . 44
2.10. Transformación ‘AccidentesXMLTransformation’. . . . . . . . . . . . 45
2.11. Filtro por caracterı́sticas. . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.12. Transformación ‘CSVConsolidado’. . . . . . . . . . . . . . . . . . . . 46
2.13. Archivos exportados por las transformaciones. . . . . . . . . . . . . . 47
2.14. Transformación ‘CargueBD’. . . . . . . . . . . . . . . . . . . . . . . . 47
2.15. Variables seleccionadas para el modelo. . . . . . . . . . . . . . . . . . 48
2.16. Registros cargados en MongoDB. . . . . . . . . . . . . . . . . . . . . 48
2.17. Registros con nuevas variables. . . . . . . . . . . . . . . . . . . . . . . 51
2.18. Distribución de accidentes entre semana. . . . . . . . . . . . . . . . . 52
2.19. Distribución de accidentes con muertos entre semana. . . . . . . . . . 53
2.20. Distribución de accidentes fin de semana. . . . . . . . . . . . . . . . . 53
2.21. Distribución de accidentes con muertos fin de semana. . . . . . . . . . 54
2.22. Distribución de accidentes semana completa. . . . . . . . . . . . . . . 54
2.23. Distribución accidentes tipo choque. . . . . . . . . . . . . . . . . . . . 55

5
6 ÍNDICE DE FIGURAS

2.24. Distribución accidentes tipo volcamiento. . . . . . . . . . . . . . . . . 56

3.1. Variables del dataset construido. . . . . . . . . . . . . . . . . . . . . . 57


3.2. Dataset normalizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.3. Precisión Vs Profundidad. . . . . . . . . . . . . . . . . . . . . . . . . 62
3.4. Registros eliminados por la función dropna . . . . . . . . . . . . . . . 64
3.5. Árbol de Decisión generado. . . . . . . . . . . . . . . . . . . . . . . . 66
3.6. Formulario para el uso del modelo predictivo. . . . . . . . . . . . . . 67
3.7. Matriz de Confusión. . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.8. Matriz de Confusión Normalizada. . . . . . . . . . . . . . . . . . . . . 68

4.1. Nodo raı́z del árbol construido. . . . . . . . . . . . . . . . . . . . . . 72


4.2. Accidentes Vs Zona de la vı́a. . . . . . . . . . . . . . . . . . . . . . . 73
4.3. Accidentes Vs Estado del tiempo. . . . . . . . . . . . . . . . . . . . . 74
INTRODUCCIÓN

De acuerdo al Informe sobre la Situación Mundial de la Seguridad Vial (2013)


realizado por la Organización Mundial de la Salud (OMS), los accidentes de tránsito se
han convertido en una de las principales causas de muertes violentas de la población,
y a su vez convirtiéndose en un problema de salud pública [1]. Los accidentes de
tránsito se han catalogado como un problema social por el daño que produce en las
personas, las familias y la comunidad; razón por la cual los investigadores, instituciones
académicas y estatales anudan fuerzas en los estudios relacionados con la predicción
de accidentes de tránsito y ası́ estabilizar y reducir las cifras de accidentalidad.
Los avances que ha tenido el análisis de datos y los sistemas de minerı́a de datos
han permitido la explotación de la información generada por las diferentes entidades
públicas y privadas, para permitir la toma de decisiones a niveles administrativos y
gerenciales. Además, han permitido el manejo de grandes volúmenes de información
disponibles en las bases de datos y reduce el tiempo de análisis e interpretación de
los datos.
Dentro de las técnicas de minerı́a de datos para el análisis de información rela-
cionada a temas de accidentes vehiculares, se encuentran las redes neuronales, redes
bayesianas, árboles de decisión, entre otros. Esta propuesta de investigación pretende
estudiar el comportamiento de los siniestros viales en función de las variables externas
presentes en los mismos, el estudio se realizará sobre la localidad de Kennedy - Bogotá,
utilizando árboles de decisión, dado que estos permiten tomar valores de entrada
discretos o continuos, que, para el caso, las variables del conjunto de datos para
la investigación representan el tipo de accidente, gravedad del accidente, tipo de
diseño de la vı́a, clima, etc. La información base para el estudio se obtendrá del
portal de datos públicos colombiano (https://www.datos.gov.co/ ) sobre los accidentes
vehiculares registrados en la ciudad de Bogotá entre los años de 2015 y 2017.

7
8
Parte I

CONTEXTUALIZACIÓN DE LA
INVESTIGACIÓN

9
Capı́tulo 1

DESCRIPCIÓN DE LA
INVESTIGACIÓN

1.1. Planteamiento del problema


La cantidad de accidentes vehiculares presentados en el paı́s cada vez va más en
aumento, nada más en los primeros tres meses del año 2017 han muerto alrededor
de 1547 personas en accidentes de tránsito según Medicina Legal. De acuerdo a un
estudio sobre accidentalidad en Bogotá realizado por [7], para el periodo entre enero
de 2008 a mayo de 2009, las localidades que encabezan el listado donde se presentan
el mayor número de accidentes son la localidad de Usaquén y la localidad de Kennedy
con un total de 5575 y 5538 accidentes de transito respectivamente.
Para el año 2016, la Secretaria Distrital de Movilidad realiza un informe titulado
Movilidad en cifras 2016, muestra que para ese año el numero de accidentes en Bogotá
aumentaron en un 10.4 % respecto al año 2015, con un registro total de accidentes
de 34.988 dentro de los cuales 566 fueron reportados como siniestros de tránsito con
fallecidos [8].
Algunas de las causas que provocan estos accidentes son la imprudencia al conducir,
realizar giros prohibidos, adelantar por la derecha, no mantener una distancia prudente
entre vehı́culos, desobedecer las señales de tránsito, entre otras; de esta manera los
accidentes de tránsito se han convertido en la octava causa mundial de muerte y
pueden costar hasta el 3 % del PIB de un paı́s [9].
Lo anterior nos motivo a crear una herramienta que nos permita analizar dicho
comportamiento, podrá servir de apoyo para la toma de decisiones relacionadas con
la Seguridad vial, que puedan ayudar a disminuir dichos sucesos como lo pueden ser
planes de acción, puntos de atención o mejoramiento de la misma infraestructura vial

11
12 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

sobre los puntos más crı́ticos.

1.2. Objetivos
1.2.1. Objetivo general
Validar el modelo árboles de decisión como técnica de minerı́a de datos para el
análisis de la incidencia de los factores externos en la ocurrencia de siniestros viales.

1.2.2. Objetivos especı́ficos


Construir una base de datos a partir de los datos públicos colombianos, con el
propósito de ser la fuente de datos base para el estudio de investigación.
Investigar sobre las principales técnicas de minerı́a de datos y sus caracterı́sticas
con la finalidad de aplicar una de ellas al tema de investigación.
Implementar la técnica de minerı́a de datos elegida para interpretar la incidencia
de las distintas variables externas involucradas en los accidentes de tránsito,
haciendo uso de recursos de software existentes.

1.3. Justificación de la investigación


1.3.1. Justificación metodológica
En la actualidad se han desarrollado diversas investigaciones en la predicción
de accidentes de tránsito utilizando algoritmos de inteligencia artificial como redes
neuronales, arboles de decisión, métodos bayesianos entre otros, en diferentes ciudades
del mundo, y América Latina. Dentro de la literatura consultada, son escasos los
trabajos de investigación realizados para la ciudad de Bogotá, relacionados al estudio
de las variables presentes en accidentes de tránsito.
De esta manera, aprovechando las ventajas que ofrece las diferentes técnicas
de minerı́a de datos, entre estos los árboles de decisión, para predecir patrones y
resolver problemas de distribución no lineal haciendo uso de variables con valores
discretos o continuos, se pretende construir un prototipo de software que permita el
análisis de causas de los accidentes de tránsito para grandes volúmenes de información,
permitiendo apoyar la toma de decisiones frente a los accidentes de tránsito, como
pueden ser implementando planes de prevención de accidentes vehiculares o rápidas
acciones para el tratamiento oportuno de las vı́ctimas de los siniestros.
1.4. HIPÓTESIS 13

1.4. Hipótesis
Construir una herramienta que analice el comportamiento de las variables externas
presentes en los siniestros viales, ayudará a sustentar la toma de decisiones en cuanto
a planes de acción para disminuir la cifra de vı́ctimas fatales en accidentes de tránsito
presentados en la ciudad.
14 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

1.5. Marco referencial


1.5.1. Marco Teórico
De acuerdo con la literatura consultada, relacionada con el tema de ocurrencia
de accidentes de tránsito se pueden dividir en tres grandes temas. En primer lugar,
estudios asociados a la predicción de ocurrencia de accidentes, enfocados en la
predicción de tasas de accidentes o la estimación de algunas medidas probabilı́sticas
para cuantificar el riesgo de ocurrencia de accidentes viales. En segundo lugar, los
estudios referidos a predecir posibles hotspots donde ocurran accidentes viales, y
finalmente los estudios de severidad que estiman probabilidades de accidentes de
distinto tipo, donde cada tipo se refiere a un nivel de severidad según lesión previamente
definido, sin considerar la posibilidad de que un occidente ocurra.

Accidentes de tránsito en Colombia y Bogotá D.C


De acuerdo con el Concejo Colombiano de Seguridad CCS, las estadı́sticas repor-
tadas por la Policı́a Nacional, el año 2013 presento un alto número de accidentes, se
presentó 33621 accidentes con un aumento de 3.34 % con respecto al año anterior.
Para el año 2014, disminuyeron un 2.32 % el número de accidentes viales en el paı́s.
Reflejado en las estadı́sticas de los últimos cuatro años, donde en promedio
mueren por año 5.610 personas, el Instituto Nacional de Medicina Legal calificó la
accidentalidad vial como la segunda causa de muerte violenta en el paı́s.
En los años 2013 y 2014 se reportaron el mayor número de fatalidades con 5.964
y 5.632 respectivamente, siendo 2013 el año con mayor reporte de accidentes viales,
con un aumento del 7 % respecto al año anterior.
En el 2014, 11,8 de cada 100.000 habitantes sufrieron un accidente vial. El año
2012 y 2013 presentan picos ascendentes, ya que sus tasas fueron de 11,9 y 12,7
respectivamente [10]
Para la ciudad de Bogotá, las cifras parciales de enero a septiembre de 2018
reportadas por la Agencia Nacional de Seguridad Vial, han ocurrido 10242 siniestros
donde las causas principales son no mantener distancia de seguridad, desobedecer
señales o normas de tránsito, adelantar cerrando, entre otras.

Minerı́a de datos
La minerı́a de datos consiste en la extracción de información sensible que reside
de manera implı́cita en los datos. Dicha información es previamente desconocida y
podrá resultar útil para algún proceso. En otras palabras, la minerı́a de datos prepara,
1.5. MARCO REFERENCIAL 15

sondea y explora los datos para sacar la información oculta de ellos, de modo que un
pequeño hallazgo, una pequeña relación que se descubre, puede ser un hecho de gran
impacto en las ventas de una compañı́a. [2]
Otros términos relacionados pueden entenderse de manera similar al de la minerı́a
de datos son: minerı́a de conocimiento de datos, extracción de conocimiento, análisis
de datos y patrones, arqueologı́a de datos y dragado de datos. [3]
Entonces, la minerı́a de datos consiste en un conjunto de metodologı́as estadı́sticas
y computacionales que, junto a un enfoque desde las ciencias de la conducta, permite
el análisis de datos y la elaboración de modelos matemáticos descriptivos y predictivos
de la conducta del consumidor. [2]
La gran aplicación de la minerı́a de datos hace que sea posible incorporar técnicas
de otros campos de estudio, como por ejemplo la estadı́stica, sistemas de bases de
datos, machine learning, reconocimiento de patrones, entre otros.
Un proceso tı́pico de minerı́a de datos consta de los siguientes pasos generales:
1. Selección del conjunto de datos, tanto en lo que se refiere a las variables objetivo
(aquellas que se quiere predecir, calcular o inferir), como a las variables inde-
pendientes (las que sirven para hacer el cálculo o proceso), como posiblemente
al muestreo de los registros disponibles.
2. Análisis de las propiedades de los datos, en especial los histogramas, diagramas
de dispersión, presencia de valores atı́picos y ausencia de datos (valores nulos).
3. Transformación del conjunto de datos de entrada, se realizará de diversas formas
en función del análisis previo, con el objetivo de prepararlo para aplicar la
técnica de minerı́a de datos que mejor se adapte a los datos y al problema, a
este paso también se le conoce como pre-procesamiento de los datos.
4. Seleccionar y aplicar la técnica de minerı́a de datos, se construye el modelo
predictivo, de clasificación o segmentación.
5. Extracción de conocimiento, mediante una técnica de minerı́a de datos, se
obtiene un modelo de conocimiento, que representa patrones de comportamiento
observados en los valores de las variables del problema o relaciones de asociación
entre dichas variables. También pueden usarse varias técnicas a la vez para
generar distintos modelos, aunque generalmente cada técnica obliga a un pre
procesado diferente de los datos.
6. Interpretación y evaluación de datos, una vez obtenido el modelo, se debe
proceder a su validación comprobando que las conclusiones que arroja son
válidas y suficientemente satisfactorias [11].
16 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

Técnicas de minerı́a de datos


Dentro de las técnicas de minerı́a de datos se encuentran las técnicas predictivas
como Regresión, Métodos Bayesianos, y de clasificación como el análisis de discrimi-
nación lineal, arboles de decisión y redes neuronales. A continuación se describirá
algunos de ellos.

Regresión logı́stica
La regresión logı́stica es un procedimiento cuantitativo que puede usarse como
método descriptivo, donde la variable dependiente tomas valores en un conjunto finito.
Para construir un modelo de regresión logı́stica se requiere de [12]:
Un conjunto de variables independientes o predictoras y una variable respuesta
dicotómica.
Los parámetros del modelo se calculan usando una estimación de máxima
verosimilitud.
No incluir variables innecesarias al modelo.
Ninguna variable relevante debe ser excluida.
La colinealidad es un problema como ocurre en la regresión lineal múltiple.
El modelo de regresión logı́stica puede describirse como:
p
log = b0 + b1 x1 + ... + bn xn (1.1)
1−p
Donde,
p es la probabilidad (riesgo) de que ocurra el evento de interés,
x, las variables independientes
b, los coeficientes asociados a cada variable.
La regresión logı́stica puede usarse para fines explicativos, donde se busca explicar la
relación de una variable con otras; o para fines predictivos, que es cuando se estima
el comportamiento de una variable en función de las otras variables que influencian
su comportamiento.

Análisis de Discriminación lineal

El análisis discriminante es una técnica de clasificación cuyo objetivo es obtener


una función capaz de clasificar a un nuevo individuo a partir del conocimiento de los
valores de ciertas variables discriminadoras, dentro de grupos previamente conocidos.
1.5. MARCO REFERENCIAL 17

El análisis de discriminación lineal corresponde a un análisis de regresión donde


la variable dependiente es una variable categórica y tiene como categorı́as la etiqueta
de cada uno de los grupos, y las variables independientes son continuas y determinan
a que grupos pertenecen los objetos [13].

Una vez identificadas las funciones discriminantes a partir de las variables expli-
cativas, similares a las ecuaciones de regresión lineal múltiple, se puede realizar la
clasificación en dos grupos o clasificación en mas de dos grupos (análisis discriminante
múltiple). El modelo de análisis discriminante múltiple puede describirse como:
Cada una de las funciones discriminantes Di se obtiene como función lineal de las k
variables explicativas.

Di = ui 1X1 + ui 2X2 + ... + ui kXk i = 1, ..., G − 1 (1.2)

Donde,
Los G − 1 ejes vienen definidos respectivamente por los vectores u1 , u2 , ..., uG−1

     
u11 u21 uG−1,1
 u12   u22   uG−1,2 
u1 =   , u2 =   ,..., uG−1 = 
     
.. .. .. 
 .   .   . 
u1k u2k uG−1,k

El número máximo de ejes discriminantes (G − 1, k) (G = número de categorı́as). Se


obtiene G − 1 ejes discriminantes si el número de variables explicativas es mayor o
igual que G − 1.

Árboles de decisión
Los árboles de decisión son utilizados para representar y categorizar una serie de
condiciones que ocurre de forma sucesiva para la resolución de problemas. Se pueden
definir como un mapa de posibles resultados de una serie de decisiones relacionadas,
que comienza con un único nodo y luego se ramifica en resultados posibles. Cada
uno de esos resultados posibles crea nodos adicionales que se ramifican en otras
posibilidades.
Existe tres diferentes nodos: nodos de probabilidad, nodos de decisión y nodos
terminales. Los nodos de probabilidad muestran las probabilidades de ciertos resul-
tados. Un nodo de decisión muestra una decisión que se tomará y el nodo terminal
muestra el resultado definitivo de una ruta de decisión [14].
18 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

Los elementos que componen la estructura de un árbol de decisión y adicionalmente


los pasos para la elaboración de este:
Existen 4 tipos de nodos en un árbol de decisión.

1. Nodo raı́z: inicio del árbol de decisión, se plantea la decisión entre alternativas
con resultados desconocidos.

2. Nodos de decisión: caminos de acción que pueden ser elegidos por el tomador
de decisión después de haber analizado los resultados de decisiones previas.

3. Nodos de eventos: representan los posibles resultados en una decisión. Es


necesario determinar los posibles resultados y la probabilidad de ocurrencia de
cada uno basados en la información disponible al momento de plantear el árbol
de decisión. Puede ocurrir que después de nodos de eventos continúe el proceso
de selección entre alternativas probables.

4. Nodos finales: resultados finales generados por la serie de decisiones y resultados


previos.

Para determinar que tan correcta es la predicción o clasificación realizada por


modelos como los arboles de decisión, se emplean métricas en el campo de la búsqueda
y análisis de información para determinar la eficacia y si es correcto el resultado
obtenido, como la exactitud y precisión, en donde la primera representa cuantos casos
sobre el total han sido clasificados correctamente en la clase a la que pertenecen,
y la segunda mide cuantos casos que han sido clasificados en una clase pertenecen
realmente a esa clase [4].
Una forma de visualizar cuantos casos se clasifican correctamente es a través de
la matriz de confusión, donde las columnas representa los datos predichos y las filas
representa la clase a la que pertenece los datos.

Figura 1.1: Matriz de confusión


Fuente: [15]

De acuerdo a la matriz de confusión tenemos que:


1.5. MARCO REFERENCIAL 19

a es el número de predicciones correctas de clase negativa (negativos reales)

b es el número de predicciones incorrectas de clase positiva (falsos positivos)

c es el número de predicciones incorrectas de clase negativa (falsos negativos)

d es el número de predicciones correctas de clase positiva (positivos reales)

De acuerdo a los valores de la matriz de confusión se define las métricas de


exactitud (P) y precisión (AC). La Precisión o “Accuracy” (AC) se refiere a la
dispersión del conjunto de valores obtenidos a partir de mediciones repetidas de una
magnitud. Cuanto menor es la dispersión mayor la precisión. Se representa por la
proporción entre el número de predicciones correctas (tanto positivas como negativas)
y el total de predicciones [15], y se calcula mediante la ecuación:

a+d
AC =
a+b+c+d

La Exactitud o, en inglés, “Precision” se refiere a lo cerca que está el resultado


de una medición del valor verdadero. En términos estadı́sticos, la exactitud está
relacionada con el sesgo de una estimación. También se conoce como Verdadero
Positivo (o “True positive rate”). Se representa por la proporción entre los positivos
reales predichos por el algoritmo y todos los casos positivos [15], y se calcula con la
siguiente ecuación:

d
P =
b+d

Para la construcción del árbol de decisión se utilizó el algoritmo de clasificación


y regresión de arboles CART, donde solo necesita datos de entrada, se ajustan
parámetros y devuelve un árbol como resultado; este algoritmo se decide cual atributo
es el que mejor divide los datos, ignoran los valores vacı́os y usan reglas de parada
para terminar la ejecución [4]:

Si todos los casos en un nodo tiene un valor idéntico, el nodo no se dividirá.

Si se llega a la profundidad máxima del árbol o el tamaño del nodo a dividir es


el mı́nimo entonces no se sigue dividiendo el nodo y se deja como hoja.
20 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

El algoritmo emplea unidades de medida de la entropı́a o ganancia de la información


para determinar que atributo es mejor para dividir la información en cada nodo.
La entropı́a se utiliza para medir la cantidad de información útil y se calcula como:
X
H(S) = − p(x) ∗ log2 p(x)
xX

Donde,

H(S) es la entropı́a del conjunto de datos S.


X es el conjunto de clases en S.
p(x) la proporción de elementos de la clase x sobre el cardinal de S.

La ganancia de información determina cuanta información se gana escogiendo el


atributo como candidato a ser el nodo del árbol, siendo la diferencia de la entropı́a
calculada anterior y la entropı́a resultante de escoger un atributo concreto por tanto
un valor grande de IG implica que la entropı́a habiendo escogido un atributo a que
nos indica que el conjunto de datos está mejor clasificado con el atributo a [4], y se
calcula como:
X
IG(A, S) = H(S) − p(t) ∗ H(t)
tT

Donde,
IG(A,S) es la Ganancia de la información del conjunto S dividiéndolo mediante el
atributo A.
H(S) es la entropı́a del conjunto de datos S.
T son los subconjuntos de clases de S dividido por el atributo A.
p(t) la proporción de elementos de la clase t sobre el cardinal de S.
H(t) es la entropı́a del subconjunto t.

Metodologı́as usadas en minerı́a de datos


En esta sección se describirán las caracterı́sticas de los principales métodos exis-
tentes para trabajar en los proyectos donde la minerı́a de datos se ve involucrada,
los cuales son, el KDD (Knowledge Discovery in Databases) , CRISP-DM (Cross
Industry Standard Process for Data Mining) y SEMMA (Sample, Explore, Modify,
Model, and Assess).
1.5. MARCO REFERENCIAL 21

KDD (Knowledge Discovery in Databases)

El KDD fue presentado por Fayyad en 1996, donde propone 5 fases secuenciales,
las cuales deben llevarse a cabo para poder descubrir conocimiento sobre un conjunto
de datos de estudio.
Estas fases son las siguientes, selección, preprocesamiento, transformación, minerı́a
de datos y evaluación e implantación.

Figura 1.2: Proceso KDD.


Fuente: [16]

A continuación, se describirán cada una de estas fases [5]:

Selección: Esta etapa consiste en crear un conjunto de datos de destino, o


centrarse en un subconjunto de variables o muestras de datos, en el que se va a
realizar el descubrimiento.
Preprocesamiento: Esta etapa consiste en la limpieza y preprocesamiento de los
datos de destino para obtener datos consistentes.
Transformación: Esta etapa consiste en la transformación de los datos utilizando
métodos de reducción de la dimensionalidad o transformaciones sobre los mismos.
Minerı́a de datos: Esta etapa consiste en la búsqueda de patrones de interés en
22 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

una forma representacional particular, dependiendo del objetivo de la gestión de datos


(generalmente, predicción).
Interpretación/Evaluación: Esta etapa consiste en la interpretación y evaluación
de los patrones minados.
CRISP-DM (Cross Industry Standard Process for Data Mining)
Esta metodologı́a está compuesta de 6 fases, las cuales se encuentran anidadas entre
ellas manteniendo un orden lógico y cı́clico que permite la evolución constante al
proceso de descubrimiento de información.
La secuencia de las fases no es rı́gida: se permite movimiento hacia adelante y
hacia atrás entre diferentes fases. El resultado de cada fase determina qué fase, o
qué tarea particular de una fase, hay que hacer después. Las flechas indican las
dependencias más importantes y frecuentes.
El proyecto no se termina una vez que la solución se despliega. La información
descubierta durante el proceso y la solución desplegada pueden producir nuevas
iteraciones del modelo [17].

Figura 1.3: Modelo CRISP-DM.


Fuente: [18]

A continuación se describen brevemente cada una de las fases [17].

Fase I. Comprensión del negocio: Esta fase inicial se enfoca en la compren-


sión de los objetivos de proyecto. Después se convierte este conocimiento de los datos
1.5. MARCO REFERENCIAL 23

en la definición de un problema de minerı́a de datos y en un plan preliminar diseñado


para alcanzar los objetivos.
Fase II. Estudio y comprensión de los datos: La fase de entendimiento
de datos comienza con la colección de datos inicial y continúa con las actividades que
permiten familiarizarse con los datos, identificar los problemas de calidad, descubrir
conocimiento preliminar sobre los datos, y/o descubrir subconjuntos interesantes para
formar hipótesis en cuanto a la información oculta.
Fase III. Preparación de los datos: La fase de preparación de datos cubre
todas las actividades necesarias para construir el conjunto final de datos (los datos
que se utilizarán en las herramientas de modelado) a partir de los datos en bruto
iniciales. Las tareas incluyen la selección de tablas, registros y atributos, ası́ como la
transformación y la limpieza de datos para las herramientas que modelan.
Fase IV. Modelado: En esta fase, se seleccionan y aplican las técnicas de
modelado que sean pertinentes al problema (cuantas más mejor), y se calibran sus
parámetros a valores óptimos. Tı́picamente hay varias técnicas para el mismo tipo
de problema de minerı́a de datos. Algunas técnicas tienen requerimientos especı́ficos
sobre la forma de los datos. Por lo tanto, casi siempre en cualquier proyecto se acaba
volviendo a la fase de preparación de datos.
Fase V. Evaluación (obtención de resultados): En esta etapa en el pro-
yecto, se han construido uno o varios modelos que parecen alcanzar calidad suficiente
desde la una perspectiva de análisis de datos.
Antes de proceder al despliegue final del modelo, es importante evaluarlo a fondo y
revisar los pasos ejecutados para crearlo, comparar el modelo obtenido con los objeti-
vos de negocio. Un objetivo clave es determinar si hay alguna cuestión importante de
negocio que no haya sido considerada suficientemente. Al final de esta fase, se deberı́a
obtener una decisión sobre la aplicación de los resultados del proceso de análisis de
datos.
Fase VI. Despliegue (puesta en producción): Generalmente, la creación
del modelo no es el final del proyecto. Incluso si el objetivo del modelo es de aumentar
el conocimiento de los datos, el conocimiento obtenido tendrá que organizarse y
presentarse para que el cliente pueda usarlo. Dependiendo de los requisitos, la fase
de desarrollo puede ser tan simple como la generación de un informe o tan compleja
como la realización periódica y quizás automatizada de un proceso de análisis de
datos en la organización.

SEMMA (Sample, Explore, Modify, Model, and Assess)

Esta metodologı́a es propuesta por compañı́a SAS Institute Inc, la cual está
24 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

compuesta por 5 fases, que son: Sample, Explore, Modify, Model, Assess (Muestreo,
Exploración, Modificación, Modelado y Evaluación).

Figura 1.4: Modelo SEMMA.


Fuente: Elaboración propia.

A continuación, se describen estas fases [5]:


Muestreo: Esta etapa consiste en muestrear los datos extrayendo una porción de
un gran conjunto de datos lo suficientemente grande como para contener la información
significativa, pero lo suficientemente pequeño como para manipularla rápidamente.
Exploración: Esta etapa consiste en la exploración de los datos buscando ten-
dencias y anomalı́as imprevistas con el fin de obtener comprensión e ideas.
Modificación: Esta etapa consiste en la modificación de los datos creando,
seleccionando y transformando las variables para enfocar el proceso de selección del
modelo.
Modelado: Esta etapa consiste en modelar los datos permitiendo que el software
busque automáticamente una combinación de datos que prediga de manera confiable
un resultado deseado.
Evaluación: Esta etapa consiste en evaluar los datos, evaluando la utilidad y
confiabilidad de los hallazgos del proceso de gestión de la movilidad y estimar qué
tan bien se desempeña.
1.5. MARCO REFERENCIAL 25

1.5.2. Marco Conceptual


Análisis de datos: el término corresponde al uso de métodos estadı́sticos para la
extracción de información de un conjunto de datos [6].
Análisis descriptivo: Este análisis es usado cuando la organización tiene un gran
conjunto de datos sobre eventos pasados o sucesos históricos. Para que estos datos
sean útiles, deben simplificarse y resumirse con el fin de que sean entendibles para la
audiencia a la que se quieren comunicar [19].
Análisis predictivo: El análisis predictivo es, la aplicación de técnicas y modelos
matemáticos y estadı́sticos a los datos históricos que posee la organización [19].
Análisis prescriptivo: Este análisis recomienda rutas de acción que puede seguir
una empresa. Además, cuantifica el efecto de cada una de estas acciones para ayudar
a tomar las mejores decisiones en pro de buscar los objetivos de negocio de la
organización, como por ejemplo incursionar en un nuevo mercado, ubicar un producto
en áreas especı́ficas de un almacén con mejores probabilidades de venta o mitigar un
riesgo que pueda enfrentar [19].
Big data: Big data es un término que describe el gran volumen de datos –
estructurados y no estructurados – que inundan una empresa todos los dı́as. Pero no
es la cantidad de datos lo importante. Lo que importa es lo que las organizaciones
hacen con los datos [20].
Inteligencia artificial: La inteligencia artificial es la ciencia de construir máquinas
para que hagan cosas que, si las hicieran los humanos, requerirı́an inteligencia ”Marvin
Minsky”.
Inteligencia computacional (IC): La Inteligencia Computacional (IC) es la teorı́a,
diseño, aplicación y desarrollo de paradigmas computacionales motivados biológica
y lingüı́sticamente. Tradicionalmente, los tres pilares principales de IC han sido las
redes neuronales, los sistemas difusos y la computación evolutiva [21].
Minerı́a de datos: es el proceso de detectar la información procesable de los
conjuntos grandes de datos, utiliza el análisis estadı́stico y computacional para deducir
los patrones y tendencias que existen en los datos, elaborar modelos matemáticos
descriptivos y predictivos [22].
Técnicas de minerı́a de datos: provienen de la Inteligencia artificial y de la
estadı́stica, son algoritmos sofisticados que se aplican sobre un conjunto de datos para
obtener resultados. Dentro de las técnicas más representativas son Redes neuronales,
Regresión lineal, Árboles de decisión, Modelos estadı́sticos, Clustering o agrupamiento,
Análisis de varianza, Prueba Chi- cuadrado, Análisis discriminante, Series de tiempo,
Algoritmos genéticos, inteligencia artificial, sistemas expertos y sistemas inteligentes
[23].
26 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

1.5.3. Marco Espacial


La ciudad de Bogotá cuenta con una división administrativa de 20 localidades, den-
tro de ellas se encuentra la Localidad de Kennedy, objeto de la presente investigación.
A continuación, se da una descripción general de la localidad.

Descripción general de la Localidad de Kennedy


La localidad de Kennedy es la localidad número de 8 de la ciudad, y según el
Departamento Administrativo Nacional de Estadı́stica (DANE) tiene una proyección
para el 2018 de la población de 1.230.539 habitantes. De acuerdo a datos publicado
por el IDIGER [24], la localidad de Kennedy tiene una superficie de 3.859 hectáreas.
Se encuentra ubicada al suroccidental de la ciudad de Bogotá, delimitada por el norte
con la localidad de Fontibón, por el eje del Rı́o Fucha y el municipio de Mosquera por
el eje del Rio Bogotá, al oriente con las localidades de Puente Aranda con la avenida
del Congreso Eucarı́stico o Avenida KR 68 y Fontibón por el eje del rı́o Fucha; al sur
por las localidades de Tunjuelito por la troncal Norte Quito Sur (NQS) tramo sur,
Ciudad Bolı́var y Bosa por el eje del rı́o Tunjuelo y al occidente con la localidad de
Bosa por el eje del rı́o Tunjuelo y el municipio de Mosquera por el eje del Rı́o Bogotá.
La localidad de Kennedy es la octava localidad con mayor extensión total territo-
rial y la segunda con mayor extensión de área urbana, el cual representa el 4.5 % del
área de Bogotá. De acuerdo al Plan de Ordenamiento Territorial [25], la Localidad de
Kennedy cuenta con la siguiente red vial:

Principales Vı́as
Subsistema Red Metropolitana
- Avenida de las Américas. Hace parte del Sistema Transmilenio
- Avenida Manuel Cepeda Vargas
- Avenida Centenario (CL 13)
- Avenida Ciudad de Quito
- Avenida Cuidad de Villavicencio
- Avenida Ciudad de Cali
- Avenida Bosa
- Avenida Primero de Mayo
- Avenida Congreso Eucarı́stico (AK 68)
- Avenida Ferrocarril del Sur
Subsistema Ciudad – Región
- Avenida Longitudinal de Occidente (ALO)
- Avenida Boyacá
1.5. MARCO REFERENCIAL 27

- Autopista Sur
Subsistema Malla Arterial Complementaria
- Avenida Castilla (KR 78)
- Avenida Poporo Quimbaya
- Avenida del Rı́o
- Avenida Agoberto Mejia Cifuentes (KR 80)
- Avenida de la Constitución
- Avenida Santa Fe
- Avenida de los Muiscas
- Avenida Alsacia
- Avenida Tintal
28 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

1.6. Metodologı́a de la investigación


Para el desarrollo del proyecto se plantea usar la metodologı́a CRISP-DM, dado
que es una de las metodologı́as más populares en los proyectos donde que se involucra
la minerı́a de datos y en nuestro concepto describe de mejor manera todo el proceso
de descubrimiento de información de los datos, basado en los objetivos que plantea
la organización. Otra de las razones, es que al ser este un proyecto de investigación
se deben realizar adaptaciones frecuentes sobre los datos de estudio y sobre modelo
antes de su versión final.

En este proyecto se implementarán las fases de la metodologı́a CRISP-DM de la


siguiente manera:

Fase I. Comprensión del negocio: Se tendrá en cuenta los objetivos del pro-
yecto para identificar la mejor fuente de información para el mismo.
Fase II. Estudio y comprensión de los datos: Una vez se tenga la fuente de da-
tos, se descargarán y se estudiarán sus caracterı́sticas, esto con el fin de familiarizarse
con los datos y su relevancia dentro del estudio.
Fase III. Preparación de los datos: En esta fase, se empezará con el tratamiento
de los datos, normalizando y unificándolos con el fin de tener una única fuente de
información para el análisis.
Fase IV. Modelado: Aquı́ se aplicará la técnica de árboles de decisión, para el
estudio de las caracterı́sticas del set de datos construido. Al finalizar, se transformará
dicho árbol en código para su fácil ejecución.
Fase V. Evaluación: En esta fase se revisará el modelo obtenido, y se contrastará
con los objetivos planteados.
Fase VI. Despliegue: En esta fase se plantea llegar a la implementación del modelo
elegido, debido al alcance del proyecto.
1.7. ORGANIZACIÓN DEL TRABAJO DE GRADO 29

1.7. Organización del trabajo de grado


A continuación se describe la estructura de este proyecto:

PARTE I. CONTEXTUALIZACIÓN DE LA INVESTIGACIÓN

CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN


Este capı́tulo presenta el problema de investigación, junto con los objetivos que se
platearon y su justificación.

PARTE II. DESARROLLO DE LA INVESTIGACIÓN

CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DA-


TOS
Este capı́tulo está compuesto por la comprensión de los objetivos, la búsqueda y
recopilación de la información relevante para la investigación, el análisis inicial y
procesamiento de los datos, y finalmente la construcción de la base de datos inicial
para el desarrollo de la investigación.

CAPÍTULO 3. DISEÑO Y CONSTRUCCIÓN DEL PROTOTIPO


Este capı́tulo se compone del análisis realizado a los datos preparados en el capı́tulo
previo, haciendo uso de la técnica de minerı́a de datos elegida. Se realiza la construcción
del prototipo y el descubrimiento del conocimiento dentro de los datos.

PARTE III. CIERRE DE LA INVESTIGACIÓN

CAPÍTULO 4. RESULTADOS Y DISCUSIÓN


Este capı́tulo presenta los resultados obtenidos una vez finalizada la aplicación de la
técnica de minerı́a de datos, a su vez también se presenta el conocimiento generado.

CAPÍTULO 5. CONCLUSIONES
En este capı́tulo se expresan las conclusiones del trabajo de investigación.

CAPÍTULO 6. PROSPECTIVA DEL TRABAJO DE GRADO


En este capı́tulo se expresan los posibles trabajos que pueden derivarse de esta
investigación.
30 CAPÍTULO 1. DESCRIPCIÓN DE LA INVESTIGACIÓN

1.8. Estudios de sistemas previos


En esta sección se presenta la revisión de algunos trabajos o investigaciones
relacionados con el tema de accidentes de trafico en la ciudad Bogotá y el análisis de
datos a través de los arboles de clasificación.
Dentro del grupo de las investigaciones realizadas sobre accidentalidad en Bogotá,
tenemos a [7] donde busca identificar, caracterizar y analizar los puntos más crı́ticos
de accidentalidad en Bogotá a partir de tres aspectos: el diseño geométrico, el tránsito
y la señalización, con el fin de determinar las causas de accidentalidad y proponer
alternativas de solución.
En el grupo de trabajos sobre el análisis de datos mediante técnica de minerı́a de
datos, encontramos a [4] donde presenta una descripción sobre el concepto de arboles
de decisión, sus métricas y algoritmos de construcción. También se reviso literatura
relacionada a las diferentes metodologı́as requeridas en la minerı́a de datos, como se
muestran en [16] y [5].
Parte II

DESARROLLO DE LA
INVESTIGACIÓN

31
Capı́tulo 2

RECOPILACIÓN Y
PREPROCESAMIENTO DE
DATOS

2.1. Tecnologı́as de apoyo


Para los procesos de tratamiento, transformación de los datos, y la construcción de
los modelos se utilizaron tecnologı́as de código abierto como Pentaho Data Integration
Vesion 8.1, MongoDB y Anaconda.
Para la realización de los procesos ETL se encuentran herramientas de código
abierto como Pentaho Data Integration, que permite fácilmente el desarrollo de estos
procesos; razón por la que se escogió, además de que se cuenta con experiencia en el
manejo de la herramienta, lo que redujo la curva de aprendizaje en el desarrollo del
trabajo de investigación.
Las tecnologı́as a utilizar en el almacenamiento de los datos dependen del tipo de
datos que se quieran tratar (estructurados, semi-estructurados o no estructurados), y
la base de datos NoSQL MogoDB ofrece un almacenamiento de datos no estructurado
basado en documentos.
Para el proyecto se elige MongoDB, debido a que fácilmente las variables que
forman parte del estudio pueden cambiar (es posible incorporar o eliminar variables)
o ampliar su rango de categorización, y MongoDB permite adaptar los registros
de manera sencilla, además de proveer una versión gratuita. Al comparar estas
necesidades con una base de datos SQL, agregar una nueva variable al estudio o
ampliar la categorización de la misma nos implica una modificación al modelo de
datos construido.

33
34 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

Para la construcción de los modelos de análisis y minerı́a de datos, se utilizó


un ambiente de desarrollo Python Anaconda, ya que es un lenguaje sencillo, rápido
y fácil para aprender, y cuenta con librerı́as especializadas para la manipulación y
tratamiento de datos, como lo son Pandas, Numpy y en el caso de machine learning,
Scikit-learn, las cuales beneficiarán el proyecto en el tratamiento y la aplicación de
técnicas de minerı́a de datos.

2.2. Fase I. Comprensión del negocio

Esta investigación se centra en el análisis del comportamiento de la accidentalidad


vial y la incidencia que tienen las variables externas en la ocurrencia de estos sucesos,
es por esta misma situación que se requiere que los datos de esta investigación sean
verı́dicos.

Debido al motivo anteriormente expuesto, se recurren a los datos oficiales provistos


por el gobierno de Colombia.

Según los datos recolectados, la zona de Bogotá donde se presentan el mayor


número de accidentes vehiculares (registrados) es en la localidad de Usaquén, seguida
por la localidad de Kennedy y Engativá, cuyos consolidados entre los años 2015 y
2017 superan los 9100 accidentes.
2.2. FASE I. COMPRENSIÓN DEL NEGOCIO 35

Localidad Cantidad de accidentes


USAQUÉN 9601
KENNEDY 9469
ENGATIVÁ 9138
SUBA 8481
FONTIBON 7255
PUENTE ARANDA 6258
CHAPINERO 5777
BARRIOS UNIDOS 5164
TEUSAQUILLO 5075
BOSA 3590
CIUDAD BOLÍVAR 3029
LOS MÁRTIRES 2977
SANTA FE 2217
TUNJUELITO 2195
RAFAEL URIBE URI- 2020
BE
SAN CRISTÓBAL 1829
ANTONIO NARIÑO 1651
USME 1457
CANDELARIA 494
SUMAPAZ 1
Fuente: Diseño propio.

La distribución de los accidentes según la gravedad de los mismos se puede observar


en la siguiente tabla.

Gravedad del accidente Cantidad de accidentes


Solo Daños 68136
Con Heridos 18716
Con Muertos 826
Fuente: Diseño propio.
36 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

Figura 2.1: Accidentes registrados según la gravedad.


Fuente: Diseño propio

Como se puede apreciar en la figura 2.1, de los accidentes registrados pocos


presentan vı́ctimas fatales con un registro total de 826 siniestro, en segundo lugar se
encuentran los accidentes donde se registran heridos, con un total de 18716, y para
los accidentes donde se registran solo daños se observa un total de 68136 siniestros.

2.3. Fase II. Estudio y comprensión de los datos


Búsqueda de registros de accidentalidad vehicular

Como se ha hablado en ocasiones anteriores, la búsqueda del conjunto de datos


para el proyecto serán tomados de la página https://www.datos.gov.co/, el cual es un
recurso de acceso libre suministrado por el Ministerio de Tecnologı́as de la Información
y las Comunicaciones (MinTIC) del estado Colombiano.
Los registros encontrados para la ciudad de Bogotá al inicio de este proyecto,
corresponden a los años 2015, 2016 y 2017.
2.3. FASE II. ESTUDIO Y COMPRENSIÓN DE LOS DATOS 37

Figura 2.2: Registros de accidentes de tránsito en Bogotá (2015-2017).


Fuente: [26].
38 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

De los registros recopilados podemos destacar los siguientes datos:

Caracterı́stica Descripción
fecha Fecha en la que se registra el accidente.
gravedadnombre Descripción de la gravedad del accidente.
clasenombre Clasificación del tipo de accidente.
choquenombre Identifica con que tipo de objeto se produjo
el accidente.
objetofijonombre Identifica con que tipo de objeto fijo se pro-
dujo el accidente.
direccion Indica la dirección del accidente.
tipovia Indica si el lugar donde se presentó el acci-
dente es una calle, carrera, etc.
localidad Nombre de la localidad donde se presentó el
accidente.
horaocurrencia Hora en la que se presentó el accidente.
tipodiseño Nombre de la estructura vial donde se pre-
sentó el accidente (Glorienta, tramo via, in-
tersección, etc.).
tipotiempo Indica el tipo de tiempo o clima presente en
el accidente.
totalmuertos Número de muertos registrados en el acciden-
te.
totalheridos Número de heridos registrados en el accidente.
causaconductoridesc Descripción de la causa, si la autoridad de
tránsito determina que pertenece al conduc-
tor.
causapeatonidesc Descripción de la causa, si la autoridad de
tránsito determina que pertenece al peatón.
causavehiculoidesc Descripción de la causa, si la autoridad de
tránsito determina que pertenece al vehı́culo.
causapasajeroidesc Descripción de la causa, si la autoridad de
tránsito determina que pertenece al pasajero.
Fuente: Diseño propio.
2.3. FASE II. ESTUDIO Y COMPRENSIÓN DE LOS DATOS 39

Identificación de problemas de calidad y conocimiento preliminar


En un primer acercamiento a cada una de las caracterı́sticas que nos ofrecen los
datos, podemos observar algunas de las particularidades con que cuentan los registros
consultados. Por ejemplo, en los registros, los valores pertenecientes a los atributos
de latitud y longitud son siempre ‘0’, razón por la cual no podrán formar parte del
estudio.

Figura 2.3: Hallazgos en dataset de accidentes de tránsito en Bogotá 2015.


Fuente: [26].

Al validar el formato del atributo fecha que posee el año 2017, se encuentra que
difiere de los de los años 2015 y 2016, por lo que se hace necesario estandarizar
estos valores. De igual modo, vemos que existen palabras que contienen letras como
la ‘ñ’, y puede provocar algunos errores al momento de usar las herramientas de
procesamiento, ası́ que se ha tomado la decisión de reemplazarlas por la letra ‘n’.
40 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

De los datos reunidos hasta el momento es posible encontrar nuevo conocimiento,


por ejemplo, las franjas horarias donde se presenta la mayor cantidad de accidentes
durante el dı́a.
En la figura 2.4, se puede observar una gran franja donde los accidentes vehiculares
son más frecuentes, en esta franja se supera la cifra de 4000 siniestros la cual está
comprendida entre las 6 de la mañana y las 8 de la noche.

Figura 2.4: Accidentes Vs hora de ocurrencia.


Fuente: Diseño propio

En la figura 2.5, se puede observar esta misma tendencia en los datos, esta vez
marcando la cantidad de accidentes distribuidos por la gravedad de los mismos. Como
se observa, los accidentes marcados con la lı́nea naranja (accidentes registrados con
muertes) está presente a lo largo de todas las horas del dı́a, pero su valor es muy
pequeño en comparación a los demás accidentes registrados (826 casos, que equivalen
al 0.942 % del total de datos del dataset).
2.3. FASE II. ESTUDIO Y COMPRENSIÓN DE LOS DATOS 41

Figura 2.5: Accidentes Vs hora de ocurrencia (Distribución por gravedad).


Fuente: Diseño propio

Figura 2.6: Distribución de accidentes por cuartiles.


Fuente: Diseño propio
42 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

En la figura 2.6 se observa la distribución de los accidentes por cuartiles con la


ayuda del diagrama de cajas y bigotes, este diagrama nos muestra la relación de
distribución de los accidentes de cada dı́a de la semana. Inicialmente, podemos dividir
estos resultados en dos grupos con caracterı́sticas similares; uno de los grupos está
compuesto por los dı́as Lunes, Martes y Sábados, y los dı́as Miércoles, Jueves, Viernes
y Domingos formarán parte del segundo grupo.
En el grupo uno, el primer cuartil está ubicado cerca de las nueve horas aproxi-
madamente, mientras que en grupo número dos, este valor está cercano a las ocho
de la mañana. Al ver la mediana de este conjunto de valores, encontramos que su
valor está sobre las 13:00 horas (ó 1:00 p.m) para ambos grupos, y finalmente su
tercer cuartil también coincide, marcado en el valor de las 17:00 horas o las 5:00 p.m
aproximadamente.

Figura 2.7: Densidad sobre la distribución de accidentalidad.


Fuente: Diseño propio

En la figura 2.7, se muestra la densidad que muestran estos accidentes a lo largo


de las horas del dı́a, mostrando una coincidencia entre los picos más altos en los
accidentes registrados con heridos o muertos, los cuales se centran entre las cinco
y las nueve de la mañana aproximadamente; en cambio, el pico más alto para los
2.4. FASE III. PREPARACIÓN DE LOS DATOS 43

accidentes donde sólo se registran daños a los vehı́culos, está al rededor de la una y
las tres de la tarde.

2.4. Fase III. Preparación de los datos


Preparación inicial de los datasets

Habiendo identificado en primera instancia algunas caracterı́sticas de los da-


tos, procedemos a realizar una primera normalización para los puntos comentados
previamente, teniendo como resultado nuestros conjuntos de datos base.

Figura 2.8: Dataset de accidentes de tránsito en Bogotá 2015 actualizado.


Fuente: [26].
44 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

Proceso ETL
Para manipular el gran conjunto de datos recopilado, nos apoyamos en el software
de integración de datos, Pentaho Data Integration. Version 8.1, en donde se crearon
diferentes transformaciones, enlazadas dentro de un job, para la consolidación de una
única base de datos NoSQL.

Figura 2.9: Job ETL para el tratamiento de datos.


Fuente: Diseño propio.

En la imagen 2.9, podemos ver el Job creado para el tratamiento de los datos
asociados a la accidentalidad en la ciudad de Bogotá, este está compuesto prin-
2.4. FASE III. PREPARACIÓN DE LOS DATOS 45

cipalmente por cuatro transformaciones (AccidentesXMLTransformation, Acciden-


tes2017Transformation, CSVConsolidado y CargueBD), más objetos para la validación
de la existencia de los datasets y control de errores.

Las transformaciones fueron creadas para que cumplan cuatro tareas fundamenta-
les:
AccidentesXMLTransformation: En esta transformación se procesan los dataset
descargados en formato XML, y se exporta un solo archivo de extensión csv.
Accidentes2017Transformation: Esta transformación trabaja sobre el dataset en
formato csv, exportando un archivo del mismo tipo.
CSVConsolidado: Esta transformación es la encargada de generar un consolidado
total de los datos relacionados al estudio.
CargueBD: En esta transformación se toma el consolidado total de los registros
trabajados y se cargan a una base de datos Mongo, para su posterior uso.

Figura 2.10: Transformación ‘AccidentesXMLTransformation’.


Fuente: Diseño propio.

En la figura 2.10, se pueden apreciar el flujo desarrollado para el filtrado de


registros en los archivos XML, para el caso del dataset correspondiente al año 2017
se crea un flujo similar con el tratamiento del archivo CSV.
46 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

Figura 2.11: Filtro por caracterı́sticas.


Fuente: Diseño propio.

La figura 2.11 muestra las condiciones usadas para el filtrado de los registros, para
este estudio se determinó trabajar con todas las localidades de la ciudad de Bogotá y
cuyo tipo de accidente corresponda a choque o volcamiento.

Figura 2.12: Transformación ‘CSVConsolidado’.


Fuente: Diseño propio.
2.4. FASE III. PREPARACIÓN DE LOS DATOS 47

En la figura 2.12 se muestra la transformación ‘CSVConsolidado’, la cual es la


encargada de tomar los resultados de las anteriores transformaciones y dejarlos en un
solo archivo de extensión CSV, como se muestra en la figura 2.13.

Figura 2.13: Archivos exportados por las transformaciones.


Fuente: Diseño propio.

Finalmente, los resultados generados por las anteriores transformaciones son


seleccionados y cargados en una base de datos Mongo, por medio de la transformación
‘CargueBD’, la cual se muestra en la figura 2.14. Las caracterı́sticas cargadas se
muestran en la figura 2.15.

Figura 2.14: Transformación ‘CargueBD’.


Fuente: Diseño propio.
48 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

Figura 2.15: Variables seleccionadas para el modelo.


Fuente: Diseño propio.

En la figura 2.16, podemos observar las variables cargadas en la base de datos


Mongo, con un total de 87678 documentos.

Figura 2.16: Registros cargados en MongoDB.


Fuente: Diseño propio.
2.4. FASE III. PREPARACIÓN DE LOS DATOS 49

Adición de nuevas variables al conjunto de datos


En este momento ya contamos con una base de datos acotada para trabajar, pero
antes de avanzar a la fase de modelado, se han incorporado tres nuevas variables
dentro de ella. Estas variables son:

1. El dı́a de la semana.
2. Un valor para identificar si el dı́a de accidente fue festivo o no.
3. Un valor para indicar si el accidente ocurrió dentro de la franja de pico y placa
que está determinada para la ciudad de Bogotá, cuyo horario es de 06:00 a
08:30 y de 15:00 - 19:30.
Para calcular y actualizar estas variables dentro de la base de datos, se crean
varios archivos, uno principal llamado “procesamientoDataSet.py”, que contiene la
orquestación de las acciones necesarias para la actualización de variables y el archivo
“Funciones.py”, que contiene la lógica de cálculo y actualización de las mismas.

En el siguiente fragmento de código se observa la clase principal, la cual contiene


la definición y llamado a las funciones de actualización de variables dentro del dataset.
1000 if name == ’ m a i n ’ :
try :
1002 #Se c r e a l a c o n e x i o n con e l s e r v i d o r de Base de Datos
c l i e n t = MongoClient ( d b S e r v e r )
1004 #Se i n d i c a e l Nombre de l a Base de Datos
db = c l i e n t [ dbName ]
1006 #Se i n d i c a e l Nombre de l a C o l e c c i o n
c o l l e c t i o n = db [ c o l l e c t i o n N a m e ]
1008 p r i n t ( ” Conexion e s t a b l e c i d a . ” )
# Se a c t u a l i z a n r e g i s t r o s d e n t r o d e l DataSet
1010 transformacionDeDatos ( c o l l e c t i o n )
# Se n o r m a l i z a n l o s a t r i b u t o s d e l DataSet
1012 normalizacion ( c o l l e c t i o n )
except :
1014 print ( ” Error : Fallo a l i n t e n t a r e s t a b l e c e r conexion . ” )

1016 finally :
#C i e r r e de l a c o n e x i o n a Base de Datos
1018 client . close ()
p r i n t ( ” Conexion c e r r a d a . ” )
50 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

La función transformacionDeDatos, se encarga de hacer los llamados a las fun-


ciones de actualización de cada una de las variables (Para ver en detalle la función
dirigirse a los anexos).

El archivo Funciones.py tiene toda la lógica del cálculo de las variables ante-
riormente descritas y almacenadas en la base de datos de trabajo. En el siguiente
fragmento, se pueden ver algunas funciones de este archivo (Para ver en detalle las
funciones del archivo, dirigirse a los anexos).
1000 c l a s s Funciones ( ) :
# A c t u a l i z a l o s documentos con e l a t r i b u t o de d i a F e s t i v o
1002 d e f a c t u a l i z a D i a F e s t i v o ( s e l f , conn , d i a s L i s t ) :
””” ” A c t u a l i z a e l DataSet con l o s d i a s f e s t i v o s ”””
1004 #Se a c t u a l i z a n t o d o s l o s r e g i s t r o s con un nuevo campo llamado ’
F e s t i v o ’ su v a l o r i g u a l a ’No ’
conn . update many ( { } , {” $ s e t ” : { ” F e s t i v o ” : ”No” } } )
1006

#A c t u a i l z a c i o n de l o s r e g i s t r o s de l a Base de Datos en f u n c i o n de
l a s f e c h a s cargadas ( A c t u a l i z a c i o n a ” Festivo ”:” Si ”)
1008 for l i n e in diasList :
conn . update many ( { ’ F e c h a O c u r r e n c i a ’ : l i n e . s t r i p ( ) } , {” $ s e t ” : { ”
Festivo ” : ” Si ” }})
1010

p r i n t ( ” Fin de l a a c t u a l i z a c i o n de r e g i s t r o s con d i a f e s t i v o . ” )
1012
# A c t u a l i z a l o s documentos con e l a t r i b u t o d e l d i a de l a semana
1014 d e f a c t u a l i z a D i a S e m a n a ( s e l f , conn , ) :
””” ” A c t u a l i z a e l DataSet con e l d i a de l a semana ”””
1016 # Se buscan t o d a s l a s f e c h a s d e l data s e t
l i n e s = conn . d i s t i n c t ( ” F e c h a O c u r r e n c i a ” )
1018
for l i n e in l i n e s :
1020 sp = l i n e . s p l i t ( ”−” )
f e c h a = d a t e ( i n t ( sp [ 0 ] ) , i n t ( sp [ 1 ] ) , i n t ( sp [ 2 ] ) )
1022 conn . update many ( { ’ F e c h a O c u r r e n c i a ’ : l i n e . s t r i p ( ) } , {” $ s e t ” : { ”
DiaSemana” : diaSemana [ f e c h a . weekday ( ) ] } } )

1024 p r i n t ( ” Fin de l a a c t u a l i z a c i o n de r e g i s t r o s con d i a de l a semana .


”)

Como se puede observar en los códigos anteriores, se requiere un archivo “diasFes-


tivosYMD.txt”, que contiene las fechas que corresponden a los dı́as festivos según el
calendario Colombiano. A continuación un fragmento de este archivo.
2.4. FASE III. PREPARACIÓN DE LOS DATOS 51

1000 2015−01−01
2015−01−12
1002 2015−03−23
2015−03−29
1004 2015−04−02
2015−04−03
1006 2015−04−05
2015−05−01
1008 2015−05−18
2015−06−08
1010 2015−06−15
...

En la figura 2.17, se puede observar el resultado de la ejecución de este código.

Figura 2.17: Registros con nuevas variables.


Fuente: Diseño propio.
52 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

En este punto, ahora con la identificación de los dı́as de la semana en la que


ocurren los siniestros viales, es posible analizar el comportamiento de estos último a
lo largo de cada uno de estos dı́as.

En el caso de los accidentes presentados entre semana, se observa un mayor número


en el dı́a viernes, mientras que el dı́a lunes es donde menos se registran.

Figura 2.18: Distribución de accidentes entre semana.


Fuente: Diseño propio
2.4. FASE III. PREPARACIÓN DE LOS DATOS 53

Figura 2.19: Distribución de accidentes con muertos entre semana.


Fuente: Diseño propio

En la figura 2.20, se observa la distribución de los accidentes durante los fines de


semana, manteniendo el valor más alto registrado en los dı́as viernes, el cual empieza
a decrecer hasta llegar al dı́a domingo.

Figura 2.20: Distribución de accidentes fin de semana.


Fuente: Diseño propio
54 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

Figura 2.21: Distribución de accidentes con muertos fin de semana.


Fuente: Diseño propio

En una perspectiva más global, la figura 2.22 muestra la distribución de los


accidentes a lo largo de la semana completa, siendo los dı́as Martes, Viernes y Sábados
los que más registran accidentes.

Figura 2.22: Distribución de accidentes semana completa.


Fuente: Diseño propio
2.4. FASE III. PREPARACIÓN DE LOS DATOS 55

En cuanto a la distribución de los accidentes por el tipo del mismo, se puede


apreciar en la siguiente tabla.

Tipo de accidente Gravedad del accidente Cantidad de accidentes


Con Heridos 17991
Choque Con Muertos 699
Solo Daños 67976
Con Heridos 725
Volcamiento Con Muertos 127
Solo Daños 160
Fuente: Diseño propio.
Como se observa en la figura 2.23, existe una mayor cantidad de accidentes de
tipo “Choque” entre las siete de la mañana y las siete de la noche.

Figura 2.23: Distribución accidentes tipo choque.


Fuente: Diseño propio
56 CAPÍTULO 2. RECOPILACIÓN Y PREPROCESAMIENTO DE DATOS

En cuanto a los accidentes de tipo “Volcamiento”, la figura 2.24 muestra su pico


más alto entre las cinco y las ocho de la mañana.

Figura 2.24: Distribución accidentes tipo volcamiento.


Fuente: Diseño propio
Capı́tulo 3

DISEÑO Y CONSTRUCCIÓN
DEL PROTOTIPO

3.1. Fase IV. Modelado


Habiendo tratado los datos, y consolidado la información relevante para el estudio,
se procede a evaluar la técnica de minerı́a de datos a aplicar, que para este caso es el
Árbol de Decisión.

Tratamiento del Dataset

Dando un vistazo a la figura 3.1, se puede identificar los tipos de variables existentes
dentro del dataset. Estas son las variables numéricas discretas y las variables categóri-
cas, también se puede observar al final del mismo la variable “GravedadAccidente”, la
cual será variable objetivo para el modelo.

Figura 3.1: Variables del dataset construido.


Fuente: Diseño propio.

57
58 CAPÍTULO 3. DISEÑO Y CONSTRUCCIÓN DEL PROTOTIPO

Tipo Variable Variable del Dataset


Numérica Discreta H, M
Categórica TipoAccidente, Localidad, ZonaAccidente, Ti-
poTiempo, Festivo, DiaSemana, FranjaPicoy-
Placa
Objetivo GravedadAccidente
Fuente: Diseño propio.

Como paso siguiente, es necesario normalizar estas variables, con la finalidad de


ser aplicables a la técnica de árboles de decisión. Para lograr esto, se implementa
una función en Python la cuál es la encargada de normalizar las variables categóricas
asignandoles un valor numérico discreto.
A continuación se describe esta función.

1000 # I d e n t i f i c a l o s d i f e r e n t e s v a l o r e s que p o s e e cada a t r i b u t o y l e s


a s i g n a un v a l o r numerico para n o r m a l i z a r l o
d e f n o r m a l i z a c i o n D e A t r i b u t o s ( s e l f , conn , f i l e , v a r N o r m a l i z a c i o n ) :
1002 d i c t A t r b A c c i d e n t e s = {}

1004 f = open ( f i l e , ’w+ ’ )


try :
1006 #Busca l o s v a l o r e s d i f e r e n t e s para cada uno de l o s a t r i b u t o s
f o r atrb in varNormalizacion :
1008 d i c t A t r b A c c i d e n t e s [ a t r b ] = conn . d i s t i n c t ( a t r b )

1010 #Se e s c r i b e a r c h i v o de p r o p i e d a d e s con l o s v a l o r e s de n o r m a l i z a c i o n


a p l i c a d o s a l DataSet

1012 f o r key , v a l i n d i c t A t r b A c c i d e n t e s . i t e m s ( ) :
f o r idx , v i n enumerate ( v a l ) :
1014 data = ( key , ” : ” , v , ” : ” , s t r ( i d x ) , ”\n” )
# p r i n t ( data )
1016 f . w r i t e l i n e s ( data )

1018 except :
p r i n t ( ” E r r o r : No s e pudo c r e a r e l a r c h i v o ” , f i l e )
1020 finally :
f . close ()

Como resultado se obtiene un documento con la configuración de dicha normaliza-


ción, a continuación se muestra un fragmento de dicho archivo.
3.1. FASE IV. MODELADO 59

1000 L o c a l i d a d :SANTA FE: 1 3


L o c a l i d a d :CHAPINERO: 1 4
1002 L o c a l i d a d :FONTIBON: 1 5
L o c a l i d a d :CANDELARIA: 1 6
1004 L o c a l i d a d :USME: 1 7
L o c a l i d a d :ANTONIO NARINO: 1 8
1006 L o c a l i d a d :SUMAPAZ: 1 9
ZonaAccidente : Tramo de Via : 0
1008 ZonaAccidente : I n t e r s e c c i o n : 1
ZonaAccidente : Lote o p r e d i o : 2
1010 ZonaAccidente : G l o r i e t a : 3
ZonaAccidente : Tunel : 4
1012 ZonaAccidente : Paso e l e v a d o : 5
ZonaAccidente : Paso i n f e r i o r : 6
1014 ZonaAccidente : Paso a n i v e l : 7
ZonaAccidente : Puente : 8
1016 ZonaAccidente : C i c l o r u t a : 9
ZonaAccidente : Via p e a t o n a l : 1 0
1018 ZonaAccidente : Ponton : 1 1
ZonaAccidente : Via t r o n c a l : 1 2
1020 TipoTiempo : Normal : 0
TipoTiempo : L l u v i a : 1
1022 TipoTiempo : N i e b l a : 2
...

Una vez teniendo los valores para la normalización de cada una de las variables,
son aplicadas al dataset. En la figura 3.2, se puede observar el resultado al aplicar la
normalización anteriormente descrita.

Figura 3.2: Dataset normalizado.


Fuente: Diseño propio.
60 CAPÍTULO 3. DISEÑO Y CONSTRUCCIÓN DEL PROTOTIPO

Elección del modelo


Como se ha hablado anteriormente a lo largo del proyecto, y en el marco teórico,
existe una preferencia al usar los árboles de decisión como técnica de minerı́a de datos
para este trabajo, sin embargo, se realiza una evaluación de esta técnica frente a otras
para comparar sus precisiones.

Para esto, se implementa y ejecuta el siguiente código.


1000 d e f e v a l u a c i o n M o d e l o s (X, y , s e e d ) :
# I n s t a n c i a de A l g o r i t m o s
1002 models = [ ]
models . append ( ( ’ R e g r e s i o n l o g i s t i c a ’ , L o g i s t i c R e g r e s s i o n ( ) ) )
1004 models . append ( ( ’ A n a l i s i s de D i s c r i m i n a c i o n L i n e a l ’ ,
LinearDiscriminantAnalysis () ) )
models . append ( ( ’ C l a s i f i c a d o r de V e c i n o s Cercanos ’ ,
KNeighborsClassifier () ) )
1006 models . append ( ( ’ Arbol de D e c i s i o n ’ , D e c i s i o n T r e e C l a s s i f i e r (
c r i t e r i o n= ’ e n t r o p y ’ , max depth = 9 ) ) )
models . append ( ( ’ C l a s i f i c a d o r B ayesi ano ’ , GaussianNB ( ) ) )
1008
scoring = ’ accuracy ’
1010
# Evalua cada Modelo
1012 results = []
names = [ ]
1014 f o r name , model i n models :
k f o l d = m o d e l s e l e c t i o n . KFold ( n s p l i t s =10 , r a n d o m s t a t e=s e e d )
1016 c v r e s u l t s = m o d e l s e l e c t i o n . c r o s s v a l s c o r e ( model , X, y , cv=
k f o l d , s c o r i n g=s c o r i n g )
r e s u l t s . append ( c v r e s u l t s )
1018 names . append ( name )
msg = ” %s : %f ( %f ) ” % ( name , c v r e s u l t s . mean ( ) , c v r e s u l t s . s t d ( ) )
1020 p r i n t ( msg )

Técnica Precisión
Regresión logı́stica 0.782499
Análisis de Discriminación Lineal 0.775698
Clasificador de Vecinos Cercanos 0.743117
Árbol de Decisión 0.780246
Clasificador Bayesiano 0.764305
Fuente: Diseño propio.
3.1. FASE IV. MODELADO 61

Como se puede apreciar en la tabla anterior, la precisión de las diferentes técnicas


de minerı́a de datos aplicadas sobre el caso de estudio están en valores cercanos unas
de otras, este valor va desde el 74 % hasta el 78 % aproximadamente. Las dos técnicas
que presentan los mayores porcentajes de precisión son la Regresión logı́stica y el
Árbol de Decisión respectivamente, pero aún hace falta evaluar la profundidad del
árbol para obtener posiblemente mejores resultados.
Para evaluar la profundidad ideal del árbol de decisión, se implemento el siguiente
código en Python. Este usa la función
model selection.cross val score de sklearn, la cual usa el método de validación cruzada
para el entrenamiento del árbol de decisión en cada una de las posibles profundidades
del mismo.

1000 d e f p r o f u n d i d a d A r b o l ( p r e d i c t o r s , X, y , s e e d ) :

1002 accuracies = l i s t ()
depth range = range (1 , len ( p r e d i c t o r s ) + 1)
1004 print ( depth range )
# I t e r a c i o n para cada una de l a s p o s i b l e s p r o f u n d i d a d e s d e l a r b o l ,
basado en l a s c a r a c t e r i s t i c a s d e l d a t a s e t
1006 f o r depth i n d e p t h r a n g e :
model = D e c i s i o n T r e e C l a s s i f i e r ( c r i t e r i o n= ’ e n t r o p y ’ ,
1008 m i n s a m p l e s s p l i t =10 ,
m i n s a m p l e s l e a f =5,
1010 max depth = depth )
k f o l d = m o d e l s e l e c t i o n . KFold ( n s p l i t s =10 , r a n d o m s t a t e=s e e d )
1012
c v r e s u l t s = m o d e l s e l e c t i o n . c r o s s v a l s c o r e ( model , X, y , cv=k f o l d ,
s c o r i n g=s c o r i n g )
1014 a c c u r a c i e s . append ( c v r e s u l t s . mean ( ) )

1016 # Mostramos l o s r e s u l t a d o s o b t e n i d o s
d f = pd . DataFrame ( { ” Profundidad Max” : d e p t h r a n g e , ” P r e c i s i o n Promedio ”
: a c c u r a c i e s })
1018 p r i n t ( d f . t o s t r i n g ( i n d e x=F a l s e ) )

Los resultados de la precisión para cada uno de los niveles de profundidad se


muestran en la siguiente tabla, donde se puede observar que con niveles más bajos de
profundidad la precisión alcanza a la obtenida por la Regresión logı́stica evaluada
anteriormente.
62 CAPÍTULO 3. DISEÑO Y CONSTRUCCIÓN DEL PROTOTIPO

Profundidad Max Precisión Promedio


1 0.782499
2 0.782499
3 0.782499
4 0.782499
5 0.782485
6 0.782242
7 0.781586
8 0.780631
9 0.780260
Fuente: Diseño propio.

Figura 3.3: Precisión Vs Profundidad.


Fuente: Diseño propio.

Como se observa en la figura 3.3, en cuanto los niveles de profundidad del árbol
de decisión son más bajos, la precisión en más alta (alcanzando una precisión del
78.2499 %), y a medida que la profundidad aumenta, su precisión disminuye hasta
3.1. FASE IV. MODELADO 63

llegar al valor de 78.026 % con una profundidad de 9 nodos. Especı́ficamente para


el caso de estudio, los resultados nos indican que los niveles de profundidad del 1 a
4, nos dan los mejores resultados, incluso alcanzando la precisión de la Regresión
logı́stica.

Elección y construcción del modelo


Dado a que los porcentajes de precisión más altos los dan las técnicas de de
Regresión Logı́stica y el Árbol de Decisión, y en el caso de estudio estos dos con el
mismo resultado, se decide elegir el modelo a implementar a través de pruebas de
rendimiento.
Con la ayuda de las librerı́as de Python para machine learning y data science se
construyen los modelos con las técnicas de Regresión Logı́stica y Arboles de Desición,
paso seguido se ponen a prueba prediciendo el dataset y elvaluando sus tiempos de
respuesta.
Antes de incluir todos los registros del dataset para el entrenamiento de los modelos,
es habitual extraer una parte de ellos para una posterior prueba de validación del
modelo entrenado, en este caso se reserva una muestra del 20 %.
1000 v a l i d a t i o n s i z e = 0.20
seed = 9
1002 scoring = ’ accuracy ’

1004 #Carga d a t a s e t
p r i n t ( ” Cargue d a t a s e t ” )
1006 d a t a s e t = pd . r e a d c s v ( d a t a s e t F i l e )

1008 #Eliminamos l o s d a t o s con v a l o r e s m i s s i n g porque Python no puede h a c e r


a r b o l e s con d a t o s m i s s i n g
d a t a c l e a n = d a t a s e t . dropna ( )
1010 p r i n t ( d a t a c l e a n . head ( 1 0 ) )
p r i n t ( d a t a c l e a n . groupby ( ’ GravedadAccidente ’ ) . s i z e ( ) )
1012
#D i v i s i o n de l o s p r e d i c t o r e s y e l t a r g e t
1014 X = data clean [ predictors ]
y = d a t a c l e a n . GravedadAccidente
1016

1018 X train , X validation , Y train , Y validation = m o d e l s e l e c t i o n .


t r a i n t e s t s p l i t (X, y , t e s t s i z e=v a l i d a t i o n s i z e , r a n d o m s t a t e=s e e d )
64 CAPÍTULO 3. DISEÑO Y CONSTRUCCIÓN DEL PROTOTIPO

Como se puede observar en el fragmento de código anterior, los datos del dataset
son cargados, y con la ayuda de la función dropna() de Pandas se eliminan los
registros donde haya ausencia de alguna de las variables definidas para el estudio,
esto es necesario ya que los algoritmos no permite valores nulos o faltantes dentro del
conjunto de entrenamiento.
El resultado de la función dropna elimina 11 registros, cuyo valor ausente es el estado
del tiempo, la cantidad de registros eliminados corresponden al 0.012 % del total de
datos del dataset, y se pueden ver en la imagen 3.4.
Por lo anterior, no se ve necesario reconstruir esta información, debido a que la
mayorı́a corresponde a la categorı́a de Solo Daños y el dataset cuenta con más de
60000 registros de este tipo.

Figura 3.4: Registros eliminados por la función dropna


Fuente: Diseño propio.

En la siguiente tabla se puede observar la distribución en cuanto a gravedad de


los datos del dataset.

GravedadAccidente Cantidad
Con Heridos 18714
Con Muertos 826
Solo Daños 68127
Fuente: Diseño propio.

Una vez construidos los modelos, estos son puestos a prueba haciendo que predigan
los registros del dataset, se realizan pruebas iterando este proceso 100, 1000 y 10000
3.1. FASE IV. MODELADO 65

veces. Los resultados se pueden apreciar en la siguiente tabla (los valores está dados
en milisegundos).
Modelos / Iteración 100 1000 10000
Regresión logı́stica 27624 28206 28291
Árbol de Decisión Prof. 1 24446 23558 23768
Árbol de Decisión Prof. 2 24186 24757 24347
Árbol de Decisión Prof. 3 25745 26548 26123
Árbol de Decisión Prof. 4 25815 26946 26996
Fuente: Diseño propio.
De acuerdo a los resultados obtenidos, el modelo que presenta mejor rendimiento
y mayor precisión es el Árbol de Decisión de 1 nodo de profundidad, por lo cual se
procede a la construcción de este modelo.

1000 d e f c o n s t r u i r A r b o l ( depth , X, y , X v a l i d a t i o n , Y v a l i d a t i o n ) :
#C o n s t r u i r e l a r b o l
1002 model = D e c i s i o n T r e e C l a s s i f i e r ( c r i t e r i o n= ’ e n t r o p y ’ ,
m i n s a m p l e s s p l i t =10 ,
1004 m i n s a m p l e s l e a f =5,
max depth = depth )
1006 model . f i t (X, y )

1008 # e x p o r t a r e l modelo a a r c h i v o . dot


with open ( r ” a r b o l D e c i s i o n . dot ” , ’w ’ ) a s f :
1010 f = e x p o r t g r a p h v i z ( model ,
o u t f i l e=f ,
1012 max depth = depth )

1014 # C o n v e r t i r e l a r c h i v o . dot a png para poder v i s u a l i z a r l o


c h e c k c a l l ( [ ’ dot ’ , ’−Tpng ’ , r ’ a r b o l D e c i s i o n . dot ’ , ’−o ’ , r ’ a r b o l D e c i s i o n . png
’ ])
1016 PImage ( ” a r b o l D e c i s i o n . png” )

1018 p r e d i c t i o n s = model . p r e d i c t ( X v a l i d a t i o n )
p r i n t ( ’ ∗ ’ ∗4 , ’ P r e c i s i o n ’ , ’ ∗ ’ ∗4)
1020 print ( accuracy score ( Y validation , predictions ) )
p r i n t ( ’ ∗ ’ ∗ 2 , ’ Matriz de c o n f u s i o n ’ , ’ ∗ ’ ∗ 2 )
1022 print ( confusion matrix ( Y validation , predictions ) )
p r i n t ( ’ ∗ ’ ∗ 1 3 , ’ Reporte de c l a s i f i c a c i o n ’ , ’ ∗ ’ ∗ 1 3 )
1024 print ( c l a s s i f i c a t i o n r e p o r t ( Y validation , predictions ) )
66 CAPÍTULO 3. DISEÑO Y CONSTRUCCIÓN DEL PROTOTIPO

3.2. Fase V. Evaluación (obtención de resultados)


Como resultado de la anterior ejecución se obtienen los siguientes resultados:
Precisión: 0.7877837344587658 ; 78,78 %
Matriz de Confusión:

Con Heridos Con Muertos Solo Daños Total


Con Heridos 147 0 3523 3670
Con Muertos 26 0 140 166
Solo Daños 31 0 13667 13698
Fuente: Diseño propio.

En la anterior tabla se muestra la matriz de confusión, esta muestra la cantidad de


aciertos que tiene el modelo generado versus los datos reales provenientes del dataset.
Vemos que el modelo no hace ningún acierto sobre la categorı́a “Con Muertos”, y
realiza al rededor del 4 % de aciertos para la categorı́a “Con Heridos”. Esto se puede
presentar debido a la gran diferencia de los tipos de datos categorizados presentes en
el dataset, el cual contiene un aproximado de 0.9 % de tipo “Con Muertos” y 21 % de
tipo “Con Heridos”.

Figura 3.5: Árbol de Decisión generado.


3.3. FASE VI. VALIDACIÓN 67

3.3. Fase VI. Validación


Debido a que el proyecto sólo está establecido a llegar hasta la validación de la
técnica de minerı́a de datos, se implementa un formulario web, como se observa en la
figura 3.6, el cual internamente ejecuta el modelo construido en las fases previas.

Figura 3.6: Formulario para el uso del modelo predictivo.


Fuente: Diseño propio.
68 CAPÍTULO 3. DISEÑO Y CONSTRUCCIÓN DEL PROTOTIPO

En la figura 3.7 se pueden apreciar los resultados del modelo generado sobre el
conjunto de datos de prueba (matriz de confusión).

Figura 3.7: Matriz de Confusión.


Fuente: Diseño propio.

En la figura 3.8 se observa la misma relación que en la figura 3.7, pero esta vez
indicando el porcentaje de aciertos, donde para la categorización de “Con Heridos”fue
del 4 % y para la categorı́a de “Solo Daños” fue del 99.7 %:

Figura 3.8: Matriz de Confusión Normalizada.


Fuente: Diseño propio.
Parte III

CIERRE DE LA
INVESTIGACIÓN

69
Capı́tulo 4

RESULTADOS Y DISCUSIÓN

Una vez revisada la literatura relacionada con análisis de datos, técnicas de mi-
nerı́a de datos y junto a los resultados obtenidos de la experimentación de estas,
se decide utilizar los arboles de decisión como técnica para el análisis de acciden-
talidad en la ciudad de Bogotá, dado que tuvo los mejores resultados en cuanto
a precisión y rendimiento frente a otras técnicas como Regresión logı́stica, Análi-
sis de discriminación lineal, Clasificador de Vecinos Cercanos y Clasificador Bayesiano.

Para la construcción del árbol de decisión se utilizó el algoritmo de clasificación


y regresión de arboles CART, donde se emplea unidades de medida de la entropı́a o
ganancia de la información, que permitió determinar que atributo divide mejor la
información en cada nodo.

En un acercamiento al nodo raı́z generado por los algoritmos de Sklearn (ver fi-
gura 4.1 ), vemos que la caracterı́stica principal para la toma de decisiones del árbol
generado es la de “TipoAccidente”, si esta es “Choque” orienta su resultado hacia la
categorización “Solo Daños”. En cambio, si el accidente es de tipo “Volcamiento”,
orienta la categorización del accidente al resultado “Con Heridos”.

71
72 CAPÍTULO 4. RESULTADOS Y DISCUSIÓN

Figura 4.1: Nodo raı́z del árbol construido.


Fuente: Diseño propio

A cerca de las zonas en las cuales se presentan el mayor número de accidentes,


se encuentran el tramo de vı́a y las intersecciones involucrados en más de 19000
siniestros.

Zona del accidente Cantidad de accidentes


Tramo de Vı́a 64281
Intersección 19436
Glorieta 1107
Lote o predio 1033
Paso elevado 799
Paso inferior 433
Paso a nivel 237
Puente 209
Ciclo-ruta 95
Vı́a peatonal 26
Túnel 12
Pontón 9
Vı́a troncal 1
Fuente: Diseño propio.
73

Figura 4.2: Accidentes Vs Zona de la vı́a.


Fuente: Diseño propio

Otras de las caracterı́sticas evaluadas a lo largo de este trabajo es el estado del


clima, cuyas variables según el conjunto de datos consultado son: el tiempo Normal,
Lluvia, Niebla, Graniz y el Viento, cuya presencia con relación a los accidentes se
puede ver en la figura 4.3.

Como resultado en la generación del árbol esta variable no toma importancia, ya


que como se puede ver en la figura 4.3 bajo condiciones de tiempo normales ocurren
la mayorı́a de accidentes.
74 CAPÍTULO 4. RESULTADOS Y DISCUSIÓN

Figura 4.3: Accidentes Vs Estado del tiempo.


Fuente: Diseño propio

Debido a que este proyecto no fue definido para ser probado con valores ajenos
a los del dataset, se realizan pruebas sobre los datos de validación, estos separados
previamente en el proceso de análisis. Los resultados de este ejercicio fueron de
13814 aciertos sobre los 17534 datos de prueba, ratificando el 78.78 % de escenarios
satisfactorios.
Capı́tulo 5

CONCLUSIONES

5.1. Verificación, contraste y evaluación de los ob-


jetivos
Las principales conclusiones se presentan a continuación:
En la fase de entendimiento del negocio y evaluación del conocimiento preliminar
de los datos, se logra evidenciar que se registra el mayor número de volcamientos
al rededor de las 6 de la mañana, justo cuando empieza a regir el horario de
restricción de pico y placa para la ciudad de Bogotá.
La variable tipo accidente es la más influyente en los escenarios donde se
producen heridos; en relación con las demás variables analizadas en este proyecto,
las variables ambientales tienen poca influencia en estos siniestros, ya que la
mayor cantidad de accidentes ocurren con condiciones de tiempo normal.
Al realizar la comparación de las técnicas de minerı́a de datos, los arboles de
decisión es una de las técnicas que presenta mayor precisión y mayor rendimiento
frente a las otras técnicas.
El árbol de decisión no refleja nodos con la categorı́a “Con Muertos”, debido a
la poca cantidad de estos sucesos en relación con los otros tipos presentados
(“Solo Daños” y “Con Heridos”) dentro del dataset.
Debido a la baja influencia de algunas variables en los accidentes de tránsito,
es necesario identificar otras más cercanas a estos sucesos, como por ejemplo, el
tipo de asfalto de la vı́a, el estado de la misma, el flujo vehicular de la zona, la
señalización, entre otras.

75
76 CAPÍTULO 5. CONCLUSIONES

La metodologı́a CRISP-DM usada en desarrollo de este proyecto, fue de gran


ayuda para construir el modelo predictivo, debido a que en cada una de las fases
se van construyendo los objetos necesarios para garantizar un avance constante
en el proyecto, evitando en gran parte el re trabajo.

5.2. Sı́ntesis del modelo propuesto


En este proyecto se evalúa la aplicación de técnicas de minerı́a de datos para
el análisis de incidencia de algunos factores externos presenten en los accidentes
vehiculares, para estimar la gravedad del siniestro.

5.3. Aportes originales


Se considera un aporte original al desarrollo de la investigación, la comparación
en el rendimiento de la ejecución de los modelos en las técnicas de minerı́a de datos
como los arboles de decisión y la regresión logı́stica.

5.4. Trabajos o Publicaciones derivadas


Dado que en este proyecto se evalúa la aplicación de técnicas de minerı́a de datos
al análisis de la incidencia de factores externos presentes en los siniestros viales, y que
por medio de la implementación de un formulario web es posible disponer de la lógica
del modelo implementado; el trabajo derivado a este proyecto es la implementación
de un prototipo de software para un sistema web, que permita el entrenamiento de
diferentes modelos, que pueda ser accedido desde diferentes lugares y permita aplicar
el análisis de datos asociados a un problema particular.
Capı́tulo 6

PROSPECTIVA DEL TRABAJO


DE GRADO

6.1. Lı́neas de investigación futuras


En el presente proyecto se exploran y siguen las distintas fases en la exploración
de datos, ası́ que principalmente las lı́neas de investigación futuras se relacionan a la
minerı́a de datos y la aplicación de sus resultados.
Es posible a partir del producto trabajado en este proyecto, aplicar tecnologı́a de
automatización, minimizando los tiempos y esfuerzos en la construcción de modelos
predictivos asociados a deferentes tipos de problemas.

6.2. Trabajos de Investigación futuros


Sobre la herramienta desarrollada es posible aplicar nuevas mejoras que potencien
sus resultados y funcionalidad.
Inicialmente, es posible agregar nuevas variables al estudio, como lo son la densidad
demográfica, el flujo vehicular, material de construcción de la vı́a, el estado fı́sico de
la misma, la cantidad de vehı́culos matriculados en la ciudad, entre otros.

Dado que principalmente se exploró la técnica de árboles de decisión como solución


al tema aquı́ tratado, pueden incorporarse nuevas técnicas de minerı́a y tratamiento
de datos para ampliar el rango de soluciones y métricas al proyecto. También se puede
incluir otros algoritmos para la construcción de arboles de decisión y poder comparar
cual se acopla mejor a los datos.

77
78 CAPÍTULO 6. PROSPECTIVA DEL TRABAJO DE GRADO

Este proyecto fue construido y ejecutado en un ambiente local, por lo que una
indiscutible mejora es el poder hacer uso de herramientas en la nube, donde se pueden
tener mejoras de rendimiento de los algoritmos aquı́ utilizados y disponibilidad de
la herramienta desde diversos lugares. Una posible herramienta que impulsarı́a esta
mejora es la Google App Engine, aunque existen en el mercado muchas más.
BIBLIOGRAFÍA

[1] O. M. de la Salud, Informe sobre la situación mundial de la seguridad vial 2013.


OMS, Bloomberg Philanthropies, 2013.

[2] C. Palma, W. Palma, and R. Pérez, Data Mining El arte de Anticipar. RiL
editores, 2014.

[3] J. P. Jiawei Han, Micheline Kamber, Data Mining: Concepts and Techniques.
Elsevier, 2012.

[4] M. P. Margarit, Tree Surgeon: Editor de árboles de decisión. Universidad Po-


litécnica de Cataluña, 2016. Tesis de grado.

[5] A. Azevedo and M. Filipe Santos, KDD, semma and CRISP-DM: A parallel
overview. 01 2008.

[6] F. S. Flores, Estimación de sucesos poco probables mediante Redes Bayesianas.


2014. Tesis Doctoral.

79
80 BIBLIOGRAFÍA
REFERENCIAS WEB

[7] E. H. W.E Vargas, E. Mozo P, “Análisis de los puntos más crı́ticos de accidentes
de tránsito de bogotá,” [Accedido: 21-abril-2019].

[8] S. D. de Movilidad, “Movilidad en cifras 2016 [en lı́nea].” Disponible en:


http://www.simur.gov.co/SimurVisorBoletinWA/2016.htmlPDF/1. [Accedido:
21-abril-2019].

[9] O. M. de la Salud, “Accidentes de tránsito [en lı́nea].” Disponible en:


https://www.who.int/es/news-room/fact-sheets/detail/road-traffic-injuries. [Ac-
cedido: 29-mar-2019].

[10] C. C. de Seguridad, “Diariamente se presentan en co-


lombia 90 accidentes viales [en lı́nea].” Disponible en:
https://ccs.org.co/salaprensa/index.php?option=comc ontent&view =
article&id = 516 : accidentalidadvialcatid = 296&Itemid = 830. [Accedido :
20 − ago − 2018].

[11] N. A, “Redes neuronales artificiales,” Núcleo de ingenierı́a biomédica, 2009.


[Accedido: 20-ago-2018].

[12] F. T. M. F.J, Barón López, “Apuntes de bioestadı́stica [en lı́nea].” Disponible en:
https://www.bioestadistica.uma.es/baron/apuntes/ficheros/cap08.pdf. [Accedido:
mayo-2019].

[13] U. de Granada, “Capı́tulo 8: Análisis discriminante [en lı́nea].” Disponible en:


https://www.ugr.es/ bioestad/p rivate/cpf und8.pdf. [Accedido : mayo − 2019].

[14] LucidChart, “Que es un diagrama de árbol de decisión? [en lı́nea].” Disponi-


ble en: https://www.lucidchart.com/pages/es/que-es-un-diagrama-de-arbol-de-
decision. [Accedido: 21-abril-2019].

81
82 REFERENCIAS WEB

[15] L. al Powered decisions, “Machine learning a tu alcance: La matriz de confusión


[en lı́nea].” Disponible en: https://data-speaks.luca-d3.com/2018/01/ML-a-tu-
alcance-matriz-confusion.html. [Accedido: 21-abril-2019].

[16] Minerva, “Kdd: ¿qué es el knowledge discovery in databases o kdd? [en lı́nea].”
Disponible en: https://mnrva.io/kdd-platform.html. [Accedido: 20-mar-2019].

[17] J. Román, “Crisp-dm: La metodologı́a para poner orden en los proyectos de


data science [en lı́nea].” Disponible en: https://data.sngular.com/es/art/25/crisp-
dm-la-metodologia-para-poner-orden-en-los-proyectos-de-data-science. [Accedido:
20-mar-2019].

[18] D. Calvo, “Modelo crisp dm – data mining [en lı́nea].” Disponible en:
http://www.diegocalvo.es/modelo-crisp-drm-data-mining. [Accedido: 20-mar-
2019].

[19] L. F. Mesa, “3 tipos de análisis de datos para mejorar la toma de decisiones [en
lı́nea].” Disponible en: https://www.pragma.com.co/blog/3-tipos-de-analisis-de-
datos-para-mejorar-la-toma-de-decisiones. [Accedido: 20-oct-2018].

[20] Oracle, “¿qué es big data? [en lı́nea].” Disponible en:


https://www.oracle.com/co/big-data/guide/what-is-big-data.html. [Acce-
dido: 18-oct-2018].

[21] I. C. I. Society, “What is computational intelligence? [en lı́nea].” Disponible en:


https://cis.ieee.org/about/what-is-ci. [Accedido: 10-mar-2019].

[22] Microsoft, “Conceptos de minerı́a de datos [en lı́nea].” Disponible


en: https://docs.microsoft.com/es-es/sql/analysis-services/data-mining/data-
mining-concepts?view=sql-server-2017. [Accedido: 28-oct-2018].

[23] EcuRed, “Minerı́a de datos [en lı́nea].” Disponible en:


https://www.ecured.cu/Minerı́a de Datos/. [Accedido: 18-oct-2018].

[24] IDIGER, “Localidad de kennedy. caracterización gene-


ral de escenarios de riesgo [en lı́nea].” Disponible en:
http://www.idiger.gov.co/documents/220605/314085/Identificación+y
+priorización.pdf/24386a78-ea2b-4abe-9516-9b9c37955fc4. [Accedido: 13-oct-
2018].
REFERENCIAS WEB 83

[25] R. y D. Secretaria de Cultura, “Localidad de


kennedy ficha basica [en lı́nea].” Disponible en:
http://www.culturarecreacionydeporte.gov.co/observatorio/documentos
/localidades/kenedy.pdf. [Accedido: 13-oct-2018].

[26] S. D. de Movilidad, “ACCIDENTES DE TRÁNSITO BOGOTÁ [en lı́nea].”


Disponible en: https://www.datos.gov.co/. [Accedido: 10-sep-2018].
84 REFERENCIAS WEB
Apéndice A

Módulos Python

config.cfg
1000 [DATABASE]
d b S e r v e r=mongodb : / / l o c a l h o s t : 2 7 0 1 7 /
1002 dbName=AccidentesKND
c o l l e c t i o n N a m e=A c c i d e n t e s
1004
[ FILES ]
1006 d i a s F e s t i v o s=diasFestivosYMD . t x t
n o r m a l i z a c i o n=n o r m a l i z a c i o n P a r a m e t r o s D a t a S e t . t x t
1008 exportDS=datasetHomologado . c s v
datasetCSV Homolodado=datasetHomologado . c s v
1010
[VAR]
1012 v a r i a b l e s D a t a s e t=H,M, TipoAccidente , L o c a l i d a d , ZonaAccidente , TipoTiempo ,
F e s t i v o , DiaSemana , F r a n j a P i c o y P l a c a , GravedadAccidente
v a r N o r m a l i z a c i o n=TipoAccidente , L o c a l i d a d , ZonaAccidente , TipoTiempo ,
F e s t i v o , DiaSemana , F r a n j a P i c o y P l a c a
1014 p r e d i c t o r s=H,M, TipoAccidente , L o c a l i d a d , ZonaAccidente , TipoTiempo , F e s t i v o
, DiaSemana , F r a n j a P i c o y P l a c a
t a r g e t=GravedadAccidente
1016 t a r g e t c l a s s e s=Con Heridos , Con Muertos , S o l o Danos

procesamientoDataSet.py
1000 # −∗− c o d i n g : u t f −8 −∗−
import c o n f i g p a r s e r
1002 from pymongo import MongoClient
from F u n c i o n e s import F u n c i o n e s
1004

85
86 APÉNDICE A. MÓDULOS PYTHON

1006 config = configparser . ConfigParser ()


c o n f i g . read ( ’ c o n f i g . c f g ’ )
1008

1010 #CONFIGURACION DE BASE DE DATOS


d b S e r v e r=c o n f i g . g e t ( ’DATABASE ’ , ’ d b S e r v e r ’ )
1012 dbName=c o n f i g . g e t ( ’DATABASE ’ , ’ dbName ’ )
c o l l e c t i o n N a m e=c o n f i g . g e t ( ’DATABASE ’ , ’ c o l l e c t i o n N a m e ’ )
1014
#CONFIGURACION ARCHIVOS DE INSUMO Y CONFIGURACION
1016 d i a s F e s t i v o s F i l e=c o n f i g . g e t ( ’ FILES ’ , ’ d i a s F e s t i v o s ’ )
n o r m a l i z a c i o n F i l e=c o n f i g . g e t ( ’ FILES ’ , ’ n o r m a l i z a c i o n ’ )
1018 e x p o r t F i l e=c o n f i g . g e t ( ’ FILES ’ , ’ exportDS ’ )

1020 #CARGUE VARIABLES PARA EL ESTUDIO


v a r i a b l e s D a t a s e t=c o n f i g . g e t ( ’VAR ’ , ’ v a r i a b l e s D a t a s e t ’ ) . s p l i t ( ’ , ’ )
1022 v a r N o r m a l i z a c i o n=c o n f i g . g e t ( ’VAR ’ , ’ v a r N o r m a l i z a c i o n ’ ) . s p l i t ( ’ , ’ )

1024

d e f t r a n s f o r m a c i o n D e D a t o s ( conn ) :
1026 f u n c i o n e s = Funciones ( )
print (” Actualizacion dias festivos ”)
1028 #Leer a r c h i v o de d i a s f e s t i v o s
f e s t i v o s L i s t = funciones . leerArchivo ( diasFestivosFile )
1030 #A c t u a l i z a r documentos con l o s d i a s f e s t i v o s .
f u n c i o n e s . a c t u a l i z a D i a F e s t i v o ( conn , f e s t i v o s L i s t )
1032
p r i n t ( ” A c t u a l i z a c i o n d i a de l a semana ” )
1034 #A c t u a l i z a r documentos con e l nombre d e l d i a de l a semana .
f u n c i o n e s . a c t u a l i z a D i a S e m a n a ( conn )
1036

print (” Actualizacion franja pico y placa ”)


1038 #A c t u a l i z a r documentos s i p e r t e n e c e n a l a f r a n j a de Pic o y P la ca .
f u n c i o n e s . a c t u a l i z a F r a n j a P i c o y P l a c a ( conn )
1040

1042 d e f n o r m a l i z a c i o n ( conn ) :
f u n c i o n e s = Funciones ( )
1044 #D e f i n i c i o n y c r e a c i o n d e l a r c h i v o de t r a n s f o r m a c i o n .
p r i n t ( ” Generando a r c h i v o de t r a n s f o r m a c i o n ” )
1046 f u n c i o n e s . n o r m a l i z a c i o n D e A t r i b u t o s ( conn , n o r m a l i z a c i o n F i l e ,
varNormalizacion )

1048 #Leer a r c h i v o de T r a n s f o r m a c i o n
transformacionList = funciones . leerArchivo ( normalizacionFile )
87

1050 #N o r m a l i z a c i o n de l o s a t r i b u t o s de cada documento en e l DataSet en


f u n c i o n d e l a r c h i v o de homologacion .
p r i n t ( ” Aplicando t r a n s f o r m a c i o n a l DataSet ” )
1052 f u n c i o n e s . t r a n s f o r m a c i o n C o n N o r m a l i z a c i o n ( conn , t r a n s f o r m a c i o n L i s t ,
True )

1054
d e f e x p o r t D a t a s e t ( conn ) :
1056 f u n c i o n e s = Funciones ( )
f u n c i o n e s . e x p o r t D a t a b a s e ( conn , e x p o r t F i l e , v a r i a b l e s D a t a s e t )
1058

1060 if name == ’ m a i n ’ :
try :
1062 #Se c r e a l a c o n e x i o n con e l s e r v i d o r de Base de Datos
c l i e n t = MongoClient ( d b S e r v e r )
1064 #Se i n d i c a e l Nombre de l a Base de Datos
db = c l i e n t [ dbName ]
1066 #Se i n d i c a e l Nombre de l a C o l e c c i o n
c o l l e c t i o n = db [ c o l l e c t i o n N a m e ]
1068 p r i n t ( ” Conexion e s t a b l e c i d a . ” )

1070 # Se a c t u a l i z a n r e g i s t r o s d e n t r o d e l DataSet
# transformacionDeDatos ( c o l l e c t i o n )
1072
# Se n o r m a l i z a n l o s a t r i b u t o s d e l DataSet
1074 # normalizacion ( c o l l e c t i o n )

1076 # Se e x p o r t a l a Base de Datos a un a r c h i v o CSV


exportDataset ( c o l l e c t i o n )
1078

1080 except :
print ( ” Error : Fallo a l i n t e n t a r e s t a b l e c e r conexion . ” )
1082
finally :
1084 #C i e r r e de l a c o n e x i o n a Base de Datos
client . close ()
1086 p r i n t ( ” Conexion c e r r a d a . ” )

Funciones.py
1000 # −∗− c o d i n g : u t f −8 −∗−
from d a t e t i m e import d a t e
1002 from bson . o b j e c t i d import O b j e c t I d
88 APÉNDICE A. MÓDULOS PYTHON

import r e
1004
diaSemana = [ ” Lunes ” , ” Martes ” , ” M i e r c o l e s ” , ” J u e v e s ” , ” V i e r n e s ” , ”
Sabado ” , ”Domingo” ]
1006 franjaPyP1 = [ 6 0 0 0 0 , 8 3 0 0 0 ]
franjaPyP2 = [ 1 5 0 0 0 0 , 1 9 3 0 0 0 ]
1008

1010 c l a s s Funciones ( ) :

1012 # Lee un a r c h i v o y r e t o r n a un o b j e t o L i s t
def leerArchivo ( s e l f , f i l e ) :
1014 try :
#Se l e e e l a r c h i v o i n d i c a d o
1016 f = open ( f i l e , ’ r+ ’ )
#Se g u a r d a s l a s l i n e a s l e i d a s en un o b j e t o L i s t
1018 lines = f . readlines ()
#C i e r r e de l a i n s t r u c c i o n de l e c t u r a
1020 f . close ()

1022 return l i n e s

1024 except :
p r i n t ( ” E r r o r : No s e pudo l e e r e l a r c h i v o ” , f i l e )
1026

1028 # Busca s i una hora s e e n c u e n t r a d e n t r o d e l rango determinado


d e f dentroDeLaFranja ( s e l f , f r a n j a , hora ) :
1030 resp = False
franjaMin = f r a n j a [ 0 ]
1032 franjaMax = f r a n j a [ 1 ]

1034 i f hora >= f r a n j a M i n and hora <= franjaMax :


r e s p = True
1036
return resp
1038

1040 # A c t u a l i z a l o s documentos con e l a t r i b u t o de d i a F e s t i v o


d e f a c t u a l i z a D i a F e s t i v o ( s e l f , conn , d i a s L i s t ) :
1042 ””” ” A c t u a l i z a e l DataSet con l o s d i a s f e s t i v o s ”””

1044 #Se a c t u a l i z a n t o d o s l o s r e g i s t r o s con un nuevo campo llamado ’


F e s t i v o ’ su v a l o r i g u a l a ’No ’
conn . update many ( { } , { ” $ s e t ” : { ” F e s t i v o ” : ”No” } } )
1046
89

#A c t u a i l z a c i o n de l o s r e g i s t r o s de l a Base de Datos en f u n c i o n
de l a s f e c h a s c a r g a d a s ( A c t u a l i z a c i o n a ” F e s t i v o ” : ” S i ” )
1048 for l i n e in diasList :
conn . update many ( { ’ F e c h a O c u r r e n c i a ’ : l i n e . s t r i p ( ) } , {” $ s e t ”
: { ” Festivo ” : ” Si ” }})
1050
p r i n t ( ” Fin de l a a c t u a l i z a c i o n de r e g i s t r o s con d i a f e s t i v o . ” )
1052

1054 # A c t u a l i z a l o s documentos con e l a t r i b u t o d e l d i a de l a semana


d e f a c t u a l i z a D i a S e m a n a ( s e l f , conn , ) :
1056 ””” ” A c t u a l i z a e l DataSet con e l d i a de l a semana ”””

1058 # Se buscan t o d a s l a s f e c h a s d e l data s e t


l i n e s = conn . d i s t i n c t ( ” F e c h a O c u r r e n c i a ” )
1060
for l i n e in l i n e s :
1062 sp = l i n e . s p l i t ( ”−” )
f e c h a = d a t e ( i n t ( sp [ 0 ] ) , i n t ( sp [ 1 ] ) , i n t ( sp [ 2 ] ) )
1064 conn . update many ( { ’ F e c h a O c u r r e n c i a ’ : l i n e . s t r i p ( ) } , {” $ s e t ”
: { ”DiaSemana” : diaSemana [ f e c h a . weekday ( ) ] } } )

1066 p r i n t ( ” Fin de l a a c t u a l i z a c i o n de r e g i s t r o s con d i a de l a


semana . ” )

1068

# A c t u a l i z a l o s documentos con e l a t r i b u t o f r a n j a p i c o y p l a c a
1070 d e f a c t u a l i z a F r a n j a P i c o y P l a c a ( s e l f , conn ) :
””” ” A c t u a l i z a e l DataSet con l a f r a n j a p i c o y p l a c a ”””
1072
#Se a c t u a l i z a n t o d o s l o s r e g i s t r o s con un nuevo campo llamado ’
F r a n j a P i c o y P l a c a ’ su v a l o r i g u a l a ’No ’
1074 conn . update many ( { } , {” $ s e t ” : { ” F r a n j a P i c o y P l a c a ” : ”No” } } )

1076 # Se r e a l i z a l a busqueda de t o d o s l o s documentos d e l DataSet


l i n e s = conn . d i s t i n c t ( ” i d ” )
1078
for l i n e in l i n e s :
1080 # Para cada documento s e busca s i s e e n c u e n t r a en f r a n j a
pico y placa
documento = conn . f i n d o n e ( { ’ i d ’ : O b j e c t I d ( l i n e ) } )
1082 h o r a A c c i d e n t e = i n t ( r e . sub ( ’ : ’ , ’ ’ , documento [ ’ HoraOcurrencia
’ ]) )

1084 i f ( ( documento [ ’ F e s t i v o ’ ] == ’No ’ )


and ( documento [ ’ DiaSemana ’ ] != ( ’ Sabado ’ ) and documento [ ’
90 APÉNDICE A. MÓDULOS PYTHON

DiaSemana ’ ] != ( ’ Domingo ’ ) )
1086 and ( s e l f . dentroDeLaFranja ( franjaPyP1 , h o r a A c c i d e n t e ) o r
s e l f . dentroDeLaFranja ( franjaPyP2 , h o r a A c c i d e n t e ) ) ) :
conn . update many ( { ’ i d ’ : O b j e c t I d ( l i n e ) } , { ” $ s e t ” : { ”
FranjaPicoyPlaca ” : ” Si ” }})
1088
# A c t u a l i z a campos Hora y Minutos
1090 hms=documento [ ’ HoraOcurrencia ’ ] . s p l i t ( ’ : ’ )

1092 conn . update many ( { ’ i d ’ : O b j e c t I d ( l i n e ) } , { ” $ s e t ” : { ”H” : hms


[0]}})
conn . update many ( { ’ i d ’ : O b j e c t I d ( l i n e ) } , { ” $ s e t ” : { ”M” : hms
[1]}})
1094

p r i n t ( ” Fin de l a a c t u a l i z a c i o n de r e g i s t r o s con l a f r a n j a p i c o
y placa . ”)
1096

1098
# A c t u a l i z a campos Hora y Minutos
1100 d e f actualizaHyM ( s e l f , conn ) :
””” ” A c t u a l i z a campos Hora y Minutos ”””
1102
#Se a c t u a l i z a n t o d o s l o s r e g i s t r o s con dos campos l l a m a d o s ”H”
y ”M”
1104 conn . update many ( { } , { ” $ s e t ” : { ”H” : ” 00 ” } } )
conn . update many ( { } , { ” $ s e t ” : { ”M” : ” 00 ” } } )
1106
# Se r e a l i z a l a busqueda de t o d o s l o s documentos d e l DataSet
1108 l i n e s = conn . d i s t i n c t ( ” i d ” )

1110 for l i n e in l i n e s :
# Para cada documento s e a c t u a l i z a n l o s campos de ”H” y ”M”
1112 documento = conn . f i n d o n e ( { ’ i d ’ : O b j e c t I d ( l i n e ) } )

1114 hms=documento [ ’ HoraOcurrencia ’ ] . s p l i t ( ’ : ’ )

1116 conn . update many ( { ’ i d ’ : O b j e c t I d ( l i n e ) } , { ” $ s e t ” : { ”H” : hms


[0]}})
conn . update many ( { ’ i d ’ : O b j e c t I d ( l i n e ) } , { ” $ s e t ” : { ”M” : hms
[1]}})
1118
p r i n t ( ” Fin de l a a c t u a l i z a c i o n de Hora , Minuto . ” )
1120

# I d e n t i f i c a l o s d i f e r e n t e s v a l o r e s que p o s e e cada a t r i b u t o y l e s
a s i g n a un v a l o r numerico para n o r m a l i z a r l o
91

1122 d e f n o r m a l i z a c i o n D e A t r i b u t o s ( s e l f , conn , f i l e , v a r N o r m a l i z a c i o n ) :
d i c t A t r b A c c i d e n t e s = {}
1124

f = open ( f i l e , ’w+ ’ )
1126 try :
#Busca l o s v a l o r e s d i f e r e n t e s para cada uno de l o s
atributos
1128 f o r atrb in varNormalizacion :
d i c t A t r b A c c i d e n t e s [ a t r b ] = conn . d i s t i n c t ( a t r b )
1130
# print ( dictAtrbAccidentes )
1132
#Se e s c r i b e a r c h i v o de p r o p i e d a d e s con l o s v a l o r e s de
n o r m a l i z a c i o n a p l i c a d o s a l DataSet
1134 # p r i n t (” −”∗60)
f o r key , v a l i n d i c t A t r b A c c i d e n t e s . i t e m s ( ) :
1136 f o r idx , v i n enumerate ( v a l ) :
data = ( key , ” : ” , v , ” : ” , s t r ( i d x ) , ”\n” )
1138 # p r i n t ( data )
f . w r i t e l i n e s ( data )
1140
except :
1142 p r i n t ( ” E r r o r : No s e pudo c r e a r e l a r c h i v o ” , f i l e )
finally :
1144 f . close ()

1146

1148 d e f t r a n s f o r m a c i o n C o n N o r m a l i z a c i o n ( s e l f , conn , l i n e s ,
transf Int String ) :

1150 #A c t u a i l z a c i o n de l o s r e g i s t r o s de l a Base de Datos en f u n c i o n


de l a N o r m a l i z a c i o n c a r g a d a
for l i n e in l i n e s :
1152 confLine = l i n e . s t r i p () . s p l i t (” : ”)
#V a l i d a c i o n de l a i n s t r u c c i o n de t r a n s f o r m a c i o n
1154 #S i e s True a c t u a l i z a de S t r i n g a I n t
#S i e s F a l s e a c t u a l i z a de INt a S t r i n g
1156 if transf Int String :
conn . update many ( { c o n f L i n e [ 0 ] : c o n f L i n e [ 1 ] } , {” $ s e t ” : {
confLine [ 0 ] : confLine [ 2 ] } } )
1158 else :
conn . update many ( { c o n f L i n e [ 0 ] : c o n f L i n e [ 2 ] } , {” $ s e t ” : {
confLine [ 0 ] : confLine [ 1 ] } } )
1160
if transf Int String :
92 APÉNDICE A. MÓDULOS PYTHON

1162 p r i n t ( ” Fin de l a a c t u a l i z a c i o n de r e g i s t r o s a v a l o r e s I n t . ”
)
else :
1164 p r i n t ( ” Fin de l a a c t u a l i z a c i o n de r e g i s t r o s a v a l o r e s
String . ”)

1166
d e f e x p o r t D a t a b a s e ( s e l f , conn , f i l e , a t t r s ) :
1168 p r i n t ( ” I n i c i o Export . ” )
attrUno = True
1170
f = open ( f i l e , ’w+ ’ )
1172 try :
#Se r e a l i z a l a busqueda de t o d o s l o s documentos d e l DataSet
1174 l i n e s = conn . d i s t i n c t ( ” i d ” )

1176 #Se e s c r i b e l a c a b e c e r a d e l a r c h i v o CSV


h e a d e r= ’ ’
1178 for attr in attrs :
i f ( attrUno ) :
1180 h e a d e r+=a t t r
attrUno=F a l s e
1182 else :
h e a d e r+=’ , ’+a t t r
1184 h e a d e r+=’ \n ’
attrUno=True
1186 # p r i n t ( header )
f . w r i t e l i n e s ( header )
1188
for l i n e in l i n e s :
1190 # Para cada documento s e l i s t a n l o s a t r i b u t o s a e x p o r t a r
documento = conn . f i n d o n e ( { ’ i d ’ : O b j e c t I d ( l i n e ) } )
1192
data= ’ ’
1194 for attr in attrs :
i f ( attrUno ) :
1196 try :
data+=documento [ a t t r ]
1198 except :
data+=” ”
1200 attrUno=F a l s e
else :
1202 try :
data+=’ , ’+documento [ a t t r ]
1204 except :
data+=’ , ’+” ”
93

1206 data+=’ \n ’
attrUno=True
1208 # p r i n t ( data )
f . w r i t e l i n e s ( data )
1210
except :
1212 p r i n t ( ” E r r o r : No s e pudo c r e a r e l a r c h i v o ” , f i l e )
finally :
1214 f . close ()

1216 p r i n t ( ” Export Completado ! ! ! ” )

También podría gustarte