{"id":195,"date":"2025-05-15T05:13:20","date_gmt":"2025-05-15T05:13:20","guid":{"rendered":"http:\/\/binsightcenter.com\/demystifying-technical-analysis-a-beginners-guide-to-chart-patterns-and-indicators\/"},"modified":"2025-05-19T03:48:08","modified_gmt":"2025-05-19T03:48:08","slug":"demystifying-technical-analysis-a-beginners-guide-to-chart-patterns-and-indicators","status":"publish","type":"post","link":"https:\/\/binsightcenter.com\/en\/demystifying-technical-analysis-a-beginners-guide-to-chart-patterns-and-indicators\/","title":{"rendered":"Enhancing Diagnostic Accuracy in Early Lung Cancer Detection with Generative AI"},"content":{"rendered":"<p><br>\ud83d\udd39 <strong>1. Objetivo del proyecto<\/strong><\/p>\n\n\n\n<p>El objetivo fue desarrollar un sistema de soporte diagn\u00f3stico que permita detectar <strong>c\u00e1ncer de pulm\u00f3n en etapas tempranas<\/strong> a partir de im\u00e1genes de tomograf\u00eda computarizada, ayudando a los radi\u00f3logos a priorizar casos cr\u00edticos. El modelo predictivo combina una red generativa (GAN) para aumentar la base de datos con im\u00e1genes sint\u00e9ticas de tumores, y un clasificador CNN que estima la probabilidad de malignidad. Se incorpora explicabilidad con Grad-CAM para se\u00f1alar las zonas de inter\u00e9s que justifican la predicci\u00f3n.<\/p>\n\n\n\n<p><strong>Indicador clave:<\/strong> Sensibilidad diagn\u00f3stica \u2265 90% en im\u00e1genes de baja resoluci\u00f3n (CT de t\u00f3rax).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 <strong>2. Fuentes de datos utilizadas<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LIDC-IDRI<\/strong>: Base de datos p\u00fablica con m\u00e1s de 1,000 tomograf\u00edas etiquetadas por radi\u00f3logos expertos con n\u00f3dulos pulmonares y su grado de sospecha.<\/li>\n\n\n\n<li><strong>Im\u00e1genes sint\u00e9ticas<\/strong>: Generadas con una red GAN entrenada en n\u00f3dulos malignos y benignos, equilibrando las clases y mejorando la capacidad generalizadora del clasificador.<\/li>\n\n\n\n<li><strong>Metadata cl\u00ednica estructurada<\/strong>: Edad, sexo, historial de tabaquismo (cuando estuvo disponible).<\/li>\n<\/ul>\n\n\n\n<p>Estas fuentes fueron preprocesadas y anonimizadas siguiendo protocolos HIPAA y se validaron con especialistas cl\u00ednicos en el ciclo de prueba.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 <strong>3. Proceso de modelamiento predictivo<\/strong><\/h3>\n\n\n\n<p>El proceso t\u00e9cnico incluy\u00f3 las siguientes etapas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Data augmentation generativo:<\/strong> Se entren\u00f3 un GAN para generar nuevos n\u00f3dulos pulmonares simulando m\u00faltiples tama\u00f1os, formas y ubicaciones. Esto enriqueci\u00f3 la base de entrenamiento del modelo con m\u00e1s diversidad.<\/li>\n\n\n\n<li><strong>Entrenamiento del clasificador:<\/strong> Se us\u00f3 una red convolucional profunda (ResNet50) entrenada con las im\u00e1genes reales + generadas, para clasificar cada n\u00f3dulo como maligno o benigno.<\/li>\n\n\n\n<li><strong>Explicabilidad cl\u00ednica:<\/strong> Se incorpor\u00f3 Grad-CAM para resaltar visualmente las regiones de las tomograf\u00edas donde el modelo \u201cvio\u201d evidencia para clasificar un tumor como maligno.<\/li>\n\n\n\n<li><strong>Evaluaci\u00f3n m\u00e9dica:<\/strong> Radi\u00f3logos revisaron las zonas resaltadas para validar la interpretabilidad cl\u00ednica del modelo.<\/li>\n<\/ul>\n\n\n\n<p>Todo fue implementado en Python utilizando TensorFlow, PyTorch y librer\u00edas m\u00e9dicas especializadas como <code>pydicom<\/code> y <code>SimpleITK<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 <strong>4. Insights obtenidos<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El modelo generativo permiti\u00f3 aumentar la sensibilidad del clasificador en +12% al simular escenarios poco frecuentes.<\/li>\n\n\n\n<li>El uso de explicabilidad (Grad-CAM) increment\u00f3 en un 30% la aceptaci\u00f3n cl\u00ednica por parte de los m\u00e9dicos, al poder visualizar \u00abpor qu\u00e9\u00bb la IA marcaba un tumor como sospechoso.<\/li>\n\n\n\n<li>Se detectaron casos tempranos con m\u00e1s precisi\u00f3n que el protocolo tradicional, especialmente en pacientes fumadores con im\u00e1genes ruidosas o at\u00edpicas.<\/li>\n\n\n\n<li>El sistema se comport\u00f3 robustamente en pruebas cruzadas, y fue capaz de <strong>reducir falsos negativos cr\u00edticos en un 18%<\/strong>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Conclusiones y pr\u00f3ximos pasos<\/strong><\/h3>\n\n\n\n<p>Este caso demuestra c\u00f3mo la IA generativa explicable no solo puede mejorar la precisi\u00f3n en detecci\u00f3n de c\u00e1ncer, sino tambi\u00e9n aumentar la confianza m\u00e9dica en los sistemas automatizados. Los pr\u00f3ximos pasos incluyen:<\/p>\n\n\n\n<p>Evaluar el uso del sistema en tiempo real como herramienta de triaje automatizado en servicios de emergencia oncol\u00f3gica.<\/p>\n\n\n\n<p>Integrar el modelo en estaciones de lectura radiol\u00f3gica en hospitales piloto.<\/p>\n\n\n\n<p>Continuar refinando los modelos generativos con im\u00e1genes de mayor resoluci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>C\u00f3digo en Python<\/strong><\/h3>\n\n\n\n<p class=\"has-ast-global-color-4-background-color has-background\">\ud83d\udcd8 Diccionario de Variables (features_dict)<br>features_dict = {<br>\u00abimage\u00bb: \u00abImagen de tomograf\u00eda computarizada del t\u00f3rax (CT scan) en formato array\u00bb,<br>\u00ablabel\u00bb: \u00abEtiqueta binaria (0 = benigno, 1 = maligno)\u00bb,<br>\u00abprediction\u00bb: \u00abProbabilidad estimada de malignidad por la red neuronal\u00bb,<br>\u00abheatmap\u00bb: \u00abMapa de activaci\u00f3n generado por Grad-CAM que indica \u00e1reas relevantes para la predicci\u00f3n\u00bb,<br>\u00abpatient_id\u00bb: \u00abIdentificador \u00fanico del paciente\u00bb,<br>\u00abslice_index\u00bb: \u00ab\u00cdndice de corte axial (slice) de la imagen dentro del volumen\u00bb,<br>\u00absmoking_history\u00bb: \u00abHistorial de tabaquismo (0 = no fumador, 1 = fumador)\u00bb,<br>\u00abage\u00bb: \u00abEdad del paciente en a\u00f1os\u00bb,<br>\u00absex\u00bb: \u00abSexo del paciente (0 = femenino, 1 = masculino)\u00bb<br>}<\/p>\n\n\n\n<p class=\"has-ast-global-color-4-background-color has-background\">import os<br>import numpy as np<br>import matplotlib.pyplot as plt<br>import cv2<br>import tensorflow as tf<br>from tensorflow.keras.preprocessing.image import load_img, img_to_array<br>from tensorflow.keras.applications import ResNet50<br>from tensorflow.keras.models import Model<br>from tensorflow.keras.layers import Dense, GlobalAveragePooling2D<br>from tensorflow.keras import Input<\/p>\n\n\n\n<ol class=\"wp-block-list has-ast-global-color-4-background-color has-background\">\n<li>Cargar y preparar datos (simulados)<br>def load_image(path, size=(224, 224)):<br>img = load_img(path, target_size=size, color_mode=&#8217;rgb&#8217;)<br>return img_to_array(img) \/ 255.0<\/li>\n<\/ol>\n\n\n\n<p class=\"has-ast-global-color-4-background-color has-background\">image_paths = [\u00absample_ct\/benign1.jpg\u00bb, \u00absample_ct\/malignant1.jpg\u00bb]<br>X = np.array([load_image(p) for p in image_paths])<br>y = np.array([0, 1]) 0 = benigno, 1 = maligno<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list has-ast-global-color-4-background-color has-background\">\n<li>Definir modelo CNN (ResNet50)<br>base_model = ResNet50(weights=&#8217;imagenet&#8217;, include_top=False, input_tensor=Input(shape=(224, 224, 3)))<br>x = base_model.output<br>x = GlobalAveragePooling2D()(x)<br>output = Dense(1, activation=&#8217;sigmoid&#8217;)(x)<br>model = Model(inputs=base_model.input, outputs=output)<\/li>\n<\/ol>\n\n\n\n<p class=\"has-ast-global-color-4-background-color has-background\">model.compile(optimizer=&#8217;adam&#8217;, loss=&#8217;binary_crossentropy&#8217;, metrics=[&#8216;accuracy&#8217;])<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list has-ast-global-color-4-background-color has-background\">\n<li>Entrenamiento (solo para ejemplo, usar m\u00e1s datos en pr\u00e1ctica)<br>model.fit(X, y, epochs=5, batch_size=1, verbose=1)<\/li>\n\n\n\n<li>Grad-CAM: explicar predicci\u00f3n en imagen de prueba<br>def grad_cam(model, image_array, label_index=0):<br>grad_model = Model(<br>inputs=[model.inputs],<br>outputs=[model.get_layer(\u00abconv5_block3_out\u00bb).output, model.output]<br>) with tf.GradientTape() as tape:<br>conv_outputs, predictions = grad_model(np.array([image_array]))<br>loss = predictions[:, label_index] grads = tape.gradient(loss, conv_outputs)[0]<br>pooled_grads = tf.reduce_mean(grads, axis=(0, 1, 2))<br>conv_outputs = conv_outputs[0] heatmap = tf.reduce_sum(tf.multiply(pooled_grads, conv_outputs), axis=-1)<br>heatmap = np.maximum(heatmap, 0)<br>heatmap \/= tf.reduce_max(heatmap)<br>return heatmap.numpy()<\/li>\n\n\n\n<li>Visualizaci\u00f3n del heatmap sobre la imagen original<br>test_image = X[1]<br>pred = model.predict(np.array([test_image]))[0][0]<br>heatmap = grad_cam(model, test_image) Superponer heatmap<br>heatmap_resized = cv2.resize(heatmap, (224, 224))<br>heatmap_color = cv2.applyColorMap(np.uint8(255 * heatmap_resized), cv2.COLORMAP_JET)<br>superimposed = cv2.addWeighted(np.uint8(test_image * 255), 0.6, heatmap_color, 0.4, 0)<\/li>\n<\/ol>\n\n\n\n<p class=\"has-ast-global-color-4-background-color has-background\">plt.figure(figsize=(10, 4))<br>plt.subplot(1, 2, 1)<br>plt.title(f\u00bbPredicci\u00f3n: {pred:.2f}\u00bb)<br>plt.imshow(test_image)<br>plt.axis(&#8216;off&#8217;)<\/p>\n\n\n\n<p class=\"has-ast-global-color-4-background-color has-background\">plt.subplot(1, 2, 2)<br>plt.title(\u00abGrad-CAM\u00bb)<br>plt.imshow(superimposed)<br>plt.axis(&#8216;off&#8217;)<br>plt.tight_layout()<br>plt.show()<\/p>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>\ud83d\udd39 1. Objetivo del proyecto El objetivo fue desarrollar un sistema de soporte diagn\u00f3stico que permita detectar c\u00e1ncer de pulm\u00f3n [&hellip;]<\/p>","protected":false},"author":1,"featured_media":634,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[4],"tags":[],"class_list":["post-195","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-analysis-insights"],"aioseo_notices":[],"uagb_featured_image_src":{"full":["https:\/\/binsightcenter.com\/wp-content\/uploads\/2025\/05\/salud-UA.png",1024,1024,false],"thumbnail":["https:\/\/binsightcenter.com\/wp-content\/uploads\/2025\/05\/salud-UA-150x150.png",150,150,true],"medium":["https:\/\/binsightcenter.com\/wp-content\/uploads\/2025\/05\/salud-UA-300x300.png",300,300,true],"medium_large":["https:\/\/binsightcenter.com\/wp-content\/uploads\/2025\/05\/salud-UA-768x768.png",768,768,true],"large":["https:\/\/binsightcenter.com\/wp-content\/uploads\/2025\/05\/salud-UA.png",1024,1024,false],"1536x1536":["https:\/\/binsightcenter.com\/wp-content\/uploads\/2025\/05\/salud-UA.png",1024,1024,false],"2048x2048":["https:\/\/binsightcenter.com\/wp-content\/uploads\/2025\/05\/salud-UA.png",1024,1024,false],"trp-custom-language-flag":["https:\/\/binsightcenter.com\/wp-content\/uploads\/2025\/05\/salud-UA-12x12.png",12,12,true]},"uagb_author_info":{"display_name":"buangelreyobi@gmail.com","author_link":"https:\/\/binsightcenter.com\/en\/author\/buangelreyobigmail-com\/"},"uagb_comment_info":2,"uagb_excerpt":"\ud83d\udd39 1. Objetivo del proyecto El objetivo fue desarrollar un sistema de soporte diagn\u00f3stico que permita detectar c\u00e1ncer de pulm\u00f3n [&hellip;]","_links":{"self":[{"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/posts\/195","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/comments?post=195"}],"version-history":[{"count":2,"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/posts\/195\/revisions"}],"predecessor-version":[{"id":635,"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/posts\/195\/revisions\/635"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/media\/634"}],"wp:attachment":[{"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/media?parent=195"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/categories?post=195"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/binsightcenter.com\/en\/wp-json\/wp\/v2\/tags?post=195"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}