GeoTech Solutions es una empresa de vanguardia en servicios geomáticos que opera en una amplia gama de entornos geográficos, incluyendo áreas urbanas, rurales, costeras y montañosas. La empresa se caracteriza por un trabajo basado en la recopilación y análisis de datos precisos y detallados, adaptados a la complejidad de cada entorno. Por ejemplo, cuando una municipalidad recurre a GeoTech Solutions para un proyecto de planificación urbana, se genera una base de datos transaccional robusta cuya proceso se puede entender mejor con el detalle siguiente:
Consulta inicial: La municipalidad solicita un mapeo detallado de una zona de 50 km² para planificar nuevas infraestructuras.
Evaluación de necesidades: Los consultores de GeoTech determinan que el proyecto requiere:
Imágenes satelitales de alta resolución para una visión general del área.
Levantamiento topográfico con GPS para puntos de control precisos.
Escaneo LIDAR para crear un modelo de elevación digital detallado.
Uso de drones para capturar imágenes de áreas específicas de interés.
Procesamiento de datos para integrar toda la información.
Análisis espacial para identificar zonas adecuadas para desarrollo.
Creación de un SIG para que la municipalidad pueda gestionar los datos.
Propuesta y contratación: GeoTech presenta una propuesta que incluye todos estos servicios, y la municipalidad la acepta.
Ejecución del proyecto: GeoTech lleva a cabo todos los servicios contratados a lo largo de varias semanas.
Registro en la base de datos: Una vez completado el proyecto, se registra en la base de datos de transacciones de GeoTech como una sola entrada que incluye todos los servicios utilizados:
Imagen_Satelital, GPS, Lidar, Drone, Procesamiento_Datos, Analisis_Espacial, SIG
GeoTech quiere que, a partir de su base de datos transaccional, se pueda utilizar el análisis de reglas de asociación para:
Identificar patrones en la demanda de servicios para mejorar la previsión y la planificación de recursos.
Descubrir combinaciones de servicios frecuentemente solicitadas para crear paquetes de servicios atractivos.
En este tutorial implementaremos el algoritmo Apriori para identificar las reglas de asociación entre los diferentes servicios que GeoTech ofrece.
Etapa 1: Dominio del problema
En esta etapa inicial, se define el contexto del negocio de GeoTech Solutions y se identifican los 15 servicios geomáticos que la empresa ofrece. Se establece el objetivo de descubrir reglas de asociación entre estos servicios para mejorar la planificación de recursos y crear paquetes de servicios atractivos.
El dataset proporcionado incluye el siguiente conjunto de ítems:
GPS: Levantamiento preciso de puntos geográficos mediante tecnología GPS para control y referencia topográfica.
Imagen_Satelital: Captura de imágenes de alta resolución desde satélites para análisis y mapeo detallado de áreas extensas.
SIG: Desarrollo de Sistemas de Información Geográfica para la gestión y análisis de datos espaciales integrados.
Lidar: Escaneo láser para generar modelos de elevación digital detallados y mapas tridimensionales del terreno.
Drone: Captura de imágenes y videos aéreos de alta precisión para inspección y mapeo de áreas específicas.
Fotogrametría: Creación de mapas y modelos 3D a partir de fotografías aéreas tomadas desde aviones o drones.
Topografía: Medición y representación detallada de las características físicas del terreno para proyectos de construcción y planificación.
Cartografía: Producción de mapas temáticos y topográficos detallados para diversas aplicaciones geográficas.
Geodesia: Estudio y medición de la forma y dimensiones de la Tierra para aplicaciones precisas de posicionamiento.
Batimetría: Mapeo de la profundidad y características del lecho marino o fluvial mediante sondeos y sensores.
Teledetección: Análisis de datos obtenidos desde sensores remotos para la evaluación y monitoreo de recursos naturales.
Procesamiento_Datos: Integración y análisis de grandes volúmenes de datos geoespaciales para generar información útil.
Análisis_Espacial: Evaluación de relaciones y patrones en datos geográficos para la toma de decisiones estratégicas.
Modelado_3D: Creación de representaciones tridimensionales de paisajes, edificios o infraestructuras para simulación y planificación.
Ortofotografía: Producción de imágenes aéreas corregidas geométricamente para representaciones precisas del terreno.
A partir de la información proporcionada, se responde lo siguiente:
¿Qué exactamente deseamos hacer?
Descubir reglar de asociación entre los diferentes servicios que GeoTech ofrece.
¿Es factible alcanzar lo que buscamos con los datos disponibles?
Si, el tener un dataset transaccional y disponer de 15 ítems sobre los servicios, parecen ser suficiente para alcanzar el proceso de análisis de asociación.
¿Cómo podemos lograrlo?
Aplicar algoritmo A priori para encontrar las reglas de asociación.
¿Qué tipo de problema se va a resolver?
Problema de asociación.
¿El objetivo es?
Identificar reglas de asociación.
Configuración Inicial
Code
# Bibliotecas -------------------------------------------------------------if(!require(arules)) install.packages("arules")if(!require(arulesViz)) install.packages("arulesViz")if(!require(tidyverse)) install.packages("tidyverse")if(!require(gridExtra)) install.packages("gridExtra")# Config -------------------------------------------------------------# Para notación no numérica.options(scipen=999) # Para reproducibilidad.set.seed(2024)
Etapa 2 y 3: Adquisición y preprocesamiento
En esta etapa se obtiene el conjunto de datos transaccionales que registra los servicios utilizados en cada proyecto de GeoTech Solutions. Estos datos se cargan desde un archivo CSV. Para el procesamiento los datos se preparan para el análisis convirtiendo las columnas a valores lógicos y transformando el dataframe en un objeto de transacciones adecuado para el algoritmo Apriori.
Code
# Leer el archivo CSVdf_transacciones <-read.csv("Datos/datos_transacciones.csv", stringsAsFactors =FALSE)# Convertir las columnas a lógicasdf_transacciones[] <-lapply(df_transacciones, function(x) as.logical(x =="TRUE"))# Convertir el dataframe a un objeto de transaccionestransacciones <-as(df_transacciones, "transactions")# Mostrar un resumen de los datossummary(transacciones)
transactions as itemMatrix in sparse format with
10000 rows (elements/itemsets/transactions) and
15 columns (items) and a density of 0.3341867
most frequent items:
Drone GPS Topografia Procesamiento_Datos
6512 5505 4285 4276
SIG (Other)
4178 25372
element (itemset/transaction) length distribution:
sizes
3 4 5 6 7
1967 2007 2022 1939 2065
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.000 4.000 5.000 5.013 6.000 7.000
includes extended item information - examples:
labels variables levels
1 GPS GPS TRUE
2 Imagen_Satelital Imagen_Satelital TRUE
3 SIG SIG TRUE
includes extended transaction information - examples:
transactionID
1 1
2 2
3 3
Etapa 4 y 5: Modelado y validación
Aquí, se aplica el algoritmo Apriori para generar reglas de asociación bajo tres escenarios con diferentes umbrales de soporte y confianza. Luego, se podan las reglas redundantes para obtener conjuntos más manejables y relevantes de reglas.
Code
# Función para generar reglasgenerar_reglas <-function(soporte, confianza) {apriori(transacciones, parameter =list(supp = soporte, conf = confianza, minlen =2))}# Generar reglas para los tres escenariosreglas_1 <-generar_reglas(0.05, 0.45)
El algoritmo A priori encontró 127, 42, y 4 reglas para el primero, segundo y tercer escenario, respectivamente. Ahora podamos las reglas para encontrar las más relevantes.
Code
podar_reglas <-function(reglas) {# Si no hay reglas, retornar el conjunto vacíoif(length(reglas) ==0) return(reglas)# Ordenar las reglas por lift en orden descendente reglas_ordenadas <-sort(reglas, by ="lift", decreasing =TRUE)# Inicializar un vector para marcar reglas a mantener reglas_a_mantener <-rep(TRUE, length(reglas_ordenadas))# Comparar cada regla con las demásfor(i in1:(length(reglas_ordenadas) -1)) {if(reglas_a_mantener[i]) {for(j in (i+1):length(reglas_ordenadas)) {if(reglas_a_mantener[j]) {# Verificar si la regla j es un subconjunto de la regla iif(all(is.subset(reglas_ordenadas[j], reglas_ordenadas[i]))) { reglas_a_mantener[j] <-FALSE } } } } }# Retornar solo las reglas no redundantesreturn(reglas_ordenadas[reglas_a_mantener])}# Podar las reglas redundantesreglas_podadas_1 <-podar_reglas(reglas_1)reglas_podadas_1
Se evalúan las reglas generadas, comparando los resultados antes y después del podado. Se interpretan las reglas más significativas en términos de soporte, confianza y lift.
Luego del proceso de podado se observa que las reglas no redundantes son 64, 28 y 3, para los escenarios 1, 2, y 3, respectivamente. Denotando que hay una reducción significativa de reglas. Comparamos ahora las reglas antes y después del podado.
Code
# Función para mostrar reglas de manera legiblemostrar_reglas <-function(reglas, titulo, n =5) {cat("\n", titulo, "\n")cat("Número total de reglas:", length(reglas), "\n")if(length(reglas) ==0) {cat("No se generaron reglas con los umbrales especificados.\n")return() }cat("Mostrando las top", min(n, length(reglas)), "reglas por lift:\n\n") top_reglas <-head(sort(reglas, by ="lift"), n) reglas_df <-as(top_reglas, "data.frame")for(i in1:nrow(reglas_df)) {cat("Regla", i, ":\n")cat(" Regla:", as.character(reglas_df$rules[i]), "\n") cat(" Soporte:", round(reglas_df$support[i], 4), "\n")cat(" Confianza:", round(reglas_df$confidence[i], 4), "\n")cat(" Lift:", round(reglas_df$lift[i], 4), "\n\n") }}# Mostrar reglas para cada escenario antes y después del podadomostrar_reglas(reglas_1, "Escenario 1 - Antes del podado")
mostrar_reglas(reglas_3, "Escenario 3 - Antes del podado")
Escenario 3 - Antes del podado
Número total de reglas: 4
Mostrando las top 4 reglas por lift:
Regla 1 :
Regla: {GPS} => {Drone}
Soporte: 0.3625
Confianza: 0.6585
Lift: 1.0112
Regla 2 :
Regla: {GPS,Topografia} => {Drone}
Soporte: 0.1533
Confianza: 0.6577
Lift: 1.0099
Regla 3 :
Regla: {GPS,Procesamiento_Datos} => {Drone}
Soporte: 0.1514
Confianza: 0.6574
Lift: 1.0095
Regla 4 :
Regla: {Procesamiento_Datos} => {Drone}
Soporte: 0.2782
Confianza: 0.6506
Lift: 0.9991
Code
mostrar_reglas(reglas_podadas_3, "Escenario 3 - Después del podado")
Escenario 3 - Después del podado
Número total de reglas: 3
Mostrando las top 3 reglas por lift:
Regla 1 :
Regla: {GPS} => {Drone}
Soporte: 0.3625
Confianza: 0.6585
Lift: 1.0112
Regla 2 :
Regla: {GPS,Topografia} => {Drone}
Soporte: 0.1533
Confianza: 0.6577
Lift: 1.0099
Regla 3 :
Regla: {GPS,Procesamiento_Datos} => {Drone}
Soporte: 0.1514
Confianza: 0.6574
Lift: 1.0095
De las reglas obtenidas para el escenario 3 podemos mencionar, por ejemplo:
Regla 1:
El soporte del 36.25% indica que en el 36.25% de todos los proyectos registrados en la base de datos de GeoTech, se utilizaron tanto GPS como drones. Este es un soporte relativamente alto, lo que sugiere que la combinación de GPS y drones es bastante común en los proyectos de la empresa.
La confianza del 65.85% indica que, entre todos los proyectos que utilizan GPS, el 65.85% también utilizan drones. Esto demuestra una relación bastante fuerte entre el uso de GPS y drones en los proyectos de GeoTech.
El lift de 1.0112 indica que la probabilidad de utilizar drones en un proyecto aumenta ligeramente si ya se está utilizando GPS. Aunque este lift es apenas superior a 1, lo que indica una leve relación positiva, no sugiere una dependencia fuerte.
Visualización
Ahora se crean visualizaciones de las reglas de asociación utilizando gráficos de red para cada escenario, lo que permite una interpretación visual de las relaciones entre los servicios:
Code
# Función para visualizar reglas en un gráfico de redvisualizar_reglas_red <-function(reglas, titulo) {if(length(reglas) ==0) {cat("No se pueden visualizar reglas para:", titulo, "\n")cat("No se generaron reglas con los umbrales especificados.\n")return() }plot(reglas, method ="graph", control =list(type ="items"), main = titulo)}# Visualizar reglas en gráfico de red para cada escenario después del podadovisualizar_reglas_red(head(sort(reglas_podadas_1, by ="lift"), 5), "Top 5 Reglas - Escenario 1 (Después del podado)")
Los gráficos representan las reglas de asociación generadas por el algoritmo Apriori para los servicios geoespaciales. En el caso del escenario 3 tenemos:
Nodos: Cada nodo representa una regla en análisis.
Conexiones: Las líneas que conectan los nodos representan las reglas de asociación entre estos servicios. La dirección de las flechas indica la relación entre los ítems en las reglas (de antecedente a consecuente).
Tamaño de los nodos: El tamaño de los nodos representa el soporte (support) de cada ítem. La leyenda a la derecha muestra que el soporte varía de 0.20 a 0.35. El nodo “Drone” es el más grande, lo que sugiere que es el servicio más frecuente en las transacciones.
Color de las conexiones: El color de las líneas representa el lift de las reglas. La escala de colores a la derecha muestra que el lift varía de aproximadamente 1.0096 a 1.0108. El color rojo más intenso indica un lift más alto, lo que sugiere una asociación más fuerte entre los ítems.
Interpretación de las reglas: La regla más fuerte parece ser la que conecta “Drone” con el nodo central, dado su color rojo intenso. Hay asociaciones entre “Drone” y los otros servicios (GPS, Topografía, Procesamiento_Datos), pero parecen ser menos fuertes (colores más claros).
A partir de este análisis de asociación se puede inferir que:
El servicio de Drones parece ser el más frecuente y central en las asociaciones.
Existen asociaciones entre los servicios de Drones, GPS, Topografía y Procesamiento de Datos.
Las asociaciones son relativamente fuertes, con valores de lift ligeramente superiores a 1, lo que indica que estos servicios tienden a ser contratados juntos más de lo que se esperaría por azar.
El gráfico sugiere que cuando los clientes contratan servicios de Drones, es probable que también contraten otros servicios relacionados, especialmente GPS y Procesamiento de Datos.
Finalmente podemos observar los items mas frecuentes en la base de datos:
itemFrequencyPlot(transacciones, topN =10, type ="relative",main ="Top 10 Servicios Geomáticos más Frecuentes")
El gráfico indica que el servicio más requerido es el de drones, mientras que el servicio de cartografía es el menos solicitado. Esta diferencia en la demanda puede reflejar varias tendencias y necesidades en el campo de los servicios geomáticos.