Identificación de Obras Urbanas para La Ciudad de Lima A Través Del Uso de Herramientas - MENDOZA
Identificación de Obras Urbanas para La Ciudad de Lima A Través Del Uso de Herramientas - MENDOZA
Identificación de Obras Urbanas para La Ciudad de Lima A Través Del Uso de Herramientas - MENDOZA
ESCUELA DE POSGRADO
PRESENTADA POR
Juan Francisco Mendoza Bernedo, DNI: 43977334
Fernando Jesús Saldaña Bustamante, DNI: 41275676
Rocío Susana Vivanco Yovera, DNI: 03898287
ASESOR
Dr. Luis Negrón Naldos, DNI: 10788917
ORCID 0000-0003-1328-0323
JURADO
Dr. Percy Maquina Feldman
Dr. Yván García López
Dr. Luis Negrón Naldos
El profesor Yván García, por los conocimientos transmitidos, los mismos que hicieron
posible el desarrollo y entrega de esta tesis, con una base sólida de liderazgo y planeamiento
estratégico.
A mis padres, Juan y Gladys, quienes con su esfuerzo me brindaron todas las
herramientas necesarias para lograr mis metas; gracias por inculcarme los valores necesarios
para afrontar los desafíos y adversidades de la vida. A mi hermana Angélica, por su constante
acompañaron durante el desarrollo de este gran paso en mi vida profesional; gracias por su
amor y comprensión. A mis padres, por su ejemplo y por el gran esfuerzo que dedicaron en
mi educación.
continuar con los estudios de la maestría y ser mi soporte en todo momento. A mis hijos y
mis padres, que son las personas que siempre están presentes en cada acción de mi vida.
también conocido como minería de opinión (opinion mining), es, para Liu (2015), un campo
de estudio que se centra en analizar las opiniones que expresan o implican sentimientos
intención que tiene el usuario cuando publica un mensaje sobre las obras urbanas en la ciudad
que son de gran importancia para la Municipalidad de Lima, debido a que, al tener identificada
la problemática de las obras urbanas por distritos, podrá plantear estrategias para priorizar
obras de manera anticipada y así poder planificarlas para su ejecución en el periodo municipal.
machine (SVM) muestran valores de aciertos del modelo de alrededor del 78% en análisis de
obras urbanas, disgregada en tres tipos: parques, pistas y veredas. Los resultados generales
del modelo son buenos en comparación con las investigaciones de otros autores como Aiala
et al. (2017).
Abstract
This research is called "Identification of urban works for the city of Lima through the use of
tools based on Machine Learning", it has as goal the use of technology based on Machine
Learning for the identification of urban works in the city of Lima. The possibility of
extracting and analyzing information from different social media through sentiment analysis,
also known as opinion mining; that for Liu (2015), is a field of study that focuses mainly on
analyzing the opinions that express or imply positive or negative feelings. To address this
topic, a model is proposed for the automatic classification of Twitter messages to try to
understand the intention of the user when he publishes a message about urban works in the
city of Lima, especially roads, parks, and sidewalks, additionally it is necessary to identify
the location of urban works in the districts of Lima. This research allowed to identify patterns
of behavior that are of great importance for Lima Municipality, because by having identified
the problem of urban works by districts, it will allow them to propose strategies that allow
prioritizing the districts with demand for urban works in advance and be able to plan them for
execution in the governance period. The results obtained using the Support Vector Machine
around 78% in sentiment analysis. A first classification of districts was made with the
urgently needs urban works and has been classified into the three types of urban works:
parks, tracks, sidewalks. The general results of the model are good when comparing the
Tabla de Contenidos
Lista de Tablas……………………………………………………………………………… v
Capítulo I: Introducción…………………………………………………………………… 1
Referencias........................................................................................................................... 75
Lista de Tablas
Metropolitana, 2019……………………………………………………………. 5
Lista de Figuras
Parques………………………………………………………………………… 59
Veredas………………………………………………………………………… 62
Pistas…………………………………………………………………………… 65
Lima en Parques………………………………………………………………. 67
Lima en Veredas………………………………………………………………. 68
Lima en Pistas…………………………………………………………………. 69
1
Capítulo I: Introducción
1.1 Antecedentes
Unidas (ONU, 2018) señaló que un 54.6% de personas vive en las ciudades, y se proyecta
poderes públicos y privados en la medida en que las urbes deben establecer estrategias de
2015).
Los grandes retos que los países enfrentarán por la aglomeración urbana son la
Las ciudades desarrollan estrategias para poder enfrentar los grandes retos derivados
del crecimiento de la población y del agotamiento de los recursos naturales. Todo ello les
como centro al ciudadano, buscando que sean sostenibles, inclusivas y pensada para sus
habitantes, con el objetivo de satisfacer sus necesidades y resolver sus problemas de forma
inteligente. Una ciudad inteligente es aquella que coloca a las personas en el centro del
Para tener una referencia sobre el desarrollo de las ciudades, se puede observar el
índice IESE Cities in Motion (ICIM), estudio anual realizado por la escuela de negocios de la
de las principales ciudades del mundo en búsqueda de que sean más inteligentes. De acuerdo
con el ICIM publicado el año 2020, Lima se encuentra en el puesto 155 de un total de 174
ciudades estudiadas a nivel global, con un ICIM de 34.23, que la ubica en la categoría (B) por
con Lima, utilizando datos del ICIM de los últimos tres años (IESE Business School, 2020).
Tabla 1
Santiago, Chile 1 85 75 68
Buenos Aires, Argentina 2 87 94 90
Montevideo, Uruguay 3 109 108 110
Panamá, Panamá 4 116 116 113
San José, Costa Rica 5 113 115 114
Lima, Perú 21 131 138 155
Nota. Adaptado de “Índice IESE Cities in Motion 2020,” por IESE Business School, 2020
(https://media.iese.edu/research/pdfs/ST-0542.pdf).
abiertos, Big Data y Analytics, que permitan desarrollar análisis predictivos y sean soporte en
Asimismo, según estos mismos autores, para administrar y mejorar las ciudades, es necesario
conocer lo que sucede en ellas y en sus diferentes regiones. Esto es posible modificando las
En Perú, como parte de la respuesta del Gobierno en busca del desarrollo del país, la
viene desarrollando la Estrategia Nacional de Inteligencia Artificial, conocida por sus siglas
IA, en donde se toma como definición actual de IA la brindada por la Organización para la
electrónico-mecánico que puede, para una serie de objetivos definidos por humanos, hacer
como “Conjunto de modelos de inteligencia artificial que aprenden en base a datos (de
entrenamiento) para poder predecir resultados o tomar decisiones sin ser explícitamente
programados para ello” (Secretaría de Gobierno y Transformación Digital de la PCM, 2021, p. 12).
peruano de enero 2021, donde solo el 7% de las instituciones que contestaron indica que
Tabla 2
La Estrategia Nacional de IA peruana propone los siguientes seis ejes estratégicos: (a)
formación y atracción de talento, (b) modelo económico, (c) infraestructura tecnológica, (d)
datos, (e) ética, y (f) colaboración. Cada uno de los ejes cuenta con objetivos estratégicos. El
segundo objetivo estratégico dentro del segundo eje, modelo económico, es “impulsar en los
Este objetivo permite apreciar el esfuerzo del Gobierno del Perú, alineado con la guía del
de Lima Metropolitana, aprovechando fuentes de redes sociales que son de acceso público y
veredas, las cuales son parte de la infraestructura que propone y ejecuta el INVERMET.
Existe una falta de sintonía entre las necesidades actuales de la ciudadanía y las obras
públicas planteadas para la ciudad de Lima, donde no se consideran las urgencias y reclamos
de los ciudadanos como apoyo para la definición de obras urbanas en Lima Metropolitana.
(AVIACTRAN), por cada kilómetro recorrido se puede encontrar ocho baches en zonas
urbanas de Lima Metropolitana. En las vías denominadas rápidas hay al menos dos huecos
Universidad Católica del Perú (IOP- PUCP), por encargo del observatorio ciudadano Lima
ambiental en la ciudad, superado solo por la contaminación ocasionada por los vehículos
automotores (Lima Cómo Vamos, 2019). La misma encuesta reveló, asimismo, que solo un
18.1% está conforme con la gestión de la Municipalidad de Lima (ver Tabla 3). La
satisfacción con los parques y áreas verdes de uso público en Lima Metropolitana indica un
17%.
Tabla 3
Nota. Adaptado de “Lima y Callao según sus ciudadanos: Décimo informe urbano de percepción sobre calidad de vida en la
ciudad,” por Lima Cómo Vamos, 2019 (http://www.limacomovamos.org/wp-content/uploads/2019/11/Encuesta-
2019_web.pdf).
importantes para la ciudad”, solo un 22.1% confirmó dicha afirmación, en tanto que a la
la ciudad”, el 24.3% estuvo de acuerdo (Lima Cómo Vamos, 2019), tal como se puede
Tabla 4
%
Gestión de la Municipalidad Metropolitana
Lima
En desacuerdo 22.3
Las decisiones de la Municipalidad favorecen a unas
pocas personas o grupos
De acuerdo 45.1
En desacuerdo 34.8
Las acciones de la Municipalidad de Lima Metropolitana
realmente contribuyen al desarrollo de la ciudad
De acuerdo 24.3
En desacuerdo 9.8
Existe corrupción en la gestión de los recursos públicos
De acuerdo 72.6
Nota. Adaptado de “Lima y Callao según sus ciudadanos: Décimo informe urbano de percepción sobre calidad de vida en la
ciudad,” por Lima Cómo Vamos, 2019 (http://www.limacomovamos.org/wp-content/uploads/2019/11/Encuesta-
2019_web.pdf).
parques, pistas y veredas, con el uso de los datos a través de un modelo analítico basado en
machine learning, con el objetivo de brindar estas obras públicas enfocadas en las
necesidades de los ciudadanos y así aportar al desarrollo de las ciudades de forma inteligente.
las zonas en la ciudad de Lima donde se presentan los problemas referidos a obras
• Determinar las obras públicas de parques, pistas y veredas que presentan el mayor
• ¿En qué medida el uso de herramientas analíticas permite identificar las zonas de
basadas en machine learning para el sector público en Perú, ya que solo el 7% de las
(Secretaría de Gobierno y Transformación Digital de la PCM, 2021). Esto forma parte de uno
aportar como una herramienta inteligente en la identificación de problemas con obras urbanas
ranking global de desarrollo de ciudades la ubica en el puesto 155 de 174 ciudades (IESE
Business School, 2020), lo que demuestra la existencia de una gran brecha por cubrir en
busca de mejorar la calidad de vida de sus habitantes y del desarrollo a una ciudad
inteligente. La Figura 1 presenta el resultado obtenido por Lima en cada una de las
dimensiones evaluadas en el Índice IESE Cities in Motion (ICIM) publicado el año 2020.
Figura 1
Nota. Tomado de “Índice IESE Cities in Motion 2020,” por IESE Business School, 2020
(https://media.iese.edu/research/pdfs/ST-0542.pdf).
uso de machine learning para entidades públicas peruanas. El empleo de la analítica permitirá
163 de las 174 estudiadas para esta dimensión (IESE Business School, 2020). La aplicación
9
aporte como un caso de aplicación de esta tecnología en beneficio del sector público.
Desarrollo (BID) en su camino hacia las ciudades inteligentes, uno de los pasos por seguir es
la participación ciudadana, que trata de crear mecanismos para oír a la población en cada
justamente para identificar problemas sobre mejoramiento de parques, pistas y veredas, los
167 de 174 ciudades estudiadas (IESE Business School, 2020). Algunos de los indicadores
que se evalúan en esta dimensión son: índice de ineficiencia en el tráfico, tráfico exponencial,
índice de tráfico. Claramente, existen muchos problemas por identificar en este aspecto, y con
esta investigación se aporta al abrir un canal más de análisis, como son las redes sociales,
PCM, 2021). Con este tema, se impulsa el uso de la IA en una de las empresas públicas que
actualmente no la viene aplicando. Además, está alineada con la política del Estado de
10
ofrecer los servicios públicos teniendo como centro al ciudadano. El uso de machine learning
1.7 Limitaciones
Según la encuesta nacional de hogares ENAHO, al tercer trimestre del 2020, el 70.3%
de la población en Perú tiene acceso a Internet (ComexPerú, 2021). Si bien en los últimos
años este acceso ha registrado avances significativos, ha sido bastante heterogéneo, lo que ha
limitado el uso óptimo de los servicios digitales y el uso de las redes sociales para realizar
Por la presencia de la covid-19 desde inicio del 2020, el Perú ingresa a varias
cuarentenas, que obligan a la población a no salir de sus domicilios. Los ciudadanos prestan
atención a la covid-19 y dejan de lados otros temas pendientes de la ciudad, como son las
obras urbanas.
Para este trabajo de investigación se limitó el uso de los comentarios de la red social
Twitter al utilizar los módulos de desarrollador que puede compartir. Otros datos son
El tiempo utilizado para la recolección de datos de la red social Twitter fue de dos
limitaron los datos encontrados sobre el tema de investigación, enfocados en las obras
1.8 Delimitación
social Twitter que contengan referencias al estado de obras públicas en Lima Metropolitana,
que reporten problemas o quejas de las obras en mención y a los que hagan referencia a la
La investigación se realizará para las obras públicas que son gestionadas por la
ciudad de Lima y las obras vinculadas a pistas y veredas abarcan toda Lima Metropolitana.
sociales con las herramientas basadas en machine learning en un espacio temporal de cuatro a
estructurados es muy amplia y deberá ser delimitada a este espacio de tiempo para un mejor
análisis.
El presente trabajo plantea diseñar una solución que apoye a la toma de decisiones
componentes:
2. La opinión pública en redes sociales: Para que toda esta propuesta tenga los
2.1 Introducción
Una ciudad inteligente es aquella que “utiliza la tecnología para prestar de forma más
eficiente los servicios urbanos, mejorar la calidad de vida de los ciudadanos y transformar la
relación entre entidades locales, empresas y ciudadanos, facilitando una nueva forma de vivir
refleja en dos términos. El primer término es Artificial Intelligence (AI), definida como “la
inteligente” (McCarthy et al., 1956, p. 12). Con este concepto crearon la base y la simulación
que permiten replicar por medio de algoritmos ciertas capacidades y actividades humanas.
término, tecnologías de big data, al complementarse entre sí (Allam & Dhunny, 2019). Según
Thakuriah et al. (2017), el término big data son los “datos estructurados y no estructurados
Una vez recopilados, los algoritmos de big data se emplean para procesar y analizar
los datos con AI y softwares avanzados con el fin de extraer información útil para descifrar y
conceptos importantes, con la finalidad de evaluar el origen de este tipo de metodologías, sus
objetivos, las herramientas que necesitan para su aplicación, y el escenario previo a ello, lo
que conllevará a contar con un panorama claro y preciso acerca de lo que se requiere para su
Lima. Los antecedentes están divididos en tres pilares que logran el objetivo de esta tesis.
El primer pilar viene en conjunto con el término smart city. Dicha evolución del smart
las políticas urbanas, que ofrezca un marco de análisis para comprender los conceptos que están
la ciudad, y así satisfacer la necesidad del ciudadano. Por su parte, Sota (2018) mencionó que
las necesidades actuales de las urbes que se constituyen hoy están haciendo que se generen
que afectan el progreso de las ciudades y la calidad de vida de las personas. El modelo de
significativamente en la vida de los ciudadanos y solucionar los retos urbanos más urgentes de
particular de Lima. Señalaron que es necesario definir los factores determinantes para la
El segundo pilar considera que el uso de la tecnología para poder obtener la abundante
redes sociales llevan a utilizar una arquitectura plana para el almacenamiento. Jerí y Sosa (2019)
y YouTube vinculada a viajar. Esta búsqueda fue cuantificada con herramientas como Google
Trends. Los índices que se pueden obtener con esta herramienta forman parte del big data.
Carrasco (2019) realizó un estudio para la extracción de datos en las redes sociales
limpieza de datos. Utilizó también un disparador que reúne en determinado tiempo los
nutricionales y luego implementar políticas que ayuden a subir el nivel de ventas. La minería
de datos puede ser aplicada a cualquier modelado de datos sobre clientes; todo el proceso
debe estar encaminado a soportar una futura toma de decisiones estratégicas, que es el
Finalmente, el tercer pilar son las ciencias de la computación, que han tomado un
papel fundamental en el desarrollo de las actividades cotidianas del ser humano, presentando
herramientas que dan solución a problemas en distintos ámbitos. Marín y Díaz (2015)
desarrollaron un método que extrae la opinión de usuarios en Twitter, donde los tweets son
clasificados en negativos o positivos acerca de los candidatos de dos partidos políticos, para
al final predecir cuál sería el resultado de las elecciones. Este tipo de análisis de sentimientos
ayuda a aplicar a los datos recogidos de las redes sociales para luego hacer una clasificación y
predicción sobre los usuarios. Medhat et al. (2014) analizaron un enfoque en el que un flujo
16
El reto de las ciencias computacionales es extraer información útil del medio en el que
el ser humano interactúa, con el fin de crear modelos matemáticos, estadísticos o cuantitativos
que puedan representar estos procesos naturales del hombre (Gamarra & Ríos, 2018). Sobrino
lenguaje natural (NLP, por sus siglas en inglés) y el análisis de sentimiento, así como los
Del mismo modo, Olarte y Casaverde (2020) implementaron una arquitectura para
soporte vectorial, para obtener como resultado una calificación positiva o negativa. Para el
manipulación de datos con librerías de Python. Se aplicó el algoritmo SVM (Support Vector
Machine (LSVM), K-Nearest Neighbor (K-NN), Multinomial Naïve Bayes (NB) y Logistic
Rregression (LR). Los algoritmos fueron entrenados utilizando textos en idioma español, y
mejor rendimiento fue Multinomial NB, debido a sus características de entrenamiento con
Organización de Naciones Unidas (ONU, 2018), por primera vez más de la mitad de la
población mundial vive en ciudades (54.6%) y el proceso de migración rural hacia lo urbano
para el año 2050, más del 70% de personas vivirán en ciudades. De acuerdo con el censo de
población realizado el año 2017, el 79.3% de los habitantes del Perú vive en centros poblados
etc.; destaca la necesidad de crear mejores condiciones de habitabilidad para los ciudadanos a
través de decisiones de gobierno que se apoyen en el uso de tecnología. Como parte de las
actividades del World Smart City Forum, realizado en julio del 2016, los representantes de la
(ETSI, por sus siglas en inglés) se reunieron con el objetivo de acelerar y alinear el trabajo de
beneficio para el ciudadano y el crecimiento ordenado de las ciudades. Según Caragliu y Del
Bo (2019):
Una ciudad puede definirse como ‘Smart’ cuando invierte en capital humano y social;
desarrollo económico sostenible y una alta calidad de vida; con una gestión inteligente de
Por otro lado, la compresión de la inteligencia o smartness de las ciudades depende del
campo en la que se estudie (Nam & Prado, 2011) y está condicionada por factores tecnológicos,
humanos e institucionales. La Agenda 2030 sobre Desarrollo Sostenible, aprobada en 2015 por la
Organización de las Naciones Unidas (ONU), mencionó que los países y sociedades emprenden
un nuevo camino para mejorar la vida de todos. Esta agenda está basada en 17 objetivos de
desarrollo sostenible (ODS), dentro de los cuales el número 11, Ciudades y Comunidades
Sostenibles, busca crear espacios inclusivos, seguros, resilientes y sostenibles (ONU, s.f.).
La utilización de las smart cities viene siendo impulsada por los proveedores de
tecnología, con la implementación de sistemas basados en Internet de las cosas (IoT: Internet
of the Things) y la implementación de sistemas que tienen como base las tecnologías de
información. Estos dos caminos se unen a otro más amplio que consiste en la mejora de la gestión
de los centros urbanos (Cohen, 2015). Finalmente, todo se engloba en un cambio de procesos
internos para poder lograrlos. Así, al realizar esta implementación se inicia el smart city.
Es vital el rol de los municipios y sus líderes para determinar el futuro deseado para
smart cities se complementa con la mejora de los servicios estatales, la calidad y el énfasis en
los problemas de transporte, salud pública y ecología (Vishnivetskaya & Alexandrova, 2019).
involucramiento en las soluciones generales. Se debe tener especial cuidado en incluir las
evolución de las ciudades establece nuevos retos para las comunidades, como el
públicas han tomado algunos conceptos desarrollados por organizaciones extranjeras como el
Una ciudad inteligente es aquella que coloca a las personas en el centro del desarrollo,
Alemán Smart City realizado en noviembre del año 2015, definió a las ciudades inteligentes
como “lugares donde las tecnologías de información son usadas para mejorar la calidad y
desempeño de los servicios urbanos, reducir costos y consumo de recursos, e involucrar más
ISO 37120, actualizada a julio del 2018, que señala y estandariza los indicadores para los
servicios y calidad de vida en las comunidades y las ciudades (Apolitano, 2019). La ISO
37122 define seis indicadores para una smart city, los cuales buscan estandarizar sus procesos
20
de desarrollo. Tales indicadores son los siguientes: (a) smart economy, (b) smart people, (c)
smart governance, (d) smart mobility, (e) smart environment, y (f) smart living (International
La analítica predictiva surge como una idea de negocio, donde es utilizada para
personalizar propuestas de valor en tiempo real, las cuales son pensadas para los
tiende a prolongar la participación de mercado de las empresas, sobre todo cuando los nativos
instaladas en la ciudad, redes sociales, entre otros. Así, este cúmulo de información permite
mental que le permite tomar decisiones y efectuar tareas propias de los seres
humanos por medio de algoritmos, los cuales son capaces de ingerir y analizar
informática y filosofía que están destinadas a hacer que los computadores realicen funciones
que se pensaba que eran exclusivamente humanas, como percibir el significado en el lenguaje
El campo de la inteligencia artificial tiene una larga historia tras de sí, con muchos
estudiar modelos de cómputo capaces de realizar actividades propias de los seres humanos
Por su parte, autores como McCarthy et al. (1955) y Torra (2011) definieron la
inteligencia artificial como el de construir una máquina que se comporte de tal manera que, si
acuerdo con Rouse (2019), la Inteligencia Artificial (IA), en función de sus objetivos finales
• Inteligencia artificial fuerte: Se considera que un ordenador puede tener una mente
y unos estados mentales, y que, por lo tanto, un día será posible construir uno con
todas las capacidades de la mente humana. Este ordenador será capaz de razonar,
Los datos generados por los usuarios en Internet mediante sus interacciones y
decisiones empresariales, las mismas que están basadas en datos obtenidos mediante el uso de
IA (Costa, 2015). Con las herramientas y recursos tecnológicos disponibles, y cada vez más
empresariales, se pretende ayudar en la gran tarea de identificar qué sectores e industrias son
los que poseen mayor interactividad y gran connotación positiva en los comentarios, que
sector e industria. Todo ello será posible gracias a diferentes algoritmos de aprendizaje
Según Russell y Norvig (2004), existen varios tipos de inteligencia artificial, que son
los siguientes:
• Sistemas que actúan como humanos: Estos sistemas tratan de actuar como
estudio de cómo lograr que los computadores realicen tareas que, por el momento,
sistemas tratan de imitar el pensamiento racional del ser humano; por ejemplo, los
sistemas expertos (el estudio de los cálculos que hacen posible percibir, razonar y
actuar).
o Sistemas expertos: Infieren una solución a través del conocimiento previo del
aprender por sí mismas, sin necesidad de ser programadas por una persona previamente. Con
solo para realizar las tareas para las que han sido creadas en un primer momento. También es
definido como un algoritmo que tiene la finalidad de predecir sucesos futuros que son
Así mismo, Candia (2019) definió al machine learning como una manera en que las
computadoras pueden aprender por sí solas, pero con ayuda de los humanos. Y, a su vez,
estos pueden obtener patrones para construir modelos y predecir comportamientos anticipadamente.
(Mamani, 2019). Según García (2019), los tipos de aprendizaje supervisado son de
(patrones).
25
Los métodos supervisados son los más utilizados, porque constan de un proceso de
entrenamiento con base en ejemplos entregados por humanos, donde se indica explícitamente
Cada comentario que define una expresión hecha por las personas es explicado sobre
la base de características que pueden ser de una palabra (unigramas), conjunto de dos
palabras (bigramas), etc. Ciertos sentimientos son expresados con dos o más palabras que
abarcan características importantes, como la negación de una frase (Manupati et al., 2013).
clasificación de los nuevos datos entregados. Para pasar de etapas son necesarias la selección
y extracción de las features a cada dato. Uno de los métodos más utilizados son las support
Las máquinas de vectores de soporte o support vector machines (SVM) son altamente
métodos de kernel, los cuales toman los datos y lo ponen dentro de un espacio de
características apropiado (ver Figura 2). Se utilizan algoritmos lineales para determinar
una serie de datos nuevos. Los datos son clasificados mediante la generación de hiperplanos
26
que tienen como objetivo minimizar el porcentaje de error del conjunto de entrenamiento y
Las SVM fijan el criterio de separación entre clases que estén lo más lejos posible de
cualquier dato. La distancia del punto de decisión al punto más cercano es el margen del
clasificador. El método queda definido por una función de decisión que involucra un
separador. La decisión del límite o margen es bastante importante, ya que los datos que
queden en torno a este tendrán una menor probabilidad de ser catalogados correctamente.
Figura 2
Nota. Adaptado de “Tutorial sobre máquinas de vectores soporte - SVM” (p. 6), por E.
Carmona, 2016
(https://www.researchgate.net/publication/263817587_Tutorial_sobre_Maquinas_de_Vectore
s_Soporte_SVM).
H: w.x+b = 0
H1: w.x + b = 1
H2: w.x + b = -1
Donde:
separa el conjunto de puntos de datos que tienen el rótulo de clase de X2=1 del conjunto de
puntos de datos que tienen el rótulo de clase X2=−1, de tal manera que la distancia entre el
hiperplano y la muestra de los puntos de datos de cualquier clase más cercana se maximiza.
de clasificación. Consta de una tabla de dos dimensiones: real y predicción. Las columnas de
la matriz indican la clase observada o real, y las filas indican la clase predicha. La dimensión
real se refiere a los datos reales, los cuales van a ser comparados con las predicciones. Estas
predicciones se hacen con los modelos de clasificación como el SVM (ver Tabla 5).
Tabla 5
Matriz de Confusión
Clase
+ -
+ PT PF
Predicción de clases
- NF NT
Nota. PT= N° de positivos definidos como positivos correctos; NT= N° de negativos definidos como negativos correctos;
NF= N° de positivos definidos como negativos incorrectos; PF: N° de negativos definidos como positivos incorrectos.
Adaptado de “Diseño de un proceso de alertas tempranas para disminuir las deserciones de los estudiantes de primer año en
una institución de educación superior,” (Tesis de maestría), por F. P. Miranda, 2019
(http://repositorio.uchile.cl/bitstream/handle/2250/172649/Dise%C3%B1o-de-un-proceso-de-alertas-tempranas-para-
disminuir-las-deserciones.pdf?sequence=1).
verdadero.
28
• Sentitivity: Son valores que pueden identificar la capacidad de limitar los casos
• F1-score: En este cálculo se busca obtener una puntuación única que represente
Este valor será la base de optimismo del modelo que se realizará y por
2.6.4 Corpus
Para el caso de los métodos supervisados es necesario contar con un dataset o corpus
de comentarios en las redes sociales sobre el tópico por investigar (Sobrino, 2018).
Los mensajes de corpus antes de ser valorarizados pasan por un proceso de limpieza
de datos, se quitan los comentarios que no aportan valor al dataset. Los corpus pueden ser
aplicación y mayor extensión en distintos casos de uso, pero se puede partir de una definición
original que la mayoría de los autores toma como base para iniciar en el concepto de big data.
De acuerdo con Laney (2001), big data es un término utilizado para referirse a la gran
29
cantidad de datos con tres características denominadas como las 3 V (volumen, velocidad y
variedad), las cuales superan los parámetros de cualquier software tradicional en la gestión de
datos. En otras palabras, lo que se busca transmitir con este concepto es que existe una gran
distintas fuentes de origen y que, además, vienen en muy variados tipos de formatos
Con el tiempo, al primer concepto planteado por Laney (2001) se le agregaron otras
V, que representan características que deben ser consideradas para que el concepto de big
data abarque con amplitud lo que realmente se viene desarrollando en la práctica (Kalbandi
& Anuradha, 2015). La siguiente característica agregada a las tres iniciales es la de valor,
haciendo referencia a que toda esta gran cantidad de datos debe aportar algún tipo de valor
para realizar su procesamiento. Como una quinta característica adicional a este concepto se
incorpora la veracidad, que es la validez de los datos que ingresan al sistema. Teniendo estas
dos V adicionales, el concepto de big data se amplía a cinco características. No obstante, una
mayor revisión sobre la definición mostrará que distintos autores van añadiendo más
En cuanto al volumen, es la cantidad de datos por analizar, los cuales varían sin que se
tenga definida una cantidad en específico, pero hoy en día existen empresas que manejan
sensores y el auge del IoT (Internet de las cosas) lleva consigo que muchos dispositivos se
30
fuente de los datos, pues en la actualidad existen muchas fuentes de datos, distintas redes
sociales, información pública del Gobierno, además de las fuentes internas de una empresa.
El segundo enfoque de variedad hace referencia a las distintas estructuras en que se presentan
en bases de datos relacionales; hoy se cuenta además con data semiestructurada y data no
estructurada, lo cual lleva al tercer enfoque de variedad, referido a los distintos tipos de
formatos en los que se presentan los datos, como imágenes, videos, audios. El streaming, por
Anuradha, 2015).
los datos muestren utilidad para el negocio; si los datos no logran aportar a la toma de
Anuradha, 2015).
Por último, la veracidad se refiere a la certeza que tienen los datos, disminuyendo la
datos falsos que llevarán al error en el análisis de información y, por tanto, al error en la toma
Las redes sociales son estructuras formadas en Internet por personas u organizaciones
que se conectan a partir de intereses o valores comunes. A través de ellas, se crean relaciones
El concepto de red social, desde un enfoque analítico, está más cerca de la idea de
sociograma de Moreno (1940), cuando definió a la estructura social como “la red de las
relaciones existentes entre las personas implicadas en una sociedad” (Requena, 1989, p. 138).
Genéricamente, una red social puede concebirse como una estructura social formada
por individuos que están vinculados por algún motivo, ya sea amistad, parentesco, ideas,
aficiones, relaciones de trabajo, docentes, etc. Para la caracterización de las redes sociales se
establecen dos conceptos fundamentales: los nodos, que caracterizan a los individuos en la
red, y los enlaces o aristas, que vinculan a los individuos (Vidal & Vialart, 2013).
Las redes sociales recogen mucha información relevante sobre nuestra sociedad, y los
microblogging son una parte importante de la comunicación actual. Esto permite que los
usuarios puedan publicar una opinión acerca de un determinado tema haciendo uso de
Las redes sociales como Twitter, Google+, Facebook y WhatsApp contienen gran
cantidad de publicaciones en sus sitios web. Esto hace de estas plataformas una fuente para
masiva cantidad de información, que en casos como Twitter llegan a ser millones de
comentarios por día alrededor del mundo. Esta vasta información debe ser aprovechada para
interpretar los datos con la finalidad de saber cuántas opiniones son realizadas positivamente
Sin embargo, se carece de una herramienta capaz de hacer un análisis de todos estos
comentarios y determinar una polaridad (si una opinión es positiva o negativa). Por ello, se
machine (SVM).
la IA; sin embargo, debido a las limitaciones sociales y económicas se ha realizado poca
podría ser una herramienta importante para abordar diversos desafíos que afectan el
desarrollo de un país.
una necesidad particular del machine learning, porque requieren múltiples fuentes de datos
de las que se pueden extraer insights1. Esto permite incrementar la eficiencia y mejorar los
automático puede ayudar a detectar problemas de fraude y minimizar los riesgos de realizar
1
Un insight es una comprensión de las necesidades reales expresadas y no expresadas por los clientes.
33
La metodología utilizada para llevar a cabo el presente trabajo consideró dos aspectos
método de trabajo que se utilizó, dentro del cual se aplicó un modelo de investigación basado
en machine learning. Este enfoque se explica por la naturaleza de la investigación, que utiliza
datos no estructurados obtenidos de una red social para el entrenamiento del modelo de
support vector machine. Este modelo permitió realizar una clasificación a los datos no
estructurados y previamente preparados dentro de una de las etapas del método de trabajo
El modelo de support vector machine utiliza una serie de parámetros para obtener su
resultado; por este motivo, se eligen los mejores parámetros para buscar el mejor resultado
que pueda proporcionar el modelo. Esto se efectuó con distintas iteraciones en busca de los
mejores valores para asignar a cada uno de los parámetros del modelo. Una vez definidos
estos parámetros, se procedió con el entrenamiento del modelo y luego con una validación,
para conocer qué tan precisas son las predicciones que realiza.
Los resultados obtenidos a partir de las predicciones del modelo mostraron con un
del alcance de la investigación, que son parques, veredas y pistas. Con base en este resultado
se identificaron las zonas a las que hacen referencia los comentarios negativos a estas obras
en la ciudad de Lima, utilizando para este fin la data de localización obtenida de la red social.
identificación de las zonas, se efectuó un análisis para determinar el grado de precisión que
brindó el modelo en sus resultados y así responder a las preguntas de investigación. Todos
34
estos procedimientos no son tradicionales para una investigación, debido al uso de machine
problema ha sido poco estudiado. Las referencias encontradas sobre la aplicación de machine
corresponden a distintos casos de uso en otros sectores privados (Hernández et al., 2014).
este tipo de trabajo, por lo que se recurrió a la metodología fundamental de IBM para la
datos, que incluyen modelos analíticos de machine learning, en su mayoría muy similares.
Para este trabajo se tomó como referencia la metodología propuesta de IBM, de John B.
La metodología propuesta por IBM consta de 10 etapas. Inicia con la comprensión del
negocio; esta primera etapa lo que busca es definir el problema, objetivos y requisitos de
solución. La segunda etapa, el enfoque analítico, busca expresar el problema bajo el contexto
Figura 3
Nota. Adaptado de Metodología fundamental para la ciencia de datos (p. 3), por J. B.
Rollins, 2015, IBM Corporation (https://www.ibm.com/downloads/cas/WKK9DX51).
Las siguientes cuatro etapas están relacionadas con los datos en sí mismos: (a)
requisitos de datos, (b) recopilación de datos, (c) preparación de datos, y (d) comprensión de
datos. Tales etapas hacen referencia a los requerimientos de los datos, como son el formato y
representaciones que deben tener los datos para realizar el análisis. La recolección de los
datos son las fuentes que se utilizaron como datos estructurados, no estructurados o
semiestructurados, porque la investigación debe enfocarse en obtener aquellos datos que sean
relevantes para resolver la necesidad del negocio. En la compresión de los datos, se utiliza la
estadística descriptiva y herramientas gráficas para poder obtener los primeros insights; se
evalúa la calidad de los datos y descripción de la metadata. Por último, la preparación de los
datos consiste en todas aquellas actividades realizadas para construir el conjunto de datos que
fue utilizado en el modelamiento analítico. Estas actividades pueden ser la limpieza de datos,
36
del enfoque analítico. En esta etapa, si el modelo es predictivo se deberá entrenar al modelo
con data histórica para obtener resultados del modelo. La octava etapa, evaluación, consiste
aborda el problema de manera adecuada. Para los modelos predictivos se realiza un conjunto
feedback a los resultados del modelo para ir mejorándolo de acuerdo con los cambios que se
presenten más adelante, con el objetivo de que el modelo continúe otorgando valor. Estas dos
últimas etapas no fueron consideradas para el presente trabajo porque exceden el alcance del
etapa de evaluación.
estructura la información que fue levantada para esta etapa de comprensión del negocio, que
busca definir el problema, los objetivos, los requisitos de la solución y los campos adicionales
particular, debe tenerse en claro el contexto, por lo que se consideró este campo adicional en
el levantamiento de información, donde se detalló el bien público que se busca lograr con el
Otros campos que se consideraron y se pidieron especificar son el alcance de las obras
públicas, que para el presente estudio son parques, pistas y veredas. También se pidió
delimitar el alcance geográfico, que podía llegar hasta distritos, y, por último, se solicitó un
listado de palabras críticas, que son las que ayudaron a definir el modelo. El objetivo de esta
primera etapa fue obtener toda aquella información que ayudó en las siguientes etapas para el
anterior con objetivos analíticos, y sobre la base de ellos se definieron enfoques analíticos.
clasificación. Como soporte en esta etapa se elaboró una matriz que permitió hacer el mapeo
entre los objetivos y los enfoques analíticos por cada objetivo. A modo de ejemplo, la Tabla 6
Tabla 6
Nota. Adaptado de Metodología fundamental para la ciencia de datos (p. 3), por J. B. Rollins, 2015, IBM Corporation
(https://www.ibm.com/downloads/cas/WKK9DX51).
38
elaboración del modelo, que, a su vez, fue establecido por el enfoque analítico definido en la
etapa anterior. En el presente caso se utilizaron datos procedentes de la red social Twitter,
que se encontraron en formato de texto, ya que fueron los comentarios que se obtuvieron de
las distintas publicaciones con las que se trabajó. Además, se tuvo a disposición datos
Para un correcto mapeo de los requisitos de datos con los enfoques analíticos
identificados en la etapa anterior, se elaboró una matriz con el detalle correspondiente por
Tabla 7
Enfoque analítico 2
Enfoque analítico 3
Nota. Adaptado de Metodología fundamental para la ciencia de datos (p. 3), por J. B. Rollins, 2015, IBM Corporation
(https://www.ibm.com/downloads/cas/WKK9DX51).
permitió extraer de esta red social los tweets relacionados con las palabras críticas que se
indicaron. Esta API también permitió definir un alcance geográfico, para poder considerar
2
Application Programming Interface (API): Son un conjunto de subrutinas, funciones y procedimientos que son
utilizados como una capa que permite la comunicación entre componentes de software.
39
ambiente elaborado para este fin con apoyo del cloud de Amazon, AWS. En esta base de
datos se podrán hacer los filtros que se consideren importantes sobre la base de los campos
extraídos de Twitter, ya que no solo se obtienen comentarios, sino también campos de fechas,
esta etapa.
Figura 4
Para poder procesar y trabajar con la información obtenida, la data fue exportada a un
información. Todos los tweets obtenidos hasta ese momento vienen con caracteres que causan
ruido cuando se procede a analizar los datos. Se debe tener en cuenta esto cuando se realice la
generado en la etapa anterior, para comprender cada uno de los atributos presentes en el CSV.
Para ello se generó la metadata con la descripción de cada uno de ellos. La Tabla 8 muestra
Tabla 8
Atributo Descripción
id Indicador de tweet
word Palabra crítica identificada
created_at Fecha de creación del tweet
tweet Texto del comentario del tweet
favorite_count Cantidad de favoritos que recibió el tweet
retweet_count Cantidad de retweet
location Ubicación del usuario que generó el tweet
En esta etapa también se puede realizar un análisis descriptivo de forma general, para
tener un mejor entendimiento de los datos disponibles, como ver los tweets que tienen la
comentarios. Todo esto puede ser llevado a gráficos simples solo para una mejor
metodología, por la cantidad de ajustes que fueron realizados a la data para que sea mejor
analizada. Para el presente caso, la principal fuente de información fueron los comentarios de
cada tweet; esta data se encuentra en formato texto y en muchas ocasiones vino con errores
gramaticales, caracteres duplicados, emojis, hashtags, entre otros. Por este motivo, es muy
importante limpiar de la mejor forma estos comentarios en esta etapa, para que el modelo
apoyo empleadas son dos: Google Colab y la biblioteca Scikit-learn. Google Colab es una
tratamiento que se le darán a los datos. Scikit-learn es una biblioteca open source para el
41
regresión, máquinas de soporte vectorial, K-means, entre otros, además de funciones que
lograr el objetivo de limpiar los datos y que se encuentren de una forma tal que, en el
modelado, se puedan utilizar para la definición, entrenamiento y ejecución del modelo. Las
actividades ejecutadas son seis: (a) no considerar las stopwords, (b) tokenizar, (c) lematizar,
(d) binarizar, (e) validación de data, y (f) vectorizar. La Figura 5 muestra de forma gráfica las
Figura 5
aquellas palabras que dentro del procesamiento del lenguaje natural no brinden un valor
semántico para el fin propuesto. Estas palabras fueron artículos, conectores, pronombres, etc.;
42
por ejemplo: 'de', 'la', 'que', 'el', 'en', 'y', 'a', 'los', 'del', 'se', 'las', 'por', 'un', 'para', 'con', 'no',
'una', 'su', 'al', 'lo'. La Tabla 9 muestra el resultado de esta actividad en un comentario.
Tabla 9
comentarios palabra por palabra. La Tabla 10 muestra el resultado de esta actividad con un
comentario.
Tabla 10
[Parque,costado,iglesia,cúpula,avenida,sucre,está,descuidad
Comentario tokenizado
o,sucio]
Lematizar. Esta actividad consistió en llevar cada una de las palabras a su lema
tercera persona, ella baila, el verbo en su forma base es bailar. La Tabla 11 muestra el
Tabla 11
[Parque,costado,iglesia,cúpula,avenida,sucre,está,descuidad
Comentario tokenizado
o,sucio]
[Parque,costado,iglesia,cúpula,avenida,sucre,estar,descuidar
Comentario con lematización
,sucio]
Binarizar. Dado que el objetivo es clasificar los comentarios, es necesario que estos
tengan una etiqueta para que el modelo pueda aprender y luego predecir. En este caso, se
clasificaron los comentarios referentes a las obras en positivos y negativos, los cuales fueron
representados por el número 1 para aquellos que sean positivos y 0 para los comentarios que
sean negativos.
Validación de data. Es una actividad que se agregó para verificar la data disponible al
modelo. Para el presente caso, el corpus posee 12,546 comentarios. Otro criterio que se debe
tener en cuenta es conocer si la data se encuentra o no equilibrada, ya que esto afectará en los
matriz de unos y ceros con la que el modelo pueda trabajar para poder determinar su
números.
44
Tabla 12
parque 1 0 0 0 0 0 0 0
costado 0 1 0 0 0 0 0 0
iglesia 0 0 1 0 0 0 0 0
cúpula 0 0 0 1 0 0 0 0
avenida 0 0 0 0 1 0 0 0
estar 0 0 0 0 0 1 0 0
descuidar 0 0 0 0 0 0 1 0
sucio 0 0 0 0 0 0 0 1
Nota. Datos recolectados de comentarios de Twitter sobre parques de Lima.
Al finalizar con estas seis actividades, los datos quedan preparados y listos para
iniciar la siguiente etapa del modelado. Es importante mencionar que en el caso de identificar
algún problema relacionado con la preparación de los datos, se deberá regresar nuevamente a
esta etapa para ejecutar alguna de las actividades o, si es preciso, agregar otra adicional.
3.2.7 Modelado
En esta etapa se define el modelo que debe ser utilizado. En el presente caso, se buscó
un modelo de clasificación que permita clasificar los comentarios que obtenidos de Twitter
en positivos y negativos con referencia a las obras de parques, veredas y pistas, para luego
literatura revisada y que brindan buenos resultados para la clasificación; en especial, para el
análisis de atributos bivariados es support vector machine (SVM). Este modelo lo que busca
es encontrar una línea que separe a los datos de acuerdo con la clasificación que se haya
definido, utilizando parámetros que permitan definir de una mejor manera los vectores de
Para el modelado, se efectuaron las siguientes cuatro actividades: (a) selección del
modelo, (b) definición de mejores parámetros para el modelo, (c) definición del modelo, y (d)
entrenar el modelo. La Figura 6 muestra de forma gráfica las actividades realizadas en esta
Figura 6
Selección del modelo. En esta actividad se elige el modelo, por lo que se deberá tener
en cuenta la tarea prevista. En este caso se trata de una tarea de clasificación. Además, debe
considerarse la variable objetivo en la que se busca realizar la clasificación. Para efectos del
presente trabajo de investigación y al desarrollar un piloto del modelo, se tendrán dos clases:
Los modelos de Support Vector Machine (SVM) son buenos para la tarea de
clasificación que se busca realizar (Aiala et al., 2017; Segura, 2019), pero dentro de estos
regresión, detección. La Tabla 13 muestra estos estimadores de SVM. Para el presente trabajo
46
de clasificación.
Tabla 13
Estimadores SVM
Por otra parte, debe tenerse un indicador de medición para ver el rendimiento del
modelo, para lo cual se utilizará el F1-score, que es una métrica empleada en los modelos de
clasificación. Las pruebas realizadas para el piloto de este estudio muestran un buen
indicador para este modelo. La Tabla 14 presenta un resumen del modelo elegido y el
resultado de la métrica.
Tabla 14
ciertos parámetros para su ejecución, los valores que se asignen a estos parámetros
47
determinarán una mejor efectividad del modelo. Los tres parámetros que se utilizaron son el
El coste hace referencia al margen de flexibilidad del modelo, mientras mayor sea el
costo se producirá overfitting, es decir, el modelo quedará demasiado ajustado a los datos con
los que se está trabajando; por el contrario, si el coste es menor, el modelo se flexibilizará y
podrá ser utilizado con otros datos. La pérdida es la métrica de error para el ajuste del Linear
SVM. Se consideran dos posibles valores para este parámetro: hinge y squared hinge o
iteraciones, que es el valor máximo de repeticiones que ejecutará el modelo para su ajuste.
que tienen en el aprendizaje del modelo. Para obtener los mejores valores en los
la búsqueda en cuadrícula. Este método prueba entre las alternativas brindadas a cada
parámetro para obtener los valores óptimos de los hiperparámetros. La Tabla 15 muestra los
Tabla 15
Coste 0.2
Pérdida squared_hinge
elegido, en este caso el Linear SVM, y los valores de los hiperparámetros óptimos, que son
los obtenidos previamente. Para efectos del trabajo de investigación, el modelo se definió
dentro del ambiente de Google Colab con Python, utilizando la biblioteca SKLearn, donde se
48
encuentra disponible este modelo; es de esta forma en que solo debe importarse y utilizarse.
de tener el modelo definido, se utiliza para el entrenamiento. La Figura 7 muestra cómo fue
definido el modelo con código Python. La totalidad del código, tanto para la selección de los
parámetros como para los demás tratamientos de los datos, se encuentra en el Apéndice D.
Figura 7
hiperparámetros con sus valores óptimos, donde C es el costo con valor de 2, loss es la
pérdida con valor de squad_hinge; max_iter es el valor máximo de iteraciones, en este caso
1000. El resto de los valores son necesarios establecerlos para la definición del modelo, el
últimos valores son tomados como default de acuerdo con lo definido en la documentación de
la librería de LinearSVC.
Entrenamiento del modelo. Para esta actividad debe tenerse listo el dataset de
porciones pequeñas, para comprobar los resultados obtenidos por cada evaluación con las
49
Figura 8
Nota. Adaptado de “Scikit-learn: Machine Learning in Python,” por F. Pedregosa et al., 2011
(https://scikit-learn.org/stable/).
Lo que se buscó fue dividir la data en grupos pequeños de datos para el entrenamiento
subconjuntos de datos menores, donde se toma uno de estos pequeños subconjuntos como
iteración alternando la data de prueba en otro subconjunto de datos, y así sucesivamente hasta
que todos los subconjuntos hayan sido data de prueba en alguna de las iteraciones. Con esta
forma de trabajo se busca mejorar el entrenamiento y tener una mejor efectividad, la cual será
comprobada en la etapa de evaluación. Para el presente caso se utilizó grid search en esta
vectorización y el etiquetado, para que grid search realice el entrenamiento con esta división
50
de la información. El resultado del entrenamiento debe ser evaluado para que luego el modelo
3.2.8 Evaluación
obtuvieron las métricas que permitieron medir la precisión del modelo. Para efectos del
trabajo de investigación, en esta etapa se utilizaron dos métricas: el área bajo la curva,
conocida como AUC, y la métrica F1-score. Se tomará el valor obtenido del F1-score como
el indicador principal del rendimiento, por ser el que representa la precisión y sensibilidad en
una sola métrica. La forma de evaluación utilizada fue la validación cruzada, ya que al tener
un entrenamiento del modelo por iteraciones y subconjuntos de datos con cambio del
subconjunto de datos de prueba por cada iteración, lleva a resultados de las dos métricas en
Tabla 16
iteraciones, con un resultado promedio de 0.767470673 para la métrica del F1-score, lo que
utilizaron el mismo modelo, support vector machine, con la misma tarea de clasificación de
comentarios, de tal manera que se valida si el resultado obtenido es comparable con el de las
otras investigaciones (Condori & Valeriano, 2020; Herrera, 2020; Segura, 2019). La Tabla 17
muestra los resultados de tres investigaciones en comparación con el resultado del presente
modelo.
Tabla 17
suicidios en el lenguaje español a través del análisis de texto en redes sociales, utilizando en
uno de sus modelos SVM, con un resultado de F1-score de 72% (Condori & Valeriano, 2020).
modelos de las investigaciones tomadas como referencia. Con este resultado y ya teniendo el
modelo definido y entrenado es que se decide ejecutarlo para realizar la predicción con los
comentarios de Twitter referentes a las obras que son motivo de este trabajo de investigación
capítulo.
53
ejecutará con los comentarios de las obras definidas para esta investigación —parques,
conjunto, es decir, todos los comentarios referentes a los tres tipos de obras públicas.
los tipos de obras. Al final del capítulo, se analizan los resultados para poder comprender los
A fin de tener una visión global de los resultados obtenidos para la predicción del
modelo, se tomó el total de los comentarios referidos a las tres obras —parques, veredas y
pistas—. Como primer resultado, se muestra la matriz de confusión (ver Figura 9), donde
verdaderos negativos.
positivos y verdaderos negativos es elevado y mayor que los falsos positivos y falsos
negativos, por lo que se puede apreciar que los aciertos del modelo son de mayor cantidad en
confusión.
54
Figura 9
Nota. Adaptado de “La matriz de confusión y sus métricas,” por J. Barrios, 2019
(https://www.juanbarrios.com/la-matriz-de-confusion-y-sus-metricas/).
Tabla 18
información obtenida en la matriz de confusión, las cuales son la precisión, el recall, el F1-
score y el accuracy. El cálculo de la precisión arrojó un resultado de 0.69, que indica que el
69% de predicciones positivas son correctas. Para ello se utilizó la siguiente fórmula:
TP
𝑃𝑟𝑒𝑐𝑖𝑠𝑖ó𝑛 =
TP + FP
94
𝑃𝑟𝑒𝑐𝑖𝑠𝑖ó𝑛 =
94 + 42
𝑃𝑟𝑒𝑐𝑖𝑠𝑖ó𝑛 = 0.69
Para el cálculo del recall se utilizó la siguiente fórmula, reemplazando los valores
obtenidos en la matriz de confusión, con lo que se logró el resultado de 0.89, que indica que
el 89% de los comentarios positivos fueron identificados de forma correcta por el modelo.
TP
𝑅𝑒𝑐𝑎𝑙𝑙 =
TP + FN
94
𝑅𝑒𝑐𝑎𝑙𝑙 =
94 + 11
𝑅𝑒𝑐𝑎𝑙𝑙 = 0.89
de 0.78, que indica que el 78% del modelo propuesto cumple con el propósito del caso de
estudio.
2 ∗ Precisión ∗ Recall
𝐹1 𝑠𝑐𝑜𝑟𝑒 =
Precisión + Recall
2 ∗ 0.69 ∗ 0.89
𝐹1 𝑠𝑐𝑜𝑟𝑒 =
0.69 + 0.89
𝐹1 𝑠𝑐𝑜𝑟𝑒 = 0.78
56
Por último, para el accuracy el cálculo se realizó con la fórmula abajo mencionada. Al
TP + TN
𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦 =
TP + TN + FP + FN
94 + 82
𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦 =
94 + 82 + 42 + 11
𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦 = 0.77
0.78. El resultado demuestra que el modelo predice el trabajo de investigación con una
evaluación cruzada de cinco interacciones, donde el valor obtenido del promedio del F1-
score fue 76%. A esto se adicionaron las referencias de investigaciones anteriores utilizando
el modelo SVM con resultados equivalentes al obtenido (Herrera, 2020; Condori y Valeriano,
Para analizar los resultados de las obras públicas relacionadas con parques, solo se
han considerado aquellos comentarios de Twitter referidos a estas obras. De la misma forma
en que se trabajó con el resultado global, se utilizó una matriz de confusión y las cuatro
resultados de la matriz de confusión con referencia a los comentarios y cada uno de sus
Figura 10
Nota. Adaptado de “La matriz de confusión y sus métricas,” por J. Barrios, 2019
(https://www.juanbarrios.com/la-matriz-de-confusion-y-sus-metricas/).
Tabla 19
Ya con los datos obtenidos y las fórmulas conocidas, se realizó el cálculo de las
cuatro métricas: Precisión, Recall, F1-score y el Accuracy. Los resultados de estos cuatro
Tabla 20
Métrica Resultado
Precisión 0.857
Recall 0.893
F1-score 0.874
Accuracy 0.840
cual indica que el modelo de predicción se cumple en un 87.4.7%, en tanto que un 12.6% no
1 el resultado será mejor con respecto al valor de F1-score total (obras urbanas).
Para tener una visión de los datos analizados sobre parques, de acuerdo con las zonas
a las que hacen referencia a partir de la ubicación obtenida del comentario de Twitter, la
distribución por distritos en Lima se muestra en la Figura 11, donde se aprecian aquellas
negativos tienen el valor de 0 y son de color azul, los positivos tienen el valor 1 y son de
color naranja, y los comentarios que no corresponden a los dos tipos anteriores, de color
celeste. Se observa que la mayor cantidad de comentarios proviene de los distritos de San
Figura 11
Nota. Elaborado con la plataforma Microsoft Power BI, por Microsoft ©, 2021
(https://powerbi.microsoft.com/es-es/).
Para la revisión de los resultados con las obras de veredas, se realizó un análisis
similar a los anteriores; primero, la matriz de confusión y, luego, el cálculo de las cuatro
Figura 12
Nota. Adaptado de “La matriz de confusión y sus métricas,” por J. Barrios, 2019
(https://www.juanbarrios.com/la-matriz-de-confusion-y-sus-metricas/).
Tal como se aprecia en la Figura 12, para el caso de las obras relacionadas con
veredas, los valores de los cuadrantes de la diagonal principal son mayores. Esto quiere decir
que el modelo ha predicho de forma correcta los verdaderos positivos y los verdaderos
negativos. Para tener una mejor referencia, en la Tabla 21 se muestran las descripciones de la
Tabla 21
obtenidos en las cuatro métricas para la predicción de los comentarios relacionados con
Tabla 22
Métrica Resultado
Precisión 0.609
Recall 0.933
F1-score 0.737
Accuracy 0.762
En este tipo de obras, el valor del indicador principal del presente estudio, el F1-
score, es de 73.7%, que no es el mejor resultado con respecto al valor de F1-score total de
78% (obras urbanas). Esto se explica porque si bien el modelo de predicción se cumple a un
73.7%, se tiene un 26.3% que no es predicho en cuanto a las veredas, parques y pistas. Como
La revisión de los comentarios relacionados con veredas fue distribuida por distritos
en la ciudad de Lima, para tener una visión amplia del resultado de la predicción del modelo
sobre este tipo de obras en cada distrito del que se recibió información a través de Twitter.
Tal como se aprecia en la Figura 13, aquellas predicciones de comentarios negativos son las
representadas con 0 y de color azul; los comentarios positivos están representados con 1 y de
color naranja, y los que no entran en estos dos tipos de comentarios son de color celeste. Es
importante notar que en este tipo de obras los comentarios celestes se ven reducidos en
comparación con las obras relacionadas con parques. Además, se puede observar que el
Figura 13
Nota. Elaborado con la plataforma Microsoft Power BI, por Microsoft ©, 2021
(https://powerbi.microsoft.com/es-es/).
La revisión de resultados para pistas es similar al de los dos tipos de obras anteriores;
primero, se observa la matriz de confusión y, luego, el cálculo de las tres métricas. La Figura
pistas.
63
Figura 14
Nota. Adaptado de “La matriz de confusión y sus métricas,” por J. Barrios, 2019
(https://www.juanbarrios.com/la-matriz-de-confusion-y-sus-metricas/).
Tabla 23
observan los valores calculados en las cuatro métricas para este tipo de obra, donde el valor
del indicador principal, el F1-score, es de 70%, que es menor al resultado total de F1-score
de parques, veredas y pistas. Cabe anotar que se tiene un 30% que el modelo no está
mejor.
Tabla 24
Métrica Resultado
Precisión 0.585
Recall 0.857
F1-score 0.70
Accuracy 0.7
Para poder analizar las ubicaciones de los comentarios, se efectuó una distribución de
las predicciones por los distritos de Lima con base en la información obtenida de Twitter. En
la Figura 15, se muestra la distribución de las predicciones relacionadas con los comentarios
de pistas.
De acuerdo con lo observado en la Figura 15, los comentarios negativos de pistas que
están representados por color azul, en comparación con las otras dos obras de parques y
observa que a pesar de que algunos distritos sean de clase media alta, como en el caso de La
Molina y San Borja, también presentan una representación elevada de comentarios negativos
en referencia a pistas.
65
Figura 15
Nota. Elaborado con la plataforma Microsoft Power BI, por Microsoft ©, 2021
(https://powerbi.microsoft.com/es-es/).
Para tener una mejor visión de los resultados obtenidos, en la Tabla 25 se resumen
considerando las cuatro métricas utilizadas del total de la información analizada y dividida en
los tres tipos de obras que fueron materia del presente trabajo de investigación.
Tabla 25
investigación es el F1-score, por tener clases desiguales. Para el caso general de las obras
recall. Esto demuestra que el modelo detecta bien los comentarios negativos, pero incluye
algunos comentarios positivos (Barrios, 2019). Este valor es el esperado por tener la mayor
cantidad de comentarios negativos (64%) frente a los comentarios positivos (35%), lo cual se
debe a que la data de entrenamiento utilizada tenía mayor número de comentarios negativos.
desiguales, el valor obtenido está dentro del rango comparable (Vakili et al., 2019). En el
caso de parques, al evaluar por el tipo de obra urbana se observa que el modelo maneja bien
la clase de comentarios negativos, debido a los resultados obtenidos de alto en recall (89.3%)
alto (87.4%), y está dentro del rango comparable (Valki et al., 2019).
veredas, el recall (93.3%) fue mayor que el valor obtenido en precisión (60.9%). Caso similar
ocurrió con los resultados de pistas, donde el recall (85.7%) también fue mayor a su
precisión (58.5%). Para ambos tipos de obras, sus valores en el F1-score son de 73.7% y
70%, respectivamente. Esto demuestra que el modelo detectó bien los comentarios negativos,
pero incluye mayores comentarios positivos comparado con el resultado de los parques
(Arce, 2019). El F1-score obtenido es cercano al rango comparable (Vakili, et al., 2019).
Sobre las zonas de la ciudad de Lima que presentan problemas relacionados con las
obras que han sido materia de esta investigación, se analizarán las predicciones realizadas por
67
el modelo de acuerdo con cada una de estas obras. En la Figura 16 se muestra este resultado
para el caso de los parques, donde las predicciones correspondientes a comentarios negativos
aparecen de color azul; así, los distritos que tienen un mayor número de estos comentarios
son Los Olivos con 75%, San Martín de Porres (57%), Ate y Comas (50%); esto en relación
con el total de comentarios analizados por cada distrito. Cabe mencionar que San Borja
presenta la totalidad de sus comentarios como positivos. Esta información puede ser llevada a
la Municipalidad de Lima, para que sirva como un elemento más para la definición en la
donde puedan, con el apoyo de los comentarios de la ciudadanía, definir una prioridad en
aquellos distritos que tienen el mayor porcentaje de insatisfacción en estas obras. Este
comentario está sustentado por el valor alto obtenido del F1-score (87.4%).
Figura 16
Nota. Elaborado con la plataforma Microsoft Power BI, por Microsoft ©, 2021
(https://powerbi.microsoft.com/es-es/).
68
Para el análisis de las veredas, se realizó una representación similar de forma gráfica,
que ayudará a tener una visión completa de la información obtenida para estas obras. La
Figura 17
Nota. Elaborado con la plataforma Microsoft Power BI, por Microsoft ©, 2021
(https://powerbi.microsoft.com/es-es/).
Se puede apreciar que los comentarios negativos son los indicados en color azul. Se
resalta, asimismo, una observación clara en este gráfico que repite el comportamiento de los
análisis relacionados con parques, en cuanto a que en el distrito de San Borja los comentarios
son positivos en su totalidad, por lo que se podría indicar que este distrito viene manejando
correctamente los trabajos de mantenimiento en este tipo de obras. Por el contrario, los
distritos con mayor tasa de comentarios negativos en veredas son Magdalena del Mar y
69
Pueblo Libre con el 67%, La Molina con 45% y San Martín de Porres con 33%. Los resultados
muestran una oportunidad de mejora para este tipo de obras de tránsito peatonal en los
distritos mencionados. Con referencia al F1-score (73.7%), se tiene una incertidumbre alta de
27.3% sobre los porcentajes mostrados en los distritos de estudio, que puede afectar la toma
de decisiones.
Por último, para el caso de las obras referidas a pistas, se ha empleado el mismo
análisis por zonas en los distritos de Lima. En la Figura 18 se aprecian los resultados donde
Figura 18
Nota. Elaborado con la plataforma Microsoft Power BI, por Microsoft ©, 2021
(https://powerbi.microsoft.com/es-es/).
70
En comparación con los otros dos tipos de obras, los comentarios negativos de color
azul se encuentran presentes en la mayoría de los distritos, incluso en San Borja, que había
demostrado tener un mejor resultado tanto en parques como en veredas, por lo que se podría
indicar que esto es un problema a nivel de ciudad. Los distritos con mayor porcentaje de
comentarios negativos en pistas son Los Olivos (67%), San Martín de Porres (60%),
mejoramiento de este tipo de obras en los distintos distritos de la ciudad. Con referencia al
F1-score (70%), se tiene una incertidumbre alta de 30% sobre los porcentajes mostrados en
los distritos de estudio para este tipo de obras, que puede afectar la toma de decisiones.
investigación, deben validarse las respuestas a las preguntas planteadas, donde la primera
los problemas que presenta la ciudadanía limeña sobre obras públicas de parques, veredas y
Vale la pena mencionar que si se desea llegar a un mayor detalle en el análisis de los
problemas en este tipo de obras públicas, de acuerdo con la métrica del F1-score obtenida en
la predicción se pueden identificar las zonas en un 78%. Este resultado obtenido con el
requerirá una mayor inversión de tiempo tanto para la recolección de datos como para el
obtenida de Twitter con herramientas de machine learning permite determinar las obras de
parques, pistas y veredas con mayor número de quejas. Efectivamente, gracias al uso de los
learning se pudo determinar aquellas obras en distritos de la ciudad de Lima con mayor
número de comentarios negativos. El resultado final depende mucho de los datos utilizados
determinar la cantidad de quejas para ese distrito. El valor que brindan los datos es muy
importante, pues permiten entrenar al modelo y, por tanto, su resultado mejorará mientras
5.1 Conclusiones
lenguaje natural con support vector machine, modelo utilizado en este trabajo de
con una precisión y sensibilidad del 78%, por lo que se concluye que es posible utilizar este
tipo de tecnologías en el sector público para incluir la opinión de los ciudadanos, manifestada
Con la aplicación del modelo de machine learning utilizado se identificaron las zonas
de Lima donde se presentan problemas en las obras públicas, con una precisión y sensibilidad
de 87.4% para parques, 73.7% para veredas y 70% para pistas. Estos resultados son consecuencia
Los datos utilizados para el entrenamiento del modelo son de mucha importancia para
relacionados con distintos temas, con lo que se obtuvo en esta etapa de entrenamiento una
precisión y sensibilidad del 76%, que es comparable a otros estudios que utilizaron un
veredas y pistas, debidamente analizada con el uso del modelo de machine learning
planteado, permitió identificar las obras urbanas con mayor porcentaje de quejas. De acuerdo
con los resultados obtenidos, las obras relacionadas con “pistas” muestran un mayor número
de comentarios negativos, donde Los Olivos (67%) y San Martín de Porres (60%) son los
Existe la capacidad de analizar toda la información relacionada con las obras urbanas
de machine learning, que permite disminuir el riesgo de ejecutar una obra mal hecha o dejarla
5.2 Recomendaciones
híbridos como son los métodos SVM-baileys o SVM-CNN (redes neuronales), cuya ventaja
una mayor inversión de equipos para el procesamiento, con lo que se reducirán los tiempos de
entrenamiento.
recopilación de datos mayor a seis meses. Además, se pueden incluir diccionarios de palabras
relacionadas con el tema de investigación para la etapa de preparación de datos y así obtener
que afecten a la ciudad de Lima, integrando este modelo a las plataformas de las entidades
que los ciudadanos también realizan comentarios que escapan a esta clasificación, como
pueden ser comentarios informativos, neutros, advertencias, entre otros, por lo que los
74
modelos por implementar deben ampliar clasificaciones relacionadas con este tipo de
expresiones, a fin de reducir los falsos positivos que pueda presentar el modelo.
Se recomienda realizar un estudio que tenga como objetivo la elaboración de una base
de datos pública con comentarios de redes sociales relacionados con obras públicas que se
ejecutan en las ciudades del Perú, con los parámetros de tiempo y clasificación indicados en
los párrafos anteriores, de tal manera que esta base de datos quede a disposición de las
distintas entidades que requieran utilizarla para el entrenamiento de sus modelos, buscando
Referencias
Aiala R., Chiruzzo, L., Etcheverry, M., & Castro, S. (2017, setiembre). RETUYT en TASS
1896/p9_retuyt_tass2017.pdf
https://www.eea.europa.eu/soer/2015/synthesis/el-medio-ambiente-en-europa
Aguilar, L. A., & Vásquez, Y. O. (2016). Principal component analysis (PCA) para mejorar
Allam, Z., & Dhunny, Z. (2019, June). On big data, artificial intelligence and smart cities.
Apolitano, J. (2019, 03 de junio). Las ciudades inteligentes y los retos que plantean. El
Pueblo. https://www.elpueblo.pe/las-ciudades-inteligentes-y-los-retos-que-plantean/
https://www.juanbarrios.com/la-matriz-de-confusion-y-sus-metricas/
Bouskela, M., Casseb, M., Bassi, S., De Luca, C., & Facchina, M. (2016). La ruta hacia las
https://publications.iadb.org/publications/spanish/document/La-ruta-hacia-las-smart-
cities-Migrando-de-una-gesti%C3%B3n-tradicional-a-la-ciudad-inteligente.pdf
http://repositorio.unsaac.edu.pe/bitstream/handle/20.500.12918/4120/253T20191024_
TC.pdf?sequence=1&isAllowed=y
Caragliu, A., & Del Bo, C. (2019). Smart innovative cities: The impact of smart city policies
373-383. https://doi.org/10.1016/j.techfore.2018.07.022
https://www.researchgate.net/publication/263817587_Tutorial_sobre_Maquinas_de_
Vectores_Soporte_SVM
Carrasco, L. G. (2019). Métodos de análisis para identificar público objetivo que consuma
https://repositorio.ucv.edu.pe/bitstream/handle/20.500.12692/55041/Carrasco_CLG-
SD.pdf?sequence=1&isAllowed=y
Cohen, B. (2014, 20 de noviembre). The smartest cities in the world 2015: Methodology.
world-2015-methodology
955. https://www.comexperu.org.pe/articulo/censos-nacionales-2017-cuantos-somos
https://www.comexperu.org.pe/articulo/cusco-huancavelica-y-ayacucho-cuentan-con-
el-menor-porcentaje-de-hogares-con-acceso-a-internet
Condori, A., & Valeriano, K. (2020). Detection of suicidal intent in Spanish language social
http://repositorio.unsa.edu.pe/bitstream/handle/20.500.12773/12562/IScolaak_vavaky.
pdf?sequence=1&isAllowed=y
Costa, V., & Dellunde, P. (2015). On free models for horn clauses over predicate fuzzy
https://www.researchgate.net/publication/299135205_On_Free_Models_for_Horn_Cl
auses_over_Predicate_Fuzzy_Logics
http://polired.upm.es/index.php/ciur/article/viewFile/3498/3572
Gamarra, C. A., & Ríos, M. S. (2018). Aplicación de técnicas de aprendizaje profundo para
https://repository.usta.edu.co/bitstream/handle/11634/10680/2018Gamarracamilo.pdf?
sequence=1&isAllowed=y
https://repositorio.upeu.edu.pe/bitstream/handle/20.500.12840/1975/Jacob_Tesis_Lice
nciatura_2019.pdf?sequence=1&isAllowed=y
González, F. J., Navia, A., & Amor, A. M. (2017). Training support vector machines with
https://doi.org/10.1016/j.patcog.2017.06.016
78
Quito, Ecuador].
https://repositorio.uisek.edu.ec/bitstream/123456789/3023/2/Tesis%20Mario%20Gor
don.pdf
http://repositorio.usil.edu.pe/bitstream/USIL/2763/1/2017_Granda_Aplicacion-de-
mineria-datos.pdf
Grupo Tecma Red. (2015, 17 de noviembre). Informe sobre smart cities de PWC, IE Business
sobre-smart-cities-de-pwc-ie-business-school-y-telefonica
Hernández, R., Fernández, C., & Baptista, P. (2014). Metodología de la investigación (6a
ed.). McGraw-Hill.
Lima, Perú].
https://repositorio.ulima.edu.pe/bitstream/handle/20.500.12724/12195/Herrera_Sarmi
ento_Luis_Guillermo.pdf?sequence=1&isAllowed=y
https://www.hpe.com/lamerica/es/what-is/artificial-intelligence.html
https://media.iese.edu/research/pdfs/ST-0542.pdf
79
https://www.iso.org/obp/ui/#iso:std:iso:37122:ed-1:v1:en
Jerí, J. A., & & Sosa, Y. L. (2019). Uso de indicadores big data para mejorar el nivel de
Kalbandi, I., & Anuradha, J. (2015). A brief introduction on big data 5Vs characteristics and
doi:10.1016/j.procs.2015.04.188
Laney, D. (2001). 3D Data Management: Controlling data volume, velocity, and variety.
data-volume--velocity--an...
Lima Cómo Vamos. (2019). Lima y Callao según sus ciudadanos: Décimo informe urbano
http://www.limacomovamos.org/wp-content/uploads/2019/11/Encuesta-2019_web.pdf
Lima: Pistas con huecos son un peligro latente para conductores. (2020, 11 de agosto). Perú
21. https://peru21.pe/lima/lima-pistas-huecos-son-peligro-latente-conductores-fotos-
196125-noticia/
Liu, B. (2015). Sentiment analysis: Mining opinions, sentiments, and emotions. Cambridge
Laredo.
http://itnuevolaredo.edu.mx/takeyas/Articulos/Inteligencia%20Artificial/ARTICULO
%20Introduccion%20a%20la%20Inteligencia%20Artificial.pdf
80
Maldonado, C., Mendoza, E., Noriega, R., Piedra, L., & Rodríguez, D. (2020). Determinación
una smart city [Tesis de maestría, ESAN Graduate School of Business, Lima, Perú).
https://repositorio.esan.edu.pe/bitstream/handle/20.500.12640/2205/2020_MATC_19-
1_04_T.pdf?sequence=1&isAllowed=y
http://repositorio.unam.edu.pe/bitstream/handle/UNAM/94/T095_72389106_T.pdf?se
quence=1&isAllowed=y
Manupati, V., Anand, R., Thakkar, J., Benyoucef, L., Garsia, F., & Tiwari, M. (2013).
Adaptive production control system for a flexible manufacturing cell using support
Marín, P., & Díaz, A. (2015). Uso de Twitter por los partidos y candidatos políticos en las
https://www.redalyc.org/pdf/168/16845702009.pdf
McCarthy, J., Minsky, M., Rochester, N., & Shannon, C. (1955). A proposal for the
14. https://doi.org/10.1609/aimag.v27i4.1904
Medhat, W., Hassan, A., & Korashy, H. (2014). Sentiment analysis algorithms and
https://doi.org/10.1016/j.asej.2014.04.011
https://documen.site/download/soluciones-inteligentes-de-movilidad-urbana-y-green-
buildings_pdf
http://repositorio.uchile.cl/bitstream/handle/2250/172649/Dise%C3%B1o-de-un-
proceso-de-alertas-tempranas-para-disminuir-las-deserciones.pdf?sequence=1
http://repositorio.uchile.cl/bitstream/handle/2250/130479/cf-
montesinos_lg.pdf?sequence=1&isAllowed=y
Muñoz, L., Delgado, J., & Rodriguez, V. (2018). Measurement of air pollution with low-cost
Nam, T., & Pardo, T. (2011). Conceptualizing smart city with dimensions of technology,
Olarte, A., & Casaverde, A. (2020). Análisis masivo de datos en Twitter para identificación
de opinión [Tesis de grado, Universidad Nacional de San Antonio Abad del Cusco,
Cusco, Perú].
82
http://repositorio.unsaac.edu.pe/bitstream/handle/20.500.12918/5252/253T20200108_
TC.pdf?sequence=1&isAllowed=y
https://www.un.org/sustainabledevelopment/es/objetivos-de-desarrollo-sostenible/
Organización de las Naciones Unidas. (2018, 16 de mayo). Las ciudades seguirán creciendo,
https://www.un.org/development/desa/es/news/population/2018-world-urbanization-
prospects.html
Pedregosa, F., Varoquaux, G., Gramfort, A., & Michel, M. (2011). Scikit-learn: Machine
Piva, C. (2016, November). Smart City Expo World Congress 2016. TM Forum.
https://www.tmforum.org/events/smart-city-expo-world-congress-2016/
https://www.ibm.com/downloads/cas/WKK9DX51
https://searchdatacenter.techtarget.com/es/definicion/Inteligencia-artificial-o-AI
Russell, S., & Norvig, P. (2004). Inteligencia artificial: Un enfoque moderno (2a ed.).
Pearson.
SAS Institute. (2018, September 5). Analytics experience 2018 explores AI, machine
learning, IoT and more. SAS conference will include Hackathon aimed at fighting
releases/locales/2018/analytics-experience-san-diego.html
https://cdn.www.gob.pe/uploads/document/file/1899077/Estrategia%20Nacional%20d
e%20Inteligencia%20Artificial.pdf
https://repositorio.uss.edu.pe/handle/20.500.12802/6253
http://openaccess.uoc.edu/webapps/o2/bitstream/10609/81435/6/jsobrinosTFM0618m
emoria.pdf
https://repositorio.ucv.edu.pe/handle/20.500.12692/33830
Thakuriah, P. V., Tilahun, N. Y., & Zellner, M. L. (2017). Introduction to seeing cities
through Big Data: Research, methods and applications in urban informatics. In Seeing
CSIC. https://www.fgcsic.es/lychnos/es_es/articulos/inteligencia_artificial
Vakili, M., Ghamsari, M., & Rezaei, M. (2019, January). Performance analysis and
comparison of Machine and Deep Learning algorithms for IoT data classification.
ResearchGate.
https://www.researchgate.net/publication/338853237_Performance_Analysis_and_Co
mparison_of_Machine_and_Deep_Learning_Algorithms_for_IoT_Data_Classification
Vidal, M., & Vialart, M. (2013, marzo). Redes sociales. Revista Cubana de Educación
https://www.researchgate.net/publication/262782998_Redes_sociales
84
Vishnivetskaya, A., & Alexandrova, E. (2019). Smart city concept. Implementation practice.
doi:10.1088/1757-899X/497/1/012019
85
Contexto:
Para nuestro caso, al tratarse de un tema público y no de una empresa en particular, debemos
donde se debe detallar el bien público que se busca lograr con el desarrollo del trabajo de
investigación. Otros campos que se consideran y se piden especificar son el alcance de las
obras públicas, para nuestro caso, parques, pistas y veredas, también se pide delimitar el
alcance geográfico pudiendo llegar hasta distritos, y por último se solicita un listado de
Problema:
Existe una falta de sintonía entre las necesidades actuales de la ciudadanía y las obras
públicas planteadas para la ciudad de Lima con referencia a los problemas que la ciudadanía
presenta, donde no se consideran las urgencias y reclamos de los ciudadanos como apoyo
Objetivos:
Objetivo 1
en la ciudad de Lima.
Objetivo 2
Identificar los problemas que presenta la ciudadanía limeña sobre obras públicas referentes a
Utilizar la información registrada en las redes sociales de Twitter para identificar las zonas
Objetivo 3
Determinar las obras públicas de parques, pistas y veredas, que presentan el mayor número
de quejas y reclamos utilizando la información obtenida de las redes sociales como Twitter
Requisitos de la solución
Requisito 1
Paso 5: Evaluación
Identificar los
problemas que Predecir si un comentario
Construcción, pruebas
presenta la ciudadanía de Twitter relacionado a
e implementación de
limeña sobre obras una obra pública de parque,
un modelo de
públicas referentes a vereda o pista es "Positivo"
clasificación.
parques, veredas y o "Negativo".
pistas.
Utilizar la información
registrada en la red Realizar un análisis
social Twitter para descriptivo sobre los
identificar las zonas en comentarios de Twitter con
Contrucción e
la ciudad de Lima predicciones negativas
Falencia en el implementación de un
donde se presentan los determinando los distritos
mantenimiento análisis descriptivo
problemas referidos a de la ciudad de Lima que
de áreas verdes cualitativo.
obras públicas presentan problemas en
y pistas en la específicamente obras públicas de parques,
ciudad de Lima. parques, veredas y veredas y pistas.
pistas.
Contrucción e
implementación de un
Predicción del Modelo
análisis descriptivo Resultado del Modelo Texto
"Positivo" o "Negativo"
cuantitativo.
Número de comentarios
Resultado del Modelo Númerico
Negativos
Análisis de Sentimientos
Primero se usa la dataset con todos los temas relacionados: politicos, sociales,
generales, etc ,pre-procesar y finalmente entrenar el modelo de una forma eficiente. link
dataset:
Mounted at /gdrive
data.csv socialtv-tweets-train-tagged.csv
dataTwitter.csv socialtv-tweets-train-tagged.xml
dataTwitter.gsheet stompol-tweets-test.xml
general-tweets-test1k.xml stompol-tweets-train-tagged.csv general-tweets-
train-tagged.xml stompol-tweets-train-tagged.xml grid_search.pkl
TASS2019_country_PE_
dev.xml
parques.csv todo.csv
pistas.csv tweets.txt
results tw_faces4tassTrain1000rc.xml
socialtv-tweets-test.xml veredas.csv
90
Tipos de Archivos
# pandas para lectura en
framesimport pandas as
pd
# extraemos desde la
raiz xmlroot =
xml.getroot()
# definimos las etiquetas que queremos obtener
general_tweets_train = pd.DataFrame(columns=( content , polarity , agreement ))
# accedemos a todos los hijos de raiztweets = root.getchildren()
print('cantidad tweeets: ',len(tweets)) #mostrar cantidad#
recorremos todos los tweets uno por uno
for i in range(0,len(tweets)):
tweet = tweets[i] # i-esimo tweet
# organizamos en un dict (clave: valor) ejemplo: [''content": Salgo de VeoTV, row =
dict(zip(['content', 'polarity', 'agreement'], [tweet.content.text, tweetrow_s = pd.Series(row) #
cambiamos a vertical (como se muestra abajo) row_s.name = i # recorremos cada linea para
guardar
general_tweets_train = general_tweets_train.append(row_s)
# mostrar ejemplo
# head solo lista los 5 primeros
itemsgeneral_tweets_train.head()
Content Polarity
root.getchildren()
print('cantidad tweeets: ',len(tweets))
for i in range(0,len(tweets)):
tweet = tweets[i]
# hacer un diccionario
row = dict(zip(['content', 'polarity'], [tweet.content.text, tweet.sentiment.porow_s =
pd.Series(row) # convierte del orizontal al vertical
row_s.name = i
general_tweets_corpus_test = general_tweets_train.append(row_s)
El segundo tipo de archivo que se carga es el siguiente, note que en realidad lo que
cambia es en la creacion del dic y el acceso a los tweets pues en el segundo formato se tiene un
lista del tip
# lectura para
"Mielnovia
archivo content politico
@agudavoice quiere que la ame, pero yo le dije que tenía que
1769
como Bale . Jajaja <3"
xml = objectify.parse(open(data_dir+'stompol-tweets-train-tagged.xml'))#lectura
P
similar a los anteriores
root = xml.getroot()
Foto | ¿Hubo agresión de Pepe a Neymar en la final de Copa ?: Pepe y Ne
1770
han visto la tarjeta amarilla tras
stompol_tweets_corpus_train = pd.DataFrame(columns=('content', ... http://t.co/8R6Zn7yEGv
'polarity')) tweets =
root.getchildren()
NEU
print('cantidad tweeets: ',len(tweets))
for i in range(0,len(tweets)): Pinto debería porterear con sotana... http://t.co/WVZAK8r27P
1771
tweet = tweets[i] N
row = dict(zip(['content', 'polarity', 'agreement'], [' '.join(list(tweet.itertrow_s = pd.Series(row)
row_s.name = i
stompol_tweets_corpus_train = stompol_tweets_corpus_train.append(row_s)
stompol_tweets_corpus_train.to_csv(data_dir+'stompol-tweets-train-tagged.csv', inde# mostramos los
ultimos 5
stompol_tweets_corpus_train.tail()
Corpus total
size: (16996, 3)
94
Como podemos notar en los archivos anteriores cargados previamente existe una
columan convalores NaN vacios o nulos (en general_tweets_train), entonces procedemos
a eliminar todos aesto que estan considerados como comentarios neutros, estos ademas
aparecen junto al campo agreement = DISAGREEMENT por lo que dejamos de considerar
estos, ademas podemosaprovechar en eliminar las URLS o todos aquellos que contengan
"http. "
(12546, 3)
Tokenización
Bueno listo ahora ya tenemos listo nuestro corpus de 12546 tweets y listos para ser
entreandos y ahora toca el pre-procesamiento y esto empieza con la tokenizacion pero
debemos descargar la librería nltk, definimos la lista de stopwords (palabras no deseadas),
los signos de puntuación
# descargamos stopwords en
españolimport nltk
nltk.download("stopwords")
# lista de puntuacion
from string import
punctuationnon_words
= list(punctuation)
print('puntuaciones :',non_words)
Steaming
# basado en http://www.cs.duke.edu/courses/spring14/compsci290/assignments/lab02.htstemmer =
SnowballStemmer('spanish')
#
lematizaci
on(steam)
try:
stems = stem_tokens(tokens,
stemmer)except Exception as e:
]
96
return stems
Binarización
En esta parte lo que primero vamos a realizar es el filtro para no tomar en cuenta a
los tweets etiquetados como NEU (neutros), y desestimarlos, así como finalmente
convertiremos los valores de las etiquetas (Polarity) en "1 , 0", con N-,N: 0, y p,p+ : 1
tweets_corpus.tail()
Diagrama de DataSet
sum_values = tweets_corpus.polarity_bin.value_counts()
sum_values
97
fig1, ax1 =
plt.subplots()
ax1.pie(serie ,
labels=["NEGATIVO","POSITIVO"], colors=['lightcoral', 'yellowgreen'],
shadow=True, startangle=140, autopct='%1.1f%%')
ax1.
axis
('eq
ual')
plt.s
how
()
Entrenamiento
Aquí primero se define el modelo SVM, la organización de ejecución (pipeline).
Luego se define los parámetros que posiblemente tengan un mejor ajuste, que
encontraremos con el método de validación cruzada el que encontrará el mejor
parámetro que se muestra en el score- cross-validation más adelante, entonces estos
valores son los que se usarán finalmente para el entrenamiento.
98
vectorizer = CountVectorizer(
analyzer =
'word',
tokenizer
=
tokenize,
lowercase
= True,
stop_words = spanish_stopwords)
pipeline = Pipeline([
('vect', vectorizer),#
99
countVectorizer('cls',
LinearSVC()), #SVM
])
#
["comentario","bueno","proyecto","final"]
#[[100011]]
#SVM
#efectuar cross-validation
grid_search.fit(tweets_corpus.content, tweets_corpus.polarity_bin)
/usr/local/lib/python3.7/dist-packages/sklearn/feature_extraction/text.py:385:
'stop_words.' %
sorted(inconsistent))
GridSearchCV(cv=None,
error_score=nan,
estimator=Pipeline(memory=None,
steps=[('vect',
CountVectorizer(analyzer='word',
binary=Fal
se,
decode_err
or='strict',
dtype=<cla
ss
'numpy.in
encoding='
utf-8',
input='cont
100
ent',
lowercase=
True,
max_df=1.
0,
max_featur
es=None,
min_df=1,
ngram_ran
ge=(1, 1),
preprocesso
r=None,
stop_words
=['de', 'la'
verbose=0))],
v
erbose=False),
iid='deprecated', n_jobs=-1,
param_grid={'cls C': (0.2, 0.5, 0.7),
'cls loss': ('hinge', 'squared_hinge'),
'cls max_iter': (500, 1000),
'vect max_df': (0.5, 1.9),
'vect max_features': (500, 1000),
'vect min_df': (10, 20, 50),
'vect ngram_range': ((1, 1), (1, 2))},
pre_dispatch='2*n_jobs', refit=True, return_train_score=False,
scoring='roc_auc', verbose=0)
Mostramos los mejores valores (hiperparámetros) encontrados con los que se obtiene un
mejor score, que usaremos para el entrenamiento
#guardar el modelo
from sklearn.externals import joblib
101
Count Vectorizer
Para poder ser capaz de administrar los tweets, primero necesitamos extraer la
información del texto, esto se logra conseguir convirtiendo cada token en una matriz de
unos y ceros onehotEncoding , por ejemplo si tenemos un tweet como: "Aprendizaje
automático es muy genial" el módulo CountVectorizer va retornar:
De esta forma ahora vamos a trabajar con la representación numérica de los tweets.
/usr/local/lib/python3.7/dist-packages/sklearn/feature_extraction/text.py:385:'stop_words.' %
sorted(inconsistent))
ROC_AUC
El área bajo la curva AUC_ROC es un métrica usada con el que vamos a medir el
rendimiento del modelo
from sklearn.model_selection import cross_val_score
scores =
cross_val
_score(
model,
corpus_data_features_nd[0:len(tweets_corpus)], #[[10001000101]]
y=tweets_corpus.polarity_bin
, #[0]scoring='roc_auc',
#scoring=make_scorer(F1-score, average='weighted', labels=[2]),cv=5
)
scores.mean()
0.811568396299801
Training
Esta parte ejecuta el entrenamiento, finalmente teniendo la configuracion
necesaria y teniendo en cuenta el último score representa un buen rendimiento para los
valores pre determinados con un score de %78 podemos prodecer ahora sí a entrenar
directamente nuestro modelo.
pipeline = Pipeline([
('vect',
CountVectorize
r(
analyzer =
'word',
tokenizer
=
tokenize,
lowercase
103
= True,
stop_words =
spanish_stopwords,
min_df = 50,
max_df = 1.9,
ngram_
range=
(1, 1),
max_fe
atures=
1000
)),
('cls', LinearSVC(C=.2, loss='squared_hinge',max_iter=1000,multi_class='ovr',
random_state=None,
])
/usr/local/lib/python3.7/dist-packages/sklearn/feature_extraction/text.py:385:'stop_words.' %
sorted(inconsistent))
Pipeline(memory=None,
steps=[('vect',
CountVectorizer(analyzer='word', binary=False,
decode_error='strict',
dtype=<class 'numpy.int64'>, encoding='utf-8'
TEST
Para el test primero tenemos que tomar en cuenta que nuestras entradas serán
tweets (publicaciones) reales tomadas de pistas y veredas, para esto necesitamos
cargar el conjunto de tweets que está almacenado en un archivo csv.
TEST _PERU
pre-procesamos extraemos predecir matriz de confusión
104
# extraemos desde la
raiz xmlroot =
xml.getroot()
# definimos las etiquetas que queremos obtener
test_peru = pd.DataFrame(columns=('content', 'polarity', 'agreement'))# accedemos
a todos los hijos de raiz
tweets = root.getchildren()
print('cantidad tweeets: ',len(tweets)) #mostrar cantidad#
recorremos todos los tweets uno por uno
for i in range(0,len(tweets)):
tweet = tweets[i] # i-esimo tweet
# organizamos en un dict (clave: valor) ejemplo: [''content": Salgo de VeoTV, row =
dict(zip(['content', 'polarity'], [tweet.content.text, tweet.sentiment.porow s = pd.Series(row) #
cambiamos a vertical (como se muestra abajo)
# mostrar ejemplo
# head solo lista los 5 primeros
itemstest_peru.head()
Manolo: se llama H&M por Hombre y Mujer. Yo: ..pero.es una marcaamericana, no tendría sentido.
1 Manolo: callate butch. Yo:
Buen resumen de mi vida amorosa. - Lo he amado por años. - Cásatecon él, pé. - AJ, NO. No estoy
2 para mantener a nadie. Que no joda.
105
Como solo es necesario los comentario para la prediccion del modelo entonces solo
extraemos esta parte
# mostrar los 5
primeros
test_data_label
s.head()
0 0
2 0
5 0
7 0
9 0
Name: polarity_bin, dtype: int64
Prediccion de tweets
Esta parte predice los comentarios (tweets) dando una lista de valores de acuerdo al
ordenestablecido.
#
predict = pipeline.predict(test_data_text)
array([0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1,
1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0,
1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1,
1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1,
0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0,
1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1,
0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1,
1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0,
1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0,
0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0])
107
conf = metrics.confusion_matrix(test_data_labels,predict)f1 =
metrics.F1-score(test_data_labels,predict)
0.6763285024154588
[[75 32]
[35 70]]
impor
t
nump
y as
np
impor
t
iterto
ols
classes = [0, 1]
# plot confusion matrix
plt.imshow(conf, interpolation='nearest', cmap=plt.cm.Blues)
plt.title("Matriz de confusion")
plt.colorbar()
tick_marks =
np.arange(len(classes))
plt.xticks(tick_marks, classes)
plt.yticks(tick_marks, classes)
fmt = 'd'
thresh = conf.max() / 2.
for i, j in itertools.product(range(conf.shape[0]), range(conf.shape[1])):plt.text(j, i,
format(conf[i, j], fmt),
horizontalalignment="center",
color="white" if conf[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted
label')
Marca Indique su
Obra Distrito Tweets Etiqueta
temporal nombre
7/07/2021
2 Parques Ana San Borja Bonitos 1
23:26
7/07/2021 Polo
3 Parques Santans La Molina Estan cuidados y con seguridad 1
23:27
7/07/2021
4 Parques Ricardo Lima Requieren más cuidado 0
23:28
print(len(test_todo_la
bels))#convertir an
tipo int
test_todo_labels= test_todo_labels.astype(int)
test_todo_labels.head()
268
0 0
1 1
2 1
3 1
4 0
Name: Etiqueta, dtype: int64
predict = pipeline.predict(test_todo_text)
print(len(predict))
268
array([1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0,
0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1,
1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0,
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0,
1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0,
0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1,
0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
0, 1, 0, 1])
"""
110
conf = metrics.confusion_matrix(test_todo_labels,predict)f1 =
metrics.F1-score(test_todo_labels,predict)
print(f1) print(conf)
268
0.6914498141263942
[[92 73]
[10 93]]
impor
t
nump
y as
np
impor
t
iterto
ols
classes = [0, 1]
# plot confusion matrix
plt.imshow(conf, interpolation='nearest', cmap=plt.cm.Blues)
plt.title("Matriz de confusion")
plt.colorbar()
tick_marks =
np.arange(len(classes))
plt.xticks(tick_marks, classes)
plt.yticks(tick_marks, classes)
fmt = 'd'
thresh = conf.max() / 2.
for i, j in itertools.product(range(conf.shape[0]), range(conf.shape[1])):plt.text(j, i,
format(conf[i, j], fmt),
horizontalalignment="center",
color="white" if conf[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted
label')
plt.savefig('/gdrive/My Drive/DATASETS/data_pistas/results/confusion_todo.png')
111
# guardar el archivo
tweets_test_parques.to_csv('/gdrive/My Drive/DATASETS/data_pistas/results/result_to
# mostramos lo
agregado
tweets_test_parqu
es.head()
Marca Indique
Obra su nombre Distrito Tweets Etiqueta predict
temporal
Parque costado de la
iglesia de la cúpula
7/07/2021 Magdalena
0 Parques Fernando por la avenida sucre 0 1
23:17 del Mar
está descuidado y
muy sucio
Marca Indique su
Obra nombre Distrito Tweets Etiqueta
temporal
# Vamos a tomar unicamente los tweets que son diferentes a NEU tweets_test_pistas =
tweets_test_pistas[tweets_test_pistas.Etiqueta != 'Neutro']tweets_test_pistas =
tweets_test_pistas[tweets_test_pistas.Etiqueta != 'neutro']# extraemos contenido texto
test_pistas_text = tweets_test_pistas.iloc[:,4]#
extraemos labels
test_pistas_labels = tweets_test_pistas.iloc[:,5]
#convertir an tipo int
test_pistas_labels= test_pistas_labels.astype(int)
from sklearn
import metrics#
predicion para
pistas
predict = pipeline.predict(test_pistas_text)
0.6956521739130435
[[25 17]
[ 4 24]]
impor
t
nump
y as
np
impor
t
iterto
ols
classes = [0, 1]
# plot confusion matrix
plt.imshow(conf, interpolation='nearest', cmap=plt.cm.Blues)
plt.title("Matriz de confusion")
plt.colorbar()
tick_marks =
np.arange(len(classes))
plt.xticks(tick_marks, classes)
plt.yticks(tick_marks, classes)
fmt = 'd'
thresh = conf.max() / 2.
for i, j in itertools.product(range(conf.shape[0]), range(conf.shape[1])):plt.text(j, i,
format(conf[i, j], fmt),
horizontalalignment="center",
color="white" if conf[i, j] > thresh else "black")
plt.tight_layout()
114
plt.ylabel('True label')
plt.xlabel('Predicted
label')
plt.savefig('/gdrive/My Drive/DATASETS/data_pistas/results/confusion_PISTAS.png')
# Vamos a tomar unicamente los tweets que son diferentes a NEU tweets_test_parque =
tweets_test_parque[tweets_test_parque.Etiqueta != 'Neutro']tweets_test_parque =
tweets_test_parque[tweets_test_parque.Etiqueta != 'neutro']# extraemos contenido texto
test_parques_text = tweets_test_parque.iloc[:,4]#
extraemos labels
test_parques_labels = tweets_test_parque.iloc[:,5]
#convertir an tipo int
test_parques_labels= test_parques_labels.astype(int)
test_parques_text.head()
0.7321428571428572
[[21 25]
[ 5 41]]
classes = [0, 1]
# plot confusion matrix
plt.imshow(conf, interpolation='nearest', cmap=plt.cm.Blues)
plt.title("Matriz de confusion")
plt.colorbar()
tick_marks =
np.arange(len(classes))
plt.xticks(tick_marks, classes)
plt.yticks(tick_marks, classes)
fmt = 'd'
thresh = conf.max() / 2.
for i, j in itertools.product(range(conf.shape[0]), range(conf.shape[1])):plt.text(j, i,
format(conf[i, j], fmt),
horizontalalignment="center",
color="white" if conf[i, j] > thresh else "black")
116
plt.tight_layou
t()
plt.ylabel('Tru
e label')
plt.xlabel('Predicted label')
plt.savefig('/gdrive/My Drive/DATASETS/data_pistas/results/confusion_PARQUES.png')
# guardar el archivo
tweets_test_parque.to_csv('/gdrive/My Drive/DATASETS/data_pistas/results/result_PAR
# mostramos lo
agregado
tweets_test_par
que.head()
Marca
Obra
temporal Indique su
nombre Distrito Tweets Etiqueta predict
test_veredas_text.head()
0.7368421052631579
[[36 18]
[ 2 28]]
classes = [0, 1]
# plot confusion matrix
plt.imshow(conf, interpolation='nearest', cmap=plt.cm.Blues)
plt.title("Matriz de confusion")
plt.colorbar()
tick_marks =
np.arange(len(classes))
plt.xticks(tick_marks, classes)
plt.yticks(tick_marks, classes)
fmt = 'd'
118
thresh = conf.max() / 2.
for i, j in itertools.product(range(conf.shape[0]), range(conf.shape[1])):
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted
label')
plt.savefig('/gdrive/My Drive/DATASETS/data_pistas/results/confusion_VEREDAS.png')
# guardar el archivo
tweets_test_veredas.to_csv('/gdrive/My Drive/DATASETS/data_pistas/results/result_VE
# mostramos lo
agregado
tweets_test_vered
as.head()
119
Obra Marca
temporal
Indique su
nombre Distrito Tweets Etiqueta Predict
Pistas La Molina Están de mal en peor el Alcade no hace nada por mejorarlas
Pistas Lima Estado transitable
Pistas Rímac Falta mejorar las pistas y su mantenimiento
Pistas San Martín de Porres incompletas
Pistas Pueblo Libre Regulares
Pistas Magdalena del Mar Destruidas
Pistas Magdalena del Mar Moderadamente aceptables, salvo excepciones
Pistas Magdalena del Mar en mal estado por tanta construcción
Pistas Villa El Salvador En. Mal estado
Pistas Lima Falta mantenimiento
Pistas San Miguel no estan en buen estado
Pistas San Borja Hace poco han hecho mantenimiento y todas están muy bien
Si bien la mayoría esta en buen estado, hay algunas zonas donde deben ser
Pistas La Molina
mejoradas
Pistas San Miguel bien conservados
Bien asfaltadas, pero en algunas partes falta mejorar las señalizaciones con
Pistas San Borja
la ciclovia
Pistas Lima Mejorando últimamente
Pistas Surquillo No hay una buena señalización
Pistas Magdalena del Mar Requieren arreglo regularmente. Se dañan rapido
Pistas Lince Algunas en mal estado y sin señalizar
Pistas Lima Puede pintarse la señalización más frecuentemente
Pistas San Borja De los que conozco, la mayoría en buen estado.
Pistas Lima Se encuentra en buenas condiciones
Están deterioradas, mi calle parece avenida, los carros para cortar camino
Pistas Independencia pasan por mi calle (porque a dos cuadras esta el mercado y los ambulantes
ocupan la av. principal)
Pistas La Molina No tienen mantenimiento constante
Pistas Los Olivos mal estado
Se encuentran en correcto estado, sin embargo Zonas cercanas aún no
Pistas San Martín de Porres
poseen pista
Pistas San Miguel La pista de la Av. Libertad debe ser arreglada
Pistas Ate Algunas son buenas otras no
Pistas La Molina El 30 % de las pistas se encuentran dañadas y con huecos
Pistas San Miguel Les falta mantenimiento y muchos casos refacción.
EN LOS ULTIMOS AÑOS SE REALIZÓ EL MEJORAMIENTO
Pistas Santiago de Surco
SOLICITADO (BENAVIDES Y CAMINOS DEL INCA)
Generamente las paran rompiendo ya sea por mejoras de desagües, pero no
Pistas Lima
las dejan igual.
Como la mayor parte de Lima, baches, huecos, mantenimientos
Pistas Lince
inconclusos.
Pistas San Martín de Porres algunas en mal estado con huecos y baches
Pistas San Martín de Porres Falta mantenimiento
Pistas Pueblo Libre Falta mantenimiento
Pésimo, están en muy malas condiciones, por eso es que pasan accidentes
Pistas Comas
y los vehículos se malogran constantemente.
Pistas Pueblo Libre Se encuentran en buen estado.
Pistas San Miguel En buen estado
124
Veredas San Miguel Deben arregladas para evitar torcederas de tobillos o traspiés.
Veredas Ate Algunas son bonitas otras están bien cuidadas
Veredas La Molina Se encuentran en buen estado y cumplen las necesidades peatonales.
Veredas San Miguel En algunas zonas no hay veredas.
Veredas Santiago de Surco NECESITAN RENOVACION
Generalmente son destruidas por las constructoras. Cuando terminan los
Veredas Lima edificios no las reconstruyen o dejan igual. Además de dejar rebabas de
fierros que generan tropiezos para las personas.
Veredas Lince En la mayoría de los casos en estado regular a bueno.
Veredas San Martín de Porres hay zonas donde no hay veredas
Veredas San Martín de Porres Invadidas por ambulantes
Veredas Pueblo Libre Falta mantenimiento
Muy peligrosas, al estar en malas condiciones las personas sufren muchos
Veredas Comas
accidentes.
Veredas Pueblo Libre Se encuentran en buen estado.
Deberian estar en buen estado. Algunas estan rotas y esto puede ocasionar
Veredas San Miguel
accidentes a cualquier persona, sobretodo al adulto mayor.
Veredas La Molina En mal estado la mayoría
Podrían estar mejor, es necesario darles mantenimiento porque están
Veredas La Molina agrietadas, también están sucias a veces debido a que los que pasean
perros no recogen las excretas.
Veredas San Martín de Porres Veredas rotas en inconclusas
Veredas Lima Sé de refacciones hechas en algunas calles del Cercado de Lima.
Veredas Ate ESTAN SUCIAS Y DESCUIDADAS
Veredas San Miguel requiren de mantenimiento pero la mayoria se ve bien.
Veredas Breña Están en regular estado, muchas partes invadido por comercios.
no he tenido inconveniente con las veredas en las zonas donde resido e
Veredas San Juan de Lurigancho visto, los inmuebles y/o predios respetan el distanciamiento adecuado para
el transito del ciudadano.
Veredas Comas ESTAN EN BUENAS CONDICIONES
Veredas Lima Están en buen estado
Veredas San Martín de Porres arreglarlas
Veredas Magdalena del Mar En condición relativamente aceptable
Veredas San Miguel Con varios desperfectos como huecos
Veredas San Borja En buen estado
Veredas San Miguel Muy estrechas
Veredas San Borja La mayoría en buen estado
Veredas San Juan de Lurigancho Buenas
Veredas Magdalena del Mar Falta mantenimiento
Veredas San Juan de Miraflores Algunas están inconclusas o dañadas por el tiempo de uso.
Veredas Los Olivos Caminar por la vereda es un poco peligros por la delincuencia
De igual forma que en las pistas, las veredas de algunas calles se
Veredas Surquillo
encuentran averidas, rotas o con baches.
Veredas San Miguel Las andan reparando
127
AppTwitter
Este programa encuentra la palabra o texto lo delimita. Este lo manda a Twitter para
buscar las interacciones con esta palabra en la localización de Perú.
function getData() {
const ul = document.getElementById('authors');
const url = 'https://a7c4hzn0s4.execute-api.us-east-1.amazonaws.com/v1/';
if(palabra.value == ''){
alert('ingrese palabra a buscar');
return;
}
let req = {
word: palabra.value
}
// request options
const request = new Request(url, {
method: 'POST',
128
body: JSON.stringify(req),
headers: new Headers({
'Content-Type': 'application/json'
}),
});
fetch(request)
.then((resp) => resp.json())
.then(function (data) {
console.log(data);
let dataTwitter = data.body;
document.getElementById('content').innerHTML="";
document.getElementById("content").appendChild(buildTable(dataTwitter));
})
.catch(function (error) {
console.log(error);
});
function postData() {
let data = {
name: 'Sara'
}
fetch(request)
.then(function () {
// Handle response we get from the API
})
function createNode(element) {
return document.createElement(element);
129
//
https://programacion.net/articulo/como_exportar_una_tabla_html_a_csv_mediante_javascript
_1742
function descagar(){
alert('descargando...');
}
function buildTable(data) {
var table = document.createElement("table");
table.className="gridtable";
var thead = document.createElement("thead");
var tbody = document.createElement("tbody");
var headRow = document.createElement("tr");
["item","Texto","FechaCreacion","Tweet","Favoritos","ReTweet","Localizacion"].forEach(f
unction(el) {
var th=document.createElement("th");
th.appendChild(document.createTextNode(el));
headRow.appendChild(th);
});
thead.appendChild(headRow);
table.appendChild(thead);
var cont=1;
data.forEach(function(el) {
// console.log('el',el);
// console.log('location::', el.location);
var tr = document.createElement("tr");
var td = document.createElement("td");
td.appendChild(document.createTextNode(cont))
tr.appendChild(td);
var td = document.createElement("td");
td.appendChild(document.createTextNode(el.word))
tr.appendChild(td);
var td = document.createElement("td");
td.appendChild(document.createTextNode(el.created_at))
tr.appendChild(td);
var td = document.createElement("td");
td.appendChild(document.createTextNode(el.tweet))
130
tr.appendChild(td);
var td = document.createElement("td");
td.appendChild(document.createTextNode(el.favorite_count))
tr.appendChild(td);
var td = document.createElement("td");
td.appendChild(document.createTextNode(el.retweet_count))
tr.appendChild(td);
var td = document.createElement("td");
td.appendChild(document.createTextNode(el.location))
tr.appendChild(td);
tbody.appendChild(tr);
cont++;
});
table.appendChild(tbody);
return table;
}
// CSV file
csvFile = new Blob([csv], {type: "text/csv"});
// Download link
downloadLink = document.createElement("a");
// File name
downloadLink.download = filename;
function exportTableToCSV(filename) {
var csv = [];
var rows = document.querySelectorAll("table tr");
csv.push(row.join(";"));
}
Es el proceso que hace la consulta con el servicio API hacia Twiter. En este archivo se
colocan los parámetros de localización, el texto a buscar y la fecha.
import tweepy
import psycopg2
import boto3
import csv
import io
import uuid
import json
from psycopg2.extras import execute_values
api_key = 'qOGIDKF06MdKy8XLXve8dewi3'
api_secret_key = '5BtpUi4mQOgfj16rDnJgW6vQ1Uxy14ojDg4OWvieAvRe7B59f3'
access_token = '346297120-C9b4npiOw2sh7dUYn2GDnCwhnR129xJCGpMEk1b6'
access_token_secret = 'LAq4XhEX0gmN1EvAhN3v2BsHsX135V5xk0JVInxy6Jg9g'
aws_key_id = 'AKIAXH37C4D6QIAPU6GX'
aws_secret_key_id = 'y3veVVLmLDO1Ea1eDKvxvMZs6kqjHomy7YAnu0M+'
bucket = 'twitter-data-extraction'
database = 'tweetsdb'
user = 'postgres'
password = '12345678'
host = 'twitter-extraction.cp23czrhpmva.us-east-1.rds.amazonaws.com'
db_table = 'tweets_dev'
def insert_to_db(objs):
if not objs:
print('No objects to insert.')
return
if not objs:
print('No objects to create doc.')
return
_f = io.StringIO()
field_names = list(objs[0].keys())
key = f"{word}-run_id-{uuid.uuid4().hex}"
with _f:
writer = csv.DictWriter(_f, fieldnames=field_names)
writer.writeheader()
writer.writerows(objs)
_f.seek(0)
s3_client.put_object(Bucket=bucket, Key='tweets-info/' + key + '.csv', Body=_f.read())
tweet_objs = list()
last_id = 0
q = event['word']
base_params = {
'q': q,
'result_type': 'popular',
'count': 100,
'include_entities': False,
'geocode': '-9.1813525,-75.002365,1000km',
'lang': 'es'
}
while True:
tweets = api.search(**base_params)
if not tweets: break
for tweet in tweets:
obj = {
'word': q,
'created_at': str(tweet.created_at),
'tweet': tweet.text,
'favorite_count': tweet.favorite_count,
'retweet_count': tweet.retweet_count,
'location': tweet.place.full_name
134
tweet_objs.append(obj)
print(obj)
last_id = tweet.id
print(len(tweet_objs))
create_csv(tweet_objs, q)
insert_to_db(tweet_objs)
return tweet_objs
if __name__ == '__main__':
main({'word': 'elecciones'}, None)
BD Twiter
Es el lugar de almacenamiento (Base de datos) que devuelve el API cada vez que se le hace
la consulta.
-- Table: public.tweets_metrics
TABLESPACE pg_default;