Vamos a ver cómo evaluar un Programa de Mantenimiento de Aeronaves, en adelante AMP (Aircraft Maintenance Program) conforme a la normativa EASA.
Básicamente se trata de comparar una a una cada tarea del Programa de Mantenimiento con la documentación de referencia del fabricante. Para ello usaremos Microsoft Office (Accesss, Excel) y VBA, y un par de técnicas matemáticas/informáticas. En particular veremos compararemos lo realmente importante, el intervalo y el threshold
Usaré un ejemplo inventado de AMP, y un ejemplo inventado de MPD para tratar de cubrir algunos casos, cuya extrapolación será sencilla.
Técnicas a usar
Para poder automatizar todo, vamos a usar dos técnicas matemáticas habituales y ampliamente conocidas, en su implementación informática:
- Expresiones Regulares
- Lógica Difusa, algoritmos de comparación y similitud de cadenas de texto
Las expresiones regulares nos permitirán extraer de nuestras tablas con los datos del AMP y MPD los valores de los intervalos y poder convertirlos para que sean los más parecidos posible. Por ejemplo, si el AMP indica como intervalo «I= 1095 Days» y el MPD «Interval: 3 YE«, podremos extraer el texto que nos interesa (1095 Days y 3 YE) y adicionalmente convertirlo a las mismas unidades (3 YE , 3 YE)
La Lógica Difusa y alguno de sus algoritmos de similitud de texto, nos va a permitir comparar los valores del AMP y MPD, pero no con los valores discretos Igual o Distinto (verdadero/falso), sino con un número (de 0 a 1) que indica el grado de similitud entre ambos. Esto nos va a permitir evitar realizar un trabajo casi imposible de tratar de convertir todos los valores del AMP y MPD de una manera idéntica.
Se trata de llegar a un punto en el que los valores del AMP y MPD sean comparables, por ejemplo, un intervalo del tipo «12 MO OR 1500 FH» puede ser comparable a otro del tipo «12 MTH OR 1500 FLH» , en este caso, la lógica discreta arrojaría un valor Falso o Distinto, mientras que la lógica difusa arrojaría una similitud de, digamos un 85%. Veremos a lo largo de este post lo sencillo que resulta comparar los intervalos de esta manera y detectar fácilmente aquellos que son distintos.
Nota: ver el post: https://abrazalaweb.net/2019/11/vba-ejecutar-cadena-de-texto-string-como-comandos-en-un-procedimiento-funcion-aplicacion-reemplazar-con-expresiones-regulares/
Proceso de evaluación
Los pasos que vamos a realizar son:
- Extraer los datos del AMP y del MPD a sendas tablas Excel. Tendremos varias columnas, donde las necesarias e imprescindibles son: Número de Tarea, Intervalo y Threshold . Podemos hacerlo con Adobe Acrobat o la herramienta Tabula
- Preprocesar con las expresiones regulares los campos Threshold e Intervalo, para extraer la información relevante: valores y unidades de medida de los mismos, teniendo en cuenta que buscamos que se parezcan, no tenemos que tardar mucho. Esto lo haremos con la herramienta en MS Access que indicaré a continuación. Nos ayudaremos para ello de un simulador tipo https://regexr.com/
- Crear una consulta de proyección en MS Access donde incluiremos ambas tablas, comparando los intervalos con el algoritmo de similitud de texto
- Exportar a Excel el resultado de la consulta, ordenar por el valor de solicitud y comprobar fácilmente los valores distintos
Herramienta
La herramienta (Toolkit for Evaluation of Maintenance Programs, TEMP) está realizada en Microsoft Acces usando formularios y VBA.
La herramienta tiene tres pestañas (que se abren a la vez con la macro Autoexec):
- Formulario RegExp, es el que vamos a usar, usa el módulo regexp, y consta de tres utilidades: limpiar campos (quita retornos de carro y varios espacions juntos), reemplazo de cadenas de texto usando expresiones regulares y con ellas también, extracción del texto que nos interese.
- Formulario MPD modificaciones, partiendo de un MPD de Airbus y el listado de modificaciones de un avión, comprueba la aplicabilidad de las tareas del MPD en el avión, basándose en las modificaciones de éste
- pdfSearch: búsqueda masiva en PDF, ya comentado en este blog, https://abrazalaweb.net/2019/03/busqueda-masiva-en-pdf-vba/, usa el módulo Clipboard (para pegar en Acrobat la cadena de texto buscada)
Herramienta «limpia», sin hacer nada aún, con algunos valores por defecto:
Enlace de descarga: TEMP.accdb
Tablas Excel
Estas son las tablas excel que voy a usar para este ejemplo, extraídas de los pdf del AMP y del MPD
Tabla MPD:
Rev | Task reference | Description | Threshold/Internal/Sample | Otros |
R | xxxxx-xx-001 | Descripción 1 | I: 2 A | Otros 1 |
xxxxx-xx-002 | Descripción 2 | I: 2 C | Otros 2 | |
xxxxx-xx-003 | Descripción 3 | I: C | Otros 3 | |
xxxxx-xx-004 | Descripción 4 | I: C | Otros 4 | |
R | xxxxx-xx-005 | Descripción 5 | I: 4 A | Otros 5 |
xxxxx-xx-006 | Descripción 6 | I: 2 C | Otros 6 | |
xxxxx-xx-007 | Descripción 7 | I: 2 C | Otros 7 | |
xxxxx-xx-008 | Descripción 8 | I: 2 C | Otros 8 | |
xxxxx-xx-009 | Descripción 9 | I: YE | Otros 9 | |
xxxxx-xx-010 | Descripción 10 | I: 3 MO OR I: 600 LD | Otros 10 | |
R | xxxxx-xx-011 | Descripción 11 | I: 500 FH | Otros 11 |
xxxxx-xx-012 | Descripción 12 | I: 3 MO OR I: 600 LD | Otros 12 | |
xxxxx-xx-013 | Descripción 13 | I: 3 MO OR I: 600 LD | Otros 13 | |
R | xxxxx-xx-014 | Descripción 14 | I: 500 FH | Otros 14 |
xxxxx-xx-015 | Descripción 15 | I: 3 MO OR I: 600 LD | Otros 15 | |
xxxxx-xx-016 | Descripción 16 | T: 4 YE I: 2 YE | Otros 16 | |
xxxxx-xx-017 | Descripción 17 | T: 4 YE I: 2 YE | Otros 17 | |
xxxxx-xx-018 | Descripción 18 | T: 36000 FL I: 12000 F | Otros 18 | |
xxxxx-xx-019 | Descripción 19 | T: 36000 FL I: 12000 FL | Otros 19 | |
xxxxx-xx-020 | Descripción 20 | T: 4 YE I: 4 YE | Otros 20 | |
xxxxx-xx-021 | Descripción 21 | I: C | Otros 21 | |
R | xxxxx-xx-022 | Descripción 22 | I: 4 A | Otros 22 |
R | xxxxx-xx-023 | Descripción 23 | I: 2000 FH | Otros 23 |
R | xxxxx-xx-024 | Descripción 24 | I: 4 A | Otros 24 |
R | xxxxx-xx-025 | Descripción 25 | I: 4 A | Otros 25 |
xxxxx-xx-026 | Descripción 26 | I: C | Otros 26 | |
xxxxx-xx-027 | Descripción 27 | I: C | Otros 27 | |
xxxxx-xx-028 | Descripción 28 | I: C | Otros 28 | |
xxxxx-xx-029 | Descripción 29 | I: C | Otros 29 | |
D | yyyyy-yy-030 | Descripción 30 | I: 2000 FH | Otros 30 |
xxxxx-xx-031 | Descripción 31 | I: C | Otros 31 | |
xxxxx-xx-032 | Descripción 32 | I: C | Otros 32 | |
xxxxx-xx-033 | Descripción 33 | I: C | Otros 33 | |
xxxxx-xx-034 | Descripción 34 | I: WY | Otros 34 | |
xxxxx-xx-035 | Descripción 35 | I: YE | Otros 35 | |
xxxxx-xx-036 | Descripción 36 | I: NOTE | Otros 36 | |
xxxxx-xx-037 | Descripción 37 | I: 4 C OR I: 8 YE | Otros 37 | |
xxxxx-xx-038 | Descripción 38 | I: 4 C OR I: 8 YE | Otros 38 |
Tabla AMP
STATUS | TASK REFERENCE | DESCRIPTION | TH | INTERVAL |
xxxxx-xx-001 | Descripción 1 | 4 A | 4 A | |
xxxxx-xx-002 | Descripción 2 | 24 FH | 24 FH | |
xxxxx-xx-003 | Descripción 3 | 2 A | 2 A | |
xxxxx-xx-004 | Descripción 4 | 2 C | 2 C | |
xxxxx-xx-005 | Descripción 5 | 1 C | 1 C | |
xxxxx-xx-006 | Descripción 6 | 1 C | 1 C | |
xxxxx-xx-007 | Descripción 7 | 4 A | 4 A | |
xxxxx-xx-008 | Descripción 8 | 2 C | 2 C | |
R | xxxxx-xx-009 | Descripción 9 | 2 C | 2 C |
R | xxxxx-xx-010 | Descripción 10 | 2 C | 2 C |
R | xxxxx-xx-011 | Descripción 11 | 6 MO | 6 MO |
xxxxx-xx-012 | Descripción 12 | 3 MO OR 600 FC | 3 MO OR 600 FC | |
R | xxxxx-xx-013 | Descripción 13 | 500 FH | 500 FH |
xxxxx-xx-014 | Descripción 14 | 3 MO OR 600 FC | 3 MO OR 600 FC | |
xxxxx-xx-015 | Descripción 15 | 3 MO OR 600 FC | 3 MO OR 600 FC | |
R | xxxxx-xx-016 | Descripción 16 | 500 FH | 500 FH |
xxxxx-xx-017 | Descripción 17 | 183 DY OR 600 FC | 3 MO OR 600 FC | |
xxxxx-xx-018 | Descripción 18 | 3600 FH | 1200 FC | |
xxxxx-xx-019 | Descripción 19 | 3600 FH | 1200 FC | |
xxxxx-xx-020 | Descripción 20 | 1 C | 1 C | |
xxxxx-xx-021 | Descripción 21 | 1 C | 1 C | |
R | xxxxx-xx-022 | Descripción 22 | 1 C | 1 C |
xxxxx-xx-023 | Descripción 23 | 1 C | 1 C | |
xxxxx-xx-024 | Descripción 24 | 4 A | ||
R | xxxxx-xx-025 | Descripción 25 | 2000 FH | 2000 FH |
R | xxxxx-xx-026 | Descripción 26 | 4 A | 4 A |
xxxxx-xx-027 | Descripción 27 | 4 A | 4 A | |
xxxxx-xx-028 | Descripción 28 | 1 C | 1 C | |
R | xxxxx-xx-029 | Descripción 29 | 1 C | 1 C |
R | xxxxx-xx-030 | Descripción 30 | 1 C | 1 C |
xxxxx-xx-031 | Descripción 31 | 1 C | 1 C | |
R | xxxxx-xx-032 | Descripción 32 | 2000 FH | 2000 FH |
xxxxx-xx-033 | Descripción 33 | 1 C | 1 C | |
xxxxx-xx-034 | Descripción 34 | 1 C | 1 C | |
xxxxx-xx-035 | Descripción 35 | 1 C | 1 C | |
xxxxx-xx-036 | Descripción 36 | 4 A | 4 A | |
xxxxx-xx-037 | Descripción 37 | LC | LC | |
xxxxx-xx-038 | Descripción 38 | 1 YE | 1 YE | |
xxxxx-xx-039 | Descripción 39 | 8 YE OR 4 C | 8 YE OR 4 C | |
xxxxx-xx-040 | Descripción 40 | 8 YE OR 4 C | 8 YE OR 4 C |
Ahora las importamos a Access, en el asistente de importación tenemos que indicarle que la primera fila contiene los encabezados de columna y permitimos que agrege la clave principal
Y las tenemos ya en nuestra herramienta:
Después de esto, guardamos y cerramos Access y lo volvemos a abrir (no está muy depurada la herramienta de momento, y para que se cargen todas las tablas en los desplegables del formulario no queda otra que cerrar/abrir)
Primeros pasos, limpiar y pre-procesar las tablas
Antes nada, vamos a limpiar y a preparar las tablas de AMP y MPD para poder compararlas fácilmente. Para ello tenemos que estudiar un poco los datos de cada una de ellas, para poder inferir las expresiones regulares que necesitaremos (siempre con la ayuda de páginas del tipo https://regexr.com/ para comprobar que las expresiones regulares que usamos están bien)
Limpiar las tablas
En el formulario Access, lo primero que tenemos que hacer es seleccionar la tabla y el campo sobre el que vamos a ejecutar las herramientas del mismo A) y B).
Por tanto, empezamos con la tabla MPD, la seleccionamos en el combo, y luego seleccionamos el campo Threshold/Interval (el combo campos se actualiza con la selección de la tabla)
Al pulsar limpiar saltos de línea, se crea una nueva columna (campo) añadiendo al nombre de la columna que hayamos seleccionado el sufijo «_limpio«. Comprobamos cómo se homogeneizan los valores
Hacemos lo mismo con la tabla AMP, esta vez, lo hacemos dos veces, una para la columna Threshold y otra para la columna Interval, al final tenemos nuevos campos «limpios»
Herramienta A) Reemplazar algunos valores para preparar algo más en las tablas
Ahora, estudiando un poco los valores de cada tabla, usando expresiones regulares, podemos cambiar algunos para aproximarlos. Es un buscar/reemplazar avanzado, donde podemos incluso convertir valores numéricos. Para ello, podemos usar algunos de los valores de ejemplo, de la tabla «Biblioteca de Reemplazos»
El funcionamiento es el siguiente:
- Vamos a actuar sobre la tabla y columna/campo indicados en el inicio del formulario (1 y 2) NOTA: El campo que hemos limpiado previamente
- Escribimos el patrón (expresión regular) que queremos modificar, es decir, lo que vamos a buscar (3)
- Escribimos el patrón (expresión regular) por el que vamos a cambiar el anterior (4)
- Si es necesario alguna conversión (ejecutar código VBA), seleccionamos la casilla Código Exe
- Por último pulsamos el botón reemplazar (5)
En este ejemplo vamos ver dos tipos de reemplazos en la tabla AMP:
- Cambiar y convertir un valor
- Cambiar el orden de los valores
En el primer caso, tenemos en la tabla «Biblioteca de reemplazos» la expresión regular
reemplazar | por | descripción |
---|---|---|
(\d+)( Days) | CStr(Round(Matches(0).SubMatches(0) / 30.5, 0)) & » MO» | Pasar a MO (string codigoexe) |
La expresión regular es sencilla: un primer grupo (los grupos se delimitan e identifican entre paréntesis) que representa un número, formado uno o más dígitos (\d+), seguidos de otro grupo formado por un «espacio» y la palabra «Days«. Eso lo reemplazamos por el código VBA que convierte el primer grupo (SubMatches(0)) a meses (dividiendo por 30.5), y le añade una cadena de texto formada por un «espacio» y la palabra «MO» . Como tenemos que ejecutar código VBA, tenemos que marcar la casilla código Exe
En el ejemplo tendremos que modificar el patrón, pues en lugar de Days tenemos DY
Lo vemos:
Al pulsar el botón Reemplazar, se ejecutará el cambio en la columna seleccionada (TH_limpio), y en nuestro caso el valor «183 DY» se convertirá en «6 MO»
En el segundo caso, tenemos en la tabla «Biblioteca de reemplazos» la expresión regular
reempazar | por | descripcion |
---|---|---|
(.*) OR (.*) | $2 OR $1 | cambiar orden 100FH OR 1YE -> 1YE OR 100FH |
Esta expresión regular es sencilla, un grupo de caracteres, seguido de «espacio» seguido de «OR» y de otro «espacio» y otro grupo de texto, simplemente se permuta el orden de los grupos. Ahora no se ejecuta código VBA en el reemplazo
Vamos a hacerlo en el campo «Intervalo_limpio», pero en este ejemplo no queremos cambiar el orden en todos los intervalos, sólo los que el primer valor estáen años, por tanto nuestro primer grupo será un grupo de caracteres, seguidos de un espacio y YE.
Al pulsar reemplazar, se habrá permutado el orden
Herramienta B) Extraer Intervalos con expresiones regulares
Ahora vamos a extraer los valores que realmente nos interesan. Para ello usaremos expresiones regulares.
Lo que hace la aplicación es, a partir de una única columna donde se encuentran los intervalos y thresholds, separalos en dos columnas distintas (llamadas ‘_Int’ y ‘_Th’) y recorrer toda la tabla de tareas buscando para cada una de ellas qué valor de expresión regular de la lista RegExp es aplicable.
En el Access usamos la tabla RegExp, donde vamos a ir poniendo las que vayamos obteniendo para un MPD o AMP concreto (para eso tenemos el campo doc.
Lo que es de vital importancia es que tenemos que ponerlas en orden de la más larga o compleja a la más sencilla, ya que el programa va recorriendo la lista desde el principio, y cuando encuentra una coincidencia para (por eso si ponemos la primera una sencilla, se ejecutará la coincidencia a pesar de que cumpla una más completa si está debajo en la lista)
Lo primero que tenemos que hacer es ver cómo son las tablas que tenemos y qué podemos hacer, es decir buscar una estrategia. En el caso del ejemplo, vamos a trabajar sólo en la Tabla MPD, pues tiene ambos valores de Threshold en Intervalo en una misma columna y fácilmente identificables, todos ellos están precedidos por «T: « o «I: «, y entonces separaremos cada uno de ellos en dos columnas distintas, para hacerlo coincidir con el formato del AMP.
Explicación de la tabla RegExp
El ejemplo muestra esta tabla:
Los campos son:
- regExp: es la expresión regular que vamos a buscar, los patrones que hemos construido para sacar los valores que nos interesan. Ordenados siempre del más complejo al más sencillo. Es decir, un valor tiene que cuadrar primero en la regla más larga. Entre paréntesis los grupos que vamos a extraer.
- SepararTh-Int: es un valor Sí/No en función de si es necesario crear dos columnas, en la primera el primer grupo y en la segunda el segundo.
- numeroItems: es el número de elementos a extraer en una misma columna, se añadirá OR para concatenarlos.
- saltoIndice: un valor que indica el número del grupo que se usará para los segundos valores extraidos. En general ‘1’ (siendo ‘0’ el primer grupo, pero en grupos más comlpejos hay que cambiarlo. Lo siguiente trata de explicarlo (ojo que los índices cuentas desde 1.., en tanto que en VBA hay que hacerlo desde 0)
- descripción: escribimos una descripción de la regla más legible
- doc: Para clasificar todas las reglas que hemos encontrado para un tipo determinado de tabla, en este caso el MPD de este fabricante de prueba.
Lo mejor es mirar el código VBA para ver cómo se usan, y cómo se puede modificar para contemplar y adaptarlo a más casos.
Ejecutamos la herramienta para nuestra tabla MPD
Teniendo en cuenta lo hecho hasta ahora:
Al hacer click en el botón Extraer Th/Int la tabla MPD queda modificada con las dos columnas nuevas, y preparada ya para poder comparar con el AMP
Evaluación del AMP vs MPD
Ahora ya estamos en condiciones de comparar las tablas.
Vamos a ver tres pasos:
- Buscar tareas del MPD que no están en el AMP
- Buscar tareas del AMP que no están en el MPD
- Comparar intervalos/Threshold de las tareas comunes en ambos
Buscar tareas que faltan en AMP y MPD
Simplemente con el asistente de consultas de no coincidentes de Access podemos ver las tareas del MPD que faltan en el AMP y viceversa:
Seleccionamos la tabla inicial (MPD), la tabla donde vamos a buscar (AMP), el valor del campo
El resultado de la consulta nos muestra las tareas del MPD que no están en el AMP (una creada a propósito en este ejemplo)
Haciendo los mismos pasos, pero con el orden de las tablas al revés, tenemos las tareas del AMP que no están contempladas en el MPD
Comparar Threshold e Intervalos: algoritmo de similitud
Explicación: El algoritmo de similitud nos va a permitir comparar la similitud sintáctica de los campos (intervalos/threshold), si el resultado es 1, entonces son idénticos (el valor disminuye según van siendo más distintos, se va comparando el número de caracteres distintos, etc). Ordenar la lista por orden de mayor a menor del valor de similitud, permite un estudio y análisis «visual» muy sencillo y rápido.
No obstante existen dos problemas que no podemos obviar, relacionados con la semántica de los intervalos :
- un intervalo de 100 FH es muy distinto a uno de 100 FC, a pesar de que el algoritmo de similitud indicará que son muy parecidos
- un intervalo de 200 FH también es muy distinto a uno de 100 FH y el algoritmo también nos dirá que son muy parecidos.
El primer problema se soluciona muy fácilmente reemplazando en ambas tablas, en los campos Intervalo (o threshold) cualquiera de los dos, por ejemplo, podemos reemplazar FC por CYC y ya penalizamos el hecho de usar unidades distintas
Para el segundo problema, he implementado una función de penalización muy simple, que para cada intervalo extrae los números que aparecen en él (con expresiones regulares) y los compara, calculando una penalización p (número entero, valor inicial ‘0’) que aumenta según los números van siendo distintos, dividiendo entonces el resultado del algoritmo de similitud por esa penalización.
Por ejemplo, en la comparación 100 FH y 200 FH, calcularía una penalización p=2 y la similitud la dividiría por la mitad, evitando así pasar por un falso positivo
En el Access las funciones que hay son:
- Similarity(string1,string2)
- Similitud_adpt(string1,string2) Algoritmo Similarity anterior que incluye la penalización por números distintos
- JaroWinkler(string1,string2, prefijo, tipo_comparación)
- JaroWinkler(string1,string2,prefijo,tipo_comparación) Incluye la penalización
(JaroWinkler es otro algoritmo de comparación de cadenas que tiene en cuenta los comienzos de las cadenas), pero el resultado es similar, da valores más altos que Similarity
https://blog.developpez.com/philben/p12207/vba-access/vba-distance-de-jaro-winkler
Ahora creamos una consulta en modo diseño con las dos tablas, añadiendo una relación entre los campos con el número de tarea (inner join o proyección), incluimos los campos que nos interesan y la función similitud con los campos Threshold (y otra consulta con los campos Interval)
Establecemos la relación (con el ratón pinchamos en un campo Task Reference y lo arrastramos al equivalente en la otra tabla) y seleccionamos los campos que queremos en la consulta (lo más sencillo posible), los que hemos limpiado y extraido:
Creamos un nuevo campo de consulta con la herramienta generar código y seleccionamos la función similarity, con los parámetros a comparar: ‘_TH’ y ‘TH_limpio’
Es mejor usar la función Similitud_adpt (no aparece en la captura porque es previa a la modificación para penalizar intervalos muy parecidos pero con valores numéricos distintos 100FH vs 200FH)
Al hacer click en la función vamos completando (idem con Similitud_adpt ):
Usaremos la función comparando los dos valores sólo:
Similarity( [MPDTasks]![_Th] , [TAREAS_AMP]![TH_limpio] ) Similitud_adpt( [MPDTasks]![_Th] , [TAREAS_AMP]![TH_limpio] )
Guardamos la consulta y la ejecutamos, y obtenemos la tabla con las comparaciones. Exportamos la tabla a excel para poder estudiarla un poco mejor. En este caso, resulta que el AMP repite los valores de los intervalos en el campo threshold cuando en el MPD están vacíos (la similitud es 0). Al ordenar el Excel por el valor de la expresión similaridad descendente, es muy fácil comprobar los valores realmente distintos (simlaridad = 1 se corresponde a igualdad)
Rev | Task reference | _Th | TH_limpio | Expr1 |
xxxxx-xx-018 | 36000 FL | 3600 FH | 0.75 | |
xxxxx-xx-019 | 36000 FL | 3600 FH | 0.75 | |
xxxxx-xx-020 | 4 YE | 1 C | 0.25 | |
xxxxx-xx-016 | 4 YE | 500 FH | 0.166666672 | |
xxxxx-xx-017 | 4 YE | 6 MO OR 600 FC | 0.071428575 | |
R | xxxxx-xx-001 | 4 A | 0 | |
xxxxx-xx-002 | 24 FH | 0 | ||
xxxxx-xx-003 | 2 A | 0 |
Repetimos exactamente lo mismo, pero ahora para los intervalos. Creamos una nueva consulta.
Rev | Task reference | _Int | INTERVAL_limpio | Expr1 |
xxxxx-xx-008 | 2 C | 2 C | 1 | |
xxxxx-xx-012 | 3 MO OR 600 LD | 3 MO OR 600 FC | 0.857142866 | |
xxxxx-xx-015 | 3 MO OR 600 LD | 3 MO OR 600 FC | 0.857142866 | |
xxxxx-xx-018 | 12000 F | 1200 FC | 0.857142866 | |
xxxxx-xx-019 | 12000 FL | 1200 FC | 0.75 | |
R | xxxxx-xx-001 | 2 A | 4 A | 0.666666687 |
A pesar de que este ejemplo no es muy bueno, es fácil comprobar que al ojo humano, con la tabla ordenada así, le resulta muy sencillo ver los intervalos que son iguales (casi iguales) y los distintos.
Para ello, esta tabla, extraída de un caso real lo muestra:
Lo más fácil es filtrar las filas con similaridad = 1 e ir recorriendo al tabla con la mirada, pues resulta muy sencillo detectar los cambios que se corresponden con valores correctos e incorrectos. El hecho de ordenar por el valor de similaridad facilita enormemente la labor.
[…] Evaluación de un Programa de Mantenimiento de Aeronaves (AMP) TEMP: Toolkit for Evaluation of Maintenance Programs […]
[…] Evaluación de un Programa de Mantenimiento de Aeronaves (AMP) […]