Feat/pfp analyzer #5
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implementación del Analizador PFP (Package Functional Purity)
Descripción
Este Pull Request implementa el analizador PFP (Package Functional Purity), una métrica que evalúa la pureza funcional y cohesión de paquetes en proyectos de Machine Learning. El analizador mide qué tan enfocado está un paquete en una función específica del pipeline de ML, proporcionando scores cuantitativos y clasificaciones cualitativas.
Problema o Contexto
Como parte de las funcionalidades a implementar planteadas que en este caso las metricas de cohesion,especificamente la metrica fpc especifica para clases/modulos y pfp para paquetes.Mi trabajo consintio en implementar la segunda. utilizando de base el codigo que mi compañero ya habia hecho para calcular el fpc ya que pfp necesita los resultados de esta para hacer los calculos pertinenetes.
Cambios Realizados
1. Nuevo Módulo: pfp_analyzer.py
Se creó el módulo
src/analyzers/pfp_analyzer.py
que implementa la clasePFPAnalyzer
:Componentes principales:
2. Integración en AnalyzerFactory
Actualización de
src/analyzers/factory.py
:3. Actualización de Validadores
Modificación en
src/utils/validation.py
:4. Implementación de AnalysisContext
Lo que hice fue crear una instancia del AnalisisContext al inicio de la peticion
Pasar esa misma instancia a cada uno de los analizadores que se creen.De esta forma todos compartiran la misma inofrmacion
Así, cuando FPCAnalyzer guarda sus resultados, lo hace en este contexto compartido, y cuando PFPAnalyzer los busque, los encontrará en el mismo lugar.
Uso en PFP Analyzer:
5. Actualización de pipeline_stages.json
La principal razon por la que decidi actualizar el json es que alguna palabras clave eran demasiadas genericas y coincidian con nombres de metodos comunes lo que confundia al analizador y daba resultados de baja cohesion en paquetes cuando en realidad deberian haber tenido alta cohesion.
Palabras como "execute(", "fit(", "transform(", "predict(" son nombres de métodos muy comunes. casi todas las clases heredan de Task y tienen un método execute(), lo que provocaba que casi cualquier archivo sea clasificado incorrectamente como data_collection.
Algunas palabras eran demasiadas cortas o comunes en programación general y no son exclusivas de una etapa de ML (ej. "score").
Justificación de los Cambios
A continuación se detallan los cambios realizados en los criterios de clasificación de módulos y la justificación detrás de cada uno. El objetivo principal es aumentar la precisión y reducir los falsos positivos.
1.
data_collection
Eliminado:
execute()
Añadido:
pd.read_csv
,pd.read_json
,pd.read_excel
2.
feature_engineering
Eliminado:
transform()
Añadido:
model.fit_transform()
3.
model_training
Eliminado:
fit()
Añadido:
model.fit()
4.
model_evaluation
Eliminado:
evaluate()
,score()
,predict()
Añadido:
model.evaluate()
,model.score()
,model.predict()
6. Algoritmo de Cálculo Implementado
Evidencia
Estructura de Respuesta Esperada
Interpretación de Resultados
Checklist
Notas Adicionales
Fundamentos Técnicos
Fórmula de Cálculo:
Donde:
n_ml
: Número de módulos con funcionalidad MLn_total
: Total de módulos en el paqueteCF
: Factor de concentraciónFactor de Concentración:
Donde:
n_etapas
: Etapas únicas del pipeline detectadasETAPAS_MAX
: Constante = 5 (etapas totales del pipeline ML)Clasificación de Pureza
Decisiones de Diseño
Dependencia de FPC: El analizador PFP requiere resultados previos del FPC analyzer para determinar qué módulos tienen funcionalidad ML. Esta validación se ejecuta en tiempo de análisis y genera error descriptivo si no se cumple.
Constante ETAPAS_MAX = 5: Basada en las cinco etapas del pipeline ML definidas en
pipeline_stages.json
:Escala de Score: Se mantiene consistencia con otros analizadores multiplicando el score base (0-1) por 10 para obtener la escala final (0-10).
Descubrimiento de Paquetes: Se identifica un paquete como cualquier directorio que contenga archivos Python. Los módulos se agrupan por su directorio padre.