​
Hackathon - Wolfram - Texas Tech
Costa Rica - 2025
Grupo: GuacoMinds
Integrantes:
María Celeste Berger Alfaro
Catalina Cárdenas González
María Paula Villafuerte Salazar
CloudObject[
https://www.wolframcloud.com/obj/catalinacardenascbcb/cancerTest
]
Prototipo para indentificación de cancer de mama

Día del Hackathon

Sábado, 15 de Noviembre, 2025
​

Introducción

El cáncer de mama continúa siendo una de las principales causas de mortalidad en mujeres a nivel mundial, y su detección temprana es un factor determinante para mejorar el pronóstico y el tratamiento. En este contexto, el uso de herramientas basadas en inteligencia artificial se ha convertido en una alternativa prometedora para apoyar los procesos diagnósticos y reducir la carga de análisis manual en los sistemas de salud.
​
Durante el hackathon, desarrollamos un modelo de inteligencia artificial capaz de analizar mamografías y clasificar si presentan indicios de cáncer de mama, además de señalar zonas con mayor probabilidad de anomalías. Paralelamente, construimos una plataforma web para integrar este sistema y facilitar su uso. A lo largo del proceso aplicamos pensamiento computacional, técnicas de visión artificial y estrategias de programación eficientes, con el fin de crear una herramienta funcional dentro del tiempo establecido.
​

¿Cómo podría esta herramienta ayudar a las clínicas en el interior de Costa Rica?

La aplicación demuestra ser un prototipo funcional capaz de analizar imágenes mamográficas y clasificarlas en "cáncer" o "no cáncer", además de mostrar probabilidades y señalar posibles zonas sospechosas . Sin embargo, su desempeño está limitado por la poca cantidad de imágenes utilizadas en el entrenamiento y por una precisión aún baja, lo que la convierte en una herramienta de apoyo más que en un sistema de diagnóstico confiable . Aun así, este tipo de tecnología representa un avance importante para las clínicas del interior del país, pues podría agilizar el tamizaje y funcionar como un segundo lector preliminar, siempre con la revisión final de un profesional de salud . En resumen, la aplicación cumple con su función básica de detección inicial, pero necesita mayor solidez, validación clínica y un conjunto de datos más amplio para llegar a ser una herramienta realmente segura y efectiva .
​
Si en el futuro la herramienta se refinara y lograra un nivel alto de confiabilidad, podría cambiar de manera notable la atención del cáncer de mama en las clínicas del interior de Costa Rica . Un sistema preciso permitiría obtener resultados preliminares casi de inmediato, reduciría la dependencia de radiólogos que solo están en centros grandes y facilitaría el acceso al tamizaje en zonas rurales . Además, serviría como un primer lector automatizado que ayudaría a priorizar los casos más urgentes . Esto reduciría los tiempos de espera, aumentaría la detección temprana, haría un uso más eficiente de los recursos y disminuiría las brechas entre la GAM y las regiones más alejadas . En conjunto, una herramienta confiable y bien validada llegaría a ser un apoyo clave para mejorar la equidad y la eficiencia del sistema de salud .

Primer Desafío: Configurar el entorno de trabajo y preparar el acceso a los archivos

Establecer el directorio de trabajo actual (carpeta) como carpeta. nb.

Antes de extraer el archivo IBCD.zip a la carpeta de trabajo se cambia el nombre de\b “archivo” a “IBCD”, por último, se verifica que el nombre de la carpeta sea el correcto (tener en cuenta los caracteres utilizados en las carpetas de Windows y Linux/Mac.
Este paso es esencial porque permite que el notebook acceda correctamente a las imágenes y archivos necesarios para el proyecto. Al establecer el directorio de trabajo, garantizamos que todas las funciones de importación puedan localizar los datos sin errores.

Codigo utilizado:
In[]:=
SetDirectory[NotebookDirectory[]]
Out[]=
C:\Users\catac\Downloads\GuacoMinds
In[]:=
Directory[]
Out[]=
C:\Users\catac\Downloads\GuacoMinds
Muestra el directorio de evaluación de cuaderno actual y posteriormente establece el directorio de trabajo actual en tu directorio “de inicio”. Esto asegura que cualquier archivo en esa carpeta (mamografías, modelos, imágenes de prueba, etc.) pueda ser cargado sin necesidad de escribir rutas largas o absolutas.

Cargar imágenes de los dataset :

En este punto del desafío necesitamos ubicar la carpeta donde están guardadas las mamografías . Sin acceder correctamente al directorio donde se encuentran las imágenes, ningún análisis de cáncer de mama puede comenzar . Este paso es esencial porque permite al código "saber" dónde buscar los datos .

Codigo utilizado :
In[]:=
ibcdImagesFolder=Directory[]<>"/IBCD"
Out[]=
C:\Users\catac\Downloads\GuacoMinds/IBCD
Este comando se utiliza para definir la ubicación exacta del dataset de imágenes . Sin esta ruta, no sería posible cargar ni procesar las mamografías en los pasos posteriores del desafío . Con esto el sistema sabe : "Las imágenes están en la carpeta llamada IBCD, ubicada junto al notebook ."
​
Una vez definida la ruta donde se encuentran las mamografías, el siguiente paso crítico es cargar realmente los archivos de imagen. Este comando es fundamental porque permite que el sistema encuentre todas las mamografías disponibles y las prepare para ser analizadas posteriormente para detectar cáncer de mama.
Sin este paso, el algoritmo no tendría datos que procesar.
Codigo utilizado:
In[]:=
bcidImages=FileNames["*jpg",ibcdImagesFolder,Infinity]​​
Out[]=
{C:\Users\catac\Downloads\GuacoMinds/IBCD\1.3.6.1.4.1.9590.100.1.2.100018879311824535125115145152454291132\1-263.jpg,C:\Users\catac\Downloads\GuacoMinds/IBCD\1.3.6.1.4.1.9590.100.1.2.100018879311824535125115145152454291132\2-241.jpg,C:\Users\catac\Downloads\GuacoMinds/IBCD\1.3.6.1.4.1.9590.100.1.2.100131208110604806117271735422083351547\1-126.jpg,
⋯10231⋯
,C:\Users\catac\Downloads\GuacoMinds/IBCD\1.3.6.1.4.1.9590.100.1.2.99849561512168290821756942242329439660\1-251.jpg,C:\Users\catac\Downloads\GuacoMinds/IBCD\1.3.6.1.4.1.9590.100.1.2.99933945612504876136587449881888946699\1-207.jpg,C:\Users\catac\Downloads\GuacoMinds/IBCD\1.3.6.1.4.1.9590.100.1.2.99933945612504876136587449881888946699\2-208.jpg}
Full expression not available
(
original memory size:
1.6 MB)
Ahora se debe de hacer lo mismo pero con las carpetas que contienen las imagenes de cancer y de no cancer. Este paso es esencial porque permite organizar y clasificar las mamografías según su diagnóstico: imágenes con cáncer, e imágenes sin cáncer. El modelo necesita ejemplos positivos y negativos para aprender a distinguir entre ambos.
​
Codigo utilizado:
In[]:=
examNoCancer="Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education/Breast Cancer Dataset/Original Dataset/Non-Cancer";​​examCancer="Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education/Breast Cancer Dataset/Original Dataset/Cancer";
In[]:=
examImagesNoCancer=FileNames["*jpg",examNoCancer,Infinity];​​examImagesCancer=FileNames["*jpg",examCancer,Infinity];

Conteo de imágenes disponibles :

Luego de cargar los archivos de mamografías, es fundamental verificar cuántas imágenes tiene cada categoría (con cáncer y sin cáncer).
Esto asegura que el dataset esté completo, balanceado y listo para ser utilizado en el análisis o entrenamiento del modelo.
​
Codigo utilizado:
In[]:=
Length[examImagesNoCancer]​​Length[examImagesCancer]
Out[]=
620
Out[]=
125
Es importante saber la cantidad de imagenes de cada dataset para no poner al modelo IA a analizar más de las disponibles . Tambien un dataset desbalanceado (por ejemplo, muchas imágenes sin cáncer y pocas con cáncer) puede afectar la calidad del modelo .

Ahora, se experimenta con la navegación interactiva en ambos conjuntos de datos BCID y en las muestras de imágenes de exámenes de mamografía con y sin cáncer .
In[]:=
Manipulate[Column[{n,bcidImages[[n]],Image[Import[bcidImages[[n]]],ImageSize->Small]}],{n,1,Length[bcidImages],1},​​SaveDefinitions->True]
Out[]=
​
n
1
C:\Users\catac\Downloads\GuacoMinds/IBCD\1.3.6.1.4.1.9590.100.1.2.100018879311824535125115145152454291132\1-263.jpg
Image[$Failed,ImageSizeSmall]
In[]:=
Manipulate[​​Column[{n,​​examImagesNoCancer[[n]],​​Image[Import[examImagesNoCancer[[n]]],ImageSize->Small]}],​​{n,1,Length[examImagesNoCancer],1},​​SaveDefinitions->True]
Out[]=
​
n
1
Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education/Breast Cancer Dataset/Original Dataset/Non-Cancer\IMG (100).jpg
Image[$Failed,ImageSizeSmall]
In[]:=
Manipulate[​​Column[{n,​​examImagesCancer[[n]],​​Image[Import[examImagesCancer[[n]]],ImageSize->Small]}],​​{n,1,Length[examImagesCancer],1},​​SaveDefinitions->True]
Out[]=
​
n
1
Mammogram Mastery A Robust Dataset for Breast Cancer Detection and Medical Education/Breast Cancer Dataset/Original Dataset/Cancer\IMG (100).jpg
Image[$Failed,ImageSizeSmall]

Desafío 2 — Crear los conjuntos de datos para la IA

Se cargaron 125 imágenes para cancer y no cancer, ya que es la cantidad maxima de imágenes en la carpeta de Cancer, y es mejor que ambas tengan la misma cantidad de datos para que la IA sea más precisa.
In[]:=
trainingCancerData=Map[ColorConvert[ImageResize[Import[#],600],"Grayscale"]&,RandomSample[examImagesCancer,125]];​​trainingNoCancerData=ColorConvert[ImageResize[Import[#],600],"Grayscale"]&/@RandomSample[examImagesNoCancer,125];
Este codigo selecciona 125 imágenes al azar de cada categoría, lo cual es importante para evitar sesgos en el dataset y garantizar que el modelo no aprenda basándose en un orden específico. Esa línea de codigo también convierte los colores de las imágenes a una escala gris y reduce el tamaño de la imagen a 600px.
​
Este código crea dos conjuntos de datos:
trainingCancerData → 125 imágenes de cáncer, procesadas. trainingNoCancerData → 125 imágenes sin cáncer, procesadas.
Ambos datasets están listos para usarse en el entrenamiento del modelo de IA y son fundamentales para garantizar que el modelo aprenda patrones reales y confiables.
​
Después de preparar las imágenes para el entrenamiento, es fundamental comprobar que realmente tenemos la cantidad correcta de imágenes procesadas.
Estas verificaciones permiten asegurar que no hubo errores de carga, que el muestreo funcionó y que el dataset está balanceado.
Son pasos pequeños, pero críticos para garantizar que el modelo se entrene adecuadamente.
In[]:=
Length[trainingCancerData]​​Length[trainingNoCancerData]
Out[]=
125
Out[]=
125
Estas dos líneas confirman que el dataset quedó completo y balanceado (125 imágenes con cáncer y 125 sin cáncer), un requisito esencial para un entrenamiento confiable del modelo .
​

Desafío 3 — Crear y Comparar Clasificadores de Machine Learning

Ahora, con la función Classify, se puede entrenar un algoritmo de aprendizaje automático de IA para comprobar si una imagen determinada de una mamografía tiene cáncer o no.
Para descubrir cual es el mejor metodo para el aprendizaje de la IA, se compararon dos metodos distintos de Classify. Se utiliza el siguiente código, el cual contiene dos variables de función “NeutralNetwork” y “LogisticRegression”.
​
In[]:=
cancerClassify=Classify[<|​​"cancer"->trainingCancerData,​​"noCancer"->trainingNoCancerData|>,​​Method->"LogisticRegression"]​​
Out[]=
ClassifierFunction
Input type: Image
Classes: cancer,noCancer
Data not saved. Save now

Posteriormente, observamos la informacion de cada metodo:
Se puede observar que el clasificador de “LogisticRegression” tuvo mayor precisión comparada con los otros metodos, por lo que se seguira trabajando con ese.
​
Se puede guardar el modelo de IA ML en la nube de wolfram para utilizarlo en el micrositio lo que equivale a guardar un archivo normal, pero en la nube en lugar de una carpeta local.
Para verificar que el IA ML Classifier funcione se le da una imagen que no sea parte de la base de datos para que la clasifique .
Aqui comprobamos que el modelo sí sirve . Tambien podemos ver los detalles estadisticos del modelo .

Desafío 4 - Implementar una interfaz gráfica de usuario (GUI) para el front - end de un micrositio web.

El micrositio es una GUI que permite implementar en linea una sola funcionalidad del sistema. El trabajo subyacente, nuestro IA ML Classifier, puede ser complejo como el procesamiento e imágenes de exámenes mediante IA y aprendizaje automático utilizando los servidores de la nube de Wolfram.
​
Una solución sencilla de como implementar este modelo en un micrositio es la siguiente:
Para obtener una mejor organización de la pagina y más información sobre la imagen se debe usar el siguiente codigo :
Este código no solo despliega un clasificador . Construyes una aplicación médica completa, con :
◼
  • Vista de la imagen enviada.
  • ◼
  • Diagnóstico con porcentajes.
  • ◼
  • Pie chart de probabilidades.
  • ◼
  • Información interna del modelo.
  • ◼
  • Mapa de posibles regiones con tumor.
  • ◼
  • Página web personalizada con título, logos y colores.
  • Como este prototipo está enfocado en la salud de las mujeres de Costa Rica, nuestro dashboard está parcialmente en español, con la excepción de los datos del modelo de IA/ML. Esto se hizo con el propósito de que la herramienta sea accesible para la mayor cantidad de personas posible, considerando que el idioma predominante en Costa Rica es el español.

    Retos

    Nuestro equipo enfrentó numerosos desafíos durante el desarrollo del reto, comenzando por la ausencia total de un tutor o acompañante tanto antes como durante el hackathon . Esto nos dejó completamente por nuestra cuenta para investigar, aprender y resolver cada obstáculo que surgía . A nivel técnico, las dificultades fueron aún mayores : una de las computadoras no lograba cargar el programa, la IA no funcionó en ningún momento para ninguna de las tres participantes, y además los créditos de Wolfram se agotaron justo cuando intentábamos avanzar, lo que impidió realizar pruebas y redujo aún más nuestras posibilidades de obtener resultados .
    ​
    A pesar de este escenario, el equipo se mantuvo unido y logró adaptarse para continuar con el trabajo dentro de las limitaciones . La falta de guía nos obligó a organizarnos mejor, a tomar decisiones por nuestra cuenta y a buscar soluciones alternativas bajo presión . Aunque la suma de estos problemas dificultó enormemente el proceso, también fortaleció nuestra capacidad de colaboración y resolución de problemas, permitiéndonos cumplir con el reto y presentar un prototipo funcional a pesar de todas las complicaciones .

    Conclusión

    Durante el hackathon aprendimos a desarrollar una inteligencia artificial capaz de analizar mamografías para detectar posibles casos de cáncer de mama y resaltar zonas con mayor probabilidad de presentar anomalías. También adquirimos las habilidades necesarias para construir una página web funcional donde integrar esta herramienta, combinando programación, visión computacional y modelos de IA aplicados a datos médicos. El proceso fortaleció nuestro pensamiento computacional, permitiéndonos resolver problemas de manera más eficiente; además, el entrenamiento previo y las clases fueron fundamentales para encontrar soluciones rápidas y organizar mejor el código. Como equipo logramos coordinarnos, dividir tareas y aplicar lo aprendido para completar un proyecto complejo en poco tiempo.
    ​
    La relevancia de este proyecto radica en su impacto potencial en el área de la salud. Una herramienta accesible que permita analizar mamografías mediante IA puede apoyar el diagnóstico temprano del cáncer de mama, especialmente en lugares donde los recursos médicos son limitados. Además, al desplegar el modelo en una plataforma web, el sistema se vuelve escalable, práctico y útil para distintos contextos clínicos. Este proyecto no solo representa un logro técnico, sino también un aporte significativo hacia soluciones que pueden mejorar la calidad de vida de muchas personas.

    Data Sources

    CBIS-DDSM: Breast Cancer Image Dataset
    Curated Breast Imaging Subset DDSM Dataset (Mammography)
    https://www.kaggle.com/datasets/awsaf49/cbis-ddsm-breast-cancer-image-dataset
    5.3GB Zip
    ​
    Mammogram Mastery: A Robust Dataset for Breast Cancer Detection and Medical Education
    https://data.mendeley.com/datasets/fvjhtskg93/1
    978GB Zip

    Referencias y Documentación

    ◼
  • An Elementary Introduction to the Wolfram Language by Stephen Wolfram
    https://www.wolfram.com/language/elementary-introduction/3rd-ed/
  • ◼
  • Introduction to Machine learning
    https://www.wolfram.com/language/introduction-machine-learning/
  • ◼
  • Global Cancer Observatory
    https://gco.iarc.who.int/media/globocan/factsheets/populations/188-costa-rica-fact-sheet.pdf